@photivra/engine 2.20.0 → 2.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/CHANGELOG.md +178 -1
  2. package/CITATION.cff +1 -1
  3. package/README.md +7 -6
  4. package/SECURITY.md +1 -1
  5. package/THIRD_PARTY.md +7 -0
  6. package/dist/capture/dng-lens-correction-opcodes.d.ts +2 -2
  7. package/dist/capture/dng-lens-correction-opcodes.js +2 -2
  8. package/dist/capture/dng-lens-correction-opcodes.js.map +1 -1
  9. package/dist/capture/exposure-build-up-stage.d.ts +16 -0
  10. package/dist/capture/exposure-build-up-stage.js +4 -0
  11. package/dist/capture/exposure-build-up-stage.js.map +1 -0
  12. package/dist/capture/native-environment-lean.d.ts +2 -1
  13. package/dist/capture/native-environment-lean.js +41 -73
  14. package/dist/capture/native-environment-lean.js.map +1 -1
  15. package/dist/capture/native-environment-tabulated.js +4 -3
  16. package/dist/capture/native-environment-tabulated.js.map +1 -1
  17. package/dist/capture/native-raw.d.ts +3 -2
  18. package/dist/capture/native-raw.js +5 -4
  19. package/dist/capture/native-raw.js.map +1 -1
  20. package/dist/capture/sensor-raw-producer.d.ts +4 -1
  21. package/dist/capture/sensor-raw-producer.js +12 -3
  22. package/dist/capture/sensor-raw-producer.js.map +1 -1
  23. package/dist/core/version.d.ts +1 -1
  24. package/dist/core/version.js +1 -1
  25. package/dist/core/version.js.map +1 -1
  26. package/dist/equipment/generic-lens-catalogue.d.ts +3 -2
  27. package/dist/equipment/generic-lens-catalogue.js +18 -5
  28. package/dist/equipment/generic-lens-catalogue.js.map +1 -1
  29. package/dist/equipment/generic-tier-assets.d.ts +32 -0
  30. package/dist/equipment/generic-tier-assets.js +16 -11
  31. package/dist/equipment/generic-tier-assets.js.map +1 -1
  32. package/dist/equipment/sensor-profile-body.d.ts +78 -0
  33. package/dist/equipment/sensor-profile-body.js +77 -0
  34. package/dist/equipment/sensor-profile-body.js.map +1 -0
  35. package/dist/equipment/sensor-profiles.d.ts +8 -0
  36. package/dist/equipment/sensor-profiles.js +82 -0
  37. package/dist/equipment/sensor-profiles.js.map +1 -0
  38. package/dist/facade/catalogue-lens-signal.d.ts +2 -2
  39. package/dist/facade/catalogue-lens-signal.js +58 -71
  40. package/dist/facade/catalogue-lens-signal.js.map +1 -1
  41. package/dist/facade/chart-radiance-batch.js +2 -1
  42. package/dist/facade/chart-radiance-batch.js.map +1 -1
  43. package/dist/facade/defocus-image-space-provider.d.ts +7 -0
  44. package/dist/facade/defocus-image-space-provider.js +64 -76
  45. package/dist/facade/defocus-image-space-provider.js.map +1 -1
  46. package/dist/facade/display-view-gpu-session.js +2 -0
  47. package/dist/facade/display-view-gpu-session.js.map +1 -1
  48. package/dist/facade/display-view-gpu.d.ts +6 -1
  49. package/dist/facade/display-view-gpu.js.map +1 -1
  50. package/dist/facade/display-view-lens-signal.js +25 -23
  51. package/dist/facade/display-view-lens-signal.js.map +1 -1
  52. package/dist/facade/display-view.js +5 -23
  53. package/dist/facade/display-view.js.map +1 -1
  54. package/dist/facade/expected-signal-setup.d.ts +3 -1
  55. package/dist/facade/expected-signal-setup.js +1 -1
  56. package/dist/facade/expected-signal-setup.js.map +1 -1
  57. package/dist/facade/expected-signal.d.ts +47 -14
  58. package/dist/facade/expected-signal.js +117 -112
  59. package/dist/facade/expected-signal.js.map +1 -1
  60. package/dist/facade/exposure-build-up.d.ts +70 -0
  61. package/dist/facade/exposure-build-up.js +164 -0
  62. package/dist/facade/exposure-build-up.js.map +1 -0
  63. package/dist/facade/fast-methods.js +9 -1
  64. package/dist/facade/fast-methods.js.map +1 -1
  65. package/dist/facade/generic-lens-capture.d.ts +2 -2
  66. package/dist/facade/generic-lens-capture.js +2 -2
  67. package/dist/facade/generic-lens-capture.js.map +1 -1
  68. package/dist/facade/image-plane-enable.d.ts +7 -0
  69. package/dist/facade/image-plane-enable.js +17 -0
  70. package/dist/facade/image-plane-enable.js.map +1 -0
  71. package/dist/facade/image-plane-lattice-data.d.ts +6 -0
  72. package/dist/facade/image-plane-lattice-data.js +10 -0
  73. package/dist/facade/image-plane-lattice-data.js.map +1 -0
  74. package/dist/facade/image-plane-support.d.ts +33 -0
  75. package/dist/facade/image-plane-support.js +11 -0
  76. package/dist/facade/image-plane-support.js.map +1 -0
  77. package/dist/facade/image-plane.d.ts +36 -0
  78. package/dist/facade/image-plane.js +353 -0
  79. package/dist/facade/image-plane.js.map +1 -0
  80. package/dist/facade/mixed-illumination.d.ts +108 -0
  81. package/dist/facade/mixed-illumination.js +174 -0
  82. package/dist/facade/mixed-illumination.js.map +1 -0
  83. package/dist/facade/representative-light-sources.d.ts +72 -0
  84. package/dist/facade/representative-light-sources.js +124 -0
  85. package/dist/facade/representative-light-sources.js.map +1 -0
  86. package/dist/facade/scene-radiance.d.ts +129 -4
  87. package/dist/facade/scene-radiance.js +48 -13
  88. package/dist/facade/scene-radiance.js.map +1 -1
  89. package/dist/facade/simulate-capture.d.ts +39 -10
  90. package/dist/facade/simulate-capture.js +252 -92
  91. package/dist/facade/simulate-capture.js.map +1 -1
  92. package/dist/facade/simulate-display-view.js +14 -6
  93. package/dist/facade/simulate-display-view.js.map +1 -1
  94. package/dist/gpu/chart-composite-gpu.d.ts +13 -1
  95. package/dist/gpu/chart-composite-gpu.js +48 -9
  96. package/dist/gpu/chart-composite-gpu.js.map +1 -1
  97. package/dist/gpu/chart-radiance-gpu.js +4 -30
  98. package/dist/gpu/chart-radiance-gpu.js.map +1 -1
  99. package/dist/gpu/display-view-composite-material-module.d.ts +10 -4
  100. package/dist/gpu/display-view-composite-material-module.js +39 -13
  101. package/dist/gpu/display-view-composite-material-module.js.map +1 -1
  102. package/dist/gpu/display-view-image-material-module.d.ts +86 -0
  103. package/dist/gpu/display-view-image-material-module.js +339 -0
  104. package/dist/gpu/display-view-image-material-module.js.map +1 -0
  105. package/dist/gpu/display-view-image-quality.d.ts +45 -0
  106. package/dist/gpu/display-view-image-quality.js +380 -0
  107. package/dist/gpu/display-view-image-quality.js.map +1 -0
  108. package/dist/gpu/display-view-quality-gpu.d.ts +67 -1
  109. package/dist/gpu/display-view-quality-gpu.js +136 -205
  110. package/dist/gpu/display-view-quality-gpu.js.map +1 -1
  111. package/dist/gpu/display-view-speed-gpu.d.ts +51 -3
  112. package/dist/gpu/display-view-speed-gpu.js +131 -93
  113. package/dist/gpu/display-view-speed-gpu.js.map +1 -1
  114. package/dist/gpu/wgsl-display-view-quality-kernel.d.ts +29 -15
  115. package/dist/gpu/wgsl-display-view-quality-kernel.js +58 -36
  116. package/dist/gpu/wgsl-display-view-quality-kernel.js.map +1 -1
  117. package/dist/gpu/wgsl-display-view-speed-kernel.d.ts +21 -6
  118. package/dist/gpu/wgsl-display-view-speed-kernel.js +46 -11
  119. package/dist/gpu/wgsl-display-view-speed-kernel.js.map +1 -1
  120. package/dist/gpu/wgsl-exact-sum.d.ts +20 -0
  121. package/dist/gpu/wgsl-exact-sum.js +42 -0
  122. package/dist/gpu/wgsl-exact-sum.js.map +1 -0
  123. package/dist/index.d.ts +11 -3
  124. package/dist/index.js +7 -1
  125. package/dist/index.js.map +1 -1
  126. package/dist/motion/subject-motion.d.ts +66 -0
  127. package/dist/motion/subject-motion.js +52 -0
  128. package/dist/motion/subject-motion.js.map +1 -0
  129. package/dist/optics/generic-lens-lateral-color.d.ts +83 -0
  130. package/dist/optics/generic-lens-lateral-color.js +77 -0
  131. package/dist/optics/generic-lens-lateral-color.js.map +1 -0
  132. package/dist/optics/generic-lens-psf.js +54 -46
  133. package/dist/optics/generic-lens-psf.js.map +1 -1
  134. package/dist/optics/lens-psf-profile.d.ts +7 -0
  135. package/dist/optics/lens-psf-profile.js +2 -1
  136. package/dist/optics/lens-psf-profile.js.map +1 -1
  137. package/dist/output/developed-lens-corrections.d.ts +19 -5
  138. package/dist/output/developed-lens-corrections.js +28 -9
  139. package/dist/output/developed-lens-corrections.js.map +1 -1
  140. package/dist/output/generic-lens-corrections.d.ts +41 -5
  141. package/dist/output/generic-lens-corrections.js +52 -8
  142. package/dist/output/generic-lens-corrections.js.map +1 -1
  143. package/dist/output/print-plan.d.ts +41 -5
  144. package/dist/output/print-plan.js +59 -14
  145. package/dist/output/print-plan.js.map +1 -1
  146. package/dist/sensor/binomial-sample.d.ts +3 -0
  147. package/dist/sensor/binomial-sample.js +86 -0
  148. package/dist/sensor/binomial-sample.js.map +1 -0
  149. package/dist/sensor/sensor-characteristics.d.ts +10 -0
  150. package/dist/sensor/sensor-characteristics.js +20 -9
  151. package/dist/sensor/sensor-characteristics.js.map +1 -1
  152. package/docs/AGENT_GUIDE.md +1 -0
  153. package/docs/API_REFERENCE.md +98 -1
  154. package/docs/QUICK_START.md +125 -0
  155. package/docs/USAGE.md +92 -1
  156. package/docs/api/core-version.md +1 -1
  157. package/docs/api/equipment-generic-lens-catalogue.md +10 -5
  158. package/docs/api/equipment-sensor-profile-body.md +64 -0
  159. package/docs/api/equipment-sensor-profiles.md +86 -0
  160. package/docs/api/exports.json +207 -2
  161. package/docs/api/facade-exposure-build-up.md +105 -0
  162. package/docs/api/facade-fast-methods.md +9 -1
  163. package/docs/api/facade-image-plane-enable.md +16 -0
  164. package/docs/api/facade-mixed-illumination.md +67 -0
  165. package/docs/api/facade-representative-light-sources.md +131 -0
  166. package/docs/api/facade-scene-radiance.md +54 -3
  167. package/docs/api/facade-simulate-capture.md +26 -6
  168. package/docs/api/motion-subject-motion.md +23 -0
  169. package/docs/api/optics-generic-lens-lateral-color.md +79 -0
  170. package/docs/api/output-developed-lens-corrections.md +10 -1
  171. package/docs/api/output-generic-lens-corrections.md +40 -4
  172. package/docs/api/output-print-plan.md +35 -1
  173. package/llms.txt +2 -0
  174. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"display-view-speed-gpu.js","sourceRoot":"","sources":["../../src/gpu/display-view-speed-gpu.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Host side of the display view's Speed path on the GPU (#478): the support check, the float64 tables (site table,\n * overlaps over the scale, axis sums over the squared scale, 1/Σw²), banded dispatch of\n * `DISPLAY_VIEW_SPEED_KERNEL_WGSL`, and the finishing the CPU reference does after its per-sample loop: the output\n * quantization term, the seeded noise draw, the Cholesky factor, the clipped-normal centre, the sRGB encode and the\n * rounding, all with the reference's own float64 functions. So the noise draw is bit-identical to the CPU's, and only\n * the expected value and the covariance carry the float32 bound.\n *\n * The float64 reference is `renderDisplayView` (facade/display-view.ts) on the exact-area-mean path without\n * diffraction, with the bilinear demosaic and chart materials. Internal: not exported from the package. The\n * material lookup per query point is a module the caller supplies (`DisplayViewGpuMaterialModule`, the seam of\n * #477); `display-view-chart-material-module.ts` provides one for the eight 2.0 chart presets and\n * `display-view-composite-material-module.ts` (#491) one for composite charts, the 2.3 elements and `material-layers` scenes.\n */\nimport { DISPLAY_VIEW_NOISE_STREAM_ID, axisSums, clipCentre, createDisplayViewExpectedSignal, displayViewDecidedSaturation, overlaps, quantizationVariance, renderDisplayView, type AxisSums, type DisplayViewRenderResult, type DisplayViewSetup } from \"../facade/display-view.js\";\nimport type { DisplayViewExpectedSignalInput } from \"../facade/expected-signal.js\";\nimport { resolvePortableChartScene } from \"../facade/chart-scenes.js\";\nimport { setDisplayViewGpuRendererFactory, type DisplayViewGpuConformanceCase, type DisplayViewGpuPart, type DisplayViewGpuRenderOutput, type DisplayViewGpuRenderer,\n type DisplayViewGpuRendererFactory, type DisplayViewGpuRequest, type DisplayViewGpuRuntimeHandle } from \"../facade/display-view-gpu.js\";\nimport { createDisplayViewMaterialModules } from \"./display-view-composite-material-module.js\";\nimport { chartPresetMaterialModule } from \"./display-view-chart-material-module.js\";\nimport { encodeSrgbComponentPortable } from \"../color/srgb-transfer.js\";\nimport { createDeterministicUniformStream, deriveNativeSiteStreamSeedUint32, samplePortableStandardNormal } from \"../sensor/stochastic-seed.js\";\nimport { createHostYieldGate } from \"../capture/host-yield-cadence.js\";\nimport { ImageKernelExecutionError, WEBGPU_F32_UNIT_ROUNDOFF, webGpuExecution, type ChartCompositeProbeRecord, type ImageKernelExecution, type ImageKernelRelativeErrorBound } from \"./image-kernel-execution.js\";\nimport { BUFFER_USAGE, GpuResourceScope, abortedError, createComputePipeline, linearDispatch, runComputePass, type WebGpuRuntime, throwIfAborted as checkAbort } from \"./webgpu-runtime.js\";\nimport { DISPLAY_VIEW_AUX, DISPLAY_VIEW_FLAG_WORDS, DISPLAY_VIEW_GEOMETRY_STRIDE, DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS, DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS,\n DISPLAY_VIEW_OUTPUT_FLOATS, DISPLAY_VIEW_PARAM_WORDS, DISPLAY_VIEW_REINHARD_MEAN_U, DISPLAY_VIEW_REINHARD_VARIANCE_U, DISPLAY_VIEW_WORKGROUP_SIZE,\n assembleDisplayViewSpeedWgsl } from \"./wgsl-display-view-speed-kernel.js\";\nimport { footprintShape, bilinearKernels, offsetCount } from \"./display-view-quality-gpu.js\";\n\ntype PipelineSource = (label: string, code: string) => Promise<GPUComputePipeline>;\ntype YieldControl = ((signal: AbortSignal) => Promise<void>) | undefined;\n\n/** One WGSL rounding of + − × in either direction (W3C WGSL \"Floating Point Accuracy\"; #471, #487): twice the binary32 unit roundoff. */\nconst E = 2 * WEBGPU_F32_UNIT_ROUNDOFF;\n/** Higham's γ_k with E in place of u. */\nconst gammaE = (k: number): number => k * E / (1 - k * E);\n/** Every reported bound is doubled, as the sensor stage doubles its margins. */\nconst MARGIN = 2;\n/** Table values above this are outside the float32 domain. */\nconst FLOAT32_SAFE_MAGNITUDE = 2 ** 120;\n/** Roundings of the expected value's multiplicative chain (docs/WEBGPU.md, \"Display view (Speed)\"): site 9, readout 2, demosaic 4, WB 2, matrix 4, weights 3, up to 35 additions, 5 spare. */\nconst MEAN_ROUNDINGS = 64;\n/** Roundings of the variance chain: the squares double the readout, demosaic, WB and matrix counts. */\nconst VARIANCE_ROUNDINGS = 80;\n/** The reference's own float64 rounding of its chains, relative. */\nconst CPU_RELATIVE = 2 ** -40;\n/**\n * #496: the host's output quantization term q(m) = s(e)²·Δ²/12 (`quantizationVariance`, s the sRGB EOTF's slope at the encoded\n * mean e) is evaluated at the GPU's mean, so it moves with the mean's error: dq/dm = 2·s′(e)·Δ²/12 (de/dm = 1/s), with\n * s′(e) = (2.4/1.055)·(1.4/1.055)·((e + 0.055)/1.055)^0.4 ≤ 3.02 on [0, 1] and 0 on the linear segment and outside [0, 1];\n * q is non-decreasing in m, with a jump of (s₊² − s₋²)·Δ²/12 ≤ 2.1·10⁻⁴·Δ²/12 at the segment join (linear m = 0.0031308).\n * The Quality kernel's constants (#479).\n */\nconst QUANTIZATION_SLOPE = 6.04, QUANTIZATION_JOIN_JUMP = 2.1e-4, QUANTIZATION_JOIN = 0.0031308;\n/** Workgroups per band are limited by the output buffer: DISPLAY_VIEW_OUTPUT_FLOATS floats plus the flag words (#533: three) per display pixel. */\nconst BYTES_PER_PIXEL = 4 * DISPLAY_VIEW_OUTPUT_FLOATS + 4 * DISPLAY_VIEW_FLAG_WORDS;\n\n/**\n * The material lookup of a GPU display view (the seam of #477, GPU chart radiance for the composite chart and label\n * masks). `wgsl` defines `fn material_at(p: vec2<f32>) -> u32` (the material index of frame point p: u right, v up, the\n * same index space as the scene's `materialAt`) and declares `var<private> material_uncertain: bool`, which it sets to\n * true when p lies within its a-priori bound of a material boundary; the display pixel is then recomputed on the host\n * with the reference. The point p carries a relative error of at most 2E + 10⁻¹⁴ (E = 2⁻²³) against the reference's float64\n * query point (two float32 roundings of (x + c)·scale), which the module's bounds must cover. The module may use the\n * kernel's constants `E` (2⁻²³) and `SLACK` (10⁻¹⁴) and declares its buffers in @group(1); `bindings` are their\n * contents: `data` is uploaded once per render, `buffer` is a buffer the module already holds on the device (#491: scene\n * records uploaded once per renderer and reused across a view's parts).\n */\nexport interface DisplayViewGpuMaterialModule {\n /** Names the module in the pipeline cache; two modules with different `wgsl` need different ids. */\n readonly id: string;\n readonly wgsl: string;\n /** The composite module's device probe record (the product path it chose); absent for the chart-preset module. */\n readonly compositeProbe?: ChartCompositeProbeRecord;\n readonly bindings: readonly ({ binding: number; kind: \"uniform\" | \"storage\"; data: ArrayBufferView<ArrayBuffer>; buffer?: undefined } |\n { binding: number; kind: \"uniform\" | \"storage\"; buffer: GPUBuffer; data?: undefined })[];\n}\n\n/** What a GPU render of a display view needs: the reference's own setup and expected-signal input, plus the material module. */\nexport interface DisplayViewSpeedGpuInput {\n /** The render's setup, as `renderDisplayView` receives it (`setup.signal` is used only to recompute flagged pixels). */\n setup: DisplayViewSetup;\n /** The expected signal's input (the offsets, the materials table and the query points). */\n signalInput: DisplayViewExpectedSignalInput;\n material: DisplayViewGpuMaterialModule;\n /** Recompute flagged display pixels (a query point within its bound of a material boundary) with the reference. Default true. */\n recomputeFlagged?: boolean;\n}\n\n/** A GPU display view of one region: the reference's result fields plus the execution label, the bounds and the flagged pixels. */\nexport interface DisplayViewSpeedGpuResult extends DisplayViewRenderResult {\n execution: ImageKernelExecution;\n /** |E_gpu − E_cpu| ≤ relative·E_cpu + absolute for every component of every display pixel (linear light); `absolute` is the largest per-pixel term. */\n expectedValueBound: ImageKernelRelativeErrorBound;\n /** |V_gpu − V_cpu| ≤ relative·V_cpu + absolute for every variance (the covariance diagonal, linear light squared). */\n varianceBound: ImageKernelRelativeErrorBound;\n /** Per display pixel: the absolute terms of the two bounds (the clip steps' running bound, already doubled). */\n expectedValueAbsoluteBound: Float32Array;\n varianceAbsoluteBound: Float32Array;\n /** Display pixels (region row-major) whose material lookup was uncertain; equal to `hostRecomputedPixelIndices` when recomputing. */\n flaggedPixelIndices: Uint32Array;\n hostRecomputedPixelIndices: Uint32Array;\n /** #533: display pixels (not flagged) with a real pixel whose saturation the kernel left undecided; their count is the host reference's. */\n highlightRecomputedPixelIndices: Uint32Array;\n}\n\n/**\n * Why the kernel does not cover a request, or null when it does. The kernel is the Speed path: the exact area mean\n * (views where a footprint holds at most 25 real pixels and at most K², and here at most 6 per axis), no diffraction\n * kernels, chart materials, the bilinear demosaic (no AHD candidates or correction), the identity or positive Reinhard\n * tone curve, and at most 16 query offsets.\n */\nexport function displayViewSpeedGpuUnsupportedReason(setup: DisplayViewSetup, signalInput: DisplayViewExpectedSignalInput): string | null {\n if (signalInput.largeKernel) return \"a defocus kernel radius above 64 sites (convolved by runs on the CPU, #564) is not on the GPU\";\n if (signalInput.kernels) return \"diffraction kernels (the Quality path) are not on the GPU\";\n if (signalInput.scene.kind !== \"materials\") return \"radiance scenes (caller functions) are not on the GPU\";\n if (!signalInput.queryPoint) return \"the expected signal has no query points\";\n if (setup.candidates || setup.ahdCorrection || setup.ahdCollect) return \"AHD candidates and the low-signal correction are not on the GPU\";\n if (setup.toneCurve !== \"identity\" && setup.toneCurve !== \"positive-reinhard-per-channel\") return \"unsupported tone curve \" + String(setup.toneCurve);\n if (signalInput.offsets.length < 1 || signalInput.offsets.length > DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS) return \"the kernel holds 1 to \" + DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS + \" query offsets\";\n if (setup.region.width < 1 || setup.region.height < 1) return \"an empty region\";\n const shape = footprintShape(setup);\n if (!shape.exact) return \"the stratified estimator (footprints above 25 real pixels) is not on the GPU\";\n if (shape.maximumColumns > DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS || shape.maximumRows > DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS)\n return \"a footprint touches more than \" + DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS + \" real pixels along an axis\";\n for (let p = 0; p < 4; p++) for (let c = 0; c < 3; c++) {\n const taps = setup.demosaic[p]?.[c];\n if (!taps || taps.length < 1 || taps.length > 4 || taps.some((t) => Math.abs(t.dx) > 1 || Math.abs(t.dy) > 1)) return \"the demosaic is not the bilinear kernels (at most 4 taps within one site)\";\n }\n return null;\n}\n\n/** The site table: Σ_λ A_c(λ)·L_m(λ) per material and channel in float64 (the reference's `materialSignalDirect`), rounded once to float32. */\nfunction siteTable(signalInput: DisplayViewExpectedSignalInput): Float32Array<ArrayBuffer> {\n const scene = signalInput.scene as Extract<DisplayViewExpectedSignalInput[\"scene\"], { kind: \"materials\" }>, A = signalInput.electronsPerRadiance, nodes = signalInput.wavelengthsNm.length;\n const neutral = [0, 1, 2].map((c) => { let s = 0; for (let n = 0; n < nodes; n++) s += A[c]![n]! * scene.whiteRadiance[n]!; return s; });\n const table = new Float32Array(scene.materials.length * 3);\n scene.materials.forEach((m, index) => {\n for (let c = 0; c < 3; c++) {\n let value: number;\n if (\"neutral\" in m) value = m.neutral * neutral[c]!;\n else { value = 0; for (let n = 0; n < nodes; n++) value += A[c]![n]! * m.radiance[n]!; }\n if (!(Math.abs(value) <= FLOAT32_SAFE_MAGNITUDE)) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"A material's channel signal exceeds the float32 domain.\");\n table[index * 3 + c] = value;\n }\n });\n return table;\n}\n\n/**\n * The query-point scale and offsets: the reference's query point of offset o at site (x, y) is, up to its own float64\n * rounding, (x + 0.5 + o_x − W/2)·g and −(y + 0.5 + o_y − H/2)·g with g = 2/outputWidth frame units per site. The scale\n * is taken from the reference's own query points (two sites a frame apart, divided in float64), so a request whose\n * geometry differs is caught by the check against the reference at four corners (within 2^-40 relative).\n */\nexport function queryGeometry(signalInput: DisplayViewExpectedSignalInput): { scaleU: number; scaleV: number; offsetU: Float64Array; offsetV: Float64Array } {\n const W = signalInput.nativeWidth, H = signalInput.nativeHeight, point = new Float64Array(2), query = signalInput.queryPoint!;\n const x1 = W - 1, y1 = H - 1;\n query(0, 0, 0, point); const u0 = point[0]!, v0 = point[1]!;\n query(x1, 0, 0, point); const u1 = point[0]!;\n query(0, y1, 0, point); const v1 = point[1]!;\n const scaleU = (u1 - u0) / x1, scaleV = (v1 - v0) / y1;\n const offsetU = new Float64Array(signalInput.offsets.length), offsetV = new Float64Array(signalInput.offsets.length);\n for (let o = 0; o < signalInput.offsets.length; o++) {\n const offset = signalInput.offsets[o]!;\n offsetU[o] = 0.5 + offset.x - W / 2; offsetV[o] = 0.5 + offset.y - H / 2;\n // The model (x + c)·scale against the reference at the corners: a geometry the model does not describe is refused.\n for (const [x, y] of [[0, 0], [x1, 0], [0, y1], [x1, y1]] as const) {\n query(x, y, o, point);\n const mu = (x + offsetU[o]!) * scaleU, mv = (y + offsetV[o]!) * scaleV;\n if (!(Math.abs(mu - point[0]!) <= 2 ** -40 * (Math.abs(point[0]!) + 1) && Math.abs(mv - point[1]!) <= 2 ** -40 * (Math.abs(point[1]!) + 1)))\n throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"The request's query points are not a rectilinear site lattice; use cpu-reference.\");\n }\n }\n return { scaleU, scaleV, offsetU, offsetV };\n}\n\n/** Gauss–Legendre nodes and weights on [−1, 1], 16 points, by the reference's own construction (display-view.ts). */\nexport function gaussLegendre16(): { x: Float64Array; w: Float64Array } {\n const n = 16, x = new Float64Array(n), w = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n let z = Math.cos(Math.PI * (i + 0.75) / (n + 0.5)), dp = 0;\n for (let it = 0; it < 100; it++) {\n let p0 = 1, p1 = z;\n for (let k = 2; k <= n; k++) { const p2 = ((2 * k - 1) * z * p1 - (k - 1) * p0) / k; p0 = p1; p1 = p2; }\n dp = n * (z * p1 - p0) / (z * z - 1);\n const dz = p1 / dp;\n z -= dz;\n if (Math.abs(dz) < 1e-16) break;\n }\n x[i] = z; w[i] = 2 / ((1 - z * z) * dp * dp);\n }\n return { x, w };\n}\n\n/** One axis record of the geometry buffer: first real pixel, count, overlaps over the scale, axis sums over the squared scale. */\nexport function axisRecord(geometry: Float32Array, at: number, start: number, end: number, limit: number, margin: number, scale: number): void {\n const { first, w } = overlaps(start, end, limit), sums = axisSums(start, end, limit, margin), scale2 = scale * scale;\n const words = new Int32Array(geometry.buffer, geometry.byteOffset, geometry.length);\n words[at] = first; words[at + 1] = w.length;\n for (let i = 0; i < w.length; i++) geometry[at + 2 + i] = w[i]! / scale;\n const order: (keyof AxisSums)[] = [\"bEven\", \"bOdd\", \"ppEven\", \"ppOdd\", \"qqEven\", \"qqOdd\", \"pqEven\", \"pqOdd\", \"ww\"];\n order.forEach((key, i) => { geometry[at + 8 + i] = sums[key] / scale2; });\n}\n\n/** The uniform parameters and the aux table of a render. */\nfunction constants(setup: DisplayViewSetup, signalInput: DisplayViewExpectedSignalInput): { params: ArrayBuffer; aux: Float32Array<ArrayBuffer> } {\n const params = new ArrayBuffer(4 * DISPLAY_VIEW_PARAM_WORDS), words = new Uint32Array(params), floats = new Float32Array(params);\n words[2] = setup.region.width; words[3] = setup.region.x; words[4] = setup.region.y; words[5] = setup.margin; words[6] = setup.nativeWidth; words[7] = setup.nativeHeight;\n words[8] = setup.region.width; words[9] = setup.toneCurve === \"positive-reinhard-per-channel\" ? 1 : 0; words[10] = signalInput.offsets.length;\n for (let c = 0; c < 3; c++) { floats[12 + c] = setup.readout[c]!.perElectron; floats[16 + c] = setup.readout[c]!.darkElectrons; floats[20 + c] = setup.readout[c]!.constantVariance; floats[24 + c] = setup.gains[c]!; }\n floats[15] = 8.5 * 8.5; floats[19] = setup.clipLevel;\n for (let r = 0; r < 3; r++) for (let c = 0; c < 3; c++) floats[28 + r * 3 + c] = setup.matrix[r]![c]!;\n const geometry = queryGeometry(signalInput);\n floats[37] = geometry.scaleU; floats[38] = geometry.scaleV;\n const aux = new Float32Array(DISPLAY_VIEW_AUX.size);\n for (let o = 0; o < signalInput.offsets.length; o++) { aux[DISPLAY_VIEW_AUX.offsets + 4 * o] = geometry.offsetU[o]!; aux[DISPLAY_VIEW_AUX.offsets + 4 * o + 1] = geometry.offsetV[o]!; aux[DISPLAY_VIEW_AUX.offsets + 4 * o + 2] = signalInput.offsets[o]!.weight; }\n for (let p = 0; p < 4; p++) for (let c = 0; c < 3; c++) {\n const taps = setup.demosaic[p]![c]!, base = DISPLAY_VIEW_AUX.taps + (p * 3 + c) * 16;\n let w2 = 0;\n taps.forEach((t, i) => { aux[base + 4 * i] = t.dx; aux[base + 4 * i + 1] = t.dy; aux[base + 4 * i + 2] = t.weight; w2 += t.weight * t.weight; });\n aux[DISPLAY_VIEW_AUX.inverseW2 + p * 3 + c] = 1 / w2;\n }\n const gl = gaussLegendre16();\n aux.set(gl.x, DISPLAY_VIEW_AUX.gaussLegendre); aux.set(gl.w, DISPLAY_VIEW_AUX.gaussLegendre + 16);\n return { params, aux };\n}\n\n/** The a-priori relative bounds of the expected value and the variance (docs/WEBGPU.md, \"Display view (Speed)\"), doubled. */\nexport function displayViewSpeedGpuRelativeBounds(toneCurve: DisplayViewSetup[\"toneCurve\"]): { mean: number; variance: number } {\n const reinhard = toneCurve === \"positive-reinhard-per-channel\";\n return { mean: MARGIN * (gammaE(MEAN_ROUNDINGS) + CPU_RELATIVE + (reinhard ? DISPLAY_VIEW_REINHARD_MEAN_U * E : 0)),\n variance: MARGIN * (gammaE(VARIANCE_ROUNDINGS) + CPU_RELATIVE + (reinhard ? DISPLAY_VIEW_REINHARD_VARIANCE_U * E : 0)) };\n}\n\n/**\n * The reference's finishing of one display pixel from its linear-light moments (display-view.ts, after the sample loop):\n * the output quantization term, the seeded noise draw (`sensor.noiseSeed`, the display pixel's view index, stream 33),\n * the Cholesky factor, the clipped-normal centre, the sRGB encode and the rounding; the same functions, so the draw and\n * every operation after the moments are the CPU's. `moments` holds m0 m1 m2 v00 v11 v22 c01 c02 c12 (the variances\n * without the quantization term); `pixels` is Σ_j (w_j/A)².\n */\nexport function finishDisplayViewPixel(moments: ArrayLike<number>, pixels: number, seed: number, index: number, step: number, maximum: number,\n samples: Uint8Array | Uint16Array, expected: Float64Array, noiseStd: Float64Array, o: number): void {\n const mean0 = moments[0]!, mean1 = moments[1]!, mean2 = moments[2]!;\n const q0 = quantizationVariance(mean0, step), q1 = quantizationVariance(mean1, step), q2 = quantizationVariance(mean2, step);\n const v00 = moments[3]! + pixels * q0, v11 = moments[4]! + pixels * q1, v22 = moments[5]! + pixels * q2, v01 = moments[6]!, v02 = moments[7]!, v12 = moments[8]!;\n const noise = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, DISPLAY_VIEW_NOISE_STREAM_ID));\n const z0 = samplePortableStandardNormal(noise), z1 = samplePortableStandardNormal(noise), z2 = samplePortableStandardNormal(noise);\n const l00 = Math.sqrt(Math.max(0, v00)), l10 = l00 > 0 ? v01 / l00 : 0, l20 = l00 > 0 ? v02 / l00 : 0;\n const l11 = Math.sqrt(Math.max(0, v11 - l10 * l10)), l21 = l11 > 0 ? (v12 - l20 * l10) / l11 : 0;\n const l22 = Math.sqrt(Math.max(0, v22 - l20 * l20 - l21 * l21));\n const n0 = clipCentre(mean0, v00) + l00 * z0, n1 = clipCentre(mean1, v11) + l10 * z0 + l11 * z1, n2 = clipCentre(mean2, v22) + l20 * z0 + l21 * z1 + l22 * z2;\n samples[o] = Math.round(encodeSrgbComponentPortable(n0 < 0 ? 0 : n0 > 1 ? 1 : n0) * maximum);\n samples[o + 1] = Math.round(encodeSrgbComponentPortable(n1 < 0 ? 0 : n1 > 1 ? 1 : n1) * maximum);\n samples[o + 2] = Math.round(encodeSrgbComponentPortable(n2 < 0 ? 0 : n2 > 1 ? 1 : n2) * maximum);\n expected[o] = mean0; expected[o + 1] = mean1; expected[o + 2] = mean2;\n noiseStd[o] = Math.sqrt(Math.max(0, v00)); noiseStd[o + 1] = Math.sqrt(Math.max(0, v11)); noiseStd[o + 2] = Math.sqrt(Math.max(0, v22));\n}\n\n/**\n * #496: how far the host's quantization term Σ(w/A)²·q(m) of a display pixel can move when each component's mean carries the\n * bound relative·|m| + absolute (see QUANTIZATION_SLOPE), the largest over the three components, doubled. Added to the pixel's\n * absolute variance bound; it changes no computed value.\n */\nexport function displayViewSpeedQuantizationBound(moments: ArrayLike<number>, relative: number, absolute: number, pixels: number, step: number): number {\n let largest = 0;\n for (let c = 0; c < 3; c++) {\n const m = moments[c]!, bound = relative * Math.abs(m) + absolute;\n largest = Math.max(largest, QUANTIZATION_SLOPE * bound + (m - bound <= QUANTIZATION_JOIN && m + bound >= QUANTIZATION_JOIN ? QUANTIZATION_JOIN_JUMP : 0));\n }\n return MARGIN * pixels * largest * step * step / 12;\n}\n\n/** Renders one region of a Speed display view on the GPU (see the module comment). */\nexport async function renderDisplayViewSpeedOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: DisplayViewSpeedGpuInput, abort: AbortController,\n yieldControl: YieldControl, pipelines: PipelineSource): Promise<DisplayViewSpeedGpuResult> {\n const { setup, signalInput, material } = input;\n const reason = displayViewSpeedGpuUnsupportedReason(setup, signalInput);\n if (reason) throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"webgpu-f32 display view (Speed): \" + reason + \"; use cpu-reference.\");\n const { region, margin } = setup, shape = footprintShape(setup), table = siteTable(signalInput), { params, aux } = constants(setup, signalInput);\n const stride = DISPLAY_VIEW_GEOMETRY_STRIDE, geometry = new Float32Array((region.width + region.height) * stride);\n const columnSums: AxisSums[] = [], rowSums: AxisSums[] = [];\n for (let i = 0; i < region.width; i++) { axisRecord(geometry, i * stride, (region.x + i) * shape.sx, (region.x + i + 1) * shape.sx, setup.frameWidth, margin, shape.sx); columnSums.push(axisSums((region.x + i) * shape.sx, (region.x + i + 1) * shape.sx, setup.frameWidth, margin)); }\n for (let j = 0; j < region.height; j++) { axisRecord(geometry, (region.width + j) * stride, (region.y + j) * shape.sy, (region.y + j + 1) * shape.sy, setup.frameHeight, margin, shape.sy); rowSums.push(axisSums((region.y + j) * shape.sy, (region.y + j + 1) * shape.sy, setup.frameHeight, margin)); }\n const area = shape.sx * shape.sy, pixelCount = region.width * region.height;\n const rows = Math.max(1, Math.min(region.height, Math.floor(bandBytes / (region.width * BYTES_PER_PIXEL))));\n if (Math.max(rows * region.width * 4 * DISPLAY_VIEW_OUTPUT_FLOATS, geometry.byteLength, table.byteLength) > runtime.maximumStorageBindingBytes)\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One display-view band exceeds the device's storage binding limit.\");\n const pipeline = await pipelines(\"photivra-display-view-speed:\" + material.id, assembleDisplayViewSpeedWgsl(material.wgsl));\n const moments = new Float32Array(pixelCount * DISPLAY_VIEW_OUTPUT_FLOATS), flagged: number[] = [], flagWords = new Uint32Array(pixelCount * DISPLAY_VIEW_FLAG_WORDS);\n const words = new Uint32Array(params);\n const scope = new GpuResourceScope(runtime);\n try {\n const auxBuffer = scope.upload(\"photivra-display-view-aux\", aux, BUFFER_USAGE.STORAGE);\n const geometryBuffer = scope.upload(\"photivra-display-view-geometry\", geometry, BUFFER_USAGE.STORAGE);\n const tableBuffer = scope.upload(\"photivra-display-view-table\", table, BUFFER_USAGE.STORAGE);\n const materialEntries = material.bindings.map((b) => ({ binding: b.binding, resource: { buffer: b.buffer ?? scope.upload(\"photivra-display-view-material-\" + b.binding, b.data, b.kind === \"uniform\" ? BUFFER_USAGE.UNIFORM : BUFFER_USAGE.STORAGE) } }));\n const materialGroup = runtime.device.createBindGroup({ layout: pipeline.getBindGroupLayout(1), entries: materialEntries });\n const gate = createHostYieldGate();\n for (let row0 = 0; row0 < region.height; row0 += rows) {\n checkAbort(abort.signal);\n const row1 = Math.min(region.height, row0 + rows), count = (row1 - row0) * region.width, first = row0 * region.width;\n words[0] = count; words[1] = row0;\n const band = new GpuResourceScope(runtime);\n try {\n const out = band.buffer(\"photivra-display-view-moments\", count * 4 * DISPLAY_VIEW_OUTPUT_FLOATS, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const flagBuffer = band.buffer(\"photivra-display-view-flags\", count * 4 * DISPLAY_VIEW_FLAG_WORDS, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = band.upload(\"photivra-display-view-params\", new Uint8Array(params), BUFFER_USAGE.UNIFORM);\n const bindGroup = runtime.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [\n { binding: 0, resource: { buffer: uniform } }, { binding: 1, resource: { buffer: auxBuffer } }, { binding: 2, resource: { buffer: geometryBuffer } },\n { binding: 3, resource: { buffer: tableBuffer } }, { binding: 4, resource: { buffer: out } }, { binding: 5, resource: { buffer: flagBuffer } }] });\n const [data, flagData] = await runComputePass(runtime, band, pipeline, [bindGroup, materialGroup], linearDispatch(count, DISPLAY_VIEW_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: out, bytes: count * 4 * DISPLAY_VIEW_OUTPUT_FLOATS }, { buffer: flagBuffer, bytes: count * 4 * DISPLAY_VIEW_FLAG_WORDS }], abort.signal);\n moments.set(new Float32Array(data!, 0, count * DISPLAY_VIEW_OUTPUT_FLOATS), first * DISPLAY_VIEW_OUTPUT_FLOATS);\n const bandFlags = new Uint32Array(flagData!, 0, count * DISPLAY_VIEW_FLAG_WORDS);\n flagWords.set(bandFlags, first * DISPLAY_VIEW_FLAG_WORDS);\n for (let i = 0; i < count; i++) {\n let flag = (bandFlags[DISPLAY_VIEW_FLAG_WORDS * i]! & 1) !== 0;\n for (let k = 0; k < DISPLAY_VIEW_OUTPUT_FLOATS && !flag; k++) if (!Number.isFinite(moments[(first + i) * DISPLAY_VIEW_OUTPUT_FLOATS + k]!)) flag = true;\n if (flag) flagged.push(first + i);\n }\n } finally {\n band.release();\n }\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n } finally {\n scope.release();\n }\n checkAbort(abort.signal);\n // The reference's finishing per display pixel (float64).\n const maximum = setup.bitDepth === 8 ? 255 : 65535, step = 1 / maximum;\n const samples = setup.bitDepth === 8 ? new Uint8Array(pixelCount * 3) : new Uint16Array(pixelCount * 3);\n const expected = new Float64Array(pixelCount * 3), noiseStd = new Float64Array(pixelCount * 3), saturated = new Float64Array(pixelCount);\n const meanBound = new Float32Array(pixelCount), varianceBound = new Float32Array(pixelCount);\n let largestMean = 0, largestVariance = 0, sampleCount = 0, siteCount = 0;\n const counts = new Int32Array(geometry.buffer), relative = displayViewSpeedGpuRelativeBounds(setup.toneCurve);\n // #533: each display pixel's saturated-pixel share from the kernel's mask (the reference's arithmetic, exact where it decided).\n const columnOverlaps = Array.from({ length: region.width }, (_, i) => overlaps((region.x + i) * shape.sx, (region.x + i + 1) * shape.sx, setup.frameWidth));\n for (let ry = 0, i = 0; ry < region.height; ry++) {\n const rowOverlaps = overlaps((region.y + ry) * shape.sy, (region.y + ry + 1) * shape.sy, setup.frameHeight);\n for (let rx = 0; rx < region.width; rx++, i++) saturated[i] = displayViewDecidedSaturation(columnOverlaps[rx]!, rowOverlaps, area, flagWords[DISPLAY_VIEW_FLAG_WORDS * i + 1]!, flagWords[DISPLAY_VIEW_FLAG_WORDS * i + 2]!);\n }\n for (let ry = 0, i = 0; ry < region.height; ry++) {\n const rowWw = rowSums[ry]!.ww, ny = counts[(region.width + ry) * stride + 1]!;\n for (let rx = 0; rx < region.width; rx++, i++) {\n const pixels = columnSums[rx]!.ww * rowWw / (area * area), vy = region.y + ry, vx = region.x + rx, o = i * DISPLAY_VIEW_OUTPUT_FLOATS;\n finishDisplayViewPixel(moments.subarray(o, o + 9), pixels, setup.seed, vy * setup.viewWidth + vx, step, maximum, samples, expected, noiseStd, i * 3);\n meanBound[i] = MARGIN * moments[o + 9]!; varianceBound[i] = MARGIN * moments[o + 10]! + displayViewSpeedQuantizationBound(moments.subarray(o, o + 3), relative.mean, meanBound[i]!, pixels, step);\n largestMean = Math.max(largestMean, meanBound[i]!); largestVariance = Math.max(largestVariance, varianceBound[i]!);\n const nx = counts[rx * stride + 1]!;\n sampleCount += nx * ny; siteCount += (nx + 2) * (ny + 2);\n }\n }\n // Flagged display pixels: the reference's own pixel (a one-pixel region render is byte-identical to the whole view's pixel).\n const recomputed: number[] = [], highlights: number[] = [];\n // #533: unflagged display pixels with an undecided real pixel take the reference's count only (their samples stay the kernel's).\n const undecided: number[] = [], isFlagged = new Uint8Array(pixelCount);\n for (const i of flagged) isFlagged[i] = 1;\n for (let i = 0; i < pixelCount; i++) if (isFlagged[i] === 0 && (flagWords[DISPLAY_VIEW_FLAG_WORDS * i]! & 2) !== 0) undecided.push(i);\n if (input.recomputeFlagged !== false && flagged.length + undecided.length > 0) {\n const signal = createDisplayViewExpectedSignal(signalInput);\n for (const i of flagged) {\n checkAbort(abort.signal);\n const rx = i % region.width, ry = (i - rx) / region.width;\n const pixel = await renderDisplayView({ ...setup, signal, region: { x: region.x + rx, y: region.y + ry, width: 1, height: 1 } });\n samples.set(pixel.samples, i * 3); expected.set(pixel.expected, i * 3); noiseStd.set(pixel.noiseStd, i * 3); saturated[i] = pixel.saturated[0]!;\n meanBound[i] = 0; varianceBound[i] = 0;\n recomputed.push(i);\n }\n for (const i of undecided) {\n checkAbort(abort.signal);\n const rx = i % region.width, ry = (i - rx) / region.width;\n saturated[i] = (await renderDisplayView({ ...setup, signal, region: { x: region.x + rx, y: region.y + ry, width: 1, height: 1 } })).saturated[0]!;\n highlights.push(i);\n }\n }\n let saturatedPixelCount = 0;\n for (let i = 0; i < pixelCount; i++) saturatedPixelCount += saturated[i]!;\n const expectedValueBound: ImageKernelRelativeErrorBound = { kind: \"relative-to-reference\", relative: relative.mean, absolute: largestMean };\n const uncertain = flagged.length - recomputed.length + undecided.length - highlights.length;\n return { samples, expected, noiseStd, sampleCount, siteCount, detailPixelCount: pixelCount, uniformPixelCount: 0, ahdCorrectedPixelCount: 0, estimation: \"exact-area-mean\", saturated, saturatedPixelCount,\n execution: webGpuExecution(expectedValueBound, uncertain), expectedValueBound,\n varianceBound: { kind: \"relative-to-reference\", relative: relative.variance, absolute: largestVariance },\n expectedValueAbsoluteBound: meanBound, varianceAbsoluteBound: varianceBound,\n flaggedPixelIndices: Uint32Array.from(flagged), hostRecomputedPixelIndices: Uint32Array.from(recomputed), highlightRecomputedPixelIndices: Uint32Array.from(highlights) };\n}\n\n/**\n * Why the Speed renderer does not support a prepared request (`DisplayViewGpuRenderer.supports`), or true. It covers every\n * engine chart (the 2.0 presets through `display-view-chart-material-module.ts`; composites, the 2.3 elements, the sine star\n * and fixed-size charts through the composite module, #491) and declared `material-layers` scenes, never a caller scene\n * function, without AHD or diffraction, with the identity or Reinhard tone curve and at most 16 query offsets; whether a\n * view's footprints take the exact area mean, and whether the device passes the composite kernel's probe, is known only per\n * render (`displayViewSpeedGpuUnsupportedReason`, `createDisplayViewMaterialModules`).\n */\nexport function displayViewSpeedGpuSupports(request: DisplayViewGpuRequest): true | string {\n if (request.ahd) return \"AHD (the Quality demosaic) is not on the GPU\";\n if (request.diffraction) return \"diffraction (the Quality optics) is not on the GPU\";\n if (request.scene !== \"chart\" && request.scene !== \"material-layers\") return \"the scene is a caller \" + request.scene + \"; the GPU material lookup covers engine charts and declared material-layers scenes (describe the scene as material-layers)\";\n if (request.toneCurve !== \"identity\" && request.toneCurve !== \"positive-reinhard-per-channel\") return \"unsupported tone curve \" + String(request.toneCurve);\n if (offsetCount(request) > DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS) return \"more than \" + DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS + \" query offsets per site\";\n return true;\n}\n\n/**\n * The renderer's run-time self-check (`DisplayViewGpuRenderer.conformanceCases`): a 38 × 26 checkerboard frame of 6 µm sites\n * shown at 13 × 9 (2.9 real pixels per display pixel) with the 2 × 2 box, light squares at the white clip, the GPU against\n * `renderDisplayView` within the a-priori bounds, every flagged pixel recomputed.\n */\nexport const DISPLAY_VIEW_SPEED_CONFORMANCE_CASE: DisplayViewGpuConformanceCase = { id: \"display-view:speed:checkerboard-13x9\", async run(handle, signal): Promise<true | string> {\n // The handle is the engine's own runtime (the contract keeps WebGPU types out of the published declarations).\n const runtime = handle as WebGpuRuntime;\n const nativeWidth = 40, nativeHeight = 28, margin = 1, frameWidth = 38, frameHeight = 26, g = 2 / frameWidth, nodes = [450, 550, 650];\n const chart = resolvePortableChartScene({ scene: { preset: \"checkerboard\", squaresAcross: 6 }, aspect: frameHeight / frameWidth });\n const offsets = [[-0.25, -0.25], [0.25, -0.25], [-0.25, 0.25], [0.25, 0.25]].map(([x, y]) => ({ x: x!, y: y!, weight: 0.25 }));\n const signalInput: DisplayViewExpectedSignalInput = { nativeWidth, nativeHeight, outputWidth: frameWidth, wavelengthsNm: nodes,\n electronsPerRadiance: [Float64Array.of(9000, 30000, 4000), Float64Array.of(6000, 42000, 9000), Float64Array.of(30000, 9000, 3000)], offsets,\n scene: { kind: \"materials\", materialAt: (u, v) => chart.materialAt(u, v), materials: chart.materials.map((m) => ({ neutral: m.kind === \"neutral\" ? m.reflectance : 0.5 })), whiteRadiance: Float64Array.of(0.5, 0.9, 0.7) },\n channelAt: (x, y) => ((y & 1) === 0 ? ((x & 1) === 0 ? 0 : 1) : ((x & 1) === 0 ? 1 : 2)),\n queryPoint: (x, y, o, out) => { out[0] = (x + 0.5 + offsets[o]!.x - nativeWidth / 2) * g; out[1] = -(y + 0.5 + offsets[o]!.y - nativeHeight / 2) * g; } };\n const readout = { perElectron: 1 / 60000, darkElectrons: 0.07, constantVariance: 1.5e-9 };\n const setup: DisplayViewSetup = { frameWidth, frameHeight, margin, nativeWidth, nativeHeight, viewWidth: 13, viewHeight: 9, region: { x: 0, y: 0, width: 13, height: 9 },\n samplesPerAxis: 16, reachSites: 2, bitDepth: 8, seed: 478, signal: createDisplayViewExpectedSignal(signalInput), readout: [readout, readout, readout], demosaic: bilinearKernels(),\n gains: [1.1, 1, 1.6], clipLevel: 1, matrix: [[3.08, -1.54, -0.54], [-0.92, 1.88, 0.045], [0.053, -0.2, 1.15]], toneCurve: \"identity\",\n yieldControl: async () => undefined, checkAbort: () => { if (signal?.aborted) throw abortedError(); } };\n const reference = await renderDisplayView(setup);\n const abort = new AbortController(), onAbort = (): void => abort.abort();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n if (signal?.aborted) abort.abort();\n const gpu = await renderDisplayViewSpeedOnGpu(runtime, 1 << 20, { setup, signalInput, material: chartPresetMaterialModule(chart) }, abort, undefined,\n (label, code) => createComputePipeline(runtime, label, code, abort.signal));\n for (let i = 0; i < reference.expected.length; i++) {\n const p = Math.floor(i / 3), e0 = reference.expected[i]!, e1 = gpu.expected[i]!, v0 = reference.noiseStd[i]! * reference.noiseStd[i]!, v1 = gpu.noiseStd[i]! * gpu.noiseStd[i]!;\n const expectedLimit = gpu.expectedValueBound.relative * Math.abs(e0) + gpu.expectedValueAbsoluteBound[p]!, varianceLimit = gpu.varianceBound.relative * v0 + gpu.varianceAbsoluteBound[p]!;\n if (!(Math.abs(e1 - e0) <= expectedLimit)) return \"component \" + i + \": expected value \" + e1 + \" differs from the reference \" + e0 + \" by more than the a-priori bound \" + expectedLimit + \".\";\n if (!(Math.abs(v1 - v0) <= varianceLimit)) return \"component \" + i + \": variance \" + v1 + \" differs from the reference \" + v0 + \" by more than the a-priori bound \" + varianceLimit + \".\";\n if (Math.abs(gpu.samples[i]! - reference.samples[i]!) > 1) return \"component \" + i + \": sample \" + gpu.samples[i] + \" differs from the reference \" + reference.samples[i] + \" by more than one code.\";\n }\n // #533: the saturated-pixel count is the reference's, bit for bit (the light squares sit at the white clip).\n if (gpu.saturatedPixelCount !== reference.saturatedPixelCount) return \"the saturated-pixel count \" + gpu.saturatedPixelCount + \" differs from the reference's \" + reference.saturatedPixelCount + \".\";\n return true;\n } finally { signal?.removeEventListener(\"abort\", onAbort); }\n} };\n\n/**\n * The display view's Speed renderer on one runtime (#481's `DisplayViewGpuRenderer`): one pipeline cache per device, the\n * material modules of `createDisplayViewMaterialModules` (the preset module per resolved chart, the composite module with its\n * scene records uploaded once per scene). `render` renders the part's region (`setup.gpu` carries the expected signal's input\n * and the resolved scene; a setup without it, a caller scene, a coarse view, a frame the kernel does not cover or a device\n * that fails the composite probe throws `unsupported-on-backend`), and throws `aborted` and `device-lost` as the accelerator's\n * operations do. `dispose` releases the uploaded scene records.\n */\nexport function createDisplayViewSpeedGpuRenderer(runtime: WebGpuRuntime, options: { maximumBandBytes?: number; yieldControl?: YieldControl } = {}): DisplayViewGpuRenderer {\n const pipelines = new Map<string, Promise<GPUComputePipeline>>();\n const bandBytes = options.maximumBandBytes ?? Math.min(64 * 1024 * 1024, runtime.maximumStorageBindingBytes);\n const source: PipelineSource = (label, code) => {\n let pending = pipelines.get(label);\n if (!pending) { pending = createComputePipeline(runtime, label, code, undefined); pipelines.set(label, pending); pending.catch(() => pipelines.delete(label)); }\n return pending;\n };\n const modules = createDisplayViewMaterialModules(runtime, source);\n return {\n id: \"photivra-display-view-speed\",\n supports: displayViewSpeedGpuSupports,\n conformanceCases: [DISPLAY_VIEW_SPEED_CONFORMANCE_CASE],\n async render(part: DisplayViewGpuPart): Promise<DisplayViewGpuRenderOutput> {\n const { setup, signal } = part;\n if (!setup.gpu) throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"The display-view setup carries no GPU inputs (setup.gpu); use cpu-reference.\");\n const abort = new AbortController(), onAbort = (): void => abort.abort();\n if (signal?.aborted) throw abortedError();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n const material = await modules.moduleFor(setup.gpu, abort.signal);\n const result = await renderDisplayViewSpeedOnGpu(runtime, bandBytes, { setup, signalInput: setup.gpu.signalInput, material }, abort, options.yieldControl, source);\n return { samples: result.samples, expected: result.expected, noiseStd: result.noiseStd, sampleCount: result.sampleCount, siteCount: result.siteCount, detailPixelCount: result.detailPixelCount,\n uniformPixelCount: result.uniformPixelCount, ahdCorrectedPixelCount: result.ahdCorrectedPixelCount, estimation: result.estimation, saturated: result.saturated,\n saturatedPixelCount: result.saturatedPixelCount, errorBound: result.expectedValueBound,\n diagnosticUncertaintySampleCount: result.execution.diagnosticUncertaintySampleCount, ...(material.compositeProbe ? { compositeProbe: material.compositeProbe } : {}) };\n } finally { signal?.removeEventListener(\"abort\", onAbort); }\n },\n dispose(): void { modules.release(); }\n };\n}\n\n/** The factory `prepareDisplayView` creates the renderer with (one per device). */\nexport const displayViewSpeedGpuRendererFactory: DisplayViewGpuRendererFactory = (handle: DisplayViewGpuRuntimeHandle) => createDisplayViewSpeedGpuRenderer(handle as WebGpuRuntime);\n\n/**\n * Registers the Speed renderer as the display view's GPU renderer (`setDisplayViewGpuRendererFactory`) and returns the factory\n * registered before. Nothing registers it on import: the integration of #481 decides where the engine registers it.\n */\nexport function registerDisplayViewSpeedGpuRenderer(): DisplayViewGpuRendererFactory | null {\n return setDisplayViewGpuRendererFactory(displayViewSpeedGpuRendererFactory);\n}\n"]}
1
+ {"version":3,"file":"display-view-speed-gpu.js","sourceRoot":"","sources":["../../src/gpu/display-view-speed-gpu.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Host side of the display view's Speed path on the GPU (#478): the support check, the float64 tables (site table,\n * overlaps over the scale, axis sums over the squared scale, 1/Σw²), banded dispatch of\n * `DISPLAY_VIEW_SPEED_KERNEL_WGSL`, and the finishing the CPU reference does after its per-sample loop: the output\n * quantization term, the seeded noise draw, the Cholesky factor, the clipped-normal centre, the sRGB encode and the\n * rounding, all with the reference's own float64 functions. So the noise draw is bit-identical to the CPU's, and only\n * the expected value and the covariance carry the float32 bound.\n *\n * The float64 reference is `renderDisplayView` (facade/display-view.ts) on the exact-area-mean path without\n * diffraction, with the bilinear demosaic and chart materials. Internal: not exported from the package. The\n * material lookup per query point is a module the caller supplies (`DisplayViewGpuMaterialModule`, the seam of\n * #477); `display-view-chart-material-module.ts` provides one for the eight 2.0 chart presets and\n * `display-view-composite-material-module.ts` (#491) one for composite charts, the 2.3 elements and `material-layers` scenes.\n */\nimport { DISPLAY_VIEW_NOISE_STREAM_ID, axisSums, clipCentre, createDisplayViewExpectedSignal, displayViewDecidedSaturation, overlaps, quantizationVariance, renderDisplayView, type AxisSums, type DisplayViewRenderResult, type DisplayViewSetup } from \"../facade/display-view.js\";\nimport { displayViewSignalTables, type DisplayViewExpectedSignalInput } from \"../facade/expected-signal.js\";\nimport { resolvePortableChartScene } from \"../facade/chart-scenes.js\";\nimport { setDisplayViewGpuRendererFactory, type DisplayViewGpuConformanceCase, type DisplayViewGpuPart, type DisplayViewGpuRenderOutput, type DisplayViewGpuRenderer,\n type DisplayViewGpuRendererFactory, type DisplayViewGpuRequest, type DisplayViewGpuRuntimeHandle } from \"../facade/display-view-gpu.js\";\nimport { createDisplayViewMaterialModules } from \"./display-view-composite-material-module.js\";\nimport { chartPresetMaterialModule } from \"./display-view-chart-material-module.js\";\nimport { encodeSrgbComponentPortable } from \"../color/srgb-transfer.js\";\nimport { createDeterministicUniformStream, deriveNativeSiteStreamSeedUint32, samplePortableStandardNormal } from \"../sensor/stochastic-seed.js\";\nimport { createHostYieldGate } from \"../capture/host-yield-cadence.js\";\nimport { ImageKernelExecutionError, WEBGPU_F32_UNIT_ROUNDOFF, webGpuExecution, type ChartCompositeProbeRecord, type ImageKernelExecution, type ImageKernelRelativeErrorBound } from \"./image-kernel-execution.js\";\nimport { BUFFER_USAGE, GpuResourceScope, abortedError, createComputePipeline, linearDispatch, runComputePass, type WebGpuRuntime, throwIfAborted as checkAbort } from \"./webgpu-runtime.js\";\nimport { DISPLAY_VIEW_AUX, DISPLAY_VIEW_FLAG_WORDS, DISPLAY_VIEW_SPEED_MAXIMUM_NODES, DISPLAY_VIEW_GEOMETRY_STRIDE, DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS, DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS,\n DISPLAY_VIEW_OUTPUT_FLOATS, DISPLAY_VIEW_PARAM_WORDS, DISPLAY_VIEW_REINHARD_MEAN_U, DISPLAY_VIEW_REINHARD_VARIANCE_U, DISPLAY_VIEW_WORKGROUP_SIZE,\n assembleDisplayViewSpeedWgsl } from \"./wgsl-display-view-speed-kernel.js\";\nimport { footprintShape, bilinearKernels, offsetCount } from \"./display-view-quality-gpu.js\";\n\ntype PipelineSource = (label: string, code: string) => Promise<GPUComputePipeline>;\ntype YieldControl = ((signal: AbortSignal) => Promise<void>) | undefined;\n\n/** One WGSL rounding of + − × in either direction (W3C WGSL \"Floating Point Accuracy\"; #471, #487): twice the binary32 unit roundoff. */\nconst E = 2 * WEBGPU_F32_UNIT_ROUNDOFF;\n/** Higham's γ_k with E in place of u. */\nconst gammaE = (k: number): number => k * E / (1 - k * E);\n/** Every reported bound is doubled, as the sensor stage doubles its margins. */\nconst MARGIN = 2;\n/** Table values above this are outside the float32 domain. */\nconst FLOAT32_SAFE_MAGNITUDE = 2 ** 120;\n/** Roundings of the expected value's multiplicative chain (docs/WEBGPU.md, \"Display view (Speed)\"): site 9, readout 2, demosaic 4, WB 2, matrix 4, weights 3, up to 35 additions, 5 spare. */\nconst MEAN_ROUNDINGS = 64;\n/** Roundings of the variance chain: the squares double the readout, demosaic, WB and matrix counts. */\nconst VARIANCE_ROUNDINGS = 80;\n/** The reference's own float64 rounding of its chains, relative. */\nconst CPU_RELATIVE = 2 ** -40;\n/**\n * #496: the host's output quantization term q(m) = s(e)²·Δ²/12 (`quantizationVariance`, s the sRGB EOTF's slope at the encoded\n * mean e) is evaluated at the GPU's mean, so it moves with the mean's error: dq/dm = 2·s′(e)·Δ²/12 (de/dm = 1/s), with\n * s′(e) = (2.4/1.055)·(1.4/1.055)·((e + 0.055)/1.055)^0.4 ≤ 3.02 on [0, 1] and 0 on the linear segment and outside [0, 1];\n * q is non-decreasing in m, with a jump of (s₊² − s₋²)·Δ²/12 ≤ 2.1·10⁻⁴·Δ²/12 at the segment join (linear m = 0.0031308).\n * The Quality kernel's constants (#479).\n */\nconst QUANTIZATION_SLOPE = 6.04, QUANTIZATION_JOIN_JUMP = 2.1e-4, QUANTIZATION_JOIN = 0.0031308;\n/** Workgroups per band are limited by the output buffer: DISPLAY_VIEW_OUTPUT_FLOATS floats plus the flag words (#533: three) per display pixel. */\nconst BYTES_PER_PIXEL = 4 * DISPLAY_VIEW_OUTPUT_FLOATS + 4 * DISPLAY_VIEW_FLAG_WORDS;\n\n/**\n * The material lookup of a GPU display view (the seam of #477, GPU chart radiance for the composite chart and label\n * masks). `wgsl` defines `fn material_at(p: vec2<f32>) -> u32` (the material index of frame point p: u right, v up, the\n * same index space as the scene's `materialAt`) and declares `var<private> material_uncertain: bool`, which it sets to\n * true when p lies within its a-priori bound of a material boundary; the display pixel is then recomputed on the host\n * with the reference. The point p carries a relative error of at most 2E + 10⁻¹⁴ (E = 2⁻²³) against the reference's float64\n * query point (two float32 roundings of (x + c)·scale), which the module's bounds must cover. The module may use the\n * kernel's constants `E` (2⁻²³) and `SLACK` (10⁻¹⁴) and declares its buffers in @group(1); `bindings` are their\n * contents: `data` is uploaded once per render, `buffer` is a buffer the module already holds on the device (#491: scene\n * records uploaded once per renderer and reused across a view's parts).\n */\nexport interface DisplayViewGpuMaterialModule {\n /** Names the module in the pipeline cache; two modules with different `wgsl` need different ids. */\n readonly id: string;\n readonly wgsl: string;\n /** The composite module's device probe record (the product path it chose); absent for the chart-preset module. */\n readonly compositeProbe?: ChartCompositeProbeRecord;\n readonly bindings: readonly ({ binding: number; kind: \"uniform\" | \"storage\"; data: ArrayBufferView<ArrayBuffer>; buffer?: undefined } |\n { binding: number; kind: \"uniform\" | \"storage\"; buffer: GPUBuffer; data?: undefined })[];\n /**\n * #581: a module that defines `scene_value` itself (the image-plane module) states the roundings its value carries beyond the\n * table lookup's one, added to the mean's and (doubled) the variance's chains; and it gives the data of the kernel's binding 3 in place of the spectral table.\n */\n readonly extraSiteRoundings?: number;\n readonly siteTable?: Float32Array<ArrayBuffer>;\n /**\n * #581: a module whose data is too large for one binding (a large photo) gives group 1 per band instead of `bindings`: for the\n * native site rows [y0, y1] the band reads, and the most display rows a band may hold at `sitesPerDisplayRow`.\n */\n band?(scope: GpuResourceScope, layout: GPUBindGroupLayout, y0: number, y1: number): GPUBindGroup;\n bandRows?(sitesPerDisplayRow: number): number;\n}\n\n/** What a GPU render of a display view needs: the reference's own setup and expected-signal input, plus the material module. */\nexport interface DisplayViewSpeedGpuInput {\n /** The render's setup, as `renderDisplayView` receives it (`setup.signal` is used only to recompute flagged pixels). */\n setup: DisplayViewSetup;\n /** The expected signal's input (the offsets, the materials table and the query points). */\n signalInput: DisplayViewExpectedSignalInput;\n material: DisplayViewGpuMaterialModule;\n /** Recompute flagged display pixels (a query point within its bound of a material boundary) with the reference. Default true. */\n recomputeFlagged?: boolean;\n}\n\n/** A GPU display view of one region: the reference's result fields plus the execution label, the bounds and the flagged pixels. */\nexport interface DisplayViewSpeedGpuResult extends DisplayViewRenderResult {\n execution: ImageKernelExecution;\n /** |E_gpu − E_cpu| ≤ relative·E_cpu + absolute for every component of every display pixel (linear light); `absolute` is the largest per-pixel term. */\n expectedValueBound: ImageKernelRelativeErrorBound;\n /** |V_gpu − V_cpu| ≤ relative·V_cpu + absolute for every variance (the covariance diagonal, linear light squared). */\n varianceBound: ImageKernelRelativeErrorBound;\n /** Per display pixel: the absolute terms of the two bounds (the clip steps' running bound, already doubled). */\n expectedValueAbsoluteBound: Float32Array;\n varianceAbsoluteBound: Float32Array;\n /** Display pixels (region row-major) whose material lookup was uncertain; equal to `hostRecomputedPixelIndices` when recomputing. */\n flaggedPixelIndices: Uint32Array;\n hostRecomputedPixelIndices: Uint32Array;\n /** #533: display pixels (not flagged) with a real pixel whose saturation the kernel left undecided; their count is the host reference's. */\n highlightRecomputedPixelIndices: Uint32Array;\n}\n\n/**\n * Why the kernel does not cover a request, or null when it does. The kernel is the Speed path: the exact area mean\n * (views where a footprint holds at most 25 real pixels and at most K², and here at most 6 per axis), no diffraction\n * kernels, chart materials, the bilinear demosaic (no AHD candidates or correction), the identity or positive Reinhard\n * tone curve, and at most 16 query offsets.\n */\nexport function displayViewSpeedGpuUnsupportedReason(setup: DisplayViewSetup, signalInput: DisplayViewExpectedSignalInput): string | null {\n if (signalInput.largeKernel) return \"a defocus kernel radius above 64 sites (convolved by runs on the CPU, #564) is not on the GPU\";\n if (signalInput.kernels) return \"diffraction kernels (the Quality path) are not on the GPU\";\n if (signalInput.scene.kind !== \"materials\" && !signalInput.scene.signalAt) return \"radiance scenes (caller functions) are not on the GPU\";\n if (!signalInput.queryPoint) return \"the expected signal has no query points\";\n if (setup.candidates || setup.ahdCorrection || setup.ahdCollect) return \"AHD candidates and the low-signal correction are not on the GPU\";\n if (setup.toneCurve !== \"identity\" && setup.toneCurve !== \"positive-reinhard-per-channel\") return \"unsupported tone curve \" + String(setup.toneCurve);\n if (signalInput.offsets.length < 1 || signalInput.offsets.length > DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS) return \"the kernel holds 1 to \" + DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS + \" query offsets\";\n if (signalInput.wavelengthsNm.length < 1 || signalInput.wavelengthsNm.length > DISPLAY_VIEW_SPEED_MAXIMUM_NODES) return \"the kernel integrates 1 to \" + DISPLAY_VIEW_SPEED_MAXIMUM_NODES + \" spectral nodes per site\";\n if (setup.region.width < 1 || setup.region.height < 1) return \"an empty region\";\n const shape = footprintShape(setup);\n if (!shape.exact) return \"the stratified estimator (footprints above 25 real pixels) is not on the GPU\";\n if (shape.maximumColumns > DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS || shape.maximumRows > DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS)\n return \"a footprint touches more than \" + DISPLAY_VIEW_GPU_MAXIMUM_PIXELS_PER_AXIS + \" real pixels along an axis\";\n for (let p = 0; p < 4; p++) for (let c = 0; c < 3; c++) {\n const taps = setup.demosaic[p]?.[c];\n if (!taps || taps.length < 1 || taps.length > 4 || taps.some((t) => Math.abs(t.dx) > 1 || Math.abs(t.dy) > 1)) return \"the demosaic is not the bilinear kernels (at most 4 taps within one site)\";\n }\n return null;\n}\n\n/**\n * The spectral table (2.21.0: signals are integrated from the material spectrum per site): the three channel responses A_c(λ_n)\n * (3·N floats), then each material's spectral radiance L_m(λ_n) (N floats per material; a neutral one its reflectance times the\n * white radiance, the reference's own float64 spectra), each rounded once to float32. The kernel integrates Σ_n A_c(λ_n)·L_m(λ_n)\n * for the material and channel a site reads, when it reads it; no per-material channel value is formed.\n *\n * Domain: every value is non-negative and the largest possible sum, N·max A·max L, stays below the float32 safe magnitude (NaN fails it).\n */\nfunction spectralTable(signalInput: DisplayViewExpectedSignalInput): Float32Array<ArrayBuffer> {\n const N = signalInput.wavelengthsNm.length, rows = [...signalInput.electronsPerRadiance, ...displayViewSignalTables(signalInput).spectra], largest = [0, 0];\n const table = Float32Array.from(rows.flatMap((row, r) => Array.from(row.subarray(0, N), (v) => { largest[r < 3 ? 0 : 1] = Math.max(largest[r < 3 ? 0 : 1]!, v >= 0 ? v : Infinity); return v; })));\n if (!(largest[0]! * largest[1]! * N <= FLOAT32_SAFE_MAGNITUDE)) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"A material's channel signal exceeds the float32 domain.\");\n return table;\n}\n\n/**\n * The query-point scale and offsets: the reference's query point of offset o at site (x, y) is, up to its own float64\n * rounding, (x + 0.5 + o_x − W/2)·g and −(y + 0.5 + o_y − H/2)·g with g = 2/outputWidth frame units per site. The scale\n * is taken from the reference's own query points (two sites a frame apart, divided in float64), so a request whose\n * geometry differs is caught by the check against the reference at four corners (within 2^-40 relative).\n */\nexport function queryGeometry(signalInput: DisplayViewExpectedSignalInput): { scaleU: number; scaleV: number; offsetU: Float64Array; offsetV: Float64Array } {\n const W = signalInput.nativeWidth, H = signalInput.nativeHeight, point = new Float64Array(2), query = signalInput.queryPoint!;\n const x1 = W - 1, y1 = H - 1;\n query(0, 0, 0, point); const u0 = point[0]!, v0 = point[1]!;\n query(x1, 0, 0, point); const u1 = point[0]!;\n query(0, y1, 0, point); const v1 = point[1]!;\n const scaleU = (u1 - u0) / x1, scaleV = (v1 - v0) / y1;\n const offsetU = new Float64Array(signalInput.offsets.length), offsetV = new Float64Array(signalInput.offsets.length);\n for (let o = 0; o < signalInput.offsets.length; o++) {\n const offset = signalInput.offsets[o]!;\n offsetU[o] = 0.5 + offset.x - W / 2; offsetV[o] = 0.5 + offset.y - H / 2;\n // The model (x + c)·scale against the reference at the corners: a geometry the model does not describe is refused.\n for (const [x, y] of [[0, 0], [x1, 0], [0, y1], [x1, y1]] as const) {\n query(x, y, o, point);\n const mu = (x + offsetU[o]!) * scaleU, mv = (y + offsetV[o]!) * scaleV;\n if (!(Math.abs(mu - point[0]!) <= 2 ** -40 * (Math.abs(point[0]!) + 1) && Math.abs(mv - point[1]!) <= 2 ** -40 * (Math.abs(point[1]!) + 1)))\n throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"The request's query points are not a rectilinear site lattice; use cpu-reference.\");\n }\n }\n return { scaleU, scaleV, offsetU, offsetV };\n}\n\n/** Gauss–Legendre nodes and weights on [−1, 1], 16 points, by the reference's own construction (display-view.ts). */\nexport function gaussLegendre16(): { x: Float64Array; w: Float64Array } {\n const n = 16, x = new Float64Array(n), w = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n let z = Math.cos(Math.PI * (i + 0.75) / (n + 0.5)), dp = 0;\n for (let it = 0; it < 100; it++) {\n let p0 = 1, p1 = z;\n for (let k = 2; k <= n; k++) { const p2 = ((2 * k - 1) * z * p1 - (k - 1) * p0) / k; p0 = p1; p1 = p2; }\n dp = n * (z * p1 - p0) / (z * z - 1);\n const dz = p1 / dp;\n z -= dz;\n if (Math.abs(dz) < 1e-16) break;\n }\n x[i] = z; w[i] = 2 / ((1 - z * z) * dp * dp);\n }\n return { x, w };\n}\n\n/** One axis record of the geometry buffer: first real pixel, count, overlaps over the scale, axis sums over the squared scale. */\nexport function axisRecord(geometry: Float32Array, at: number, start: number, end: number, limit: number, margin: number, scale: number): void {\n const { first, w } = overlaps(start, end, limit), sums = axisSums(start, end, limit, margin), scale2 = scale * scale;\n const words = new Int32Array(geometry.buffer, geometry.byteOffset, geometry.length);\n words[at] = first; words[at + 1] = w.length;\n for (let i = 0; i < w.length; i++) geometry[at + 2 + i] = w[i]! / scale;\n const order: (keyof AxisSums)[] = [\"bEven\", \"bOdd\", \"ppEven\", \"ppOdd\", \"qqEven\", \"qqOdd\", \"pqEven\", \"pqOdd\", \"ww\"];\n order.forEach((key, i) => { geometry[at + 8 + i] = sums[key] / scale2; });\n}\n\n/** The uniform parameters and the aux table of a render. */\nfunction constants(setup: DisplayViewSetup, signalInput: DisplayViewExpectedSignalInput): { params: ArrayBuffer; aux: Float32Array<ArrayBuffer> } {\n const params = new ArrayBuffer(4 * DISPLAY_VIEW_PARAM_WORDS), words = new Uint32Array(params), floats = new Float32Array(params);\n words[2] = setup.region.width; words[3] = setup.region.x; words[4] = setup.region.y; words[5] = setup.margin; words[6] = setup.nativeWidth; words[7] = setup.nativeHeight;\n words[8] = setup.region.width; words[9] = setup.toneCurve === \"positive-reinhard-per-channel\" ? 1 : 0; words[10] = signalInput.offsets.length; words[11] = signalInput.wavelengthsNm.length;\n for (let c = 0; c < 3; c++) { floats[12 + c] = setup.readout[c]!.perElectron; floats[16 + c] = setup.readout[c]!.darkElectrons; floats[20 + c] = setup.readout[c]!.constantVariance; floats[24 + c] = setup.gains[c]!; }\n floats[15] = 8.5 * 8.5; floats[19] = setup.clipLevel;\n for (let r = 0; r < 3; r++) for (let c = 0; c < 3; c++) floats[28 + r * 3 + c] = setup.matrix[r]![c]!;\n const geometry = queryGeometry(signalInput);\n floats[37] = geometry.scaleU; floats[38] = geometry.scaleV;\n const aux = new Float32Array(DISPLAY_VIEW_AUX.size);\n for (let o = 0; o < signalInput.offsets.length; o++) { aux[DISPLAY_VIEW_AUX.offsets + 4 * o] = geometry.offsetU[o]!; aux[DISPLAY_VIEW_AUX.offsets + 4 * o + 1] = geometry.offsetV[o]!; aux[DISPLAY_VIEW_AUX.offsets + 4 * o + 2] = signalInput.offsets[o]!.weight; }\n for (let p = 0; p < 4; p++) for (let c = 0; c < 3; c++) {\n const taps = setup.demosaic[p]![c]!, base = DISPLAY_VIEW_AUX.taps + (p * 3 + c) * 16;\n let w2 = 0;\n taps.forEach((t, i) => { aux[base + 4 * i] = t.dx; aux[base + 4 * i + 1] = t.dy; aux[base + 4 * i + 2] = t.weight; w2 += t.weight * t.weight; });\n aux[DISPLAY_VIEW_AUX.inverseW2 + p * 3 + c] = 1 / w2;\n }\n const gl = gaussLegendre16();\n aux.set(gl.x, DISPLAY_VIEW_AUX.gaussLegendre); aux.set(gl.w, DISPLAY_VIEW_AUX.gaussLegendre + 16);\n return { params, aux };\n}\n\n/** The a-priori relative bounds of the expected value and the variance (docs/WEBGPU.md, \"Display view (Speed)\"), doubled. */\nexport function displayViewSpeedGpuRelativeBounds(toneCurve: DisplayViewSetup[\"toneCurve\"], extraSiteRoundings = 0): { mean: number; variance: number } {\n const reinhard = toneCurve === \"positive-reinhard-per-channel\";\n return { mean: MARGIN * (gammaE(MEAN_ROUNDINGS + extraSiteRoundings) + CPU_RELATIVE + (reinhard ? DISPLAY_VIEW_REINHARD_MEAN_U * E : 0)),\n variance: MARGIN * (gammaE(VARIANCE_ROUNDINGS + 2 * extraSiteRoundings) + CPU_RELATIVE + (reinhard ? DISPLAY_VIEW_REINHARD_VARIANCE_U * E : 0)) };\n}\n\n/**\n * The reference's finishing of one display pixel from its linear-light moments (display-view.ts, after the sample loop):\n * the output quantization term, the seeded noise draw (`sensor.noiseSeed`, the display pixel's view index, stream 33),\n * the Cholesky factor, the clipped-normal centre, the sRGB encode and the rounding; the same functions, so the draw and\n * every operation after the moments are the CPU's. `moments` holds m0 m1 m2 v00 v11 v22 c01 c02 c12 (the variances\n * without the quantization term); `pixels` is Σ_j (w_j/A)².\n */\nexport function finishDisplayViewPixel(moments: ArrayLike<number>, pixels: number, seed: number, index: number, step: number, maximum: number,\n samples: Uint8Array | Uint16Array, expected: Float64Array, noiseStd: Float64Array, o: number): void {\n const mean0 = moments[0]!, mean1 = moments[1]!, mean2 = moments[2]!;\n const q0 = quantizationVariance(mean0, step), q1 = quantizationVariance(mean1, step), q2 = quantizationVariance(mean2, step);\n const v00 = moments[3]! + pixels * q0, v11 = moments[4]! + pixels * q1, v22 = moments[5]! + pixels * q2, v01 = moments[6]!, v02 = moments[7]!, v12 = moments[8]!;\n const noise = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, DISPLAY_VIEW_NOISE_STREAM_ID));\n const z0 = samplePortableStandardNormal(noise), z1 = samplePortableStandardNormal(noise), z2 = samplePortableStandardNormal(noise);\n const l00 = Math.sqrt(Math.max(0, v00)), l10 = l00 > 0 ? v01 / l00 : 0, l20 = l00 > 0 ? v02 / l00 : 0;\n const l11 = Math.sqrt(Math.max(0, v11 - l10 * l10)), l21 = l11 > 0 ? (v12 - l20 * l10) / l11 : 0;\n const l22 = Math.sqrt(Math.max(0, v22 - l20 * l20 - l21 * l21));\n const n0 = clipCentre(mean0, v00) + l00 * z0, n1 = clipCentre(mean1, v11) + l10 * z0 + l11 * z1, n2 = clipCentre(mean2, v22) + l20 * z0 + l21 * z1 + l22 * z2;\n samples[o] = Math.round(encodeSrgbComponentPortable(n0 < 0 ? 0 : n0 > 1 ? 1 : n0) * maximum);\n samples[o + 1] = Math.round(encodeSrgbComponentPortable(n1 < 0 ? 0 : n1 > 1 ? 1 : n1) * maximum);\n samples[o + 2] = Math.round(encodeSrgbComponentPortable(n2 < 0 ? 0 : n2 > 1 ? 1 : n2) * maximum);\n expected[o] = mean0; expected[o + 1] = mean1; expected[o + 2] = mean2;\n noiseStd[o] = Math.sqrt(Math.max(0, v00)); noiseStd[o + 1] = Math.sqrt(Math.max(0, v11)); noiseStd[o + 2] = Math.sqrt(Math.max(0, v22));\n}\n\n/**\n * #496: how far the host's quantization term Σ(w/A)²·q(m) of a display pixel can move when each component's mean carries the\n * bound relative·|m| + absolute (see QUANTIZATION_SLOPE), the largest over the three components, doubled. Added to the pixel's\n * absolute variance bound; it changes no computed value.\n */\nexport function displayViewSpeedQuantizationBound(moments: ArrayLike<number>, relative: number, absolute: number, pixels: number, step: number): number {\n let largest = 0;\n for (let c = 0; c < 3; c++) {\n const m = moments[c]!, bound = relative * Math.abs(m) + absolute;\n largest = Math.max(largest, QUANTIZATION_SLOPE * bound + (m - bound <= QUANTIZATION_JOIN && m + bound >= QUANTIZATION_JOIN ? QUANTIZATION_JOIN_JUMP : 0));\n }\n return MARGIN * pixels * largest * step * step / 12;\n}\n\n/**\n * Renders the display pixels `indices` (ascending, region row-major) with the reference, a run of consecutive pixels along a row\n * as one region (#457: AHD's choice flags stretches near edges): a region render is byte-identical to the same pixels of the whole\n * view, so each pixel equals its one-pixel render, and a run's counts are the sums of its pixels'.\n */\nexport async function recomputeRuns(setup: DisplayViewSetup, signalInput: DisplayViewExpectedSignalInput, indices: readonly number[], abort: AbortController,\n take: (first: number, run: number, part: DisplayViewRenderResult) => void): Promise<void> {\n const region = setup.region;\n let reference: DisplayViewSetup[\"signal\"] | undefined;\n for (let r = 0; r < indices.length;) {\n checkAbort(abort.signal);\n const first = indices[r]!, rx = first % region.width, ry = (first - rx) / region.width;\n let run = 1;\n while (r + run < indices.length && indices[r + run] === first + run && rx + run < region.width) run++;\n take(first, run, await renderDisplayView({ ...setup, signal: reference ??= createDisplayViewExpectedSignal(signalInput), region: { x: region.x + rx, y: region.y + ry, width: run, height: 1 } }));\n r += run;\n }\n}\n\n/** Renders one region of a Speed display view on the GPU (see the module comment). */\nexport async function renderDisplayViewSpeedOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: DisplayViewSpeedGpuInput, abort: AbortController,\n yieldControl: YieldControl, pipelines: PipelineSource): Promise<DisplayViewSpeedGpuResult> {\n const { setup, signalInput, material } = input;\n const reason = displayViewSpeedGpuUnsupportedReason(setup, signalInput);\n if (reason) throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"webgpu-f32 display view (Speed): \" + reason + \"; use cpu-reference.\");\n const { region, margin } = setup, shape = footprintShape(setup), table = material.siteTable ?? spectralTable(signalInput), { params, aux } = constants(setup, signalInput);\n const stride = DISPLAY_VIEW_GEOMETRY_STRIDE, geometry = new Float32Array((region.width + region.height) * stride);\n const columnSums: AxisSums[] = [], rowSums: AxisSums[] = [];\n for (let i = 0; i < region.width; i++) { axisRecord(geometry, i * stride, (region.x + i) * shape.sx, (region.x + i + 1) * shape.sx, setup.frameWidth, margin, shape.sx); columnSums.push(axisSums((region.x + i) * shape.sx, (region.x + i + 1) * shape.sx, setup.frameWidth, margin)); }\n for (let j = 0; j < region.height; j++) { axisRecord(geometry, (region.width + j) * stride, (region.y + j) * shape.sy, (region.y + j + 1) * shape.sy, setup.frameHeight, margin, shape.sy); rowSums.push(axisSums((region.y + j) * shape.sy, (region.y + j + 1) * shape.sy, setup.frameHeight, margin)); }\n const area = shape.sx * shape.sy, pixelCount = region.width * region.height;\n const rows = Math.max(1, Math.min(region.height, Math.floor(bandBytes / (region.width * BYTES_PER_PIXEL)), material.bandRows?.(shape.sy) ?? Infinity));\n if (Math.max(rows * region.width * 4 * DISPLAY_VIEW_OUTPUT_FLOATS, geometry.byteLength, table.byteLength) > runtime.maximumStorageBindingBytes)\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One display-view band exceeds the device's storage binding limit.\");\n const pipeline = await pipelines(\"photivra-display-view-speed:\" + material.id, assembleDisplayViewSpeedWgsl(material.wgsl));\n const moments = new Float32Array(pixelCount * DISPLAY_VIEW_OUTPUT_FLOATS), flagged: number[] = [], flagWords = new Uint32Array(pixelCount * DISPLAY_VIEW_FLAG_WORDS);\n const words = new Uint32Array(params);\n const scope = new GpuResourceScope(runtime);\n try {\n const auxBuffer = scope.upload(\"photivra-display-view-aux\", aux, BUFFER_USAGE.STORAGE);\n const geometryBuffer = scope.upload(\"photivra-display-view-geometry\", geometry, BUFFER_USAGE.STORAGE);\n const tableBuffer = scope.upload(\"photivra-display-view-table\", table, BUFFER_USAGE.STORAGE);\n const materialGroup = material.band ? null : runtime.device.createBindGroup({ layout: pipeline.getBindGroupLayout(1), entries: material.bindings.map((b) => ({ binding: b.binding,\n resource: { buffer: b.buffer ?? scope.upload(\"photivra-display-view-material-\" + b.binding, b.data, b.kind === \"uniform\" ? BUFFER_USAGE.UNIFORM : BUFFER_USAGE.STORAGE) } })) });\n const gate = createHostYieldGate();\n for (let row0 = 0; row0 < region.height; row0 += rows) {\n checkAbort(abort.signal);\n const row1 = Math.min(region.height, row0 + rows), count = (row1 - row0) * region.width, first = row0 * region.width;\n words[0] = count; words[1] = row0;\n const band = new GpuResourceScope(runtime);\n try {\n const out = band.buffer(\"photivra-display-view-moments\", count * 4 * DISPLAY_VIEW_OUTPUT_FLOATS, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const flagBuffer = band.buffer(\"photivra-display-view-flags\", count * 4 * DISPLAY_VIEW_FLAG_WORDS, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = band.upload(\"photivra-display-view-params\", new Uint8Array(params), BUFFER_USAGE.UNIFORM);\n const bindGroup = runtime.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [\n { binding: 0, resource: { buffer: uniform } }, { binding: 1, resource: { buffer: auxBuffer } }, { binding: 2, resource: { buffer: geometryBuffer } },\n { binding: 3, resource: { buffer: tableBuffer } }, { binding: 4, resource: { buffer: out } }, { binding: 5, resource: { buffer: flagBuffer } }] });\n // #581: a module that bands its own data (a large photo) gives group 1 per band, for the native rows the band reads (with margin).\n const [data, flagData] = await runComputePass(runtime, band, pipeline, [bindGroup, materialGroup ?? material.band!(band, pipeline.getBindGroupLayout(1),\n Math.floor((region.y + row0) * shape.sy) + margin - 2, Math.ceil((region.y + row1) * shape.sy) + margin + 2)], linearDispatch(count, DISPLAY_VIEW_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: out, bytes: count * 4 * DISPLAY_VIEW_OUTPUT_FLOATS }, { buffer: flagBuffer, bytes: count * 4 * DISPLAY_VIEW_FLAG_WORDS }], abort.signal);\n moments.set(new Float32Array(data!, 0, count * DISPLAY_VIEW_OUTPUT_FLOATS), first * DISPLAY_VIEW_OUTPUT_FLOATS);\n const bandFlags = new Uint32Array(flagData!, 0, count * DISPLAY_VIEW_FLAG_WORDS);\n flagWords.set(bandFlags, first * DISPLAY_VIEW_FLAG_WORDS);\n for (let i = 0; i < count; i++) {\n let flag = (bandFlags[DISPLAY_VIEW_FLAG_WORDS * i]! & 1) !== 0;\n for (let k = 0; k < DISPLAY_VIEW_OUTPUT_FLOATS && !flag; k++) if (!Number.isFinite(moments[(first + i) * DISPLAY_VIEW_OUTPUT_FLOATS + k]!)) flag = true;\n if (flag) flagged.push(first + i);\n }\n } finally {\n band.release();\n }\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n } finally {\n scope.release();\n }\n checkAbort(abort.signal);\n // The reference's finishing per display pixel (float64).\n const maximum = setup.bitDepth === 8 ? 255 : 65535, step = 1 / maximum;\n const samples = setup.bitDepth === 8 ? new Uint8Array(pixelCount * 3) : new Uint16Array(pixelCount * 3);\n const expected = new Float64Array(pixelCount * 3), noiseStd = new Float64Array(pixelCount * 3), saturated = new Float64Array(pixelCount);\n const meanBound = new Float32Array(pixelCount), varianceBound = new Float32Array(pixelCount);\n let largestMean = 0, largestVariance = 0, sampleCount = 0, siteCount = 0;\n const counts = new Int32Array(geometry.buffer), relative = displayViewSpeedGpuRelativeBounds(setup.toneCurve, material.extraSiteRoundings ?? 0);\n // #533: each display pixel's saturated-pixel share from the kernel's mask (the reference's arithmetic, exact where it decided).\n const columnOverlaps = Array.from({ length: region.width }, (_, i) => overlaps((region.x + i) * shape.sx, (region.x + i + 1) * shape.sx, setup.frameWidth));\n for (let ry = 0, i = 0; ry < region.height; ry++) {\n const rowOverlaps = overlaps((region.y + ry) * shape.sy, (region.y + ry + 1) * shape.sy, setup.frameHeight);\n for (let rx = 0; rx < region.width; rx++, i++) saturated[i] = displayViewDecidedSaturation(columnOverlaps[rx]!, rowOverlaps, area, flagWords[DISPLAY_VIEW_FLAG_WORDS * i + 1]!, flagWords[DISPLAY_VIEW_FLAG_WORDS * i + 2]!);\n }\n for (let ry = 0, i = 0; ry < region.height; ry++) {\n const rowWw = rowSums[ry]!.ww, ny = counts[(region.width + ry) * stride + 1]!;\n for (let rx = 0; rx < region.width; rx++, i++) {\n const pixels = columnSums[rx]!.ww * rowWw / (area * area), vy = region.y + ry, vx = region.x + rx, o = i * DISPLAY_VIEW_OUTPUT_FLOATS;\n finishDisplayViewPixel(moments.subarray(o, o + 9), pixels, setup.seed, vy * setup.viewWidth + vx, step, maximum, samples, expected, noiseStd, i * 3);\n meanBound[i] = MARGIN * moments[o + 9]!; varianceBound[i] = MARGIN * moments[o + 10]! + displayViewSpeedQuantizationBound(moments.subarray(o, o + 3), relative.mean, meanBound[i]!, pixels, step);\n largestMean = Math.max(largestMean, meanBound[i]!); largestVariance = Math.max(largestVariance, varianceBound[i]!);\n const nx = counts[rx * stride + 1]!;\n sampleCount += nx * ny; siteCount += (nx + 2) * (ny + 2);\n }\n }\n // Flagged display pixels: the reference's own pixel (a one-pixel region render is byte-identical to the whole view's pixel).\n const recomputed: number[] = [], highlights: number[] = [];\n // #533: unflagged display pixels with an undecided real pixel take the reference's count only (their samples stay the kernel's).\n const undecided: number[] = [], isFlagged = new Uint8Array(pixelCount);\n for (const i of flagged) isFlagged[i] = 1;\n for (let i = 0; i < pixelCount; i++) if (isFlagged[i] === 0 && (flagWords[DISPLAY_VIEW_FLAG_WORDS * i]! & 2) !== 0) undecided.push(i);\n if (input.recomputeFlagged !== false) {\n await recomputeRuns(setup, signalInput, flagged, abort, (first, run, part) => {\n samples.set(part.samples, first * 3); expected.set(part.expected, first * 3); noiseStd.set(part.noiseStd, first * 3); saturated.set(part.saturated, first);\n for (let k = 0; k < run; k++) { meanBound[first + k] = 0; varianceBound[first + k] = 0; recomputed.push(first + k); }\n });\n await recomputeRuns(setup, signalInput, undecided, abort, (first, run, part) => { for (let k = 0; k < run; k++) { saturated[first + k] = part.saturated[k]!; highlights.push(first + k); } });\n }\n let saturatedPixelCount = 0;\n for (let i = 0; i < pixelCount; i++) saturatedPixelCount += saturated[i]!;\n const expectedValueBound: ImageKernelRelativeErrorBound = { kind: \"relative-to-reference\", relative: relative.mean, absolute: largestMean };\n const uncertain = flagged.length - recomputed.length + undecided.length - highlights.length;\n return { samples, expected, noiseStd, sampleCount, siteCount, detailPixelCount: pixelCount, uniformPixelCount: 0, ahdCorrectedPixelCount: 0, estimation: \"exact-area-mean\", saturated, saturatedPixelCount,\n execution: webGpuExecution(expectedValueBound, uncertain), expectedValueBound,\n varianceBound: { kind: \"relative-to-reference\", relative: relative.variance, absolute: largestVariance },\n expectedValueAbsoluteBound: meanBound, varianceAbsoluteBound: varianceBound,\n flaggedPixelIndices: Uint32Array.from(flagged), hostRecomputedPixelIndices: Uint32Array.from(recomputed), highlightRecomputedPixelIndices: Uint32Array.from(highlights) };\n}\n\n/**\n * Why the Speed renderer does not support a prepared request (`DisplayViewGpuRenderer.supports`), or true. It covers every\n * engine chart (the 2.0 presets through `display-view-chart-material-module.ts`; composites, the 2.3 elements, the sine star\n * and fixed-size charts through the composite module, #491) and declared `material-layers` scenes, never a caller scene\n * function, without AHD or diffraction, with the identity or Reinhard tone curve and at most 16 query offsets; whether a\n * view's footprints take the exact area mean, and whether the device passes the composite kernel's probe, is known only per\n * render (`displayViewSpeedGpuUnsupportedReason`, `createDisplayViewMaterialModules`).\n */\nexport function displayViewSpeedGpuSupports(request: DisplayViewGpuRequest): true | string {\n if (request.ahd) return \"AHD (the Quality demosaic) is not on the GPU\";\n if (request.diffraction) return \"diffraction (the Quality optics) is not on the GPU\";\n return sceneToneAndOffsetsReason(request, DISPLAY_VIEW_GPU_MAXIMUM_OFFSETS);\n}\n/** Why the GPU's material lookup, tone curves or query-offset table do not cover a request (shared by the Speed and Quality support checks), or true. */\nexport function sceneToneAndOffsetsReason(request: DisplayViewGpuRequest, maximumOffsets: number): true | string {\n if (request.scene !== \"chart\" && request.scene !== \"material-layers\" && request.scene !== \"image-plane\") return \"the scene is a caller \" + request.scene + \"; the GPU material lookup covers engine charts and declared material-layers scenes (describe the scene as material-layers)\";\n if (request.toneCurve !== \"identity\" && request.toneCurve !== \"positive-reinhard-per-channel\") return \"unsupported tone curve \" + String(request.toneCurve);\n if (offsetCount(request) > maximumOffsets) return \"more than \" + maximumOffsets + \" query offsets per site\";\n return true;\n}\n\n/**\n * A self-check's verdict: every component of a GPU render inside its a-priori bounds against the reference, every sample within\n * one code, and (#533) the saturated-pixel count the reference's bit for bit; true, or a sentence saying where it failed.\n */\nexport function conformanceVerdict(reference: DisplayViewRenderResult, gpu: Pick<DisplayViewSpeedGpuResult, \"samples\" | \"expected\" | \"noiseStd\" | \"expectedValueBound\" | \"varianceBound\" |\n \"expectedValueAbsoluteBound\" | \"varianceAbsoluteBound\" | \"saturatedPixelCount\">): true | string {\n for (let i = 0; i < reference.expected.length; i++) {\n const p = Math.floor(i / 3), e0 = reference.expected[i]!, e1 = gpu.expected[i]!, v0 = reference.noiseStd[i]! * reference.noiseStd[i]!, v1 = gpu.noiseStd[i]! * gpu.noiseStd[i]!;\n const expectedLimit = gpu.expectedValueBound.relative * Math.abs(e0) + gpu.expectedValueAbsoluteBound[p]!, varianceLimit = gpu.varianceBound.relative * v0 + gpu.varianceAbsoluteBound[p]!;\n if (!(Math.abs(e1 - e0) <= expectedLimit)) return \"component \" + i + \": expected value \" + e1 + \" differs from the reference \" + e0 + \" by more than the a-priori bound \" + expectedLimit + \".\";\n if (!(Math.abs(v1 - v0) <= varianceLimit)) return \"component \" + i + \": variance \" + v1 + \" differs from the reference \" + v0 + \" by more than the a-priori bound \" + varianceLimit + \".\";\n if (Math.abs(gpu.samples[i]! - reference.samples[i]!) > 1) return \"component \" + i + \": sample \" + gpu.samples[i] + \" differs from the reference \" + reference.samples[i] + \" by more than one code.\";\n }\n if (gpu.saturatedPixelCount !== reference.saturatedPixelCount) return \"the saturated-pixel count \" + gpu.saturatedPixelCount + \" differs from the reference's \" + reference.saturatedPixelCount + \".\";\n return true;\n}\n\n/**\n * The renderer's run-time self-check (`DisplayViewGpuRenderer.conformanceCases`): a 38 × 26 checkerboard frame of 6 µm sites\n * shown at 13 × 9 (2.9 real pixels per display pixel) with the 2 × 2 box, light squares at the white clip, the GPU against\n * `renderDisplayView` within the a-priori bounds, every flagged pixel recomputed.\n */\n/** The self-checks' common frame: 40 × 28 native sites (a 38 × 26 frame and a one-site margin) shown at 13 × 9, at three spectral nodes. */\nexport const CONFORMANCE_FRAME = /* @__PURE__ */ Object.freeze({ nativeWidth: 40, nativeHeight: 28, margin: 1, frameWidth: 38, frameHeight: 26, nodes: [450, 550, 650] });\n/** The self-checks' channel responses per node (`scale` 1, or 1/10 for the low-signal correction's few electrons). */\nexport function conformanceResponses(scale: number): [Float64Array, Float64Array, Float64Array] {\n return [Float64Array.of(9000, 30000, 4000).map((v) => v * scale), Float64Array.of(6000, 42000, 9000).map((v) => v * scale), Float64Array.of(30000, 9000, 3000).map((v) => v * scale)];\n}\n/** The RGGB channel of a native site. */\nexport const conformanceChannelAt = (x: number, y: number): number => ((y & 1) === 0 ? ((x & 1) === 0 ? 0 : 1) : ((x & 1) === 0 ? 1 : 2));\n/** The self-checks' checkerboard and its expected-signal scene (neutral materials under a white radiance per node). */\nexport function conformanceChart(): { chart: ReturnType<typeof resolvePortableChartScene>; scene: DisplayViewExpectedSignalInput[\"scene\"] } {\n const chart = resolvePortableChartScene({ scene: { preset: \"checkerboard\", squaresAcross: 6 }, aspect: CONFORMANCE_FRAME.frameHeight / CONFORMANCE_FRAME.frameWidth });\n return { chart, scene: { kind: \"materials\", materialAt: (u, v) => chart.materialAt(u, v), materials: chart.materials.map((m) => ({ neutral: m.kind === \"neutral\" ? m.reflectance : 0.5 })),\n whiteRadiance: Float64Array.of(0.5, 0.9, 0.7) } };\n}\n/** A self-check's setup around its expected-signal input: the common frame and view, the bilinear demosaic, gains, matrix and tone curve, plus `extra`. */\nexport function conformanceSetup(signalInput: DisplayViewExpectedSignalInput, readout: DisplayViewSetup[\"readout\"][0], seed: number, reachSites: number, signal: AbortSignal | undefined,\n extra: Partial<DisplayViewSetup> = {}): DisplayViewSetup {\n const { frameWidth, frameHeight, margin, nativeWidth, nativeHeight } = CONFORMANCE_FRAME;\n return { frameWidth, frameHeight, margin, nativeWidth, nativeHeight, viewWidth: 13, viewHeight: 9, region: { x: 0, y: 0, width: 13, height: 9 },\n samplesPerAxis: 16, reachSites, bitDepth: 8, seed, signal: createDisplayViewExpectedSignal(signalInput), readout: [readout, readout, readout], demosaic: bilinearKernels(),\n gains: [1.1, 1, 1.6], clipLevel: 1, matrix: [[3.08, -1.54, -0.54], [-0.92, 1.88, 0.045], [0.053, -0.2, 1.15]], toneCurve: \"identity\",\n yieldControl: async (): Promise<void> => undefined, checkAbort: (): void => { if (signal?.aborted) throw abortedError(); }, ...extra };\n}\n/** Runs a self-check's GPU render with an abort controller that follows `signal`, and the device's pipelines under it. */\nexport async function withConformanceAbort<T>(runtime: WebGpuRuntime, signal: AbortSignal | undefined, run: (abort: AbortController, pipelines: PipelineSource) => Promise<T>): Promise<T> {\n const abort = new AbortController(), onAbort = (): void => abort.abort();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n if (signal?.aborted) abort.abort();\n return await run(abort, (label, code) => createComputePipeline(runtime, label, code, abort.signal));\n } finally { signal?.removeEventListener(\"abort\", onAbort); }\n}\n\nexport const DISPLAY_VIEW_SPEED_CONFORMANCE_CASE: DisplayViewGpuConformanceCase = { id: \"display-view:speed:checkerboard-13x9\", async run(handle, signal): Promise<true | string> {\n // The handle is the engine's own runtime (the contract keeps WebGPU types out of the published declarations).\n const runtime = handle as WebGpuRuntime, { nativeWidth, nativeHeight, frameWidth, nodes } = CONFORMANCE_FRAME, g = 2 / frameWidth, { chart, scene } = conformanceChart();\n const offsets = [[-0.25, -0.25], [0.25, -0.25], [-0.25, 0.25], [0.25, 0.25]].map(([x, y]) => ({ x: x!, y: y!, weight: 0.25 }));\n const signalInput: DisplayViewExpectedSignalInput = { nativeWidth, nativeHeight, outputWidth: frameWidth, wavelengthsNm: nodes, electronsPerRadiance: conformanceResponses(1), offsets, scene,\n channelAt: conformanceChannelAt, queryPoint: (x, y, o, out) => { out[0] = (x + 0.5 + offsets[o]!.x - nativeWidth / 2) * g; out[1] = -(y + 0.5 + offsets[o]!.y - nativeHeight / 2) * g; } };\n const setup = conformanceSetup(signalInput, { perElectron: 1 / 60000, darkElectrons: 0.07, constantVariance: 1.5e-9 }, 478, 2, signal);\n const reference = await renderDisplayView(setup);\n // #533: the verdict includes the saturated-pixel count (the light squares sit at the white clip).\n return await withConformanceAbort(runtime, signal, async (abort, pipelines) =>\n conformanceVerdict(reference, await renderDisplayViewSpeedOnGpu(runtime, 1 << 20, { setup, signalInput, material: chartPresetMaterialModule(chart) }, abort, undefined, pipelines)));\n} };\n\n/**\n * The display view's Speed renderer on one runtime (#481's `DisplayViewGpuRenderer`): one pipeline cache per device, the\n * material modules of `createDisplayViewMaterialModules` (the preset module per resolved chart, the composite module with its\n * scene records uploaded once per scene). `render` renders the part's region (`setup.gpu` carries the expected signal's input\n * and the resolved scene; a setup without it, a caller scene, a coarse view, a frame the kernel does not cover or a device\n * that fails the composite probe throws `unsupported-on-backend`), and throws `aborted` and `device-lost` as the accelerator's\n * operations do. `dispose` releases the uploaded scene records.\n */\nexport function createDisplayViewSpeedGpuRenderer(runtime: WebGpuRuntime, options: { maximumBandBytes?: number; yieldControl?: YieldControl } = {}): DisplayViewGpuRenderer {\n const pipelines = new Map<string, Promise<GPUComputePipeline>>();\n const bandBytes = options.maximumBandBytes ?? Math.min(64 * 1024 * 1024, runtime.maximumStorageBindingBytes);\n const source: PipelineSource = (label, code) => {\n let pending = pipelines.get(label);\n if (!pending) { pending = createComputePipeline(runtime, label, code, undefined); pipelines.set(label, pending); pending.catch(() => pipelines.delete(label)); }\n return pending;\n };\n const modules = createDisplayViewMaterialModules(runtime, source);\n return {\n id: \"photivra-display-view-speed\",\n supports: displayViewSpeedGpuSupports,\n conformanceCases: [DISPLAY_VIEW_SPEED_CONFORMANCE_CASE],\n async render(part: DisplayViewGpuPart): Promise<DisplayViewGpuRenderOutput> {\n const { setup, signal } = part;\n if (!setup.gpu) throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"The display-view setup carries no GPU inputs (setup.gpu); use cpu-reference.\");\n const abort = new AbortController(), onAbort = (): void => abort.abort();\n if (signal?.aborted) throw abortedError();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n const material = await modules.moduleFor(setup.gpu, abort.signal);\n const result = await renderDisplayViewSpeedOnGpu(runtime, bandBytes, { setup, signalInput: setup.gpu.signalInput, material }, abort, options.yieldControl, source);\n return { samples: result.samples, expected: result.expected, noiseStd: result.noiseStd, sampleCount: result.sampleCount, siteCount: result.siteCount, detailPixelCount: result.detailPixelCount,\n uniformPixelCount: result.uniformPixelCount, ahdCorrectedPixelCount: result.ahdCorrectedPixelCount, estimation: result.estimation, saturated: result.saturated,\n saturatedPixelCount: result.saturatedPixelCount, errorBound: result.expectedValueBound,\n diagnosticUncertaintySampleCount: result.execution.diagnosticUncertaintySampleCount, ...(material.compositeProbe ? { compositeProbe: material.compositeProbe } : {}) };\n } finally { signal?.removeEventListener(\"abort\", onAbort); }\n },\n dispose(): void { modules.release(); }\n };\n}\n\n/** The factory `prepareDisplayView` creates the renderer with (one per device). */\nexport const displayViewSpeedGpuRendererFactory: DisplayViewGpuRendererFactory = (handle: DisplayViewGpuRuntimeHandle) => createDisplayViewSpeedGpuRenderer(handle as WebGpuRuntime);\n\n/**\n * Registers the Speed renderer as the display view's GPU renderer (`setDisplayViewGpuRendererFactory`) and returns the factory\n * registered before. Nothing registers it on import: the integration of #481 decides where the engine registers it.\n */\nexport function registerDisplayViewSpeedGpuRenderer(): DisplayViewGpuRendererFactory | null {\n return setDisplayViewGpuRendererFactory(displayViewSpeedGpuRendererFactory);\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  export declare const DISPLAY_VIEW_QUALITY_WORKGROUP_SIZE = 64;
2
2
  /** Largest footprint per axis (real pixels), as the Speed kernel. */
3
3
  export declare const DISPLAY_VIEW_QUALITY_MAXIMUM_PIXELS_PER_AXIS = 6;
4
+ /** Most spectral nodes the site passes integrate per site (2.21.0: the per-node partials are private arrays of this length). */
5
+ export declare const DISPLAY_VIEW_QUALITY_MAXIMUM_NODES = 96;
4
6
  /** Uniform parameter words (see `Params`): 56 words, 224 bytes. */
5
7
  export declare const DISPLAY_VIEW_QUALITY_PARAM_WORDS = 56;
6
8
  /** Words per lattice-group record: lx0, ly0, lw, lh, lbase, first tap (the blocked site pass, #492), cu (f32), cv (f32). */
@@ -70,6 +72,8 @@ export declare const DISPLAY_VIEW_QUALITY_BITMAP_WORDS: number;
70
72
  export declare const DISPLAY_VIEW_QUALITY_UNCERTAINTY_LIMIT: number;
71
73
  /** Bound constant of a clipped-normal slope Φ(z) (in units of E): z's 8E through φ·|z| ≤ 0.24 plus the Abramowitz–Stegun 147E. */
72
74
  export declare const DISPLAY_VIEW_QUALITY_SLOPE_U = 200;
75
+ /** The parameter struct and the bound helpers shared by the three passes. */
76
+ export declare const DISPLAY_VIEW_QUALITY_COMMON_WGSL: string;
73
77
  /**
74
78
  * Pass 1: the material of every lattice point of every group (the module's `material_at`, its uncertainty in bit 31; the output
75
79
  * is `lattice_out`, since a material module may declare its own `lattice`, as #491's composite module does). The group
@@ -77,32 +81,42 @@ export declare const DISPLAY_VIEW_QUALITY_SLOPE_U = 200;
77
81
  * c_u = 0.5 + f_x − W/2 and c_v = 0.5 + f_y − H/2 (exact in float32, checked by the host).
78
82
  */
79
83
  export declare const DISPLAY_VIEW_QUALITY_LATTICE_WGSL: string;
84
+ /**
85
+ * The end of pass 2, shared by both site passes: from the site's electrons e and their absolute bound de, the readout moments
86
+ * (mean k·e, variance k²e + c₀, third cumulant k³e), the clip at the white level and their bounds, written to site i.
87
+ */
88
+ export declare const DISPLAY_VIEW_QUALITY_SITE_TAIL_WGSL = "\nfn write_site(i: u32, c: u32, e: f32, de: f32, flag: u32) {\n let kc = k_of(c);\n let mean = kc * e;\n let variance = kc * kc * e + c0_of(c);\n let third = kc * kc * kc * e;\n var m = vec2<f32>(mean, kc * de + 2.0 * E * mean);\n var v = vec2<f32>(variance, kc * kc * de + 4.0 * E * variance);\n let gap = 1.0 - mean;\n // #533: bits 1 (certainly clipped) and 2 (undecided) of the flag word.\n let state = clip_state(m.x, m.y, v.x, v.y);\n let bits = flag | select(0u, 2u, state == 1u) | select(0u, 4u, state == 2u);\n if (!(gap > 0.0 && gap * gap > params.reach2 * variance)) {\n let clipped = upper_clip(m, v, 1.0);\n m = clipped.mean; v = clipped.variance;\n }\n let o = i * SITE;\n sites[o] = m.x; sites[o + 1u] = v.x; sites[o + 2u] = third;\n sites[o + 3u] = m.y; sites[o + 4u] = v.y; sites[o + 5u] = kc * kc * kc * de + 5.0 * E * third;\n sites[o + 6u] = bitcast<f32>(bits); sites[o + 7u] = e;\n}\n";
80
89
  /**
81
90
  * Pass 2: the expected electrons, readout moments and white clip of every native site of the band's window, with their bounds.
82
- * The site's electrons are Σ_t table[(m_t·3 + c)·T + t] + dark_c, every term non-negative and rounded once on the host, so the
83
- * sum carries (T + 3)·E relative (`params.site_gamma`, the host's value). An uncertain lattice point adds the tap's value spread
91
+ * 2.21.0 (signals integrated from the material spectrum per site): the site's electrons are Σ_t Σ_n C_c(t, n)·L_{m_t}(λ_n) +
92
+ * dark_c, from the channel's per-node kernel values and the spectrum of the material each tap reads (`table`: C at
93
+ * (c·T + t)·N + n, the spectra from 3·T·N), accumulated per node over the taps, then the node partials and the dark electrons
94
+ * summed in integer arithmetic and rounded once (EXACT_SUM_WGSL). Every term is non-negative and carries two host roundings (E/2
95
+ * each), its product (E) and at most T − 1 additions, then the final rounding (E), and the dark electrons their host rounding
96
+ * (E/2), so the sum carries at most (T + 2.5)·E, inside (T + 3)·E
97
+ * (`params.site_gamma`),
98
+ * plus `params.site_tiny`, the host's absolute bound on what a device that flushes below the float32 normal range can drop. An uncertain lattice point adds the tap's value spread
84
99
  * over the materials (`spread`, host float64) to the site's uncertainty, which enters its bounds, or flags the site when it
85
100
  * exceeds UNCERTAINTY_LIMIT of the electrons. One dispatch covers the `params.count` sites from `params.site_first` (#492: the
86
101
  * host splits a band's sites over several dispatches so that no dispatch gathers more than its tap budget).
87
102
  */
88
103
  export declare const DISPLAY_VIEW_QUALITY_SITES_WGSL: string;
89
104
  /**
90
- * Pass 2 with the defocus disc (#492): the same site electrons from a factored table, summed in blocks.
105
+ * Pass 2 with the defocus disc (#492): the same site electrons, summed in blocks.
91
106
  *
92
- * - **Factored table.** A neutral material's value is its reflectance times the white's combined kernel (the reference forms it
93
- * so: reflectance[m]·neutral_c(t)), so the table holds one neutral row per channel and one row per spectral material, and
94
- * `materials` holds per material its row (0 for neutral, 1 + s for spectral material s) and its reflectance as float32 bits
95
- * (1 for a spectral material, an exact product). A scene of thousands of neutral materials (#491's composite: 4 143) then
96
- * needs 3·T values instead of 3·T per material.
107
+ * - **Spectral table.** The pass reads the tap-list pass's table (2.21.0): the channel's per-node kernel values C_c(t, n) and each
108
+ * material's spectrum, so the signal of each tap is integrated from its material's spectrum when the site is read.
97
109
  * - **Blocked sum.** Every group's taps form a dense cw × ch rectangle (the combined kernel's window, row-major from the group's
98
- * first tap, `groups[g + 5]`), so a site sums each row of a group into a row partial, the rows into a group partial and the
99
- * groups into the total. No tap records are read: the tap's lattice offset within its group is its (dx, dy).
110
+ * first tap, `groups[g + 5]`), so a site sums each row of a group into a row partial per node, the rows into a group partial
111
+ * and the groups into the total, then the nodes in integer arithmetic. No tap records are read: the tap's lattice offset
112
+ * within its group is its (dx, dy).
100
113
  *
101
- * Every term is non-negative and carries two host roundings (u each, u = E/2: the row value and the reflectance), one product
102
- * (E) and at most cw + ch + G additions, plus the dark electrons' addition, so the electrons carry (cw_max + ch_max + G + 3)·E
103
- * relative (`params.site_gamma`; recursive summation of the up to 4·(2·96 + 2)² = 150 544 taps of a combined radius of 96 would
104
- * carry (T + 3)·E ≈ 1.8 % instead). The uncertainty, summed the same way, is scaled by 1 + site_gamma, and `params.site_tiny`
105
- * (host float64, rounded up) bounds the terms below the float32 normal range, which a device may flush to zero.
114
+ * Every term is non-negative and carries two host roundings (u each, u = E/2: the kernel value and the spectrum), one product
115
+ * (E) and at most cw − 1 + ch − 1 + G − 1 inexact additions, then the integer sum of the node partials and the dark electrons,
116
+ * rounded once (E), and the dark electrons' host rounding (E/2), so the electrons carry at most (cw_max + ch_max + G + 0.5)·E, inside (cw_max + ch_max + G + 3)·E (`params.site_gamma`;
117
+ * recursive summation of the up to 4·(2·96 + 2)² = 150 544 taps of a combined radius of 96 would carry (T + 3)·E ≈ 1.8 %
118
+ * instead). The uncertainty, summed the same way, is scaled by 1 + site_gamma, and `params.site_tiny` (host float64, rounded up)
119
+ * bounds what a device that flushes results below the float32 normal range can drop (the tap-list pass adds it too).
106
120
  */
107
121
  export declare const DISPLAY_VIEW_QUALITY_SITES_BLOCKED_WGSL: string;
108
122
  /** Pass 3: the display pixels (see the module comment). */