Record where a linear DNG too large for one texture goes

ARCH §5.3 still described only a tile cache nobody built; it now says
what 0.19.0 tiles and what it does not: a linear DNG past PROXY_EDGE
opens on a reduced copy, a finer render samples a full-resolution
window, and the export is cut into halo-grown tiles. display-and-
extension.md's FR-DSP-2 row said absent, outstanding.md said the halo
had nothing to read it and that such a file fell to the embedded
preview.

rawler now builds from third_party, which ARCH's stack table and §3.2,
the root Cargo.toml's comment ("two upstream crates ... for Android")
and third_party/README.md's bump procedure did not know; the README
also names each vendored crate's licence. panorama.md and the manual
say a composite this wide develops and exports.
This commit is contained in:
2026-09-27 19:42:42 -04:00
parent 6c749b469d
commit 4bd8d86c00
7 changed files with 67 additions and 20 deletions
+13 -8
View File
@@ -181,7 +181,7 @@ place.
## 4. The render path — FR-DSP-2, FR-DSP-4, NFR-RES-2, NFR-ARCH-1
**FR-DSP-2 — Tiled computation. Unbuilt, and under challenge.** [architecture.md §6.2](architecture.md)
**FR-DSP-2 — Tiled computation. Built for one case, and otherwise under challenge.** [architecture.md §6.2](architecture.md)
calls for tiling "from day one" on the grounds that retrofitting it is a rewrite. It was not built,
and the evidence has since moved. `core/dr-gpu/tests/frame_budget.rs` carries the argument in its
own header: one fused dispatch over a viewport-sized target is comfortably inside the frame budget,
@@ -191,9 +191,10 @@ path stops being supported, and this test is what says so."
tiled convolution at clarity's radius reads nearly twice the taps that an untiled one does, so the
stage that looks most like it wants a tile cache is the stage that would be hurt most by one.
What exists is the declaration and not the mechanism: `DetailPass::radius` is documented as the halo
a tile would have to be grown by, with a test that pins it, and there is no scheduler to read it.
That is deliberate plumbing, not an oversight.
What existed until 0.19.0 was the declaration and not the mechanism: `DetailPass::radius`, the halo
a tile would have to be grown by, with a test that pins it, and nothing to read it. The export of an
oversized linear DNG (below) is now what reads it, through `ComposedDetail::reach`; there is still
no scheduler and no tile cache.
**So the open question here is not "when is tiling built" but "is FR-DSP-2 still a requirement" — and on 2026-09-19 the answer was: as written, until S6 runs.** FR-DSP-2 now carries a status note saying exactly that, and R5's note no longer claims it was rewritten.
Two measurements say it costs more than it saves on the interactive path. Neither says anything
@@ -201,8 +202,10 @@ about the export path or about a device under memory pressure, which is where th
actually lives — and that is spike S6, which has not run.
**2026-09-27:** the export path does now tile, for the one case that forced it — a linear DNG
wider than any texture. See the note under FR-DSP-2 in [requirements.md](requirements.md). The
interactive path is unchanged and S6 is still unrun.
wider than any texture, a 22 927 × 8966 Lightroom panorama in the case that prompted it. See the
note under FR-DSP-2 in [requirements.md](requirements.md) and ARCH §5.3. The interactive path
renders such a file from a reduced copy and one full-resolution window rather than tiles, and S6
is still unrun.
**FR-DSP-4 — Progressive refinement. Built in 0.15.0.** While a gesture moves the canvas renders
a half-resolution draft, and the sharp frame lands once, 120 ms after the last movement: the
@@ -216,8 +219,10 @@ interface could see, and a refinement that was not a jarring swap.
**NFR-RES-2 — Images larger than GPU memory.** Half answered. NFR-R8's "decide explicitly" was
decided on 2026-09-19: there is no CPU render pipeline, the degraded mode is the viewer on
embedded previews with develop withheld, and NFR-RES-2 no longer promises a fallback render. What
remains unbuilt is the memory half: there is no headroom budget, no allocation-failure staging,
embedded previews with develop withheld, and NFR-RES-2 no longer promises a fallback render. Since
0.19.0 that mode no longer catches a linear DNG larger than one texture, which develops from a
reduced copy and exports in tiles; a CFA file that large still falls to it. What remains unbuilt is
the memory half: there is no headroom budget, no allocation-failure staging,
and no spill. Spike S6 — a tiled pipeline on a
mid-range Android device with an image larger than available GPU memory — is the one that would
settle both this and FR-DSP-2, and there is no evidence it has run.