diff --git a/docs/IRIS_EXTRACTION_HANDOFF.md b/docs/IRIS_EXTRACTION_HANDOFF.md index 18043a8..416d78c 100644 --- a/docs/IRIS_EXTRACTION_HANDOFF.md +++ b/docs/IRIS_EXTRACTION_HANDOFF.md @@ -5,8 +5,8 @@ Not a decisions log; delete it when the extraction is done. ## Read this first -**Pull request #11 has been reviewed six times ("very close now"); the sixth -is answered in `444a2cd` and a seventh has not arrived.** Check for one before doing anything +**Pull request #11 has been reviewed seven times; the seventh is answered in +`79dcc15` and an eighth has not arrived.** Check for one before doing anything else: ```sh @@ -39,8 +39,8 @@ packing images into arrays like atlas pages, and a bindless `binding_array` - Agent fork: `git@git.arirex.me:iris-ai/iris.git`. The bot cannot push canonical; work in the fork and open PRs into `iris/iris:main`. - **#11** `split/11-texture-bindings`, worktree `/home/bob/repos/iris-pr11`, - head `444a2cd`, twelve commits on top of `0f6a28b`. Reviewed six times, all - answered. + head `79dcc15`, fourteen commits on top of `0f6a28b`. Reviewed seven times, + all answered. - **#12** `split/12-pointer-routing`, worktree `/home/bob/repos/iris-pr12`, head `028521b`. A scroll falling through a hovered button. Not reviewed as of the last check. Independent of #11 and can merge in either order. @@ -65,16 +65,17 @@ shape: and those are data. `InstanceList` carries a runtime stride and its data as bytes. Measured: 0.2ns per write over a statically typed list, against 1.6ns for a trait object. -- **The shared group is what every pipeline gets**: window, masks, the glyph - atlas array, and the one sampler. A mask texture would go here too. A - primitive that samples an image of its own declares `Primitive::TEXTURE`, - which gives it an image bind group, a draw call per instance, and the slot - recorded at write time; no other pipeline mentions textures at all. +- **The shared group is what every pipeline gets**: the window and the masks. + A mask texture would go here too. +- **`Primitive::SAMPLES` says what a primitive samples and how often it binds** + -- `Atlas` once for a list, `Image(fn)` for one instance alone, defaulted to + nothing. That is group 2, so a rect's pipeline has no texture or sampler in + its layout. Both cases share one layout builder and one group builder. - **`shader.wgsl` became `shader/prelude.wgsl` plus one file per primitive**, because one module cannot declare two types at the same binding. The prelude carries only what every primitive uses -- window, masks, vertex shader, - `masked()` -- and its header records the group 0 binding numbers; the atlas - and sampler are declared by the shaders that read them. + `masked()` -- and its header is where binding numbers are written down; what + a shader samples is declared by that shader. - **A texture handle is drawn like anything else.** `Painter::primitive` takes `impl PrimitiveLike`: a primitive, or something that yields one and does what else drawing it needs -- a `&TextureHandle` retains its share on the way @@ -188,6 +189,11 @@ Still in the target and not yet claimed: Everything below depends on running them from there; extracting them is a slice of its own. +The three sampling paths each need a real render, and the examples for two of +them are not in the repo: `/tmp/pr11-checks/run.sh` copies them in, renders +rect+glyph+image together, an image alone in a layer, and a grown atlas, then +removes them again. + ## Verifying a framework slice ```sh