@photivra/engine 2.21.0 → 2.22.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.
- package/CHANGELOG.md +118 -1
- package/CITATION.cff +1 -1
- package/README.md +6 -6
- package/SECURITY.md +1 -1
- package/THIRD_PARTY.md +11 -0
- package/dist/capture/c2pa-embed.d.ts +116 -0
- package/dist/capture/c2pa-embed.js +493 -0
- package/dist/capture/c2pa-embed.js.map +1 -0
- package/dist/capture/dng-import.d.ts +73 -8
- package/dist/capture/dng-import.js +315 -80
- package/dist/capture/dng-import.js.map +1 -1
- package/dist/capture/dng-opcodes.d.ts +96 -0
- package/dist/capture/dng-opcodes.js +391 -0
- package/dist/capture/dng-opcodes.js.map +1 -0
- package/dist/capture/dng-profile-maps.d.ts +99 -0
- package/dist/capture/dng-profile-maps.js +381 -0
- package/dist/capture/dng-profile-maps.js.map +1 -0
- package/dist/capture/dng-stage-image.d.ts +23 -0
- package/dist/capture/dng-stage-image.js +65 -0
- package/dist/capture/dng-stage-image.js.map +1 -0
- package/dist/capture/jpeg-xl-tiles.d.ts +22 -0
- package/dist/capture/jpeg-xl-tiles.js +151 -0
- package/dist/capture/jpeg-xl-tiles.js.map +1 -0
- package/dist/capture/lossy-jpeg.d.ts +17 -0
- package/dist/capture/lossy-jpeg.js +369 -0
- package/dist/capture/lossy-jpeg.js.map +1 -0
- package/dist/capture/native-raw-development.d.ts +2 -1
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/color/neighbor-highlight-reconstruction.d.ts +66 -0
- package/dist/color/neighbor-highlight-reconstruction.js +234 -0
- package/dist/color/neighbor-highlight-reconstruction.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +5 -0
- package/dist/color/sensor-color-development.js +7 -1
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/spectral-spikiness.d.ts +11 -0
- package/dist/color/spectral-spikiness.js +23 -0
- package/dist/color/spectral-spikiness.js.map +1 -0
- package/dist/core/execution-error.d.ts +21 -0
- package/dist/core/execution-error.js +12 -0
- package/dist/core/execution-error.js.map +1 -0
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/version.js.map +1 -1
- package/dist/facade/catalogue-lens-signal.d.ts +26 -1
- package/dist/facade/catalogue-lens-signal.js +25 -7
- package/dist/facade/catalogue-lens-signal.js.map +1 -1
- package/dist/facade/diffraction-provider.d.ts +1 -1
- package/dist/facade/diffraction-provider.js +4 -4
- package/dist/facade/diffraction-provider.js.map +1 -1
- package/dist/facade/display-view-gpu-session.js +38 -6
- package/dist/facade/display-view-gpu-session.js.map +1 -1
- package/dist/facade/display-view-gpu.d.ts +13 -5
- package/dist/facade/display-view-gpu.js.map +1 -1
- package/dist/facade/display-view-normal.d.ts +15 -0
- package/dist/facade/display-view-normal.js +44 -0
- package/dist/facade/display-view-normal.js.map +1 -0
- package/dist/facade/display-view-rendering.d.ts +97 -0
- package/dist/facade/display-view-rendering.js +598 -0
- package/dist/facade/display-view-rendering.js.map +1 -0
- package/dist/facade/display-view.d.ts +37 -65
- package/dist/facade/display-view.js +147 -476
- package/dist/facade/display-view.js.map +1 -1
- package/dist/facade/expected-signal-setup.js +2 -2
- package/dist/facade/expected-signal-setup.js.map +1 -1
- package/dist/facade/fast-methods.d.ts +1 -1
- package/dist/facade/fast-methods.js +37 -8
- package/dist/facade/fast-methods.js.map +1 -1
- package/dist/facade/generic-lens-capture.d.ts +1 -1
- package/dist/facade/generic-lens-capture.js +1 -1
- package/dist/facade/generic-lens-capture.js.map +1 -1
- package/dist/facade/image-plane.js +41 -10
- package/dist/facade/image-plane.js.map +1 -1
- package/dist/facade/on-demand-kits.d.ts +14 -0
- package/dist/facade/on-demand-kits.js +36 -0
- package/dist/facade/on-demand-kits.js.map +1 -0
- package/dist/facade/opt-in-kit.d.ts +9 -0
- package/dist/facade/opt-in-kit.js +11 -0
- package/dist/facade/opt-in-kit.js.map +1 -0
- package/dist/facade/quality-kit.d.ts +21 -0
- package/dist/facade/quality-kit.js +23 -0
- package/dist/facade/quality-kit.js.map +1 -0
- package/dist/facade/quality-paths.d.ts +22 -0
- package/dist/facade/quality-paths.js +44 -0
- package/dist/facade/quality-paths.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +18 -2
- package/dist/facade/scene-radiance.js +6 -4
- package/dist/facade/scene-radiance.js.map +1 -1
- package/dist/facade/simulate-capture.d.ts +32 -13
- package/dist/facade/simulate-capture.js +162 -69
- package/dist/facade/simulate-capture.js.map +1 -1
- package/dist/facade/simulate-display-view.d.ts +10 -12
- package/dist/facade/simulate-display-view.js +57 -48
- package/dist/facade/simulate-display-view.js.map +1 -1
- package/dist/gpu/display-view-gpu-renderer.d.ts +43 -0
- package/dist/gpu/display-view-gpu-renderer.js +134 -0
- package/dist/gpu/display-view-gpu-renderer.js.map +1 -0
- package/dist/gpu/display-view-image-material-module.d.ts +3 -2
- package/dist/gpu/display-view-image-material-module.js +25 -3
- package/dist/gpu/display-view-image-material-module.js.map +1 -1
- package/dist/gpu/display-view-image-quality.d.ts +43 -1
- package/dist/gpu/display-view-image-quality.js +256 -11
- package/dist/gpu/display-view-image-quality.js.map +1 -1
- package/dist/gpu/display-view-quality-gpu.d.ts +13 -64
- package/dist/gpu/display-view-quality-gpu.js +60 -249
- package/dist/gpu/display-view-quality-gpu.js.map +1 -1
- package/dist/gpu/display-view-speed-gpu.d.ts +16 -16
- package/dist/gpu/display-view-speed-gpu.js +50 -12
- package/dist/gpu/display-view-speed-gpu.js.map +1 -1
- package/dist/gpu/image-kernel-accelerator.js +3 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -1
- package/dist/gpu/image-kernel-execution.d.ts +2 -13
- package/dist/gpu/image-kernel-execution.js +2 -10
- package/dist/gpu/image-kernel-execution.js.map +1 -1
- package/dist/gpu/wgsl-display-view-coupled-stub.d.ts +8 -0
- package/dist/gpu/wgsl-display-view-coupled-stub.js +21 -0
- package/dist/gpu/wgsl-display-view-coupled-stub.js.map +1 -0
- package/dist/gpu/wgsl-display-view-coupled.d.ts +88 -0
- package/dist/gpu/wgsl-display-view-coupled.js +353 -0
- package/dist/gpu/wgsl-display-view-coupled.js.map +1 -0
- package/dist/gpu/wgsl-display-view-quality-kernel.d.ts +4 -9
- package/dist/gpu/wgsl-display-view-quality-kernel.js +109 -111
- package/dist/gpu/wgsl-display-view-quality-kernel.js.map +1 -1
- package/dist/gpu/wgsl-display-view-speed-kernel.d.ts +1 -41
- package/dist/gpu/wgsl-display-view-speed-kernel.js +71 -8
- package/dist/gpu/wgsl-display-view-speed-kernel.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/output/camera-channel-response.d.ts +50 -0
- package/dist/output/camera-channel-response.js +69 -0
- package/dist/output/camera-channel-response.js.map +1 -0
- package/dist/output/native-capture-sdr.js +5 -2
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +18 -1
- package/dist/output/sdr-rendering.js +39 -2
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/sensor/native-sensor-report.d.ts +10 -0
- package/dist/sensor/native-sensor-report.js +16 -0
- package/dist/sensor/native-sensor-report.js.map +1 -0
- package/dist/sensor/sensor-characteristics.d.ts +81 -13
- package/dist/sensor/sensor-characteristics.js +10 -6
- package/dist/sensor/sensor-characteristics.js.map +1 -1
- package/docs/API_REFERENCE.md +117 -4
- package/docs/QUICK_START.md +37 -8
- package/docs/USAGE.md +104 -22
- package/docs/api/capture-c2pa-embed.md +177 -0
- package/docs/api/capture-dng-import.md +86 -10
- package/docs/api/capture-dng-opcodes.md +93 -0
- package/docs/api/capture-dng-profile-maps.md +141 -0
- package/docs/api/capture-dng-stage-image.md +43 -0
- package/docs/api/capture-jpeg-xl-tiles.md +33 -0
- package/docs/api/capture-lossy-jpeg.md +41 -0
- package/docs/api/capture-native-raw-development.md +2 -1
- package/docs/api/core-execution-error.md +43 -0
- package/docs/api/core-version.md +1 -1
- package/docs/api/exports.json +255 -5
- package/docs/api/facade-display-view-gpu.md +5 -2
- package/docs/api/facade-display-view.md +11 -15
- package/docs/api/facade-fast-methods.md +38 -9
- package/docs/api/facade-quality-paths.md +24 -0
- package/docs/api/facade-scene-radiance.md +1 -1
- package/docs/api/facade-simulate-capture.md +24 -7
- package/docs/api/facade-simulate-display-view.md +10 -12
- package/docs/api/gpu-image-kernel-execution.md +0 -36
- package/docs/api/output-camera-channel-response.md +55 -0
- package/docs/api/output-sdr-rendering.md +6 -1
- package/docs/api/sensor-sensor-characteristics.md +54 -2
- package/llms.txt +1 -0
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-kernel-accelerator.js","sourceRoot":"","sources":["../../src/gpu/image-kernel-accelerator.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Optional image-kernel accelerator (#277). One object runs work on the execution backend the caller\n * asks for.\n * - `cpu-reference` uses the unchanged float64 engine code.\n * - `webgpu-f32` runs the project's own WGSL (WebGPU shader) kernels for the heaviest per-pixel loops.\n * Every result is labelled as a float32 approximation, with an error bound worked out in advance.\n * A requested WebGPU backend falls back to the CPU only if the caller chose\n * `fallback: \"cpu-reference\"`. The result label then names the backend that actually ran, and why.\n * The simple form `{ webgpu: true | false }` chooses the backend with one boolean, and `setWebGpuEnabled(false)`\n * (webgpu-switch.ts) keeps the whole realm on the CPU whatever callers ask. See docs/WEBGPU.md.\n */\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { getWebGpuEnabled } from \"./webgpu-switch.js\";\nimport { InvalidScientificResultError } from \"../core/validation.js\";\nimport { requireAllowlistedRecord } from \"../core/record-validation.js\";\nimport { createHostYieldGate } from \"../capture/host-yield-cadence.js\";\nimport { checkNativeRawIntegrity, createNativeRawDevelopmentTask, prepareNativeRawDevelopment, takeNativeRawOwnership,\n type NativeRawDevelopmentInput, type NativeRawDevelopmentOutput, type NativeRawDevelopmentProvider, type RawHighlightDiagnostics } from \"../capture/native-raw-development.js\";\nimport type { NativeRawOutput } from \"../capture/native-raw.js\";\nimport { resolveCaptureColorModel } from \"../color/capture-color.js\";\nimport { RAW_HIGHLIGHT_RECONSTRUCTION_START } from \"../color/sensor-color-development.js\";\nimport { transformOrientedRasterPointToNative } from \"../output/capture-geometry.js\";\nimport type { SdrRenderingProfile, SdrRenderingResult } from \"../output/sdr-rendering.js\";\nimport { calculateNativeCaptureSdrPlan, createNativeCaptureSdrTask, sdrOutputEncoding, validateNativeCaptureSdrTile, NATIVE_CAPTURE_SDR_LIMITS,\n type NativeCaptureSdrInput, type NativeCaptureSdrOutput, type NativeCaptureSdrProvider, type NativeCaptureSdrTileRequest } from \"../output/native-capture-sdr.js\";\nimport { convolveIrradianceRows, calculateIrradianceConvolutionPlan, type IrradianceConvolutionInput, type IrradianceConvolutionPlan } from \"../optics/irradiance-convolution.js\";\nimport { ImageKernelExecutionError, cpuExecution, float32Gamma, integerCodeBound, webGpuExecution, type ImageKernelAdapterDescription,\n type ImageKernelBackend, type ImageKernelExecution, type ImageKernelFallbackReason, type ImageKernelRelativeErrorBound } from \"./image-kernel-execution.js\";\nimport { BUFFER_USAGE, GpuResourceScope, abortedError, acquireWebGpuRuntime, createComputePipeline, linearDispatch, runComputePass,\n type WebGpuRuntime } from \"./webgpu-runtime.js\";\nimport { CONVOLUTION_WORKGROUP_EDGE, IRRADIANCE_CONVOLUTION_WGSL, LINEAR_WORKGROUP_SIZE, RAW_DEVELOPMENT_WGSL, SDR_COUNTER, SDR_COUNTER_SLOTS,\n SDR_LUMINANCE_WGSL, SDR_TONE_MODE, SDR_WGSL } from \"./wgsl-kernels.js\";\nimport type { PackedSensorRawInput, PackedSensorRawResult } from \"../capture/packed-sensor-raw.js\";\nimport { simulateSensorRawOnCpu, simulateSensorRawOnGpu } from \"./sensor-stage-gpu.js\";\nimport { calculateTemporalExposureSumPlan, type TemporalExposureSumInput, type TemporalExposureSumPlan } from \"../motion/temporal-exposure-sum.js\";\nimport { sumTemporalExposureOnCpu, sumTemporalExposureOnGpu } from \"./temporal-sum-gpu.js\";\nimport type { ChartRadianceBatchInput, ChartRadianceBatchPlan } from \"../facade/chart-radiance-batch.js\";\nimport { evaluateChartRadianceOnCpu, evaluateChartRadianceOnGpu } from \"./chart-radiance-gpu.js\";\nimport { ChartSceneUploads } from \"./chart-composite-gpu.js\";\n\nexport interface ChartRadianceResult {\n plan: ChartRadianceBatchPlan;\n /** Row-major (query, column): float64 for `cpu-reference`, float32 for `webgpu-f32`. */\n values: Float64Array | Float32Array;\n columns: number;\n execution: ImageKernelExecution;\n /**\n * Queries whose float32 classification fell inside its bound, recomputed on the host with the\n * reference (then rounded to float32). Empty for `cpu-reference`.\n */\n hostRecomputedQueryIndices: Uint32Array;\n}\n\nexport interface AcceleratedPackedSensorRawResult extends PackedSensorRawResult {\n execution: ImageKernelExecution;\n /**\n * Region-relative indices of the flagged sites, ascending (empty for `cpu-reference`). Every other site\n * equals the reference; recomputing these sites with the reference makes the whole region bit-identical.\n */\n flaggedSiteIndices: Uint32Array;\n}\nexport interface TemporalExposureSumResult {\n plan: TemporalExposureSumPlan;\n /** Float64 for `cpu-reference`, float32 for `webgpu-f32`; row-major, same grid as the input. */\n values: Float64Array | Float32Array;\n execution: ImageKernelExecution;\n}\n\nexport interface ImageKernelAcceleratorOptions {\n /**\n * The one-boolean form. `true` is `backend: \"webgpu-f32\"` with `fallback: \"cpu-reference\"` unless `fallback` is given;\n * `false` is `backend: \"cpu-reference\"`. Give `webgpu` or `backend`, not both.\n */\n webgpu?: boolean;\n /** Requested backend. `cpu-reference` is the reference and never touches WebGPU. Required unless `webgpu` is given. */\n backend?: ImageKernelBackend;\n /** Required with `backend: \"webgpu-f32\"`: use the CPU reference (labelled) or fail when WebGPU cannot be acquired. */\n fallback?: \"cpu-reference\" | \"fail\";\n /** WebGPU entry point; defaults to `navigator.gpu`. Supply a worker's `navigator.gpu` explicitly if needed. */\n gpu?: unknown;\n powerPreference?: \"low-power\" | \"high-performance\";\n /** Largest single GPU band buffer in bytes (4 KiB up to the device limit); default min(64 MiB, device limit). Affects memory only, never results. */\n maximumBandBytes?: number;\n /** Aborts adapter/device acquisition. */\n signal?: AbortSignal;\n}\nexport interface ImageKernelRunOptions {\n signal?: AbortSignal;\n /** Yields to the host event loop between CPU reference chunks and GPU bands. Convolution, sensor and temporal stages; tasks keep their own yields. */\n yieldControl?: (signal: AbortSignal) => Promise<void>;\n}\nexport type ImageKernelAcceleratorState = \"ready\" | \"lost\" | \"disposed\";\nexport interface AcceleratedNativeCaptureSdrOutput extends NativeCaptureSdrOutput { execution: ImageKernelExecution }\nexport interface AcceleratedNativeRawDevelopmentOutput extends NativeRawDevelopmentOutput { execution: ImageKernelExecution }\nexport interface IrradianceConvolutionResult {\n plan: IrradianceConvolutionPlan;\n /** Float64 for `cpu-reference`, float32 for `webgpu-f32`; row-major, same grid as the input. */\n values: Float64Array | Float32Array;\n /** Float64 sums of the input and output samples. Their difference is the amount lost across the grid edge. */\n inputSum: number;\n outputSum: number;\n execution: ImageKernelExecution;\n}\n/** Runs one operation at a time. dispose() releases the device and every buffer. */\nexport interface ImageKernelAccelerator {\n readonly backend: ImageKernelBackend;\n readonly requestedBackend: ImageKernelBackend;\n readonly fallbackReason: ImageKernelFallbackReason | null;\n /** #481: the adapter of a `webgpu-f32` accelerator's device (null for `cpu-reference`, or when the browser gives no `GPUAdapter.info`). */\n readonly adapter: ImageKernelAdapterDescription | null;\n readonly state: ImageKernelAcceleratorState;\n renderNativeCaptureSdr(input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider, options?: ImageKernelRunOptions): Promise<AcceleratedNativeCaptureSdrOutput>;\n /** Takes ownership of `input.raw` exactly like `createNativeRawDevelopmentTask` (the caller's arrays are detached). */\n developNativeRaw(input: NativeRawDevelopmentInput, provider: NativeRawDevelopmentProvider | ((signal: AbortSignal) => Promise<void>),\n options?: ImageKernelRunOptions): Promise<AcceleratedNativeRawDevelopmentOutput>;\n convolveIrradiance(input: IrradianceConvolutionInput, options?: ImageKernelRunOptions): Promise<IrradianceConvolutionResult>;\n /** Sensor stage on typed arrays: seeded charge, read noise and ADC to RAW codes (see `simulatePackedSensorRaw`). */\n simulateSensorRaw(input: PackedSensorRawInput, options?: ImageKernelRunOptions): Promise<AcceleratedPackedSensorRawResult>;\n /** Exposure and motion as a weighted sum of shifted frames (see `calculateTemporalExposureSum`). */\n sumTemporalExposure(input: TemporalExposureSumInput, options?: ImageKernelRunOptions): Promise<TemporalExposureSumResult>;\n /** Chart scene radiance or its spectral integral at many frame points (see `calculateChartRadianceBatch`). */\n evaluateChartRadiance(input: ChartRadianceBatchInput, options?: ImageKernelRunOptions): Promise<ChartRadianceResult>;\n dispose(): void;\n}\n\nconst DEFAULT_BAND_BYTES = 64 * 1024 * 1024;\nconst MINIMUM_BAND_BYTES = 4096;\n/** Limit on multiply-adds per convolution dispatch, to stay clear of the GPU watchdog timeout. */\nconst MAXIMUM_CONVOLUTION_TAPS_PER_DISPATCH = 2 ** 30;\n/** Inputs whose float64 product with the rendering scale exceeds this are outside the float32 domain. */\nconst FLOAT32_SAFE_MAGNITUDE = 2 ** 120;\nconst FLOAT32_SUBNORMAL_LIMIT = 2 ** -126;\nconst NO_COUNTERS = (): number[] => new Array<number>(SDR_COUNTER_SLOTS).fill(0);\n\nfunction runOptions(value: ImageKernelRunOptions | undefined): ImageKernelRunOptions {\n if (value === undefined) return {};\n const r = requireAllowlistedRecord(value, [\"signal\", \"yieldControl\"], \"Invalid image-kernel run options.\");\n if ((r.signal !== undefined && (typeof r.signal !== \"object\" || r.signal === null || typeof (r.signal as AbortSignal).aborted !== \"boolean\")) ||\n (r.yieldControl !== undefined && typeof r.yieldControl !== \"function\")) {\n throw new InvalidConfigurationError(\"Invalid image-kernel run options.\");\n }\n return value;\n}\n\n/** Links an optional caller signal to an internal controller; `dispose` removes the listener. */\nfunction linkedAbort(signal: AbortSignal | undefined): { controller: AbortController; dispose: () => void } {\n const controller = new AbortController();\n if (!signal) return { controller, dispose: () => undefined };\n if (signal.aborted) { controller.abort(); return { controller, dispose: () => undefined }; }\n const listener = (): void => controller.abort();\n signal.addEventListener(\"abort\", listener, { once: true });\n return { controller, dispose: (): void => signal.removeEventListener(\"abort\", listener) };\n}\n\n/** Requests a backend. Never swaps backends silently: a fallback must be set in the options and is shown in every result label. */\nexport async function createImageKernelAccelerator(options: ImageKernelAcceleratorOptions): Promise<ImageKernelAccelerator> {\n const r = requireAllowlistedRecord(options, [\"webgpu\", \"backend\", \"fallback\", \"gpu\", \"powerPreference\", \"maximumBandBytes\", \"signal\"],\n \"Invalid image-kernel accelerator options.\");\n if (r.webgpu !== undefined && (typeof r.webgpu !== \"boolean\" || r.backend !== undefined)) {\n throw new InvalidConfigurationError(\"Invalid image-kernel accelerator options: webgpu must be a boolean, and excludes backend.\");\n }\n // The boolean form resolves to the explicit form; everything below sees only backend and fallback.\n const backend = r.webgpu === undefined ? r.backend : r.webgpu ? \"webgpu-f32\" : \"cpu-reference\";\n const fallback = r.fallback ?? (r.webgpu === true ? \"cpu-reference\" : undefined);\n if ((backend !== \"cpu-reference\" && backend !== \"webgpu-f32\") ||\n (backend === \"webgpu-f32\" && fallback !== \"cpu-reference\" && fallback !== \"fail\") ||\n (backend === \"cpu-reference\" && fallback !== undefined) ||\n (r.powerPreference !== undefined && r.powerPreference !== \"low-power\" && r.powerPreference !== \"high-performance\") ||\n (r.maximumBandBytes !== undefined && (typeof r.maximumBandBytes !== \"number\" || !Number.isSafeInteger(r.maximumBandBytes) ||\n r.maximumBandBytes < MINIMUM_BAND_BYTES)) ||\n (r.signal !== undefined && (typeof r.signal !== \"object\" || r.signal === null || typeof (r.signal as AbortSignal).aborted !== \"boolean\"))) {\n throw new InvalidConfigurationError(\"Invalid image-kernel accelerator options: backend, explicit WebGPU fallback, power preference or band size.\");\n }\n const requested = backend;\n if (requested === \"cpu-reference\") return createAccelerator(requested, null, null, DEFAULT_BAND_BYTES);\n if (!getWebGpuEnabled()) {\n // The realm's switch (setWebGpuEnabled(false)) is honoured before any adapter is requested.\n const message = \"WebGPU is switched off in this realm (setWebGpuEnabled(false)).\";\n if (fallback === \"fail\") throw new ImageKernelExecutionError(\"webgpu-disabled\", message);\n return createAccelerator(requested, \"webgpu-disabled\", null, DEFAULT_BAND_BYTES);\n }\n const gpu = \"gpu\" in r ? r.gpu : (globalThis as { navigator?: { gpu?: unknown } }).navigator?.gpu;\n const acquired = await acquireWebGpuRuntime(gpu, options.powerPreference, options.signal);\n if (\"failure\" in acquired) {\n if (fallback === \"fail\") throw new ImageKernelExecutionError(acquired.failure, acquired.message);\n return createAccelerator(requested, acquired.failure, null, DEFAULT_BAND_BYTES);\n }\n const runtime = acquired.runtime;\n const band = Math.min(options.maximumBandBytes ?? DEFAULT_BAND_BYTES, runtime.maximumStorageBindingBytes);\n return createAccelerator(requested, null, runtime, band);\n}\n\n/** The runtime behind each accelerator this module created (#481: a prepared display view shares an accelerator's device through it). */\nconst RUNTIMES = new WeakMap<ImageKernelAccelerator, WebGpuRuntime | null>();\n/**\n * Internal (#481, not exported from the package): the WebGPU runtime (`WebGpuRuntime`, typed `unknown` here so no WebGPU type reaches\n * the published declarations) of an accelerator created by {@link createImageKernelAccelerator}, null for one on the CPU\n * reference, or undefined when `value` is not such an accelerator.\n */\nexport function acceleratorRuntime(value: unknown): unknown {\n return typeof value === \"object\" && value !== null ? RUNTIMES.get(value as ImageKernelAccelerator) : undefined;\n}\n/**\n * Internal (#481, not exported from the package): runs the `webgpu-f32` convolution on a runtime (`WebGpuRuntime`, passed as\n * `unknown` to keep WebGPU types out of the published declarations), for the display view's run-time conformance self-check.\n * Pipelines are compiled per call; `signal` aborts the run.\n */\nexport async function convolveIrradianceOnRuntime(runtime: unknown, input: IrradianceConvolutionInput, signal: AbortSignal | undefined): Promise<IrradianceConvolutionResult> {\n const gpu = runtime as WebGpuRuntime, plan = calculateIrradianceConvolutionPlan(input), link = linkedAbort(signal);\n try {\n return await convolveOnGpu(gpu, 1 << 20, plan, input, link.controller, undefined, (label, code) => createComputePipeline(gpu, label, code, link.controller.signal));\n } finally { link.dispose(); }\n}\n\nfunction createAccelerator(requested: ImageKernelBackend, fallbackReason: ImageKernelFallbackReason | null,\n runtime: WebGpuRuntime | null, bandBytes: number): ImageKernelAccelerator {\n let disposed = false, busy = false;\n const pipelines = new Map<string, Promise<GPUComputePipeline>>();\n // #477: a scene's chart records are uploaded once and reused by later calls (a prepared view's parts).\n const chartUploads = runtime ? new ChartSceneUploads(runtime) : null;\n const backend: ImageKernelBackend = runtime ? \"webgpu-f32\" : \"cpu-reference\";\n function state(): ImageKernelAcceleratorState { return disposed ? \"disposed\" : runtime?.isLost() ? \"lost\" : \"ready\"; }\n function pipeline(gpu: WebGpuRuntime, label: string, code: string, signal: AbortSignal): Promise<GPUComputePipeline> {\n let pending = pipelines.get(label);\n if (!pending) {\n pending = createComputePipeline(gpu, label, code, undefined);\n pipelines.set(label, pending);\n pending.catch(() => pipelines.delete(label));\n }\n return gpu.guard(pending, signal);\n }\n /** Runs one operation at a time, and turns aborts, disposal and device loss into domain errors. */\n async function operate<T>(signal: AbortSignal | undefined, body: (abort: AbortController) => Promise<T>): Promise<T> {\n if (disposed) throw new ImageKernelExecutionError(\"disposed\", \"The image-kernel accelerator was disposed.\");\n if (runtime?.isLost()) throw new ImageKernelExecutionError(\"device-lost\", \"The WebGPU device was lost; create a new accelerator.\");\n if (busy) throw new ImageKernelExecutionError(\"busy\", \"The image-kernel accelerator runs one operation at a time.\");\n busy = true;\n const link = linkedAbort(signal);\n try {\n if (link.controller.signal.aborted) throw abortedError();\n return await body(link.controller);\n } catch (error) {\n link.controller.abort();\n if (disposed) throw new ImageKernelExecutionError(\"disposed\", \"The image-kernel accelerator was disposed; no output is available.\");\n if (signal?.aborted && !(error instanceof ImageKernelExecutionError && error.reason === \"device-lost\")) throw abortedError();\n throw error;\n } finally {\n link.dispose();\n busy = false;\n }\n }\n const cpuLabel = (): ImageKernelExecution => cpuExecution(requested, fallbackReason);\n const accelerator: ImageKernelAccelerator = {\n backend, requestedBackend: requested, fallbackReason, adapter: runtime?.adapter ?? null,\n get state(): ImageKernelAcceleratorState { return state(); },\n async renderNativeCaptureSdr(input, provider, options): Promise<AcceleratedNativeCaptureSdrOutput> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) {\n const task = createNativeCaptureSdrTask(input, provider);\n const cancel = (): void => task.cancel();\n abort.signal.addEventListener(\"abort\", cancel, { once: true });\n try { await task.run(); return { ...task.takeOutput(), execution: cpuLabel() }; }\n finally { abort.signal.removeEventListener(\"abort\", cancel); task.dispose(); }\n }\n return renderSdrOnGpu(runtime, bandBytes, input, provider, abort, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async developNativeRaw(input, provider, options): Promise<AcceleratedNativeRawDevelopmentOutput> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) {\n const task = createNativeRawDevelopmentTask(input, provider);\n const cancel = (): void => task.cancel();\n abort.signal.addEventListener(\"abort\", cancel, { once: true });\n try { await task.run(); return { ...task.takeOutput(), execution: cpuLabel() }; }\n finally { abort.signal.removeEventListener(\"abort\", cancel); task.dispose(); }\n }\n return developRawOnGpu(runtime, bandBytes, input, provider, abort, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async convolveIrradiance(input, options): Promise<IrradianceConvolutionResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n const plan = calculateIrradianceConvolutionPlan(input);\n if (!runtime) return convolveOnCpu(plan, input, abort, run.yieldControl, cpuLabel());\n return convolveOnGpu(runtime, bandBytes, plan, input, abort, run.yieldControl,\n (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async simulateSensorRaw(input, options): Promise<AcceleratedPackedSensorRawResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) return simulateSensorRawOnCpu(input, abort, run.yieldControl, cpuLabel());\n return simulateSensorRawOnGpu(runtime, bandBytes, input, abort, run.yieldControl, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async sumTemporalExposure(input, options): Promise<TemporalExposureSumResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n const plan = calculateTemporalExposureSumPlan(input);\n if (!runtime) return sumTemporalExposureOnCpu(plan, input, abort, run.yieldControl, cpuLabel());\n return sumTemporalExposureOnGpu(runtime, bandBytes, plan, input, abort, run.yieldControl,\n (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async evaluateChartRadiance(input, options): Promise<ChartRadianceResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) return evaluateChartRadianceOnCpu(input, abort, run.yieldControl, cpuLabel());\n // #477: the chart stage consults the realm's switch on every call; off, the reference runs and the label says so.\n if (!getWebGpuEnabled()) return evaluateChartRadianceOnCpu(input, abort, run.yieldControl, cpuExecution(requested, \"webgpu-disabled\"));\n return evaluateChartRadianceOnGpu(runtime, bandBytes, input, abort, run.yieldControl, (label, code) => pipeline(runtime, label, code, abort.signal), chartUploads!);\n });\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n pipelines.clear();\n chartUploads?.release();\n runtime?.destroy();\n }\n };\n RUNTIMES.set(accelerator, runtime);\n return accelerator;\n}\n\ntype PipelineSource = (label: string, code: string) => Promise<GPUComputePipeline>;\n\nfunction checkAbort(abort: AbortController): void {\n if (abort.signal.aborted) throw abortedError();\n}\n\nfunction sumOf(values: Float32Array | Float64Array): number {\n let sum = 0;\n for (let i = 0; i < values.length; i++) sum += values[i]!;\n return sum;\n}\n\nasync function convolveOnCpu(plan: IrradianceConvolutionPlan, input: IrradianceConvolutionInput, abort: AbortController,\n yieldControl: ImageKernelRunOptions[\"yieldControl\"], execution: ImageKernelExecution): Promise<IrradianceConvolutionResult> {\n // Snapshot so a caller mutation during host yields cannot change the reference.\n const samples = input.samples.slice(), kernels = input.kernels.slice();\n const values = new Float64Array(plan.width * plan.height);\n const rowsPerChunk = Math.max(1, Math.floor(2_000_000 / Math.max(1, plan.width * plan.tapCount)));\n const gate = createHostYieldGate();\n for (let y = 0; y < plan.height; y += rowsPerChunk) {\n checkAbort(abort);\n const end = Math.min(plan.height, y + rowsPerChunk);\n convolveIrradianceRows(plan, samples, kernels, y, end, values.subarray(y * plan.width, end * plan.width));\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n checkAbort(abort);\n return { plan, values, inputSum: sumOf(samples), outputSum: sumOf(values), execution };\n}\n\nasync function convolveOnGpu(runtime: WebGpuRuntime, bandBytes: number, plan: IrradianceConvolutionPlan, input: IrradianceConvolutionInput,\n abort: AbortController, yieldControl: ImageKernelRunOptions[\"yieldControl\"], pipelines: PipelineSource): Promise<IrradianceConvolutionResult> {\n const { width, height, kernelRadius: r, tapCount } = plan;\n const samples = new Float32Array(input.samples), kernels = new Float32Array(input.kernels), inputSum = sumOf(input.samples);\n const errorBound = irradianceConvolutionErrorBound(plan, input.kernels);\n if (kernels.byteLength > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"PSF kernels exceed the device's storage binding limit.\");\n }\n const rowBytes = width * 4;\n let rows = Math.min(height, Math.floor(bandBytes / rowBytes) - 2 * r, Math.floor(MAXIMUM_CONVOLUTION_TAPS_PER_DISPATCH / (width * tapCount)));\n if (rows < 1) {\n if ((1 + 2 * r) * rowBytes > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One convolution band exceeds the device's storage binding limit.\");\n }\n rows = 1;\n }\n const values = new Float32Array(width * height);\n const pipeline = await pipelines(\"photivra-irradiance-convolution\", IRRADIANCE_CONVOLUTION_WGSL);\n const scope = new GpuResourceScope(runtime);\n try {\n const kernelBuffer = scope.upload(\"photivra-psf-kernels\", kernels, BUFFER_USAGE.STORAGE);\n const gate = createHostYieldGate();\n for (let y0 = 0; y0 < height; y0 += rows) {\n checkAbort(abort);\n const y1 = Math.min(height, y0 + rows), in0 = Math.max(0, y0 - r), in1 = Math.min(height, y1 + r);\n const params = new Uint32Array([width, height, r, 2 * r + 1, plan.patchWidth, plan.patchHeight, plan.patchColumns, plan.patchRows,\n y0, y1 - y0, in0, tapCount]);\n // Per-band scope: every buffer of the band, its readback included, is destroyed before the next band.\n const bandScope = new GpuResourceScope(runtime);\n try {\n const band = bandScope.upload(\"photivra-irradiance-band\", samples.subarray(in0 * width, in1 * width), BUFFER_USAGE.STORAGE);\n const result = bandScope.buffer(\"photivra-irradiance-result\", (y1 - y0) * rowBytes, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = bandScope.upload(\"photivra-irradiance-params\", 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: band } },\n { binding: 2, resource: { buffer: kernelBuffer } }, { binding: 3, resource: { buffer: result } }] });\n const groups: [number, number] = [Math.ceil(width / CONVOLUTION_WORKGROUP_EDGE), Math.ceil((y1 - y0) / CONVOLUTION_WORKGROUP_EDGE)];\n const [data] = await runComputePass(runtime, bandScope, pipeline, bindGroup, groups, [{ buffer: result, bytes: (y1 - y0) * rowBytes }], abort.signal);\n values.set(new Float32Array(data!, 0, (y1 - y0) * width), y0 * width);\n } finally {\n bandScope.release();\n }\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n } finally {\n scope.release();\n }\n checkAbort(abort);\n const execution = webGpuExecution(errorBound, 0);\n return { plan, values, inputSum, outputSum: sumOf(values), execution };\n}\n\n/**\n * A-priori float32 bound for every convolution output (all terms are non-negative):\n * |v_f32 − v_ref| ≤ (γ_{T+3} + 2^-40)·v_ref + 2T·2^-126 + 2·S_max·Σ_t max_p w_{p,t}·[0 < w_{p,t} < 2^-126].\n * The last term covers weights below the float32 normal range: the host conversion may round them to zero or\n * a subnormal (|f32(w) − w| ≤ w) and the GPU may flush them, so their whole product w·s (s ≤ S_max) is at risk,\n * with a factor 2 for the conversion and the later roundings. It is zero when no such weight exists.\n */\nexport function irradianceConvolutionErrorBound(plan: IrradianceConvolutionPlan, kernels: Float32Array | Float64Array): ImageKernelRelativeErrorBound {\n const { tapCount } = plan, patches = kernels.length / tapCount;\n let atRisk = 0;\n for (let t = 0; t < tapCount; t++) {\n let largest = 0;\n for (let p = 0; p < patches; p++) {\n const w = kernels[p * tapCount + t]!;\n if (w < FLOAT32_SUBNORMAL_LIMIT && w > largest) largest = w;\n }\n atRisk += largest;\n }\n return { kind: \"relative-to-reference\", relative: float32Gamma(tapCount + 3) + 2 ** -40,\n absolute: 2 * tapCount * FLOAT32_SUBNORMAL_LIMIT + 2 * plan.maximumSampleMagnitude * atRisk };\n}\n\n/** Uniform values of a tone curve for the float32 kernels (see wgsl-kernels.ts, LUMINANCE_FUNCTIONS). */\ninterface ToneUniform { mode: number; tone: [number, number, number, number]; lum: [number, number, number, number] }\n\n/**\n * The tone curve's kernel constants. Luminance curves run on the GPU within this float32 domain:\n * extended Reinhard with Lw ≥ 2^-20; Naka–Rushton with exponent n ≥ 1 (below 1 its ratio f(L)/L is\n * unbounded as L → 0, so no useful bound exists near L = 0), 1/g(Lw) ≤ 2^60 and σⁿ ≥ 2^-60.\n * @internal\n */\nexport function toneUniform(profile: Pick<SdrRenderingProfile, \"toneCurve\" | \"toneCurveParameters\">): ToneUniform {\n const [kr, kg, kb] = resolveCaptureColorModel().cameraRgbToXyz[1]! as readonly number[];\n const p = profile.toneCurveParameters;\n if (profile.toneCurve === \"identity\" || profile.toneCurve === \"positive-reinhard-per-channel\") {\n return { mode: SDR_TONE_MODE.perChannel, tone: [0, 0, 0, 0], lum: [0, 0, 0, 0] };\n }\n if (profile.toneCurve === \"extended-reinhard-luminance\" && p && !(\"exponent\" in p)) {\n if (!(p.whiteLuminance >= 2 ** -20)) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Extended Reinhard white luminance below 2^-20 is outside the float32 domain.\");\n return { mode: SDR_TONE_MODE.extendedReinhard, tone: [1 / (p.whiteLuminance * p.whiteLuminance), 0, 0, 0], lum: [kr!, kg!, kb!, 1] };\n }\n if (profile.toneCurve === \"naka-rushton-luminance\" && p && \"exponent\" in p) {\n const q = p as Extract<NonNullable<SdrRenderingProfile[\"toneCurveParameters\"]>, { exponent: number }>, n = q.exponent, sigma = q.semiSaturation;\n if (!(n >= 1)) {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"webgpu-f32 implements Naka–Rushton with exponent ≥ 1; use cpu-reference below 1.\");\n }\n const white = 1 / (1 + (sigma / q.whiteLuminance) ** n), sigmaN = sigma ** n;\n if (!(1 / white <= 2 ** 60 && sigmaN >= 2 ** -60)) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Naka–Rushton parameters are outside the float32 domain.\");\n }\n return { mode: SDR_TONE_MODE.nakaRushton, tone: [sigma, n, 1 / white, sigmaN], lum: [kr!, kg!, kb!, Math.max(1, n - 1)] };\n }\n throw new InvalidConfigurationError(\"Unsupported SDR rendering profile.\");\n}\n\n/** Adds one band's counters into the run's; the luminance bound slot keeps the largest float32 value. */\nfunction mergeCounters(counters: number[], band: Uint32Array): void {\n band.forEach((value, i) => {\n if (i === SDR_COUNTER.linearBoundBits) counters[i] = Math.max(counters[i]!, new Float32Array(new Uint32Array([value]).buffer)[0]!);\n else counters[i]! += value;\n });\n}\n\n/** Fails closed when a luminance-toned sample left the float32 domain. */\nfunction requireLuminanceDomain(counters: readonly number[]): void {\n if (counters[SDR_COUNTER.luminanceDomain]! > 0) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"A luminance-toned sample is outside the float32 execution domain.\");\n }\n}\n\nfunction sdrDiagnostics(counters: readonly number[], captureSaturation: SdrRenderingResult[\"diagnostics\"][\"captureSaturation\"]): SdrRenderingResult[\"diagnostics\"] {\n return { renderingNegativeSampleCount: counters[SDR_COUNTER.negative]!, renderingAboveReferenceSampleCount: counters[SDR_COUNTER.above]!,\n toneChangedSampleCount: counters[SDR_COUNTER.changed]!, gamutClippedLowSampleCount: counters[SDR_COUNTER.low]!,\n gamutClippedHighSampleCount: counters[SDR_COUNTER.high]!, captureSaturation };\n}\n\n/** Throws (fails closed) when a reject-mode gamut decision is out of range or cannot be decided in float32. */\nfunction requireGamutDecision(reject: boolean, counters: readonly number[]): void {\n if (counters[SDR_COUNTER.outOfGamut]! > 0) throw new InvalidConfigurationError(\"Tone output exceeds the declared SDR gamut range.\");\n if (reject && counters[SDR_COUNTER.gamutUncertain]! > 0) {\n throw new ImageKernelExecutionError(\"indeterminate-float32-classification\",\n \"Reject-out-of-range gamut handling is not decidable in float32 for at least one sample; use cpu-reference.\");\n }\n}\n\nasync function dispatchSdrBand(runtime: WebGpuRuntime, pipeline: GPUComputePipeline, staging: Float32Array<ArrayBuffer>, count: number,\n params: ArrayBuffer, abort: AbortController, invocations: number): Promise<{ codes: Uint32Array; counters: Uint32Array }> {\n const scope = new GpuResourceScope(runtime);\n try {\n const source = scope.upload(\"photivra-sdr-source\", staging.subarray(0, count), BUFFER_USAGE.STORAGE);\n const codes = scope.buffer(\"photivra-sdr-codes\", count * 4, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const counters = scope.upload(\"photivra-sdr-counters\", new Uint32Array(SDR_COUNTER_SLOTS), BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = scope.upload(\"photivra-sdr-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: source } },\n { binding: 2, resource: { buffer: codes } }, { binding: 3, resource: { buffer: counters } }] });\n const [codeData, counterData] = await runComputePass(runtime, scope, pipeline, bindGroup,\n linearDispatch(invocations, LINEAR_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: codes, bytes: count * 4 }, { buffer: counters, bytes: SDR_COUNTER_SLOTS * 4 }], abort.signal);\n return { codes: new Uint32Array(codeData!, 0, count), counters: new Uint32Array(counterData!, 0, SDR_COUNTER_SLOTS) };\n } finally {\n scope.release();\n }\n}\n\nasync function renderSdrOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider,\n abort: AbortController, pipelines: PipelineSource): Promise<AcceleratedNativeCaptureSdrOutput> {\n const plan = calculateNativeCaptureSdrPlan(input);\n if (!provider || typeof provider.readTile !== \"function\" || typeof provider.yieldControl !== \"function\") {\n throw new InvalidConfigurationError(\"Native SDR requires a tile reader and event-loop yield.\");\n }\n if (provider.onProgress !== undefined && typeof provider.onProgress !== \"function\") throw new InvalidConfigurationError(\"Native SDR onProgress must be a function.\");\n const readTile = provider.readTile.bind(provider), yieldControl = provider.yieldControl.bind(provider), onProgress = provider.onProgress?.bind(provider);\n const tone = toneUniform(plan.profile), luminance = tone.mode !== SDR_TONE_MODE.perChannel;\n const plane = plan.capture.planes.find(p => p.id === plan.sourcePlaneId)!;\n if (plane.storage.kind === \"inline-float64\") throw new InvalidConfigurationError(\"External native source required.\");\n const storage = plane.storage, profile = plan.profile, width = plane.pixelWidth, height = plane.pixelHeight;\n const scale = 2 ** profile.renderingExposureEv / plane.referenceWhiteValue, maximum = 2 ** profile.bitDepth - 1;\n const scale32 = Math.fround(scale);\n if (!(scale32 > 0 && Number.isFinite(scale32))) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"SDR scale is outside float32.\");\n const tileHeight = NATIVE_CAPTURE_SDR_LIMITS.tileHeight, rowSamples = width * 3;\n const bandRows = Math.max(tileHeight, Math.floor(bandBytes / (rowSamples * 4) / tileHeight) * tileHeight);\n if (Math.min(bandRows, height) * rowSamples * 4 > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One SDR tile row exceeds the device's storage binding limit.\");\n }\n const reinhard = profile.toneCurve === \"positive-reinhard-per-channel\", reject = profile.gamutHandling === \"reject-out-of-range\";\n const params = new ArrayBuffer(luminance ? 64 : 32), words = new Uint32Array(params), floats = new Float32Array(params);\n if (luminance) {\n words[1] = reject ? 1 : 0; words[2] = tone.mode; floats[4] = scale32; floats[5] = maximum; floats[6] = 2 ** -20;\n floats.set(tone.tone, 8); floats.set(tone.lum, 12);\n } else {\n words[1] = reinhard ? 1 : 0; words[2] = reject ? 1 : 0; floats[4] = scale32; floats[5] = maximum; floats[6] = 2 ** -20;\n }\n const pipeline = luminance ? await pipelines(\"photivra-sdr-luminance\", SDR_LUMINANCE_WGSL) : await pipelines(\"photivra-sdr\", SDR_WGSL);\n const codes = profile.bitDepth === 8 ? new Uint8Array(plan.outputBytes) : new Uint16Array(plan.outputBytes / 2);\n const staging = new Float32Array(Math.min(bandRows, height) * rowSamples);\n const counters = NO_COUNTERS();\n let hostUncertain = 0, bandStart = 0, completed = 0;\n try {\n for (let y = 0; y < height; y += tileHeight) {\n for (let x = 0; x < width; x += NATIVE_CAPTURE_SDR_LIMITS.tileWidth) {\n checkAbort(abort);\n const request: NativeCaptureSdrTileRequest = Object.freeze({ captureId: plan.capture.captureId, sourcePlaneId: plane.id,\n artifactId: storage.artifactId, sha256: storage.sha256, x, y,\n width: Math.min(NATIVE_CAPTURE_SDR_LIMITS.tileWidth, width - x), height: Math.min(tileHeight, height - y) });\n const tile = await readTile(request, abort.signal);\n checkAbort(abort);\n const { source, stride } = validateNativeCaptureSdrTile(tile, request, plane);\n completed++;\n for (let row = 0; row < request.height; row++) {\n const out = (y + row - bandStart) * rowSamples + x * 3;\n for (let i = 0, from = row * stride; i < request.width * 3; i++) {\n const s = source[from + i]!, magnitude = Math.abs(s), exposed = magnitude * scale;\n // The reference's own failure precedence first, then the float32 domain.\n if (!Number.isFinite(exposed)) throw new InvalidScientificResultError(\"Rendering exposure produced a non-finite sample.\");\n if (magnitude > FLOAT32_SAFE_MAGNITUDE || exposed > FLOAT32_SAFE_MAGNITUDE) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"SDR sample magnitude is outside the float32 execution domain.\");\n }\n if (magnitude !== 0 && magnitude < FLOAT32_SUBNORMAL_LIMIT) hostUncertain++;\n staging[out + i] = s;\n }\n }\n await yieldControl(abort.signal);\n checkAbort(abort);\n }\n const bandEnd = Math.min(height, y + tileHeight);\n if (bandEnd - bandStart >= bandRows || bandEnd === height) {\n const count = (bandEnd - bandStart) * rowSamples;\n words[0] = luminance ? count / 3 : count;\n const result = await dispatchSdrBand(runtime, pipeline, staging, count, params, abort, words[0]!);\n mergeCounters(counters, result.counters);\n requireLuminanceDomain(counters);\n requireGamutDecision(reject, counters);\n codes.set(result.codes, bandStart * rowSamples);\n bandStart = bandEnd;\n // Progress reports tiles whose codes are committed, in the reference's tile units.\n onProgress?.({ completedTileCount: completed, totalTileCount: plan.tileCount });\n }\n }\n } catch (error) {\n codes.fill(0);\n throw error;\n }\n const uncertainty = counters[SDR_COUNTER.uncertain]! + hostUncertain;\n // Per-channel linear bound: source/scale/product rounding, Reinhard add/divide, plus float64 reference slack (L ≤ 1).\n // Luminance curves: the largest per-sample bound the kernel evaluated from the a-priori formula (docs/WEBGPU.md).\n const linearBound = luminance ? counters[SDR_COUNTER.linearBoundBits]! * (1 + 2 ** -20) : float32Gamma(6);\n const execution = webGpuExecution(integerCodeBound(maximum, linearBound), uncertainty);\n return { plan, integerSamples: codes, diagnostics: sdrDiagnostics(counters, \"not-consumed\"), outputEncoding: sdrOutputEncoding(maximum),\n displayAdaptation: { kind: \"external-platform\", applied: false, displayCapabilities: \"unknown\" }, execution };\n}\n\n/** Integer native-site affine map of oriented output pixels, mirroring the reference's centre-point transform. */\nfunction orientedToNativeAffine(plan: NativeRawOutput[\"plan\"]): { ox: number; oy: number; axx: number; axy: number; ayx: number; ayy: number } {\n const g = plan.exposure.resolvedGeometry, crop = g.output.cropRect, active = g.activeCapture.nativeRect;\n const W = g.activeCapture.raster.pixelWidth, H = g.activeCapture.raster.pixelHeight, orientation = plan.exposure.geometry.orientation;\n const m = orientation === \"landscape\" ? { ox: crop.x, oy: crop.y, axx: 1, axy: 0, ayx: 0, ayy: 1 }\n : orientation === \"portrait-clockwise\" ? { ox: crop.y, oy: H - crop.x - 1, axx: 0, axy: 1, ayx: -1, ayy: 0 }\n : orientation === \"landscape-inverted\" ? { ox: W - crop.x - 1, oy: H - crop.y - 1, axx: -1, axy: 0, ayx: 0, ayy: -1 }\n : { ox: W - crop.y - 1, oy: crop.x, axx: 0, axy: -1, ayx: 1, ayy: 0 };\n const affine = { ...m, ox: m.ox + active.x, oy: m.oy + active.y };\n for (const [i, j] of [[0, 0], [crop.width - 1, 0], [0, crop.height - 1], [crop.width - 1, crop.height - 1]] as const) {\n const q = transformOrientedRasterPointToNative({ point: { x: crop.x + i + .5, y: crop.y + j + .5 }, nativeRaster: g.activeCapture.raster, orientation });\n if (Math.floor(q.x) + active.x !== affine.ox + affine.axx * i + affine.axy * j || Math.floor(q.y) + active.y !== affine.oy + affine.ayx * i + affine.ayy * j) {\n throw new InvalidConfigurationError(\"Oriented output does not map affinely onto native sites.\");\n }\n }\n return affine;\n}\n\nfunction rowSumNorm(matrix: readonly (readonly number[])[]): number {\n return Math.max(...matrix.map(row => row.reduce((sum, v) => sum + Math.abs(v), 0)));\n}\n\n/** Inputs of the a-priori float32 forward-error bound for packed RAW development (see docs/WEBGPU.md). */\nexport interface RawDevelopmentBoundInput {\n maximumTaps: number; maximumWeightSum: number; maximumSiteMagnitude: number; maximumGain: number;\n reconstruct: boolean; cameraToXyzNorm: number; xyzToRgbNorm: number; scale: number;\n}\n/**\n * Forward-error bounds (Higham γ_k, binary32) through the development chain: channel sums → gains →\n * highlight clip/blend → camera→XYZ → XYZ→linear sRGB → rendering exposure. Returns the bound on the\n * exposed value, and the classification bands for the white-balance clip and reconstruction-start\n * decisions. Internal; exported only for unit tests.\n */\nexport function rawDevelopmentErrorBounds(b: RawDevelopmentBoundInput): { exposed: number; gain: number; channel: number } {\n const C = b.maximumWeightSum * b.maximumSiteMagnitude, U = b.maximumGain * C, Bmax = Math.max(U, b.maximumGain);\n const deltaC = float32Gamma(b.maximumTaps + 2) * C + float32Gamma(1);\n const deltaU = b.maximumGain * deltaC + float32Gamma(2) * U;\n const deltaT = (deltaC + float32Gamma(3)) / (1 - RAW_HIGHLIGHT_RECONSTRUCTION_START);\n const deltaB = b.reconstruct ? 3 * deltaU + 2 * Bmax * deltaT + 2 * float32Gamma(4) * Bmax + float32Gamma(1) * b.maximumGain\n : deltaU + float32Gamma(1) * b.maximumGain;\n const deltaXyz = b.cameraToXyzNorm * (deltaB + float32Gamma(4) * Bmax);\n const deltaRgb = b.xyzToRgbNorm * (deltaXyz + float32Gamma(4) * b.cameraToXyzNorm * Bmax);\n const exposed = b.scale * (deltaRgb + float32Gamma(2) * b.xyzToRgbNorm * b.cameraToXyzNorm * Bmax);\n return { exposed, gain: deltaU + float32Gamma(1) * b.maximumGain, channel: deltaC + float32Gamma(1) };\n}\n\nasync function developRawOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: NativeRawDevelopmentInput,\n provider: NativeRawDevelopmentProvider | ((signal: AbortSignal) => Promise<void>), abort: AbortController,\n pipelines: PipelineSource): Promise<AcceleratedNativeRawDevelopmentOutput> {\n const hooks = typeof provider === \"function\" ? { yieldControl: provider } : provider;\n if (!hooks || typeof hooks.yieldControl !== \"function\" || (hooks.onProgress !== undefined && typeof hooks.onProgress !== \"function\")) {\n throw new InvalidConfigurationError(\"Development requires a host event-loop yield.\");\n }\n const yieldControl = hooks.yieldControl.bind(hooks), onProgress = hooks.onProgress?.bind(hooks);\n // Run the reference's own synchronous input-limit, halo and CFA checks, then the same RAW ownership transfer.\n const v = prepareNativeRawDevelopment(input);\n const tone = toneUniform(v.profile), luminance = tone.mode !== SDR_TONE_MODE.perChannel;\n if (v.border !== \"reject\") {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\",\n \"webgpu-f32 develops with rejected borders only; use cpu-reference for borderHandling \\\"mirror\\\".\");\n }\n if (v.exposureGain !== 1) {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\",\n \"webgpu-f32 develops without an exposure push only; use cpu-reference for exposureCompensationStops other than 0 (#556).\");\n }\n const plan = v.plan, layout = plan.frame.colorSamplingProfile.layout, native = plan.exposure.geometry.nativeRaster;\n if (layout.kind !== \"periodic-mosaic\") throw new InvalidConfigurationError(\"Development requires periodic CFA.\");\n const affine = orientedToNativeAffine(plan);\n const raw = takeNativeRawOwnership(input.raw, plan);\n const rw = layout.repeatWidthSites, rh = layout.repeatHeightSites, nativeWidth = native.pixelWidth, nativeHeight = native.pixelHeight;\n const outWidth = v.raster.pixelWidth, outHeight = v.raster.pixelHeight, profile = v.profile, development = v.development;\n const tilesPerRow = Math.ceil(outWidth / 256), totalTileCount = tilesPerRow * outHeight;\n let codes: Uint8Array | Uint16Array | null = null;\n const release = (): void => {\n raw.codes.fill(0); raw.blackLevels.fill(0); raw.digitalSaturationCodes.fill(0); raw.saturationFlags.fill(0); raw.effectiveSaturationCodes.fill(0);\n codes?.fill(0);\n };\n const scope = new GpuResourceScope(runtime);\n try {\n // Reference integrity check (bounded chunks with host yields), then the largest normalized site magnitude.\n const gate = createHostYieldGate(), rowsPerChunk = Math.max(1, Math.floor((1 << 18) / nativeWidth));\n for (let y = 0; y < nativeHeight; y += rowsPerChunk) {\n checkAbort(abort);\n checkNativeRawIntegrity(raw, nativeWidth, rw, rh, y, Math.min(nativeHeight, y + rowsPerChunk));\n if (gate.due()) { await yieldControl(abort.signal); checkAbort(abort); gate.restart(); }\n }\n const white = raw.effectiveSaturationCodes;\n // The reference's site normalization (raw-development-kernel.ts), evaluated in float64.\n const normalizedSite = (i: number, x: number, y: number): number => {\n const code = raw.codes[i]!, top = white[(y % rh) * rw + x % rw]!, black = raw.blackLevels[i]!;\n return raw.saturationFlags[i]! !== 0 || code >= top ? 1 : (code - black) / (top - black);\n };\n let maximumSiteMagnitude = 0;\n for (let y = 0, i = 0; y < nativeHeight; y++) for (let x = 0; x < nativeWidth; x++, i++) {\n const m = Math.abs(normalizedSite(i, x, y));\n if (m > maximumSiteMagnitude) maximumSiteMagnitude = m;\n }\n // CFA kernel table: phase-major, channel-minor (start, count) ranges into (offsetX, offsetY, weight) taps.\n const tapList: number[][] = [], ranges = new Uint32Array(v.phases.length * 6);\n let halo = 0, maximumTaps = 0, maximumWeightSum = 0;\n v.phases.forEach((phase, p) => phase.profile.kernels.forEach((kernel, c) => {\n ranges[(p * 3 + c) * 2] = tapList.length; ranges[(p * 3 + c) * 2 + 1] = kernel.contributions.length;\n maximumTaps = Math.max(maximumTaps, kernel.contributions.length);\n let weights = 0;\n for (const t of kernel.contributions) {\n tapList.push([t.offsetX, t.offsetY, t.weight]);\n halo = Math.max(halo, Math.abs(t.offsetX), Math.abs(t.offsetY));\n weights += Math.abs(t.weight);\n }\n maximumWeightSum = Math.max(maximumWeightSum, weights);\n }));\n const tapBuffer = new ArrayBuffer(Math.max(1, tapList.length) * 16), tapInts = new Int32Array(tapBuffer), tapFloats = new Float32Array(tapBuffer);\n tapList.forEach(([ox, oy, w], i) => { tapInts[i * 4] = ox!; tapInts[i * 4 + 1] = oy!; tapFloats[i * 4 + 2] = w!; });\n const gains = development.appliedGains, clipLevel = Math.min(...gains), M = development.cameraToXyz, X = resolveCaptureColorModel().xyzToCameraRgb;\n const reconstruct = development.highlightMode === \"reconstruct\";\n const scale = 2 ** profile.renderingExposureEv, maximum = 2 ** profile.bitDepth - 1;\n const bounds = rawDevelopmentErrorBounds({ maximumTaps, maximumWeightSum, maximumSiteMagnitude, maximumGain: Math.max(...gains),\n reconstruct, cameraToXyzNorm: rowSumNorm(M), xyzToRgbNorm: rowSumNorm(X), scale });\n const band = Math.fround(bounds.exposed * (1 + 2 ** -20));\n if (!Number.isFinite(band) || bounds.exposed > 1 || maximumSiteMagnitude * maximumWeightSum * Math.max(...gains) * scale > FLOAT32_SAFE_MAGNITUDE) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Development values are outside the float32 execution domain.\");\n }\n const reinhard = profile.toneCurve === \"positive-reinhard-per-channel\", reject = profile.gamutHandling === \"reject-out-of-range\";\n const params = new ArrayBuffer(256), ints = new Int32Array(params), words = new Uint32Array(params), floats = new Float32Array(params);\n words[52] = tone.mode; floats.set(tone.tone, 56); floats.set(tone.lum, 60);\n words[0] = outWidth; words[3] = reinhard ? 1 : 0; words[4] = reject ? 1 : 0; words[5] = rw; words[6] = rh;\n ints[8] = affine.ox; ints[9] = affine.oy; ints[10] = affine.axx; ints[11] = affine.axy; ints[12] = affine.ayx; ints[13] = affine.ayy;\n floats[16] = scale; floats[17] = maximum; floats[18] = band; floats[19] = Math.max(band, 2 ** -20);\n floats[20] = clipLevel; words[21] = reconstruct ? 1 : 0;\n floats[22] = Math.fround(bounds.gain * (1 + 2 ** -20)); floats[23] = Math.fround(bounds.channel * (1 + 2 ** -20));\n floats.set(gains, 24);\n for (let row = 0; row < 3; row++) { floats.set(M[row]!, 28 + row * 4); floats.set(X[row]!, 40 + row * 4); }\n const regionOf = (r0: number, r1: number): { x: number; y: number; width: number; height: number } => {\n const xs: number[] = [], ys: number[] = [];\n for (const [i, j] of [[0, r0], [outWidth - 1, r0], [0, r1 - 1], [outWidth - 1, r1 - 1]] as const) {\n xs.push(affine.ox + affine.axx * i + affine.axy * j); ys.push(affine.oy + affine.ayx * i + affine.ayy * j);\n }\n const x = Math.max(0, Math.min(...xs) - halo), y = Math.max(0, Math.min(...ys) - halo);\n return { x, y, width: Math.min(nativeWidth, Math.max(...xs) + halo + 1) - x, height: Math.min(nativeHeight, Math.max(...ys) + halo + 1) - y };\n };\n const regionBytes = (r0: number, r1: number): number => { const r = regionOf(r0, r1); return r.width * r.height * 4; };\n let bandRows = Math.max(1, Math.min(outHeight, Math.floor(bandBytes / (outWidth * 12))));\n while (bandRows > 1 && regionBytes(0, bandRows) > bandBytes) bandRows = Math.ceil(bandRows / 2);\n if (Math.max(regionBytes(0, bandRows), bandRows * outWidth * 12) > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One development band exceeds the device's storage binding limit.\");\n }\n const pipeline = await pipelines(\"photivra-raw-development\", RAW_DEVELOPMENT_WGSL);\n const output = profile.bitDepth === 8 ? new Uint8Array(outWidth * outHeight * 3) : new Uint16Array(outWidth * outHeight * 3);\n codes = output;\n const counters = NO_COUNTERS();\n const taps = scope.upload(\"photivra-cfa-taps\", new Uint8Array(tapBuffer), BUFFER_USAGE.STORAGE);\n const phaseTable = scope.upload(\"photivra-cfa-phases\", ranges, BUFFER_USAGE.STORAGE);\n for (let r0 = 0; r0 < outHeight; r0 += bandRows) {\n checkAbort(abort);\n const r1 = Math.min(outHeight, r0 + bandRows), region = regionOf(r0, r1), count = (r1 - r0) * outWidth;\n const normalized = new Float32Array(region.width * region.height);\n for (let y = 0; y < region.height; y++) {\n for (let x = 0, i = (region.y + y) * nativeWidth + region.x; x < region.width; x++, i++) {\n normalized[y * region.width + x] = normalizedSite(i, region.x + x, region.y + y);\n }\n }\n words[1] = count; words[2] = r0; words[7] = region.width; ints[14] = region.x; ints[15] = region.y;\n const bandScope = new GpuResourceScope(runtime);\n try {\n const source = bandScope.upload(\"photivra-raw-normalized\", normalized, BUFFER_USAGE.STORAGE);\n const out = bandScope.buffer(\"photivra-raw-codes\", count * 12, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const counterBuffer = bandScope.upload(\"photivra-raw-counters\", new Uint32Array(SDR_COUNTER_SLOTS), BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = bandScope.upload(\"photivra-raw-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: source } }, { binding: 2, resource: { buffer: taps } },\n { binding: 3, resource: { buffer: phaseTable } }, { binding: 4, resource: { buffer: out } }, { binding: 5, resource: { buffer: counterBuffer } }] });\n const [codeData, counterData] = await runComputePass(runtime, bandScope, pipeline, bindGroup,\n linearDispatch(count, LINEAR_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: out, bytes: count * 12 }, { buffer: counterBuffer, bytes: SDR_COUNTER_SLOTS * 4 }], abort.signal);\n mergeCounters(counters, new Uint32Array(counterData!, 0, SDR_COUNTER_SLOTS));\n requireLuminanceDomain(counters);\n requireGamutDecision(reject, counters);\n output.set(new Uint32Array(codeData!, 0, count * 3), r0 * outWidth * 3);\n } finally {\n bandScope.release();\n }\n onProgress?.({ completedTileCount: r1 * tilesPerRow, totalTileCount });\n await yieldControl(abort.signal);\n checkAbort(abort);\n }\n const highlight: RawHighlightDiagnostics = { mode: development.highlightMode, saturatedPixelCount: counters[SDR_COUNTER.saturatedPixels]!,\n whiteBalanceClippedSampleCount: counters[SDR_COUNTER.whiteBalanceClipped]!, reconstructedPixelCount: counters[SDR_COUNTER.reconstructedPixels]! };\n const linearBound = luminance ? counters[SDR_COUNTER.linearBoundBits]! * (1 + 2 ** -20) : bounds.exposed + float32Gamma(3);\n const execution = webGpuExecution(integerCodeBound(maximum, linearBound), counters[SDR_COUNTER.uncertain]!);\n return { raw, phaseProfiles: v.phases, colorProfile: v.color, whiteBalance: v.whiteBalance, borderHandling: v.border, width: outWidth, height: outHeight, integerSamples: output,\n diagnostics: sdrDiagnostics(counters, \"consumed-in-raw-development\"), highlight, outputEncoding: sdrOutputEncoding(maximum), rendering: profile,\n displayAdaptation: { kind: \"external-platform\", applied: false, displayCapabilities: \"unknown\" },\n imageDataPairing: \"derived-from-exact-packed-native-raw\", producerOriginVerified: false, execution };\n } catch (error) {\n release();\n throw error;\n } finally {\n scope.release();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"image-kernel-accelerator.js","sourceRoot":"","sources":["../../src/gpu/image-kernel-accelerator.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Optional image-kernel accelerator (#277). One object runs work on the execution backend the caller\n * asks for.\n * - `cpu-reference` uses the unchanged float64 engine code.\n * - `webgpu-f32` runs the project's own WGSL (WebGPU shader) kernels for the heaviest per-pixel loops.\n * Every result is labelled as a float32 approximation, with an error bound worked out in advance.\n * A requested WebGPU backend falls back to the CPU only if the caller chose\n * `fallback: \"cpu-reference\"`. The result label then names the backend that actually ran, and why.\n * The simple form `{ webgpu: true | false }` chooses the backend with one boolean, and `setWebGpuEnabled(false)`\n * (webgpu-switch.ts) keeps the whole realm on the CPU whatever callers ask. See docs/WEBGPU.md.\n */\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { getWebGpuEnabled } from \"./webgpu-switch.js\";\nimport { InvalidScientificResultError } from \"../core/validation.js\";\nimport { requireAllowlistedRecord } from \"../core/record-validation.js\";\nimport { createHostYieldGate } from \"../capture/host-yield-cadence.js\";\nimport { checkNativeRawIntegrity, createNativeRawDevelopmentTask, prepareNativeRawDevelopment, takeNativeRawOwnership,\n type NativeRawDevelopmentInput, type NativeRawDevelopmentOutput, type NativeRawDevelopmentProvider, type RawHighlightDiagnostics } from \"../capture/native-raw-development.js\";\nimport type { NativeRawOutput } from \"../capture/native-raw.js\";\nimport { resolveCaptureColorModel } from \"../color/capture-color.js\";\nimport { RAW_HIGHLIGHT_RECONSTRUCTION_START } from \"../color/sensor-color-development.js\";\nimport { transformOrientedRasterPointToNative } from \"../output/capture-geometry.js\";\nimport type { SdrRenderingProfile, SdrRenderingResult } from \"../output/sdr-rendering.js\";\nimport { calculateNativeCaptureSdrPlan, createNativeCaptureSdrTask, sdrOutputEncoding, validateNativeCaptureSdrTile, NATIVE_CAPTURE_SDR_LIMITS,\n type NativeCaptureSdrInput, type NativeCaptureSdrOutput, type NativeCaptureSdrProvider, type NativeCaptureSdrTileRequest } from \"../output/native-capture-sdr.js\";\nimport { convolveIrradianceRows, calculateIrradianceConvolutionPlan, type IrradianceConvolutionInput, type IrradianceConvolutionPlan } from \"../optics/irradiance-convolution.js\";\nimport { ImageKernelExecutionError, cpuExecution, float32Gamma, integerCodeBound, webGpuExecution, type ImageKernelAdapterDescription,\n type ImageKernelBackend, type ImageKernelExecution, type ImageKernelFallbackReason, type ImageKernelRelativeErrorBound } from \"./image-kernel-execution.js\";\nimport { BUFFER_USAGE, GpuResourceScope, abortedError, acquireWebGpuRuntime, createComputePipeline, linearDispatch, runComputePass,\n type WebGpuRuntime } from \"./webgpu-runtime.js\";\nimport { CONVOLUTION_WORKGROUP_EDGE, IRRADIANCE_CONVOLUTION_WGSL, LINEAR_WORKGROUP_SIZE, RAW_DEVELOPMENT_WGSL, SDR_COUNTER, SDR_COUNTER_SLOTS,\n SDR_LUMINANCE_WGSL, SDR_TONE_MODE, SDR_WGSL } from \"./wgsl-kernels.js\";\nimport type { PackedSensorRawInput, PackedSensorRawResult } from \"../capture/packed-sensor-raw.js\";\nimport { simulateSensorRawOnCpu, simulateSensorRawOnGpu } from \"./sensor-stage-gpu.js\";\nimport { calculateTemporalExposureSumPlan, type TemporalExposureSumInput, type TemporalExposureSumPlan } from \"../motion/temporal-exposure-sum.js\";\nimport { sumTemporalExposureOnCpu, sumTemporalExposureOnGpu } from \"./temporal-sum-gpu.js\";\nimport type { ChartRadianceBatchInput, ChartRadianceBatchPlan } from \"../facade/chart-radiance-batch.js\";\nimport { evaluateChartRadianceOnCpu, evaluateChartRadianceOnGpu } from \"./chart-radiance-gpu.js\";\nimport { ChartSceneUploads } from \"./chart-composite-gpu.js\";\n\nexport interface ChartRadianceResult {\n plan: ChartRadianceBatchPlan;\n /** Row-major (query, column): float64 for `cpu-reference`, float32 for `webgpu-f32`. */\n values: Float64Array | Float32Array;\n columns: number;\n execution: ImageKernelExecution;\n /**\n * Queries whose float32 classification fell inside its bound, recomputed on the host with the\n * reference (then rounded to float32). Empty for `cpu-reference`.\n */\n hostRecomputedQueryIndices: Uint32Array;\n}\n\nexport interface AcceleratedPackedSensorRawResult extends PackedSensorRawResult {\n execution: ImageKernelExecution;\n /**\n * Region-relative indices of the flagged sites, ascending (empty for `cpu-reference`). Every other site\n * equals the reference; recomputing these sites with the reference makes the whole region bit-identical.\n */\n flaggedSiteIndices: Uint32Array;\n}\nexport interface TemporalExposureSumResult {\n plan: TemporalExposureSumPlan;\n /** Float64 for `cpu-reference`, float32 for `webgpu-f32`; row-major, same grid as the input. */\n values: Float64Array | Float32Array;\n execution: ImageKernelExecution;\n}\n\nexport interface ImageKernelAcceleratorOptions {\n /**\n * The one-boolean form. `true` is `backend: \"webgpu-f32\"` with `fallback: \"cpu-reference\"` unless `fallback` is given;\n * `false` is `backend: \"cpu-reference\"`. Give `webgpu` or `backend`, not both.\n */\n webgpu?: boolean;\n /** Requested backend. `cpu-reference` is the reference and never touches WebGPU. Required unless `webgpu` is given. */\n backend?: ImageKernelBackend;\n /** Required with `backend: \"webgpu-f32\"`: use the CPU reference (labelled) or fail when WebGPU cannot be acquired. */\n fallback?: \"cpu-reference\" | \"fail\";\n /** WebGPU entry point; defaults to `navigator.gpu`. Supply a worker's `navigator.gpu` explicitly if needed. */\n gpu?: unknown;\n powerPreference?: \"low-power\" | \"high-performance\";\n /** Largest single GPU band buffer in bytes (4 KiB up to the device limit); default min(64 MiB, device limit). Affects memory only, never results. */\n maximumBandBytes?: number;\n /** Aborts adapter/device acquisition. */\n signal?: AbortSignal;\n}\nexport interface ImageKernelRunOptions {\n signal?: AbortSignal;\n /** Yields to the host event loop between CPU reference chunks and GPU bands. Convolution, sensor and temporal stages; tasks keep their own yields. */\n yieldControl?: (signal: AbortSignal) => Promise<void>;\n}\nexport type ImageKernelAcceleratorState = \"ready\" | \"lost\" | \"disposed\";\nexport interface AcceleratedNativeCaptureSdrOutput extends NativeCaptureSdrOutput { execution: ImageKernelExecution }\nexport interface AcceleratedNativeRawDevelopmentOutput extends NativeRawDevelopmentOutput { execution: ImageKernelExecution }\nexport interface IrradianceConvolutionResult {\n plan: IrradianceConvolutionPlan;\n /** Float64 for `cpu-reference`, float32 for `webgpu-f32`; row-major, same grid as the input. */\n values: Float64Array | Float32Array;\n /** Float64 sums of the input and output samples. Their difference is the amount lost across the grid edge. */\n inputSum: number;\n outputSum: number;\n execution: ImageKernelExecution;\n}\n/** Runs one operation at a time. dispose() releases the device and every buffer. */\nexport interface ImageKernelAccelerator {\n readonly backend: ImageKernelBackend;\n readonly requestedBackend: ImageKernelBackend;\n readonly fallbackReason: ImageKernelFallbackReason | null;\n /** #481: the adapter of a `webgpu-f32` accelerator's device (null for `cpu-reference`, or when the browser gives no `GPUAdapter.info`). */\n readonly adapter: ImageKernelAdapterDescription | null;\n readonly state: ImageKernelAcceleratorState;\n renderNativeCaptureSdr(input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider, options?: ImageKernelRunOptions): Promise<AcceleratedNativeCaptureSdrOutput>;\n /** Takes ownership of `input.raw` exactly like `createNativeRawDevelopmentTask` (the caller's arrays are detached). */\n developNativeRaw(input: NativeRawDevelopmentInput, provider: NativeRawDevelopmentProvider | ((signal: AbortSignal) => Promise<void>),\n options?: ImageKernelRunOptions): Promise<AcceleratedNativeRawDevelopmentOutput>;\n convolveIrradiance(input: IrradianceConvolutionInput, options?: ImageKernelRunOptions): Promise<IrradianceConvolutionResult>;\n /** Sensor stage on typed arrays: seeded charge, read noise and ADC to RAW codes (see `simulatePackedSensorRaw`). */\n simulateSensorRaw(input: PackedSensorRawInput, options?: ImageKernelRunOptions): Promise<AcceleratedPackedSensorRawResult>;\n /** Exposure and motion as a weighted sum of shifted frames (see `calculateTemporalExposureSum`). */\n sumTemporalExposure(input: TemporalExposureSumInput, options?: ImageKernelRunOptions): Promise<TemporalExposureSumResult>;\n /** Chart scene radiance or its spectral integral at many frame points (see `calculateChartRadianceBatch`). */\n evaluateChartRadiance(input: ChartRadianceBatchInput, options?: ImageKernelRunOptions): Promise<ChartRadianceResult>;\n dispose(): void;\n}\n\nconst DEFAULT_BAND_BYTES = 64 * 1024 * 1024;\nconst MINIMUM_BAND_BYTES = 4096;\n/** Limit on multiply-adds per convolution dispatch, to stay clear of the GPU watchdog timeout. */\nconst MAXIMUM_CONVOLUTION_TAPS_PER_DISPATCH = 2 ** 30;\n/** Inputs whose float64 product with the rendering scale exceeds this are outside the float32 domain. */\nconst FLOAT32_SAFE_MAGNITUDE = 2 ** 120;\nconst FLOAT32_SUBNORMAL_LIMIT = 2 ** -126;\nconst NO_COUNTERS = (): number[] => new Array<number>(SDR_COUNTER_SLOTS).fill(0);\n\nfunction runOptions(value: ImageKernelRunOptions | undefined): ImageKernelRunOptions {\n if (value === undefined) return {};\n const r = requireAllowlistedRecord(value, [\"signal\", \"yieldControl\"], \"Invalid image-kernel run options.\");\n if ((r.signal !== undefined && (typeof r.signal !== \"object\" || r.signal === null || typeof (r.signal as AbortSignal).aborted !== \"boolean\")) ||\n (r.yieldControl !== undefined && typeof r.yieldControl !== \"function\")) {\n throw new InvalidConfigurationError(\"Invalid image-kernel run options.\");\n }\n return value;\n}\n\n/** Links an optional caller signal to an internal controller; `dispose` removes the listener. */\nfunction linkedAbort(signal: AbortSignal | undefined): { controller: AbortController; dispose: () => void } {\n const controller = new AbortController();\n if (!signal) return { controller, dispose: () => undefined };\n if (signal.aborted) { controller.abort(); return { controller, dispose: () => undefined }; }\n const listener = (): void => controller.abort();\n signal.addEventListener(\"abort\", listener, { once: true });\n return { controller, dispose: (): void => signal.removeEventListener(\"abort\", listener) };\n}\n\n/** Requests a backend. Never swaps backends silently: a fallback must be set in the options and is shown in every result label. */\nexport async function createImageKernelAccelerator(options: ImageKernelAcceleratorOptions): Promise<ImageKernelAccelerator> {\n const r = requireAllowlistedRecord(options, [\"webgpu\", \"backend\", \"fallback\", \"gpu\", \"powerPreference\", \"maximumBandBytes\", \"signal\"],\n \"Invalid image-kernel accelerator options.\");\n if (r.webgpu !== undefined && (typeof r.webgpu !== \"boolean\" || r.backend !== undefined)) {\n throw new InvalidConfigurationError(\"Invalid image-kernel accelerator options: webgpu must be a boolean, and excludes backend.\");\n }\n // The boolean form resolves to the explicit form; everything below sees only backend and fallback.\n const backend = r.webgpu === undefined ? r.backend : r.webgpu ? \"webgpu-f32\" : \"cpu-reference\";\n const fallback = r.fallback ?? (r.webgpu === true ? \"cpu-reference\" : undefined);\n if ((backend !== \"cpu-reference\" && backend !== \"webgpu-f32\") ||\n (backend === \"webgpu-f32\" && fallback !== \"cpu-reference\" && fallback !== \"fail\") ||\n (backend === \"cpu-reference\" && fallback !== undefined) ||\n (r.powerPreference !== undefined && r.powerPreference !== \"low-power\" && r.powerPreference !== \"high-performance\") ||\n (r.maximumBandBytes !== undefined && (typeof r.maximumBandBytes !== \"number\" || !Number.isSafeInteger(r.maximumBandBytes) ||\n r.maximumBandBytes < MINIMUM_BAND_BYTES)) ||\n (r.signal !== undefined && (typeof r.signal !== \"object\" || r.signal === null || typeof (r.signal as AbortSignal).aborted !== \"boolean\"))) {\n throw new InvalidConfigurationError(\"Invalid image-kernel accelerator options: backend, explicit WebGPU fallback, power preference or band size.\");\n }\n const requested = backend;\n if (requested === \"cpu-reference\") return createAccelerator(requested, null, null, DEFAULT_BAND_BYTES);\n if (!getWebGpuEnabled()) {\n // The realm's switch (setWebGpuEnabled(false)) is honoured before any adapter is requested.\n const message = \"WebGPU is switched off in this realm (setWebGpuEnabled(false)).\";\n if (fallback === \"fail\") throw new ImageKernelExecutionError(\"webgpu-disabled\", message);\n return createAccelerator(requested, \"webgpu-disabled\", null, DEFAULT_BAND_BYTES);\n }\n const gpu = \"gpu\" in r ? r.gpu : (globalThis as { navigator?: { gpu?: unknown } }).navigator?.gpu;\n const acquired = await acquireWebGpuRuntime(gpu, options.powerPreference, options.signal);\n if (\"failure\" in acquired) {\n if (fallback === \"fail\") throw new ImageKernelExecutionError(acquired.failure, acquired.message);\n return createAccelerator(requested, acquired.failure, null, DEFAULT_BAND_BYTES);\n }\n const runtime = acquired.runtime;\n const band = Math.min(options.maximumBandBytes ?? DEFAULT_BAND_BYTES, runtime.maximumStorageBindingBytes);\n return createAccelerator(requested, null, runtime, band);\n}\n\n/** The runtime behind each accelerator this module created (#481: a prepared display view shares an accelerator's device through it). */\nconst RUNTIMES = new WeakMap<ImageKernelAccelerator, WebGpuRuntime | null>();\n/**\n * Internal (#481, not exported from the package): the WebGPU runtime (`WebGpuRuntime`, typed `unknown` here so no WebGPU type reaches\n * the published declarations) of an accelerator created by {@link createImageKernelAccelerator}, null for one on the CPU\n * reference, or undefined when `value` is not such an accelerator.\n */\nexport function acceleratorRuntime(value: unknown): unknown {\n return typeof value === \"object\" && value !== null ? RUNTIMES.get(value as ImageKernelAccelerator) : undefined;\n}\n/**\n * Internal (#481, not exported from the package): runs the `webgpu-f32` convolution on a runtime (`WebGpuRuntime`, passed as\n * `unknown` to keep WebGPU types out of the published declarations), for the display view's run-time conformance self-check.\n * Pipelines are compiled per call; `signal` aborts the run.\n */\nexport async function convolveIrradianceOnRuntime(runtime: unknown, input: IrradianceConvolutionInput, signal: AbortSignal | undefined): Promise<IrradianceConvolutionResult> {\n const gpu = runtime as WebGpuRuntime, plan = calculateIrradianceConvolutionPlan(input), link = linkedAbort(signal);\n try {\n return await convolveOnGpu(gpu, 1 << 20, plan, input, link.controller, undefined, (label, code) => createComputePipeline(gpu, label, code, link.controller.signal));\n } finally { link.dispose(); }\n}\n\nfunction createAccelerator(requested: ImageKernelBackend, fallbackReason: ImageKernelFallbackReason | null,\n runtime: WebGpuRuntime | null, bandBytes: number): ImageKernelAccelerator {\n let disposed = false, busy = false;\n const pipelines = new Map<string, Promise<GPUComputePipeline>>();\n // #477: a scene's chart records are uploaded once and reused by later calls (a prepared view's parts).\n const chartUploads = runtime ? new ChartSceneUploads(runtime) : null;\n const backend: ImageKernelBackend = runtime ? \"webgpu-f32\" : \"cpu-reference\";\n function state(): ImageKernelAcceleratorState { return disposed ? \"disposed\" : runtime?.isLost() ? \"lost\" : \"ready\"; }\n function pipeline(gpu: WebGpuRuntime, label: string, code: string, signal: AbortSignal): Promise<GPUComputePipeline> {\n let pending = pipelines.get(label);\n if (!pending) {\n pending = createComputePipeline(gpu, label, code, undefined);\n pipelines.set(label, pending);\n pending.catch(() => pipelines.delete(label));\n }\n return gpu.guard(pending, signal);\n }\n /** Runs one operation at a time, and turns aborts, disposal and device loss into domain errors. */\n async function operate<T>(signal: AbortSignal | undefined, body: (abort: AbortController) => Promise<T>): Promise<T> {\n if (disposed) throw new ImageKernelExecutionError(\"disposed\", \"The image-kernel accelerator was disposed.\");\n if (runtime?.isLost()) throw new ImageKernelExecutionError(\"device-lost\", \"The WebGPU device was lost; create a new accelerator.\");\n if (busy) throw new ImageKernelExecutionError(\"busy\", \"The image-kernel accelerator runs one operation at a time.\");\n busy = true;\n const link = linkedAbort(signal);\n try {\n if (link.controller.signal.aborted) throw abortedError();\n return await body(link.controller);\n } catch (error) {\n link.controller.abort();\n if (disposed) throw new ImageKernelExecutionError(\"disposed\", \"The image-kernel accelerator was disposed; no output is available.\");\n if (signal?.aborted && !(error instanceof ImageKernelExecutionError && error.reason === \"device-lost\")) throw abortedError();\n throw error;\n } finally {\n link.dispose();\n busy = false;\n }\n }\n const cpuLabel = (): ImageKernelExecution => cpuExecution(requested, fallbackReason);\n const accelerator: ImageKernelAccelerator = {\n backend, requestedBackend: requested, fallbackReason, adapter: runtime?.adapter ?? null,\n get state(): ImageKernelAcceleratorState { return state(); },\n async renderNativeCaptureSdr(input, provider, options): Promise<AcceleratedNativeCaptureSdrOutput> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) {\n const task = createNativeCaptureSdrTask(input, provider);\n const cancel = (): void => task.cancel();\n abort.signal.addEventListener(\"abort\", cancel, { once: true });\n try { await task.run(); return { ...task.takeOutput(), execution: cpuLabel() }; }\n finally { abort.signal.removeEventListener(\"abort\", cancel); task.dispose(); }\n }\n return renderSdrOnGpu(runtime, bandBytes, input, provider, abort, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async developNativeRaw(input, provider, options): Promise<AcceleratedNativeRawDevelopmentOutput> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) {\n const task = createNativeRawDevelopmentTask(input, provider);\n const cancel = (): void => task.cancel();\n abort.signal.addEventListener(\"abort\", cancel, { once: true });\n try { await task.run(); return { ...task.takeOutput(), execution: cpuLabel() }; }\n finally { abort.signal.removeEventListener(\"abort\", cancel); task.dispose(); }\n }\n return developRawOnGpu(runtime, bandBytes, input, provider, abort, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async convolveIrradiance(input, options): Promise<IrradianceConvolutionResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n const plan = calculateIrradianceConvolutionPlan(input);\n if (!runtime) return convolveOnCpu(plan, input, abort, run.yieldControl, cpuLabel());\n return convolveOnGpu(runtime, bandBytes, plan, input, abort, run.yieldControl,\n (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async simulateSensorRaw(input, options): Promise<AcceleratedPackedSensorRawResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) return simulateSensorRawOnCpu(input, abort, run.yieldControl, cpuLabel());\n return simulateSensorRawOnGpu(runtime, bandBytes, input, abort, run.yieldControl, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async sumTemporalExposure(input, options): Promise<TemporalExposureSumResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n const plan = calculateTemporalExposureSumPlan(input);\n if (!runtime) return sumTemporalExposureOnCpu(plan, input, abort, run.yieldControl, cpuLabel());\n return sumTemporalExposureOnGpu(runtime, bandBytes, plan, input, abort, run.yieldControl,\n (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async evaluateChartRadiance(input, options): Promise<ChartRadianceResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) return evaluateChartRadianceOnCpu(input, abort, run.yieldControl, cpuLabel());\n // #477: the chart stage consults the realm's switch on every call; off, the reference runs and the label says so.\n if (!getWebGpuEnabled()) return evaluateChartRadianceOnCpu(input, abort, run.yieldControl, cpuExecution(requested, \"webgpu-disabled\"));\n return evaluateChartRadianceOnGpu(runtime, bandBytes, input, abort, run.yieldControl, (label, code) => pipeline(runtime, label, code, abort.signal), chartUploads!);\n });\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n pipelines.clear();\n chartUploads?.release();\n runtime?.destroy();\n }\n };\n RUNTIMES.set(accelerator, runtime);\n return accelerator;\n}\n\ntype PipelineSource = (label: string, code: string) => Promise<GPUComputePipeline>;\n\nfunction checkAbort(abort: AbortController): void {\n if (abort.signal.aborted) throw abortedError();\n}\n\nfunction sumOf(values: Float32Array | Float64Array): number {\n let sum = 0;\n for (let i = 0; i < values.length; i++) sum += values[i]!;\n return sum;\n}\n\nasync function convolveOnCpu(plan: IrradianceConvolutionPlan, input: IrradianceConvolutionInput, abort: AbortController,\n yieldControl: ImageKernelRunOptions[\"yieldControl\"], execution: ImageKernelExecution): Promise<IrradianceConvolutionResult> {\n // Snapshot so a caller mutation during host yields cannot change the reference.\n const samples = input.samples.slice(), kernels = input.kernels.slice();\n const values = new Float64Array(plan.width * plan.height);\n const rowsPerChunk = Math.max(1, Math.floor(2_000_000 / Math.max(1, plan.width * plan.tapCount)));\n const gate = createHostYieldGate();\n for (let y = 0; y < plan.height; y += rowsPerChunk) {\n checkAbort(abort);\n const end = Math.min(plan.height, y + rowsPerChunk);\n convolveIrradianceRows(plan, samples, kernels, y, end, values.subarray(y * plan.width, end * plan.width));\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n checkAbort(abort);\n return { plan, values, inputSum: sumOf(samples), outputSum: sumOf(values), execution };\n}\n\nasync function convolveOnGpu(runtime: WebGpuRuntime, bandBytes: number, plan: IrradianceConvolutionPlan, input: IrradianceConvolutionInput,\n abort: AbortController, yieldControl: ImageKernelRunOptions[\"yieldControl\"], pipelines: PipelineSource): Promise<IrradianceConvolutionResult> {\n const { width, height, kernelRadius: r, tapCount } = plan;\n const samples = new Float32Array(input.samples), kernels = new Float32Array(input.kernels), inputSum = sumOf(input.samples);\n const errorBound = irradianceConvolutionErrorBound(plan, input.kernels);\n if (kernels.byteLength > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"PSF kernels exceed the device's storage binding limit.\");\n }\n const rowBytes = width * 4;\n let rows = Math.min(height, Math.floor(bandBytes / rowBytes) - 2 * r, Math.floor(MAXIMUM_CONVOLUTION_TAPS_PER_DISPATCH / (width * tapCount)));\n if (rows < 1) {\n if ((1 + 2 * r) * rowBytes > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One convolution band exceeds the device's storage binding limit.\");\n }\n rows = 1;\n }\n const values = new Float32Array(width * height);\n const pipeline = await pipelines(\"photivra-irradiance-convolution\", IRRADIANCE_CONVOLUTION_WGSL);\n const scope = new GpuResourceScope(runtime);\n try {\n const kernelBuffer = scope.upload(\"photivra-psf-kernels\", kernels, BUFFER_USAGE.STORAGE);\n const gate = createHostYieldGate();\n for (let y0 = 0; y0 < height; y0 += rows) {\n checkAbort(abort);\n const y1 = Math.min(height, y0 + rows), in0 = Math.max(0, y0 - r), in1 = Math.min(height, y1 + r);\n const params = new Uint32Array([width, height, r, 2 * r + 1, plan.patchWidth, plan.patchHeight, plan.patchColumns, plan.patchRows,\n y0, y1 - y0, in0, tapCount]);\n // Per-band scope: every buffer of the band, its readback included, is destroyed before the next band.\n const bandScope = new GpuResourceScope(runtime);\n try {\n const band = bandScope.upload(\"photivra-irradiance-band\", samples.subarray(in0 * width, in1 * width), BUFFER_USAGE.STORAGE);\n const result = bandScope.buffer(\"photivra-irradiance-result\", (y1 - y0) * rowBytes, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = bandScope.upload(\"photivra-irradiance-params\", 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: band } },\n { binding: 2, resource: { buffer: kernelBuffer } }, { binding: 3, resource: { buffer: result } }] });\n const groups: [number, number] = [Math.ceil(width / CONVOLUTION_WORKGROUP_EDGE), Math.ceil((y1 - y0) / CONVOLUTION_WORKGROUP_EDGE)];\n const [data] = await runComputePass(runtime, bandScope, pipeline, bindGroup, groups, [{ buffer: result, bytes: (y1 - y0) * rowBytes }], abort.signal);\n values.set(new Float32Array(data!, 0, (y1 - y0) * width), y0 * width);\n } finally {\n bandScope.release();\n }\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n } finally {\n scope.release();\n }\n checkAbort(abort);\n const execution = webGpuExecution(errorBound, 0);\n return { plan, values, inputSum, outputSum: sumOf(values), execution };\n}\n\n/**\n * A-priori float32 bound for every convolution output (all terms are non-negative):\n * |v_f32 − v_ref| ≤ (γ_{T+3} + 2^-40)·v_ref + 2T·2^-126 + 2·S_max·Σ_t max_p w_{p,t}·[0 < w_{p,t} < 2^-126].\n * The last term covers weights below the float32 normal range: the host conversion may round them to zero or\n * a subnormal (|f32(w) − w| ≤ w) and the GPU may flush them, so their whole product w·s (s ≤ S_max) is at risk,\n * with a factor 2 for the conversion and the later roundings. It is zero when no such weight exists.\n */\nexport function irradianceConvolutionErrorBound(plan: IrradianceConvolutionPlan, kernels: Float32Array | Float64Array): ImageKernelRelativeErrorBound {\n const { tapCount } = plan, patches = kernels.length / tapCount;\n let atRisk = 0;\n for (let t = 0; t < tapCount; t++) {\n let largest = 0;\n for (let p = 0; p < patches; p++) {\n const w = kernels[p * tapCount + t]!;\n if (w < FLOAT32_SUBNORMAL_LIMIT && w > largest) largest = w;\n }\n atRisk += largest;\n }\n return { kind: \"relative-to-reference\", relative: float32Gamma(tapCount + 3) + 2 ** -40,\n absolute: 2 * tapCount * FLOAT32_SUBNORMAL_LIMIT + 2 * plan.maximumSampleMagnitude * atRisk };\n}\n\n/** Uniform values of a tone curve for the float32 kernels (see wgsl-kernels.ts, LUMINANCE_FUNCTIONS). */\ninterface ToneUniform { mode: number; tone: [number, number, number, number]; lum: [number, number, number, number] }\n\n/**\n * The tone curve's kernel constants. Luminance curves run on the GPU within this float32 domain:\n * extended Reinhard with Lw ≥ 2^-20; Naka–Rushton with exponent n ≥ 1 (below 1 its ratio f(L)/L is\n * unbounded as L → 0, so no useful bound exists near L = 0), 1/g(Lw) ≤ 2^60 and σⁿ ≥ 2^-60.\n * @internal\n */\nexport function toneUniform(profile: Pick<SdrRenderingProfile, \"toneCurve\" | \"toneCurveParameters\">): ToneUniform {\n // #601: the hue-preserving desaturation has no float32 kernel; the accelerator's fallback policy runs the CPU reference.\n if ((profile as Partial<SdrRenderingProfile>).gamutHandling === \"desaturate-to-luminance\") throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"webgpu-f32 does not implement gamutHandling desaturate-to-luminance; use cpu-reference.\");\n const [kr, kg, kb] = resolveCaptureColorModel().cameraRgbToXyz[1]! as readonly number[];\n const p = profile.toneCurveParameters;\n if (profile.toneCurve === \"identity\" || profile.toneCurve === \"positive-reinhard-per-channel\") {\n return { mode: SDR_TONE_MODE.perChannel, tone: [0, 0, 0, 0], lum: [0, 0, 0, 0] };\n }\n if (profile.toneCurve === \"extended-reinhard-luminance\" && p && !(\"exponent\" in p)) {\n if (!(p.whiteLuminance >= 2 ** -20)) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Extended Reinhard white luminance below 2^-20 is outside the float32 domain.\");\n return { mode: SDR_TONE_MODE.extendedReinhard, tone: [1 / (p.whiteLuminance * p.whiteLuminance), 0, 0, 0], lum: [kr!, kg!, kb!, 1] };\n }\n if (profile.toneCurve === \"naka-rushton-luminance\" && p && \"exponent\" in p) {\n const q = p as Extract<NonNullable<SdrRenderingProfile[\"toneCurveParameters\"]>, { exponent: number }>, n = q.exponent, sigma = q.semiSaturation;\n if (!(n >= 1)) {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"webgpu-f32 implements Naka–Rushton with exponent ≥ 1; use cpu-reference below 1.\");\n }\n const white = 1 / (1 + (sigma / q.whiteLuminance) ** n), sigmaN = sigma ** n;\n if (!(1 / white <= 2 ** 60 && sigmaN >= 2 ** -60)) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Naka–Rushton parameters are outside the float32 domain.\");\n }\n return { mode: SDR_TONE_MODE.nakaRushton, tone: [sigma, n, 1 / white, sigmaN], lum: [kr!, kg!, kb!, Math.max(1, n - 1)] };\n }\n throw new InvalidConfigurationError(\"Unsupported SDR rendering profile.\");\n}\n\n/** Adds one band's counters into the run's; the luminance bound slot keeps the largest float32 value. */\nfunction mergeCounters(counters: number[], band: Uint32Array): void {\n band.forEach((value, i) => {\n if (i === SDR_COUNTER.linearBoundBits) counters[i] = Math.max(counters[i]!, new Float32Array(new Uint32Array([value]).buffer)[0]!);\n else counters[i]! += value;\n });\n}\n\n/** Fails closed when a luminance-toned sample left the float32 domain. */\nfunction requireLuminanceDomain(counters: readonly number[]): void {\n if (counters[SDR_COUNTER.luminanceDomain]! > 0) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"A luminance-toned sample is outside the float32 execution domain.\");\n }\n}\n\nfunction sdrDiagnostics(counters: readonly number[], captureSaturation: SdrRenderingResult[\"diagnostics\"][\"captureSaturation\"]): SdrRenderingResult[\"diagnostics\"] {\n return { renderingNegativeSampleCount: counters[SDR_COUNTER.negative]!, renderingAboveReferenceSampleCount: counters[SDR_COUNTER.above]!,\n toneChangedSampleCount: counters[SDR_COUNTER.changed]!, gamutClippedLowSampleCount: counters[SDR_COUNTER.low]!,\n gamutClippedHighSampleCount: counters[SDR_COUNTER.high]!, captureSaturation };\n}\n\n/** Throws (fails closed) when a reject-mode gamut decision is out of range or cannot be decided in float32. */\nfunction requireGamutDecision(reject: boolean, counters: readonly number[]): void {\n if (counters[SDR_COUNTER.outOfGamut]! > 0) throw new InvalidConfigurationError(\"Tone output exceeds the declared SDR gamut range.\");\n if (reject && counters[SDR_COUNTER.gamutUncertain]! > 0) {\n throw new ImageKernelExecutionError(\"indeterminate-float32-classification\",\n \"Reject-out-of-range gamut handling is not decidable in float32 for at least one sample; use cpu-reference.\");\n }\n}\n\nasync function dispatchSdrBand(runtime: WebGpuRuntime, pipeline: GPUComputePipeline, staging: Float32Array<ArrayBuffer>, count: number,\n params: ArrayBuffer, abort: AbortController, invocations: number): Promise<{ codes: Uint32Array; counters: Uint32Array }> {\n const scope = new GpuResourceScope(runtime);\n try {\n const source = scope.upload(\"photivra-sdr-source\", staging.subarray(0, count), BUFFER_USAGE.STORAGE);\n const codes = scope.buffer(\"photivra-sdr-codes\", count * 4, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const counters = scope.upload(\"photivra-sdr-counters\", new Uint32Array(SDR_COUNTER_SLOTS), BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = scope.upload(\"photivra-sdr-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: source } },\n { binding: 2, resource: { buffer: codes } }, { binding: 3, resource: { buffer: counters } }] });\n const [codeData, counterData] = await runComputePass(runtime, scope, pipeline, bindGroup,\n linearDispatch(invocations, LINEAR_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: codes, bytes: count * 4 }, { buffer: counters, bytes: SDR_COUNTER_SLOTS * 4 }], abort.signal);\n return { codes: new Uint32Array(codeData!, 0, count), counters: new Uint32Array(counterData!, 0, SDR_COUNTER_SLOTS) };\n } finally {\n scope.release();\n }\n}\n\nasync function renderSdrOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider,\n abort: AbortController, pipelines: PipelineSource): Promise<AcceleratedNativeCaptureSdrOutput> {\n const plan = calculateNativeCaptureSdrPlan(input);\n if (!provider || typeof provider.readTile !== \"function\" || typeof provider.yieldControl !== \"function\") {\n throw new InvalidConfigurationError(\"Native SDR requires a tile reader and event-loop yield.\");\n }\n if (provider.onProgress !== undefined && typeof provider.onProgress !== \"function\") throw new InvalidConfigurationError(\"Native SDR onProgress must be a function.\");\n const readTile = provider.readTile.bind(provider), yieldControl = provider.yieldControl.bind(provider), onProgress = provider.onProgress?.bind(provider);\n const tone = toneUniform(plan.profile), luminance = tone.mode !== SDR_TONE_MODE.perChannel;\n const plane = plan.capture.planes.find(p => p.id === plan.sourcePlaneId)!;\n if (plane.storage.kind === \"inline-float64\") throw new InvalidConfigurationError(\"External native source required.\");\n const storage = plane.storage, profile = plan.profile, width = plane.pixelWidth, height = plane.pixelHeight;\n const scale = 2 ** profile.renderingExposureEv / plane.referenceWhiteValue, maximum = 2 ** profile.bitDepth - 1;\n const scale32 = Math.fround(scale);\n if (!(scale32 > 0 && Number.isFinite(scale32))) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"SDR scale is outside float32.\");\n const tileHeight = NATIVE_CAPTURE_SDR_LIMITS.tileHeight, rowSamples = width * 3;\n const bandRows = Math.max(tileHeight, Math.floor(bandBytes / (rowSamples * 4) / tileHeight) * tileHeight);\n if (Math.min(bandRows, height) * rowSamples * 4 > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One SDR tile row exceeds the device's storage binding limit.\");\n }\n const reinhard = profile.toneCurve === \"positive-reinhard-per-channel\", reject = profile.gamutHandling === \"reject-out-of-range\";\n const params = new ArrayBuffer(luminance ? 64 : 32), words = new Uint32Array(params), floats = new Float32Array(params);\n if (luminance) {\n words[1] = reject ? 1 : 0; words[2] = tone.mode; floats[4] = scale32; floats[5] = maximum; floats[6] = 2 ** -20;\n floats.set(tone.tone, 8); floats.set(tone.lum, 12);\n } else {\n words[1] = reinhard ? 1 : 0; words[2] = reject ? 1 : 0; floats[4] = scale32; floats[5] = maximum; floats[6] = 2 ** -20;\n }\n const pipeline = luminance ? await pipelines(\"photivra-sdr-luminance\", SDR_LUMINANCE_WGSL) : await pipelines(\"photivra-sdr\", SDR_WGSL);\n const codes = profile.bitDepth === 8 ? new Uint8Array(plan.outputBytes) : new Uint16Array(plan.outputBytes / 2);\n const staging = new Float32Array(Math.min(bandRows, height) * rowSamples);\n const counters = NO_COUNTERS();\n let hostUncertain = 0, bandStart = 0, completed = 0;\n try {\n for (let y = 0; y < height; y += tileHeight) {\n for (let x = 0; x < width; x += NATIVE_CAPTURE_SDR_LIMITS.tileWidth) {\n checkAbort(abort);\n const request: NativeCaptureSdrTileRequest = Object.freeze({ captureId: plan.capture.captureId, sourcePlaneId: plane.id,\n artifactId: storage.artifactId, sha256: storage.sha256, x, y,\n width: Math.min(NATIVE_CAPTURE_SDR_LIMITS.tileWidth, width - x), height: Math.min(tileHeight, height - y) });\n const tile = await readTile(request, abort.signal);\n checkAbort(abort);\n const { source, stride } = validateNativeCaptureSdrTile(tile, request, plane);\n completed++;\n for (let row = 0; row < request.height; row++) {\n const out = (y + row - bandStart) * rowSamples + x * 3;\n for (let i = 0, from = row * stride; i < request.width * 3; i++) {\n const s = source[from + i]!, magnitude = Math.abs(s), exposed = magnitude * scale;\n // The reference's own failure precedence first, then the float32 domain.\n if (!Number.isFinite(exposed)) throw new InvalidScientificResultError(\"Rendering exposure produced a non-finite sample.\");\n if (magnitude > FLOAT32_SAFE_MAGNITUDE || exposed > FLOAT32_SAFE_MAGNITUDE) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"SDR sample magnitude is outside the float32 execution domain.\");\n }\n if (magnitude !== 0 && magnitude < FLOAT32_SUBNORMAL_LIMIT) hostUncertain++;\n staging[out + i] = s;\n }\n }\n await yieldControl(abort.signal);\n checkAbort(abort);\n }\n const bandEnd = Math.min(height, y + tileHeight);\n if (bandEnd - bandStart >= bandRows || bandEnd === height) {\n const count = (bandEnd - bandStart) * rowSamples;\n words[0] = luminance ? count / 3 : count;\n const result = await dispatchSdrBand(runtime, pipeline, staging, count, params, abort, words[0]!);\n mergeCounters(counters, result.counters);\n requireLuminanceDomain(counters);\n requireGamutDecision(reject, counters);\n codes.set(result.codes, bandStart * rowSamples);\n bandStart = bandEnd;\n // Progress reports tiles whose codes are committed, in the reference's tile units.\n onProgress?.({ completedTileCount: completed, totalTileCount: plan.tileCount });\n }\n }\n } catch (error) {\n codes.fill(0);\n throw error;\n }\n const uncertainty = counters[SDR_COUNTER.uncertain]! + hostUncertain;\n // Per-channel linear bound: source/scale/product rounding, Reinhard add/divide, plus float64 reference slack (L ≤ 1).\n // Luminance curves: the largest per-sample bound the kernel evaluated from the a-priori formula (docs/WEBGPU.md).\n const linearBound = luminance ? counters[SDR_COUNTER.linearBoundBits]! * (1 + 2 ** -20) : float32Gamma(6);\n const execution = webGpuExecution(integerCodeBound(maximum, linearBound), uncertainty);\n return { plan, integerSamples: codes, diagnostics: sdrDiagnostics(counters, \"not-consumed\"), outputEncoding: sdrOutputEncoding(maximum),\n displayAdaptation: { kind: \"external-platform\", applied: false, displayCapabilities: \"unknown\" }, execution };\n}\n\n/** Integer native-site affine map of oriented output pixels, mirroring the reference's centre-point transform. */\nfunction orientedToNativeAffine(plan: NativeRawOutput[\"plan\"]): { ox: number; oy: number; axx: number; axy: number; ayx: number; ayy: number } {\n const g = plan.exposure.resolvedGeometry, crop = g.output.cropRect, active = g.activeCapture.nativeRect;\n const W = g.activeCapture.raster.pixelWidth, H = g.activeCapture.raster.pixelHeight, orientation = plan.exposure.geometry.orientation;\n const m = orientation === \"landscape\" ? { ox: crop.x, oy: crop.y, axx: 1, axy: 0, ayx: 0, ayy: 1 }\n : orientation === \"portrait-clockwise\" ? { ox: crop.y, oy: H - crop.x - 1, axx: 0, axy: 1, ayx: -1, ayy: 0 }\n : orientation === \"landscape-inverted\" ? { ox: W - crop.x - 1, oy: H - crop.y - 1, axx: -1, axy: 0, ayx: 0, ayy: -1 }\n : { ox: W - crop.y - 1, oy: crop.x, axx: 0, axy: -1, ayx: 1, ayy: 0 };\n const affine = { ...m, ox: m.ox + active.x, oy: m.oy + active.y };\n for (const [i, j] of [[0, 0], [crop.width - 1, 0], [0, crop.height - 1], [crop.width - 1, crop.height - 1]] as const) {\n const q = transformOrientedRasterPointToNative({ point: { x: crop.x + i + .5, y: crop.y + j + .5 }, nativeRaster: g.activeCapture.raster, orientation });\n if (Math.floor(q.x) + active.x !== affine.ox + affine.axx * i + affine.axy * j || Math.floor(q.y) + active.y !== affine.oy + affine.ayx * i + affine.ayy * j) {\n throw new InvalidConfigurationError(\"Oriented output does not map affinely onto native sites.\");\n }\n }\n return affine;\n}\n\nfunction rowSumNorm(matrix: readonly (readonly number[])[]): number {\n return Math.max(...matrix.map(row => row.reduce((sum, v) => sum + Math.abs(v), 0)));\n}\n\n/** Inputs of the a-priori float32 forward-error bound for packed RAW development (see docs/WEBGPU.md). */\nexport interface RawDevelopmentBoundInput {\n maximumTaps: number; maximumWeightSum: number; maximumSiteMagnitude: number; maximumGain: number;\n reconstruct: boolean; cameraToXyzNorm: number; xyzToRgbNorm: number; scale: number;\n}\n/**\n * Forward-error bounds (Higham γ_k, binary32) through the development chain: channel sums → gains →\n * highlight clip/blend → camera→XYZ → XYZ→linear sRGB → rendering exposure. Returns the bound on the\n * exposed value, and the classification bands for the white-balance clip and reconstruction-start\n * decisions. Internal; exported only for unit tests.\n */\nexport function rawDevelopmentErrorBounds(b: RawDevelopmentBoundInput): { exposed: number; gain: number; channel: number } {\n const C = b.maximumWeightSum * b.maximumSiteMagnitude, U = b.maximumGain * C, Bmax = Math.max(U, b.maximumGain);\n const deltaC = float32Gamma(b.maximumTaps + 2) * C + float32Gamma(1);\n const deltaU = b.maximumGain * deltaC + float32Gamma(2) * U;\n const deltaT = (deltaC + float32Gamma(3)) / (1 - RAW_HIGHLIGHT_RECONSTRUCTION_START);\n const deltaB = b.reconstruct ? 3 * deltaU + 2 * Bmax * deltaT + 2 * float32Gamma(4) * Bmax + float32Gamma(1) * b.maximumGain\n : deltaU + float32Gamma(1) * b.maximumGain;\n const deltaXyz = b.cameraToXyzNorm * (deltaB + float32Gamma(4) * Bmax);\n const deltaRgb = b.xyzToRgbNorm * (deltaXyz + float32Gamma(4) * b.cameraToXyzNorm * Bmax);\n const exposed = b.scale * (deltaRgb + float32Gamma(2) * b.xyzToRgbNorm * b.cameraToXyzNorm * Bmax);\n return { exposed, gain: deltaU + float32Gamma(1) * b.maximumGain, channel: deltaC + float32Gamma(1) };\n}\n\nasync function developRawOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: NativeRawDevelopmentInput,\n provider: NativeRawDevelopmentProvider | ((signal: AbortSignal) => Promise<void>), abort: AbortController,\n pipelines: PipelineSource): Promise<AcceleratedNativeRawDevelopmentOutput> {\n const hooks = typeof provider === \"function\" ? { yieldControl: provider } : provider;\n if (!hooks || typeof hooks.yieldControl !== \"function\" || (hooks.onProgress !== undefined && typeof hooks.onProgress !== \"function\")) {\n throw new InvalidConfigurationError(\"Development requires a host event-loop yield.\");\n }\n const yieldControl = hooks.yieldControl.bind(hooks), onProgress = hooks.onProgress?.bind(hooks);\n // Run the reference's own synchronous input-limit, halo and CFA checks, then the same RAW ownership transfer.\n const v = prepareNativeRawDevelopment(input);\n const tone = toneUniform(v.profile), luminance = tone.mode !== SDR_TONE_MODE.perChannel;\n if (v.border !== \"reject\") {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\",\n \"webgpu-f32 develops with rejected borders only; use cpu-reference for borderHandling \\\"mirror\\\".\");\n }\n if (v.exposureGain !== 1) {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\",\n \"webgpu-f32 develops without an exposure push only; use cpu-reference for exposureCompensationStops other than 0 (#556).\");\n }\n const plan = v.plan, layout = plan.frame.colorSamplingProfile.layout, native = plan.exposure.geometry.nativeRaster;\n if (layout.kind !== \"periodic-mosaic\") throw new InvalidConfigurationError(\"Development requires periodic CFA.\");\n const affine = orientedToNativeAffine(plan);\n const raw = takeNativeRawOwnership(input.raw, plan);\n const rw = layout.repeatWidthSites, rh = layout.repeatHeightSites, nativeWidth = native.pixelWidth, nativeHeight = native.pixelHeight;\n const outWidth = v.raster.pixelWidth, outHeight = v.raster.pixelHeight, profile = v.profile, development = v.development;\n const tilesPerRow = Math.ceil(outWidth / 256), totalTileCount = tilesPerRow * outHeight;\n let codes: Uint8Array | Uint16Array | null = null;\n const release = (): void => {\n raw.codes.fill(0); raw.blackLevels.fill(0); raw.digitalSaturationCodes.fill(0); raw.saturationFlags.fill(0); raw.effectiveSaturationCodes.fill(0);\n codes?.fill(0);\n };\n const scope = new GpuResourceScope(runtime);\n try {\n // Reference integrity check (bounded chunks with host yields), then the largest normalized site magnitude.\n const gate = createHostYieldGate(), rowsPerChunk = Math.max(1, Math.floor((1 << 18) / nativeWidth));\n for (let y = 0; y < nativeHeight; y += rowsPerChunk) {\n checkAbort(abort);\n checkNativeRawIntegrity(raw, nativeWidth, rw, rh, y, Math.min(nativeHeight, y + rowsPerChunk));\n if (gate.due()) { await yieldControl(abort.signal); checkAbort(abort); gate.restart(); }\n }\n const white = raw.effectiveSaturationCodes;\n // The reference's site normalization (raw-development-kernel.ts), evaluated in float64.\n const normalizedSite = (i: number, x: number, y: number): number => {\n const code = raw.codes[i]!, top = white[(y % rh) * rw + x % rw]!, black = raw.blackLevels[i]!;\n return raw.saturationFlags[i]! !== 0 || code >= top ? 1 : (code - black) / (top - black);\n };\n let maximumSiteMagnitude = 0;\n for (let y = 0, i = 0; y < nativeHeight; y++) for (let x = 0; x < nativeWidth; x++, i++) {\n const m = Math.abs(normalizedSite(i, x, y));\n if (m > maximumSiteMagnitude) maximumSiteMagnitude = m;\n }\n // CFA kernel table: phase-major, channel-minor (start, count) ranges into (offsetX, offsetY, weight) taps.\n const tapList: number[][] = [], ranges = new Uint32Array(v.phases.length * 6);\n let halo = 0, maximumTaps = 0, maximumWeightSum = 0;\n v.phases.forEach((phase, p) => phase.profile.kernels.forEach((kernel, c) => {\n ranges[(p * 3 + c) * 2] = tapList.length; ranges[(p * 3 + c) * 2 + 1] = kernel.contributions.length;\n maximumTaps = Math.max(maximumTaps, kernel.contributions.length);\n let weights = 0;\n for (const t of kernel.contributions) {\n tapList.push([t.offsetX, t.offsetY, t.weight]);\n halo = Math.max(halo, Math.abs(t.offsetX), Math.abs(t.offsetY));\n weights += Math.abs(t.weight);\n }\n maximumWeightSum = Math.max(maximumWeightSum, weights);\n }));\n const tapBuffer = new ArrayBuffer(Math.max(1, tapList.length) * 16), tapInts = new Int32Array(tapBuffer), tapFloats = new Float32Array(tapBuffer);\n tapList.forEach(([ox, oy, w], i) => { tapInts[i * 4] = ox!; tapInts[i * 4 + 1] = oy!; tapFloats[i * 4 + 2] = w!; });\n const gains = development.appliedGains, clipLevel = Math.min(...gains), M = development.cameraToXyz, X = resolveCaptureColorModel().xyzToCameraRgb;\n const reconstruct = development.highlightMode === \"reconstruct\";\n const scale = 2 ** profile.renderingExposureEv, maximum = 2 ** profile.bitDepth - 1;\n const bounds = rawDevelopmentErrorBounds({ maximumTaps, maximumWeightSum, maximumSiteMagnitude, maximumGain: Math.max(...gains),\n reconstruct, cameraToXyzNorm: rowSumNorm(M), xyzToRgbNorm: rowSumNorm(X), scale });\n const band = Math.fround(bounds.exposed * (1 + 2 ** -20));\n if (!Number.isFinite(band) || bounds.exposed > 1 || maximumSiteMagnitude * maximumWeightSum * Math.max(...gains) * scale > FLOAT32_SAFE_MAGNITUDE) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Development values are outside the float32 execution domain.\");\n }\n const reinhard = profile.toneCurve === \"positive-reinhard-per-channel\", reject = profile.gamutHandling === \"reject-out-of-range\";\n const params = new ArrayBuffer(256), ints = new Int32Array(params), words = new Uint32Array(params), floats = new Float32Array(params);\n words[52] = tone.mode; floats.set(tone.tone, 56); floats.set(tone.lum, 60);\n words[0] = outWidth; words[3] = reinhard ? 1 : 0; words[4] = reject ? 1 : 0; words[5] = rw; words[6] = rh;\n ints[8] = affine.ox; ints[9] = affine.oy; ints[10] = affine.axx; ints[11] = affine.axy; ints[12] = affine.ayx; ints[13] = affine.ayy;\n floats[16] = scale; floats[17] = maximum; floats[18] = band; floats[19] = Math.max(band, 2 ** -20);\n floats[20] = clipLevel; words[21] = reconstruct ? 1 : 0;\n floats[22] = Math.fround(bounds.gain * (1 + 2 ** -20)); floats[23] = Math.fround(bounds.channel * (1 + 2 ** -20));\n floats.set(gains, 24);\n for (let row = 0; row < 3; row++) { floats.set(M[row]!, 28 + row * 4); floats.set(X[row]!, 40 + row * 4); }\n const regionOf = (r0: number, r1: number): { x: number; y: number; width: number; height: number } => {\n const xs: number[] = [], ys: number[] = [];\n for (const [i, j] of [[0, r0], [outWidth - 1, r0], [0, r1 - 1], [outWidth - 1, r1 - 1]] as const) {\n xs.push(affine.ox + affine.axx * i + affine.axy * j); ys.push(affine.oy + affine.ayx * i + affine.ayy * j);\n }\n const x = Math.max(0, Math.min(...xs) - halo), y = Math.max(0, Math.min(...ys) - halo);\n return { x, y, width: Math.min(nativeWidth, Math.max(...xs) + halo + 1) - x, height: Math.min(nativeHeight, Math.max(...ys) + halo + 1) - y };\n };\n const regionBytes = (r0: number, r1: number): number => { const r = regionOf(r0, r1); return r.width * r.height * 4; };\n let bandRows = Math.max(1, Math.min(outHeight, Math.floor(bandBytes / (outWidth * 12))));\n while (bandRows > 1 && regionBytes(0, bandRows) > bandBytes) bandRows = Math.ceil(bandRows / 2);\n if (Math.max(regionBytes(0, bandRows), bandRows * outWidth * 12) > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One development band exceeds the device's storage binding limit.\");\n }\n const pipeline = await pipelines(\"photivra-raw-development\", RAW_DEVELOPMENT_WGSL);\n const output = profile.bitDepth === 8 ? new Uint8Array(outWidth * outHeight * 3) : new Uint16Array(outWidth * outHeight * 3);\n codes = output;\n const counters = NO_COUNTERS();\n const taps = scope.upload(\"photivra-cfa-taps\", new Uint8Array(tapBuffer), BUFFER_USAGE.STORAGE);\n const phaseTable = scope.upload(\"photivra-cfa-phases\", ranges, BUFFER_USAGE.STORAGE);\n for (let r0 = 0; r0 < outHeight; r0 += bandRows) {\n checkAbort(abort);\n const r1 = Math.min(outHeight, r0 + bandRows), region = regionOf(r0, r1), count = (r1 - r0) * outWidth;\n const normalized = new Float32Array(region.width * region.height);\n for (let y = 0; y < region.height; y++) {\n for (let x = 0, i = (region.y + y) * nativeWidth + region.x; x < region.width; x++, i++) {\n normalized[y * region.width + x] = normalizedSite(i, region.x + x, region.y + y);\n }\n }\n words[1] = count; words[2] = r0; words[7] = region.width; ints[14] = region.x; ints[15] = region.y;\n const bandScope = new GpuResourceScope(runtime);\n try {\n const source = bandScope.upload(\"photivra-raw-normalized\", normalized, BUFFER_USAGE.STORAGE);\n const out = bandScope.buffer(\"photivra-raw-codes\", count * 12, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const counterBuffer = bandScope.upload(\"photivra-raw-counters\", new Uint32Array(SDR_COUNTER_SLOTS), BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = bandScope.upload(\"photivra-raw-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: source } }, { binding: 2, resource: { buffer: taps } },\n { binding: 3, resource: { buffer: phaseTable } }, { binding: 4, resource: { buffer: out } }, { binding: 5, resource: { buffer: counterBuffer } }] });\n const [codeData, counterData] = await runComputePass(runtime, bandScope, pipeline, bindGroup,\n linearDispatch(count, LINEAR_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: out, bytes: count * 12 }, { buffer: counterBuffer, bytes: SDR_COUNTER_SLOTS * 4 }], abort.signal);\n mergeCounters(counters, new Uint32Array(counterData!, 0, SDR_COUNTER_SLOTS));\n requireLuminanceDomain(counters);\n requireGamutDecision(reject, counters);\n output.set(new Uint32Array(codeData!, 0, count * 3), r0 * outWidth * 3);\n } finally {\n bandScope.release();\n }\n onProgress?.({ completedTileCount: r1 * tilesPerRow, totalTileCount });\n await yieldControl(abort.signal);\n checkAbort(abort);\n }\n const highlight: RawHighlightDiagnostics = { mode: development.highlightMode, saturatedPixelCount: counters[SDR_COUNTER.saturatedPixels]!,\n whiteBalanceClippedSampleCount: counters[SDR_COUNTER.whiteBalanceClipped]!, reconstructedPixelCount: counters[SDR_COUNTER.reconstructedPixels]! };\n const linearBound = luminance ? counters[SDR_COUNTER.linearBoundBits]! * (1 + 2 ** -20) : bounds.exposed + float32Gamma(3);\n const execution = webGpuExecution(integerCodeBound(maximum, linearBound), counters[SDR_COUNTER.uncertain]!);\n return { raw, phaseProfiles: v.phases, colorProfile: v.color, whiteBalance: v.whiteBalance, borderHandling: v.border, width: outWidth, height: outHeight, integerSamples: output,\n diagnostics: sdrDiagnostics(counters, \"consumed-in-raw-development\"), highlight, outputEncoding: sdrOutputEncoding(maximum), rendering: profile,\n displayAdaptation: { kind: \"external-platform\", applied: false, displayCapabilities: \"unknown\" },\n imageDataPairing: \"derived-from-exact-packed-native-raw\", producerOriginVerified: false, execution };\n } catch (error) {\n release();\n throw error;\n } finally {\n scope.release();\n }\n}\n"]}
|
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
/** Requested or actual execution backend. */
|
|
2
2
|
export type ImageKernelBackend = "cpu-reference" | "webgpu-f32";
|
|
3
3
|
/** Why a requested WebGPU backend was not used (only with `fallback: "cpu-reference"`). */
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Failure classes reported by {@link ImageKernelExecutionError}. `conformance-failed` (#481): a device failed the display view's
|
|
8
|
-
* run-time self-check with `gpu: "require"`.
|
|
9
|
-
*/
|
|
10
|
-
export type ImageKernelFailureReason = ImageKernelFallbackReason | "device-lost" | "out-of-memory" | "gpu-validation" | "aborted" | "disposed" | "busy" | "unsupported-on-backend" | "unsupported-float32-domain" | "indeterminate-float32-classification" | "conformance-failed";
|
|
11
|
-
/** Domain error for getting and running a backend. Input validation still throws the engine's existing errors. */
|
|
12
|
-
export declare class ImageKernelExecutionError extends Error {
|
|
13
|
-
readonly code = "IMAGE_KERNEL_EXECUTION";
|
|
14
|
-
readonly reason: ImageKernelFailureReason;
|
|
15
|
-
constructor(reason: ImageKernelFailureReason, message: string);
|
|
16
|
-
}
|
|
4
|
+
export { ImageKernelExecutionError, type ImageKernelFailureReason, type ImageKernelFallbackReason } from "../core/execution-error.js";
|
|
5
|
+
import type { ImageKernelFallbackReason } from "../core/execution-error.js";
|
|
17
6
|
/** Integer output codes: |code_webgpu − code_reference| ≤ maximumAbsoluteCodeDifference for every sample. */
|
|
18
7
|
export interface ImageKernelCodeErrorBound {
|
|
19
8
|
kind: "integer-code-difference";
|
|
@@ -14,16 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { requireInputObject } from "../core/record-validation.js";
|
|
16
16
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
17
|
-
/**
|
|
18
|
-
export
|
|
19
|
-
code = "IMAGE_KERNEL_EXECUTION";
|
|
20
|
-
reason;
|
|
21
|
-
constructor(reason, message) {
|
|
22
|
-
super(message);
|
|
23
|
-
this.name = "ImageKernelExecutionError";
|
|
24
|
-
this.reason = reason;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
17
|
+
/** Why a requested WebGPU backend was not used (only with `fallback: "cpu-reference"`). */
|
|
18
|
+
export { ImageKernelExecutionError } from "../core/execution-error.js";
|
|
27
19
|
/** IEEE 754 binary32 unit roundoff. */
|
|
28
20
|
export const WEBGPU_F32_UNIT_ROUNDOFF = 2 ** -24;
|
|
29
21
|
/**
|