@forgeax/engine-render 0.1.27 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. package/README.md +842 -124
  2. package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
  3. package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
  4. package/dist/assembly/dynamic-geometry-host.d.ts +52 -0
  5. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -0
  6. package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
  7. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
  8. package/dist/assembly/factory.d.ts +3 -1
  9. package/dist/assembly/factory.d.ts.map +1 -1
  10. package/dist/assembly/gpu-driven-owner.d.ts +10 -0
  11. package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
  12. package/dist/assembly/host-contract.d.ts +19 -0
  13. package/dist/assembly/host-contract.d.ts.map +1 -1
  14. package/dist/assembly/material/assembly.d.ts +7 -0
  15. package/dist/assembly/material/assembly.d.ts.map +1 -1
  16. package/dist/assembly/material-shader-policy.d.ts +3 -1
  17. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  18. package/dist/assembly/recovery/failure-location.d.ts +12 -0
  19. package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
  20. package/dist/assembly/recovery/renderer-recover.d.ts +6 -4
  21. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  22. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  23. package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
  24. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
  25. package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
  26. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  27. package/dist/assembly/renderer-helpers.d.ts +3 -0
  28. package/dist/assembly/renderer-helpers.d.ts.map +1 -1
  29. package/dist/assembly/renderer-inspection.d.ts +4 -0
  30. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  31. package/dist/assembly/shader-prewarm-policy.d.ts +6 -0
  32. package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
  33. package/dist/assembly/skin-palette-owner.d.ts +8 -0
  34. package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
  35. package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
  36. package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
  37. package/dist/assembly/webgpu-device-loss.d.ts +15 -0
  38. package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
  39. package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
  40. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
  41. package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
  42. package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
  43. package/dist/assembly/webgpu-ready.d.ts +7 -3
  44. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  45. package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
  46. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
  47. package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
  48. package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
  49. package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
  50. package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
  51. package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
  52. package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
  53. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
  54. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
  55. package/dist/assembly/webgpu-renderer.d.ts +7 -141
  56. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  57. package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
  58. package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
  59. package/dist/authoring.mjs +3 -3
  60. package/dist/{chunk-ADHHVYLW.mjs → chunk-33XZFTQU.mjs} +245 -39
  61. package/dist/chunk-33XZFTQU.mjs.map +1 -0
  62. package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
  63. package/dist/chunk-BLXGONR2.mjs.map +1 -0
  64. package/dist/{chunk-KM2NOX2I.mjs → chunk-BQVQOQJH.mjs} +958 -254
  65. package/dist/chunk-BQVQOQJH.mjs.map +1 -0
  66. package/dist/{chunk-HKXTW355.mjs → chunk-BTWH7BP4.mjs} +386 -17
  67. package/dist/chunk-BTWH7BP4.mjs.map +1 -0
  68. package/dist/{chunk-TMIASV2N.mjs → chunk-FUODTTIA.mjs} +3934 -676
  69. package/dist/chunk-FUODTTIA.mjs.map +1 -0
  70. package/dist/{chunk-FJ6P52EE.mjs → chunk-ILQ5MEZF.mjs} +3 -17
  71. package/dist/chunk-ILQ5MEZF.mjs.map +1 -0
  72. package/dist/{chunk-E34VL5VI.mjs → chunk-JQTSEI3Z.mjs} +3 -3
  73. package/dist/{chunk-E34VL5VI.mjs.map → chunk-JQTSEI3Z.mjs.map} +1 -1
  74. package/dist/{chunk-GE3SDD72.mjs → chunk-NICXSHAT.mjs} +16 -38
  75. package/dist/chunk-NICXSHAT.mjs.map +1 -0
  76. package/dist/{chunk-ZZ4YQ474.mjs → chunk-NRNXBLIJ.mjs} +577 -7
  77. package/dist/chunk-NRNXBLIJ.mjs.map +1 -0
  78. package/dist/{chunk-JDWARUOI.mjs → chunk-PA5DRJNI.mjs} +17 -3
  79. package/dist/chunk-PA5DRJNI.mjs.map +1 -0
  80. package/dist/{chunk-XDP6XE5V.mjs → chunk-S4DNKQYQ.mjs} +1118 -446
  81. package/dist/chunk-S4DNKQYQ.mjs.map +1 -0
  82. package/dist/components/camera.d.ts +62 -2
  83. package/dist/components/camera.d.ts.map +1 -1
  84. package/dist/components/index.d.ts +1 -0
  85. package/dist/components/index.d.ts.map +1 -1
  86. package/dist/components/instances.d.ts +6 -20
  87. package/dist/components/instances.d.ts.map +1 -1
  88. package/dist/components/scene-instance.d.ts +2 -1
  89. package/dist/components/scene-instance.d.ts.map +1 -1
  90. package/dist/components/screen-space-reflection.d.ts +14 -0
  91. package/dist/components/screen-space-reflection.d.ts.map +1 -0
  92. package/dist/construct-renderer.mjs +13805 -7186
  93. package/dist/construct-renderer.mjs.map +1 -1
  94. package/dist/device/gpu-residency.d.ts +11 -17
  95. package/dist/device/gpu-residency.d.ts.map +1 -1
  96. package/dist/device/mesh-residency-lifetime.d.ts +21 -0
  97. package/dist/device/mesh-residency-lifetime.d.ts.map +1 -0
  98. package/dist/dynamic-geometry.d.ts +125 -0
  99. package/dist/dynamic-geometry.d.ts.map +1 -0
  100. package/dist/environment/background.d.ts +6 -0
  101. package/dist/environment/background.d.ts.map +1 -0
  102. package/dist/errors/gpu-driven.d.ts +6 -3
  103. package/dist/errors/gpu-driven.d.ts.map +1 -1
  104. package/dist/errors/render.d.ts +7 -4
  105. package/dist/errors/render.d.ts.map +1 -1
  106. package/dist/extract/camera.d.ts.map +1 -1
  107. package/dist/extract/gpu-driven.d.ts +33 -3
  108. package/dist/extract/gpu-driven.d.ts.map +1 -1
  109. package/dist/features/host.d.ts +23 -1
  110. package/dist/features/host.d.ts.map +1 -1
  111. package/dist/features/noise-texture.d.ts +17 -0
  112. package/dist/features/noise-texture.d.ts.map +1 -0
  113. package/dist/features/plan.d.ts +83 -2
  114. package/dist/features/plan.d.ts.map +1 -1
  115. package/dist/features/prepared-gpu-work.d.ts +37 -4
  116. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  117. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  118. package/dist/features/prepared-graphics.d.ts +5 -0
  119. package/dist/features/prepared-graphics.d.ts.map +1 -1
  120. package/dist/features/render-graph-compute.d.ts +5 -3
  121. package/dist/features/render-graph-compute.d.ts.map +1 -1
  122. package/dist/features/render-graph-contribution.d.ts +11 -3
  123. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  124. package/dist/features/render-graph-raster.d.ts +19 -3
  125. package/dist/features/render-graph-raster.d.ts.map +1 -1
  126. package/dist/features/types.d.ts +11 -0
  127. package/dist/features/types.d.ts.map +1 -1
  128. package/dist/fullscreen-post-process-pass.d.ts +2 -0
  129. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  130. package/dist/gpu-driven/batch-topology.d.ts +34 -1
  131. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  132. package/dist/gpu-driven/pbr-program.d.ts +10 -0
  133. package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
  134. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  135. package/dist/gpu-driven/production-raster.d.ts +144 -23
  136. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  137. package/dist/gpu-driven/shadow-views.d.ts +126 -0
  138. package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
  139. package/dist/gpu-driven/view-gpu.d.ts +18 -2
  140. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  141. package/dist/gpu-scene-schema.d.ts +2 -8
  142. package/dist/gpu-scene-schema.d.ts.map +1 -1
  143. package/dist/gpu-scene.d.ts +14 -0
  144. package/dist/gpu-scene.d.ts.map +1 -1
  145. package/dist/gpu-texture-usage.d.ts +1 -0
  146. package/dist/gpu-texture-usage.d.ts.map +1 -1
  147. package/dist/hdrp-buffers.d.ts +6 -0
  148. package/dist/hdrp-buffers.d.ts.map +1 -1
  149. package/dist/ibl/frame-resources.d.ts +8 -0
  150. package/dist/ibl/frame-resources.d.ts.map +1 -0
  151. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  152. package/dist/index.d.ts +21 -8
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.mjs +8 -7
  155. package/dist/index.mjs.map +1 -1
  156. package/dist/inspection-types.d.ts +164 -0
  157. package/dist/inspection-types.d.ts.map +1 -1
  158. package/dist/instances-derived-bounds.d.ts +11 -0
  159. package/dist/instances-derived-bounds.d.ts.map +1 -1
  160. package/dist/instances.d.ts +89 -44
  161. package/dist/instances.d.ts.map +1 -1
  162. package/dist/internal.d.ts +3 -0
  163. package/dist/internal.d.ts.map +1 -1
  164. package/dist/internal.mjs +118 -10
  165. package/dist/internal.mjs.map +1 -1
  166. package/dist/lifecycle.d.ts +2 -1
  167. package/dist/lifecycle.d.ts.map +1 -1
  168. package/dist/material-row.d.ts +5 -0
  169. package/dist/material-row.d.ts.map +1 -0
  170. package/dist/materials.d.ts +15 -0
  171. package/dist/materials.d.ts.map +1 -1
  172. package/dist/pbr-pipeline.d.ts +21 -5
  173. package/dist/pbr-pipeline.d.ts.map +1 -1
  174. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  175. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
  176. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
  177. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
  178. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
  179. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
  180. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
  181. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
  182. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
  183. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
  184. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
  185. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
  186. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
  187. package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
  188. package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
  189. package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
  190. package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
  191. package/dist/pipeline/standard-output/graph.d.ts +15 -0
  192. package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
  193. package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
  194. package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
  195. package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
  196. package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
  197. package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
  198. package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
  199. package/dist/pipeline/standard-output/resources.d.ts +10 -0
  200. package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
  201. package/dist/pipeline/standard-output/types.d.ts +39 -0
  202. package/dist/pipeline/standard-output/types.d.ts.map +1 -0
  203. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  204. package/dist/pipeline/standard-post.d.ts +2 -2
  205. package/dist/pipeline/standard-post.d.ts.map +1 -1
  206. package/dist/pipeline-builder.d.ts +2 -1
  207. package/dist/pipeline-builder.d.ts.map +1 -1
  208. package/dist/pipeline-spec-types.d.ts +4 -0
  209. package/dist/pipeline-spec-types.d.ts.map +1 -1
  210. package/dist/pipeline-spec.d.ts +1 -9
  211. package/dist/pipeline-spec.d.ts.map +1 -1
  212. package/dist/points-lines/standard-owner.d.ts +1 -1
  213. package/dist/points-lines/standard-owner.d.ts.map +1 -1
  214. package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
  215. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  216. package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
  217. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
  218. package/dist/record/frame-lighting.d.ts +3 -3
  219. package/dist/record/frame-lighting.d.ts.map +1 -1
  220. package/dist/record/frame-snapshot.d.ts +106 -5
  221. package/dist/record/frame-snapshot.d.ts.map +1 -1
  222. package/dist/record/frame-targets.d.ts.map +1 -1
  223. package/dist/record/frame.d.ts +39 -4
  224. package/dist/record/frame.d.ts.map +1 -1
  225. package/dist/record/main-pass-geometry.d.ts +7 -8
  226. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  227. package/dist/record/main-pass-material.d.ts +38 -1
  228. package/dist/record/main-pass-material.d.ts.map +1 -1
  229. package/dist/record/main-pass-sprite-draws.d.ts +2 -10
  230. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  231. package/dist/record/main-pass.d.ts +12 -2
  232. package/dist/record/main-pass.d.ts.map +1 -1
  233. package/dist/record/mesh-ssbo.d.ts +15 -6
  234. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  235. package/dist/record/prepared-material-bindings.d.ts +19 -0
  236. package/dist/record/prepared-material-bindings.d.ts.map +1 -0
  237. package/dist/record/recovery-pipeline.d.ts +2 -9
  238. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  239. package/dist/record/render-context.d.ts +76 -26
  240. package/dist/record/render-context.d.ts.map +1 -1
  241. package/dist/record/shadow-pass.d.ts +62 -7
  242. package/dist/record/shadow-pass.d.ts.map +1 -1
  243. package/dist/record/skybox-post-pass.d.ts +1 -1
  244. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  245. package/dist/record/typed-frame-graph.d.ts +35 -7
  246. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  247. package/dist/record/view-ubo.d.ts +1 -0
  248. package/dist/record/view-ubo.d.ts.map +1 -1
  249. package/dist/recovery/render-system-candidate.d.ts +10 -2
  250. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  251. package/dist/recovery/render-system-roots.d.ts +11 -0
  252. package/dist/recovery/render-system-roots.d.ts.map +1 -0
  253. package/dist/recovery/types.d.ts +76 -0
  254. package/dist/recovery/types.d.ts.map +1 -0
  255. package/dist/reflection/record-owner.d.ts +0 -2
  256. package/dist/reflection/record-owner.d.ts.map +1 -1
  257. package/dist/render-contract.d.ts +185 -30
  258. package/dist/render-contract.d.ts.map +1 -1
  259. package/dist/render-graph-primitives.d.ts +1 -0
  260. package/dist/render-graph-primitives.d.ts.map +1 -1
  261. package/dist/render-pipeline.d.ts +64 -5
  262. package/dist/render-pipeline.d.ts.map +1 -1
  263. package/dist/render-system-extract-tail.d.ts +7 -5
  264. package/dist/render-system-extract-tail.d.ts.map +1 -1
  265. package/dist/render-system-extract.d.ts +101 -41
  266. package/dist/render-system-extract.d.ts.map +1 -1
  267. package/dist/render-system-projections.d.ts +22 -0
  268. package/dist/render-system-projections.d.ts.map +1 -0
  269. package/dist/render-system.d.ts +34 -77
  270. package/dist/render-system.d.ts.map +1 -1
  271. package/dist/scene/render-scene-types.d.ts +14 -7
  272. package/dist/scene/render-scene-types.d.ts.map +1 -1
  273. package/dist/scene/render-scene.d.ts +29 -11
  274. package/dist/scene/render-scene.d.ts.map +1 -1
  275. package/dist/scene/shadow-visibility.d.ts +5 -0
  276. package/dist/scene/shadow-visibility.d.ts.map +1 -0
  277. package/dist/ssr/admission.d.ts +70 -1
  278. package/dist/ssr/admission.d.ts.map +1 -1
  279. package/dist/ssr/compose.d.ts +13 -0
  280. package/dist/ssr/compose.d.ts.map +1 -0
  281. package/dist/ssr/errors.d.ts +35 -0
  282. package/dist/ssr/errors.d.ts.map +1 -1
  283. package/dist/ssr/graph.d.ts +60 -0
  284. package/dist/ssr/graph.d.ts.map +1 -0
  285. package/dist/ssr/history.d.ts +97 -0
  286. package/dist/ssr/history.d.ts.map +1 -0
  287. package/dist/ssr/hiz.d.ts +37 -0
  288. package/dist/ssr/hiz.d.ts.map +1 -0
  289. package/dist/ssr/inspection.d.ts +42 -0
  290. package/dist/ssr/inspection.d.ts.map +1 -0
  291. package/dist/ssr/resources.d.ts +58 -0
  292. package/dist/ssr/resources.d.ts.map +1 -0
  293. package/dist/ssr/temporal.d.ts +38 -0
  294. package/dist/ssr/temporal.d.ts.map +1 -0
  295. package/dist/systems/skin-palette-allocator.d.ts +32 -10
  296. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  297. package/dist/systems/skin-palette-types.d.ts +15 -0
  298. package/dist/systems/skin-palette-types.d.ts.map +1 -1
  299. package/dist/systems/transparent-dispatch.d.ts +9 -0
  300. package/dist/systems/transparent-dispatch.d.ts.map +1 -0
  301. package/dist/targets/material-source.d.ts +7 -0
  302. package/dist/targets/material-source.d.ts.map +1 -1
  303. package/dist/temporal/frame-coordinator.d.ts +7 -0
  304. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  305. package/dist/temporal/gpu.d.ts +8 -0
  306. package/dist/temporal/gpu.d.ts.map +1 -1
  307. package/dist/temporal/history.d.ts.map +1 -1
  308. package/dist/temporal/index.mjs +6 -6
  309. package/dist/temporal/inspection.d.ts.map +1 -1
  310. package/dist/temporal/standard-scene-data.d.ts +2 -1
  311. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  312. package/dist/temporal/temporal-view.d.ts +2 -0
  313. package/dist/temporal/temporal-view.d.ts.map +1 -1
  314. package/dist/typed-render-graph-primitives.d.ts +35 -1
  315. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  316. package/dist/typed-shadow-passes.d.ts +3 -1
  317. package/dist/typed-shadow-passes.d.ts.map +1 -1
  318. package/dist/volume/temporal.d.ts +6 -0
  319. package/dist/volume/temporal.d.ts.map +1 -1
  320. package/package.json +21 -20
  321. package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
  322. package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
  323. package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
  324. package/src/__tests__/auto-exposure.browser.test.ts +33 -0
  325. package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
  326. package/src/__tests__/detached-inspection.integration.test.ts +5 -0
  327. package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
  328. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
  329. package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
  330. package/src/__tests__/dynamic-geometry-host.unit.test.ts +1123 -0
  331. package/src/__tests__/dynamic-geometry.unit.test.ts +233 -0
  332. package/src/__tests__/factory-contract.integration.test.ts +73 -22
  333. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
  334. package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
  335. package/src/__tests__/feature-noise.unit.test.ts +38 -0
  336. package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
  337. package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
  338. package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
  339. package/src/__tests__/frame-targets.unit.test.ts +24 -0
  340. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
  341. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
  342. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +287 -6
  343. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
  344. package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
  345. package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +264 -0
  346. package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +349 -0
  347. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1417 -0
  348. package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
  349. package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
  350. package/src/__tests__/gpu-driven-production.integration.test.ts +1075 -93
  351. package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
  352. package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
  353. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
  354. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
  355. package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
  356. package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
  357. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
  358. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
  359. package/src/__tests__/gpu-driven-view.unit.test.ts +159 -52
  360. package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -1
  361. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
  362. package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
  363. package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
  364. package/src/__tests__/gpu-scene.unit.test.ts +559 -33
  365. package/src/__tests__/instances-culling.integration.test.ts +36 -10
  366. package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
  367. package/src/__tests__/instances-store.unit.test.ts +242 -39
  368. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
  369. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
  370. package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
  371. package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
  372. package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
  373. package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
  374. package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
  375. package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
  376. package/src/__tests__/material-texture-source.unit.test.ts +87 -0
  377. package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
  378. package/src/__tests__/materials-standard-contract.unit.test.ts +52 -2
  379. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
  380. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +53 -0
  381. package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
  382. package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
  383. package/src/__tests__/physical-clearcoat.integration.test.ts +37 -3
  384. package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
  385. package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
  386. package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
  387. package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
  388. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +35 -4
  389. package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
  390. package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
  391. package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
  392. package/src/__tests__/public-surface.test-d.ts +3 -0
  393. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
  394. package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +104 -0
  395. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +2 -1
  396. package/src/__tests__/render-error-code-owner.test-d.ts +4 -0
  397. package/src/__tests__/render-error-detail-ssot.test-d.ts +22 -0
  398. package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
  399. package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
  400. package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
  401. package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
  402. package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
  403. package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
  404. package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
  405. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
  406. package/src/__tests__/render-scene-projection.unit.test.ts +914 -23
  407. package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
  408. package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
  409. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
  410. package/src/__tests__/render-target-material-source.test-d.ts +27 -3
  411. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +61 -1
  412. package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
  413. package/src/__tests__/shader-manifest-fixture.ts +39 -0
  414. package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
  415. package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
  416. package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
  417. package/src/__tests__/skinned-shadow-caster.test.ts +118 -14
  418. package/src/__tests__/specular-environment-scale.dawn.test.ts +156 -0
  419. package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
  420. package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
  421. package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
  422. package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
  423. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +91 -0
  424. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +112 -0
  425. package/src/__tests__/ssr-gpu-dispatch.ts +946 -0
  426. package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
  427. package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
  428. package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
  429. package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
  430. package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
  431. package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
  432. package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
  433. package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
  434. package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
  435. package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
  436. package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
  437. package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
  438. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
  439. package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
  440. package/src/__tests__/ssr-reprojection-probe.ts +90 -0
  441. package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
  442. package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
  443. package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
  444. package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
  445. package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
  446. package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
  447. package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
  448. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +44 -12
  449. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
  450. package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
  451. package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
  452. package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
  453. package/src/__tests__/standard-output.browser.test.ts +15 -0
  454. package/src/__tests__/standard-output.dawn.test.ts +15 -0
  455. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +38 -0
  456. package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
  457. package/src/__tests__/standard-profile-oracle.unit.test.ts +22 -0
  458. package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
  459. package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
  460. package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
  461. package/src/__tests__/taa-coverage-edge.dawn.test.ts +193 -0
  462. package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
  463. package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +778 -0
  464. package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
  465. package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
  466. package/src/__tests__/taa-stability-feedback.ts +341 -0
  467. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
  468. package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
  469. package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
  470. package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
  471. package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
  472. package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
  473. package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
  474. package/src/__tests__/visibility-extract.perf.test.ts +20 -8
  475. package/src/__tests__/visibility-instances.integration.test.ts +19 -7
  476. package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
  477. package/src/assembly/atmosphere-shader-prewarm.ts +38 -0
  478. package/src/assembly/dynamic-geometry-host.ts +887 -0
  479. package/src/assembly/dynamic-geometry-runtime.ts +71 -0
  480. package/src/assembly/factory.ts +4 -0
  481. package/src/assembly/gpu-driven-owner.ts +29 -0
  482. package/src/assembly/host-contract.ts +36 -0
  483. package/src/assembly/material/assembly.ts +38 -0
  484. package/src/assembly/material-shader-policy.ts +71 -28
  485. package/src/assembly/recovery/failure-location.ts +62 -0
  486. package/src/assembly/recovery/renderer-recover.ts +19 -17
  487. package/src/assembly/renderer-facade.ts +29 -0
  488. package/src/assembly/renderer-feature-inspection.ts +13 -0
  489. package/src/assembly/renderer-frame-transaction.ts +63 -0
  490. package/src/assembly/renderer-helpers.ts +26 -0
  491. package/src/assembly/renderer-inspection.ts +6 -0
  492. package/src/assembly/shader-prewarm-policy.ts +32 -0
  493. package/src/assembly/skin-palette-owner.ts +21 -0
  494. package/src/assembly/ssr-shader-prewarm.ts +41 -0
  495. package/src/assembly/webgpu-device-loss.ts +75 -0
  496. package/src/assembly/webgpu-pbr-ready.ts +232 -0
  497. package/src/assembly/webgpu-ready-mipmap.ts +26 -0
  498. package/src/assembly/webgpu-ready.ts +142 -121
  499. package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
  500. package/src/assembly/webgpu-renderer-contract.ts +69 -0
  501. package/src/assembly/webgpu-renderer-guards.ts +32 -0
  502. package/src/assembly/webgpu-renderer-observation.ts +43 -0
  503. package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
  504. package/src/assembly/webgpu-renderer.ts +675 -614
  505. package/src/assembly/webgpu-vertex-layouts.ts +233 -87
  506. package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
  507. package/src/components/camera.ts +287 -7
  508. package/src/components/index.ts +1 -0
  509. package/src/components/instances.ts +45 -18
  510. package/src/components/scene-instance.ts +2 -1
  511. package/src/components/screen-space-reflection.ts +21 -0
  512. package/src/components/sprite-animation.ts +3 -3
  513. package/src/components/sprite-instances.ts +1 -1
  514. package/src/device/gpu-residency.ts +96 -93
  515. package/src/device/mesh-residency-lifetime.ts +73 -0
  516. package/src/dynamic-geometry.ts +736 -0
  517. package/src/environment/background.ts +263 -0
  518. package/src/errors/gpu-driven.ts +39 -5
  519. package/src/errors/render.ts +27 -3
  520. package/src/extract/camera.ts +26 -1
  521. package/src/extract/gpu-driven.ts +185 -10
  522. package/src/features/host.ts +237 -19
  523. package/src/features/noise-texture.ts +91 -0
  524. package/src/features/plan.ts +553 -24
  525. package/src/features/prepared-gpu-work.ts +631 -49
  526. package/src/features/prepared-graphics-store.ts +31 -0
  527. package/src/features/prepared-graphics.ts +5 -0
  528. package/src/features/render-graph-compute.ts +41 -8
  529. package/src/features/render-graph-contribution.ts +141 -3
  530. package/src/features/render-graph-raster.ts +143 -30
  531. package/src/features/types.ts +11 -0
  532. package/src/fullscreen-post-process-pass.ts +3 -0
  533. package/src/gpu-driven/batch-topology.ts +424 -102
  534. package/src/gpu-driven/pbr-program.ts +31 -0
  535. package/src/gpu-driven/prepared-draw.ts +29 -4
  536. package/src/gpu-driven/production-raster.ts +2267 -694
  537. package/src/gpu-driven/shadow-views.ts +539 -0
  538. package/src/gpu-driven/view-gpu.ts +188 -41
  539. package/src/gpu-scene-schema.ts +52 -11
  540. package/src/gpu-scene.ts +186 -99
  541. package/src/gpu-texture-usage.ts +1 -0
  542. package/src/hdrp-buffers.ts +72 -36
  543. package/src/ibl/frame-resources.ts +38 -0
  544. package/src/ibl/skylight-bind-group.ts +5 -4
  545. package/src/index.ts +125 -1
  546. package/src/inspection-types.ts +191 -0
  547. package/src/instances-derived-bounds.ts +258 -34
  548. package/src/instances.ts +459 -150
  549. package/src/internal.ts +22 -0
  550. package/src/lifecycle.ts +2 -0
  551. package/src/material-row.ts +145 -0
  552. package/src/materials.ts +44 -8
  553. package/src/pbr-pipeline.ts +159 -17
  554. package/src/pipeline/standard-forward-lane.ts +52 -24
  555. package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
  556. package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
  557. package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
  558. package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
  559. package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
  560. package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
  561. package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
  562. package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
  563. package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
  564. package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
  565. package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
  566. package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
  567. package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
  568. package/src/pipeline/standard-output/color-transform.ts +124 -0
  569. package/src/pipeline/standard-output/graph.ts +139 -0
  570. package/src/pipeline/standard-output/lut-admission.ts +121 -0
  571. package/src/pipeline/standard-output/lut-gpu.ts +399 -0
  572. package/src/pipeline/standard-output/lut-state.ts +176 -0
  573. package/src/pipeline/standard-output/resources.ts +121 -0
  574. package/src/pipeline/standard-output/types.ts +58 -0
  575. package/src/pipeline/standard-pipeline.ts +192 -59
  576. package/src/pipeline/standard-post.ts +186 -27
  577. package/src/pipeline-builder.ts +16 -6
  578. package/src/pipeline-spec-types.ts +4 -0
  579. package/src/pipeline-spec.ts +37 -29
  580. package/src/points-lines/standard-owner.ts +6 -14
  581. package/src/prepare/prepared-graphics-resolver.ts +9 -2
  582. package/src/record/__tests__/material-slot-plan.unit.test.ts +48 -0
  583. package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
  584. package/src/record/__tests__/recovery-pipeline.unit.test.ts +2 -29
  585. package/src/record/__tests__/sprite-material-abi.unit.test.ts +36 -5
  586. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
  587. package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
  588. package/src/record/dynamic-geometry-consumption.ts +59 -0
  589. package/src/record/frame-lighting.ts +12 -11
  590. package/src/record/frame-snapshot.ts +133 -23
  591. package/src/record/frame-targets.ts +9 -0
  592. package/src/record/frame.ts +727 -133
  593. package/src/record/main-pass-geometry.ts +162 -98
  594. package/src/record/main-pass-material.ts +115 -26
  595. package/src/record/main-pass-sprite-draws.ts +18 -107
  596. package/src/record/main-pass.ts +78 -8
  597. package/src/record/material-uniforms.ts +1 -1
  598. package/src/record/mesh-ssbo.ts +59 -15
  599. package/src/record/prepared-material-bindings.ts +234 -0
  600. package/src/record/recovery-pipeline.ts +59 -136
  601. package/src/record/render-context.ts +92 -22
  602. package/src/record/shadow-pass.ts +1231 -209
  603. package/src/record/skybox-post-pass.ts +14 -3
  604. package/src/record/typed-frame-graph.ts +1006 -53
  605. package/src/record/view-ubo.ts +11 -0
  606. package/src/recovery/render-system-candidate.ts +90 -66
  607. package/src/recovery/render-system-roots.ts +113 -0
  608. package/src/recovery/types.ts +77 -0
  609. package/src/reflection/record-owner.ts +26 -54
  610. package/src/render-contract.ts +219 -25
  611. package/src/render-graph-primitives.ts +6 -2
  612. package/src/render-pipeline.ts +70 -1
  613. package/src/render-system-extract-tail.ts +409 -160
  614. package/src/render-system-extract.ts +376 -102
  615. package/src/render-system-projections.ts +241 -0
  616. package/src/render-system.ts +692 -791
  617. package/src/scene/render-scene-types.ts +13 -4
  618. package/src/scene/render-scene.ts +569 -355
  619. package/src/scene/shadow-visibility.ts +21 -0
  620. package/src/ssr/admission.ts +380 -14
  621. package/src/ssr/compose.ts +144 -0
  622. package/src/ssr/errors.ts +48 -0
  623. package/src/ssr/graph.ts +777 -0
  624. package/src/ssr/history.ts +436 -0
  625. package/src/ssr/hiz.ts +124 -0
  626. package/src/ssr/inspection.ts +124 -0
  627. package/src/ssr/resources.ts +202 -0
  628. package/src/ssr/temporal.ts +164 -0
  629. package/src/systems/skin-palette-allocator.ts +495 -148
  630. package/src/systems/skin-palette-types.ts +17 -0
  631. package/src/systems/transparent-dispatch.ts +90 -0
  632. package/src/targets/material-source.ts +34 -0
  633. package/src/temporal/coverage.ts +1 -1
  634. package/src/temporal/frame-coordinator.ts +23 -2
  635. package/src/temporal/gpu.ts +74 -12
  636. package/src/temporal/history.ts +3 -1
  637. package/src/temporal/inspection.ts +2 -1
  638. package/src/temporal/standard-scene-data.ts +3 -1
  639. package/src/temporal/temporal-view.ts +3 -0
  640. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +204 -139
  641. package/src/typed-render-graph-primitives.ts +266 -74
  642. package/src/typed-shadow-passes.ts +122 -12
  643. package/src/volume/temporal.ts +10 -0
  644. package/dist/chunk-ADHHVYLW.mjs.map +0 -1
  645. package/dist/chunk-FJ6P52EE.mjs.map +0 -1
  646. package/dist/chunk-GE3SDD72.mjs.map +0 -1
  647. package/dist/chunk-GF523LHF.mjs.map +0 -1
  648. package/dist/chunk-HKXTW355.mjs.map +0 -1
  649. package/dist/chunk-JDWARUOI.mjs.map +0 -1
  650. package/dist/chunk-KM2NOX2I.mjs.map +0 -1
  651. package/dist/chunk-TMIASV2N.mjs.map +0 -1
  652. package/dist/chunk-XDP6XE5V.mjs.map +0 -1
  653. package/dist/chunk-ZZ4YQ474.mjs.map +0 -1
  654. package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
  655. package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
@@ -1,4 +1,118 @@
1
1
  import { cubeArrayDepthDescriptor, comparisonSamplerDescriptor, cubeArrayDepthFaceView } from '@forgeax/engine-rhi';
2
+ import { err, ok } from '@forgeax/engine-types';
3
+
4
+ // src/pipeline/standard-output/auto-exposure/inspection.ts
5
+ var AutoExposureInvalidParameterError = class extends Error {
6
+ constructor(detail) {
7
+ super(`auto-exposure-invalid-parameter: ${detail.field}`);
8
+ this.detail = detail;
9
+ this.name = "AutoExposureInvalidParameterError";
10
+ }
11
+ detail;
12
+ code = "auto-exposure-invalid-parameter";
13
+ expected = ERROR_POLICY[this.code].expected;
14
+ hint = ERROR_POLICY[this.code].hint;
15
+ };
16
+ var AutoExposureCapabilityUnavailableError = class extends Error {
17
+ constructor(detail) {
18
+ super(`auto-exposure-capability-unavailable: ${detail.capability}`);
19
+ this.detail = detail;
20
+ this.name = "AutoExposureCapabilityUnavailableError";
21
+ }
22
+ detail;
23
+ code = "auto-exposure-capability-unavailable";
24
+ expected = ERROR_POLICY[this.code].expected;
25
+ hint = ERROR_POLICY[this.code].hint;
26
+ };
27
+ var AutoExposureStaleGenerationError = class extends Error {
28
+ constructor(detail) {
29
+ super(
30
+ `auto-exposure-stale-generation: ${detail.actualGeneration} != ${detail.expectedGeneration}`
31
+ );
32
+ this.detail = detail;
33
+ this.name = "AutoExposureStaleGenerationError";
34
+ }
35
+ detail;
36
+ code = "auto-exposure-stale-generation";
37
+ expected = ERROR_POLICY[this.code].expected;
38
+ hint = ERROR_POLICY[this.code].hint;
39
+ };
40
+ var AutoExposureStageFailedError = class extends Error {
41
+ constructor(detail) {
42
+ super(`auto-exposure-stage-failed: ${detail.operation}`);
43
+ this.detail = detail;
44
+ this.name = "AutoExposureStageFailedError";
45
+ }
46
+ detail;
47
+ code = "auto-exposure-stage-failed";
48
+ expected = ERROR_POLICY[this.code].expected;
49
+ hint = ERROR_POLICY[this.code].hint;
50
+ };
51
+ var ERROR_POLICY = {
52
+ "auto-exposure-invalid-parameter": {
53
+ expected: "camera auto-exposure parameters are finite and within their declared ranges",
54
+ hint: "inspect the field and provide a finite value before rebuilding the camera output"
55
+ },
56
+ "auto-exposure-capability-unavailable": {
57
+ expected: "the auto-exposure stage has the required device capability",
58
+ hint: "inspect live capabilities and retry the same camera generation"
59
+ },
60
+ "auto-exposure-stale-generation": {
61
+ expected: "the prepared auto-exposure state matches the camera target generation",
62
+ hint: "discard stale prepared state and rebuild from the latest camera snapshot"
63
+ },
64
+ "auto-exposure-stage-failed": {
65
+ expected: "the auto-exposure stage completes its declared operation",
66
+ hint: "inspect the structured cause, preserve lastKnownGood, and retry the stage"
67
+ }
68
+ };
69
+ function createAutoExposureError(input) {
70
+ if (input instanceof AutoExposureInvalidParameterError || input instanceof AutoExposureCapabilityUnavailableError || input instanceof AutoExposureStaleGenerationError || input instanceof AutoExposureStageFailedError) {
71
+ return input;
72
+ }
73
+ switch (input.code) {
74
+ case "auto-exposure-invalid-parameter":
75
+ return new AutoExposureInvalidParameterError(input.detail);
76
+ case "auto-exposure-capability-unavailable":
77
+ return new AutoExposureCapabilityUnavailableError(input.detail);
78
+ case "auto-exposure-stale-generation":
79
+ return new AutoExposureStaleGenerationError(input.detail);
80
+ case "auto-exposure-stage-failed":
81
+ return new AutoExposureStageFailedError(input.detail);
82
+ }
83
+ }
84
+ function cloneExposure(exposure) {
85
+ if (exposure.kind === "manual") return { ...exposure };
86
+ return {
87
+ ...exposure,
88
+ rangeEv: [exposure.rangeEv[0], exposure.rangeEv[1]],
89
+ rates: [exposure.rates[0], exposure.rates[1]]
90
+ };
91
+ }
92
+ function cloneFailure(error) {
93
+ if (error === void 0) return void 0;
94
+ return Object.freeze({
95
+ ...error,
96
+ detail: Object.freeze({ ...error.detail })
97
+ });
98
+ }
99
+ function createAutoExposureInspection(input) {
100
+ const base = {
101
+ requested: cloneExposure(input.requested),
102
+ actual: input.actual,
103
+ actualState: input.actualState ?? (input.actual === null ? "gpu-resident" : "accepted"),
104
+ fallback: input.fallback,
105
+ lastKnownGood: input.lastKnownGood,
106
+ targetGeneration: input.targetGeneration,
107
+ reset: Object.freeze([...input.reset]),
108
+ cost: Object.freeze({ ...input.cost }),
109
+ receipt: Object.freeze({ ...input.receipt })
110
+ };
111
+ if (input.recentFailure === void 0) return Object.freeze(base);
112
+ const recentFailure = cloneFailure(createAutoExposureError(input.recentFailure));
113
+ if (recentFailure === void 0) return Object.freeze(base);
114
+ return Object.freeze({ ...base, recentFailure });
115
+ }
2
116
 
3
117
  // src/errors/render.ts
4
118
  var LifecycleConstructionError = class extends Error {
@@ -259,16 +373,16 @@ var MaterialSkinAttrMissingError = class extends Error {
259
373
  expected;
260
374
  hint;
261
375
  detail;
262
- constructor(entity, missing) {
376
+ constructor(entity, missing2) {
263
377
  const expected = "pbr-skin material requires mesh.attributes.skinIndex + skinWeight";
264
- const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${missing}; switch the entity to a skinned glTF mesh authored with JOINTS_0 + WEIGHTS_0, or change the material to a non-skin shader via Materials.standard / Materials.unlit`;
378
+ const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${missing2}; switch the entity to a skinned glTF mesh authored with JOINTS_0 + WEIGHTS_0, or change the material to a non-skin shader via Materials.standard / Materials.unlit`;
265
379
  super(
266
- `material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing}`
380
+ `material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing2}`
267
381
  );
268
382
  this.name = "MaterialSkinAttrMissingError";
269
383
  this.expected = expected;
270
384
  this.hint = hint;
271
- this.detail = { entity, missing };
385
+ this.detail = { entity, missing: missing2 };
272
386
  }
273
387
  };
274
388
  var TransmissionCapabilityMissingError = class extends Error {
@@ -778,6 +892,7 @@ var VolumeInvalidParametersError = class extends Error {
778
892
  var GPU_TEXTURE_USAGE_COPY_SRC = 1;
779
893
  var GPU_TEXTURE_USAGE_COPY_DST = 2;
780
894
  var GPU_TEXTURE_USAGE_TEXTURE_BINDING = 4;
895
+ var GPU_TEXTURE_USAGE_STORAGE_BINDING = 8;
781
896
  var GPU_TEXTURE_USAGE_RENDER_ATTACHMENT = 16;
782
897
  var GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING = GPU_TEXTURE_USAGE_RENDER_ATTACHMENT | GPU_TEXTURE_USAGE_TEXTURE_BINDING;
783
898
 
@@ -929,6 +1044,456 @@ var ShadowAtlas = class {
929
1044
  }
930
1045
  };
931
1046
 
1047
+ // src/errors/gpu-driven.ts
1048
+ var ERROR_POLICY2 = {
1049
+ "missing-material-receipt": {
1050
+ expected: "a producer-owned Standard PBR material receipt is present",
1051
+ hint: "cook and load the Standard PBR artifact, then retry preparation",
1052
+ recovery: "rebuild-producer"
1053
+ },
1054
+ "missing-uv": {
1055
+ expected: "the geometry exposes every UV set named by the material receipt",
1056
+ hint: "repair the geometry UV semantic or route the draw to the CPU semantic lane",
1057
+ recovery: "route-cpu-lane"
1058
+ },
1059
+ "reflection-mismatch": {
1060
+ expected: "the loaded reflection receipt matches the artifact layout identity",
1061
+ hint: "rebuild the material artifact and reflection from one source, then retry",
1062
+ recovery: "rebuild-producer"
1063
+ },
1064
+ "vertex-input-mismatch": {
1065
+ expected: "geometry vertex semantics match the material reflection receipt",
1066
+ hint: "repair the geometry vertex semantic layout or route the draw to the CPU lane",
1067
+ recovery: "route-cpu-lane"
1068
+ },
1069
+ "alpha-mask-mismatch": {
1070
+ expected: "the Alpha Mask cutoff is present in the material receipt",
1071
+ hint: "declare alphaCutoff in the Standard PBR material schema and recook it",
1072
+ recovery: "rebuild-producer"
1073
+ },
1074
+ "resource-not-ready": {
1075
+ expected: "all material resource slots have resolved handles",
1076
+ hint: "resolve the declared texture and sampler resources before recording",
1077
+ recovery: "retry-same-draw"
1078
+ },
1079
+ "stale-generation": {
1080
+ expected: "receipt and prepared inputs belong to the requested generation",
1081
+ hint: "discard stale GPU facts, rebuild the producer receipt, and retry the same draw",
1082
+ recovery: "rebuild-generation"
1083
+ },
1084
+ "skin-receipt-mismatch": {
1085
+ expected: "skinned geometry has a current palette address receipt",
1086
+ hint: "rebuild the Skin palette receipt for this generation before recording",
1087
+ recovery: "rebuild-producer"
1088
+ },
1089
+ "shadow-ownership": {
1090
+ expected: "every declared ShadowCaster pass has one GPU-compatible draw-item owner",
1091
+ hint: "repair the ShadowCaster producer membership or keep the residual on its explicit CPU lane",
1092
+ recovery: "route-cpu-lane"
1093
+ }
1094
+ };
1095
+ var GpuDrivenPreparationError = class extends Error {
1096
+ code;
1097
+ expected;
1098
+ hint;
1099
+ detail;
1100
+ constructor(code, detail) {
1101
+ const policy = ERROR_POLICY2[code];
1102
+ super(`[GpuDrivenPreparationError ${code}] ${policy.expected}`);
1103
+ this.name = "GpuDrivenPreparationError";
1104
+ this.code = code;
1105
+ this.expected = policy.expected;
1106
+ this.hint = policy.hint;
1107
+ this.detail = Object.freeze({
1108
+ ...detail,
1109
+ recovery: detail.recovery ?? policy.recovery
1110
+ });
1111
+ }
1112
+ };
1113
+ var MATRIX_STRIDE = 16;
1114
+ var INITIAL_CAPACITY = 1;
1115
+ function instanceUploadRangesForResident(activeIsNew, dirtyRanges, fullRange) {
1116
+ return activeIsNew ? [fullRange] : dirtyRanges;
1117
+ }
1118
+ function instanceCollectionFailureFacts(cause, recovery, requestedBytes = 0, supportedBytes = void 0, backend = "unknown") {
1119
+ return {
1120
+ requestedBytes,
1121
+ supportedBytes,
1122
+ backend,
1123
+ owner: "renderer.instances",
1124
+ cause,
1125
+ recovery
1126
+ };
1127
+ }
1128
+ var InstanceCollectionError = class extends Error {
1129
+ code;
1130
+ expected;
1131
+ hint;
1132
+ detail;
1133
+ owner = "renderer.instances";
1134
+ recovery;
1135
+ facts;
1136
+ constructor(code, expected, hint, detail, facts) {
1137
+ super(`${code}: ${expected}`);
1138
+ this.name = "InstanceCollectionError";
1139
+ this.code = code;
1140
+ this.expected = expected;
1141
+ this.hint = hint;
1142
+ this.detail = detail;
1143
+ this.facts = facts ?? instanceCollectionFailureFacts(
1144
+ code,
1145
+ hint,
1146
+ detail?.operation === "create" || detail?.operation === "replace" ? typeof detail.actual === "number" && Number.isFinite(detail.actual) ? detail.actual * Float32Array.BYTES_PER_ELEMENT : 0 : 0
1147
+ );
1148
+ this.recovery = this.facts.recovery;
1149
+ }
1150
+ };
1151
+ function nextCapacity(required) {
1152
+ let capacity = INITIAL_CAPACITY;
1153
+ while (capacity < required) capacity *= 2;
1154
+ return capacity;
1155
+ }
1156
+ function invalid(operation, expected, actual, collectionId, context) {
1157
+ const hint = "repair the collection payload and retry the same authoring operation";
1158
+ return new InstanceCollectionError(
1159
+ "instance-collection-invalid",
1160
+ expected,
1161
+ hint,
1162
+ { operation, expected, actual, ...collectionId === void 0 ? {} : { collectionId } },
1163
+ instanceCollectionFailureFacts(
1164
+ context?.cause ?? `invalid-${operation}-authoring`,
1165
+ context?.recovery ?? hint,
1166
+ context?.requestedBytes ?? 0,
1167
+ context?.supportedBytes
1168
+ )
1169
+ );
1170
+ }
1171
+ function validateTransforms(operation, transforms, collectionId) {
1172
+ if (!(transforms instanceof Float32Array)) {
1173
+ return invalid(operation, "transforms is a Float32Array", typeof transforms, collectionId, {
1174
+ cause: "invalid-transform-type"
1175
+ });
1176
+ }
1177
+ if (transforms.length % MATRIX_STRIDE !== 0) {
1178
+ return invalid(
1179
+ operation,
1180
+ `transforms.length is a multiple of ${MATRIX_STRIDE}`,
1181
+ transforms.length,
1182
+ collectionId,
1183
+ {
1184
+ requestedBytes: transforms.byteLength,
1185
+ cause: "invalid-transform-stride"
1186
+ }
1187
+ );
1188
+ }
1189
+ for (const value of transforms) {
1190
+ if (!Number.isFinite(value)) {
1191
+ return invalid(operation, "every transform value is finite", value, collectionId, {
1192
+ requestedBytes: transforms.byteLength,
1193
+ cause: "invalid-transform-value"
1194
+ });
1195
+ }
1196
+ }
1197
+ return void 0;
1198
+ }
1199
+ function appendRange(ranges, start, end) {
1200
+ if (start >= end) return;
1201
+ let index = 0;
1202
+ while (index < ranges.length) {
1203
+ const existing = ranges[index];
1204
+ if (existing === void 0 || existing.end >= start) break;
1205
+ index += 1;
1206
+ }
1207
+ while (index < ranges.length) {
1208
+ const existing = ranges[index];
1209
+ if (existing === void 0 || existing.start > end) break;
1210
+ start = Math.min(start, existing.start);
1211
+ end = Math.max(end, existing.end);
1212
+ ranges.splice(index, 1);
1213
+ }
1214
+ ranges.splice(index, 0, { start, end });
1215
+ }
1216
+ function appendDirtyRange(record, start, end) {
1217
+ appendRange(record.dirtyRanges, start, end);
1218
+ }
1219
+ function missing(operation, id) {
1220
+ return new InstanceCollectionError(
1221
+ "instance-collection-not-found",
1222
+ `instance collection ${Number(id)} is live and owned by this Renderer`,
1223
+ "create a collection with renderer.instances.create or retain the original collection id",
1224
+ { operation, expected: "a live instance collection id", actual: Number(id), collectionId: id }
1225
+ );
1226
+ }
1227
+ var InstanceCollectionStore = class {
1228
+ nextId = 1;
1229
+ epochValue = 0;
1230
+ disposed = false;
1231
+ records = /* @__PURE__ */ new Map();
1232
+ residency = /* @__PURE__ */ new Map();
1233
+ get epoch() {
1234
+ return this.epochValue;
1235
+ }
1236
+ create(input) {
1237
+ if (this.disposed) {
1238
+ return err(
1239
+ new InstanceCollectionError(
1240
+ "instance-collection-released",
1241
+ "the Renderer-owned instance collection store is live",
1242
+ "create a new Renderer before authoring instance collections"
1243
+ )
1244
+ );
1245
+ }
1246
+ const invalidPayload = validateTransforms("create", input.transforms);
1247
+ if (invalidPayload !== void 0) return err(invalidPayload);
1248
+ const id = this.nextId++;
1249
+ const count = input.transforms.length / MATRIX_STRIDE;
1250
+ const record = {
1251
+ id,
1252
+ transforms: new Float32Array(input.transforms),
1253
+ count,
1254
+ capacity: nextCapacity(Math.max(INITIAL_CAPACITY, count)),
1255
+ revision: 1,
1256
+ dirtyRanges: count === 0 ? [] : [{ start: 0, end: count }],
1257
+ lastSnapshotRevision: 0,
1258
+ released: false
1259
+ };
1260
+ this.records.set(id, record);
1261
+ this.epochValue += 1;
1262
+ return ok(this.info(record));
1263
+ }
1264
+ replace(id, transforms) {
1265
+ const record = this.live("replace", id);
1266
+ if (!record.ok) return record;
1267
+ const invalidPayload = validateTransforms("replace", transforms, id);
1268
+ if (invalidPayload !== void 0) return err(invalidPayload);
1269
+ const count = transforms.length / MATRIX_STRIDE;
1270
+ record.value.transforms = new Float32Array(transforms);
1271
+ record.value.count = count;
1272
+ record.value.capacity = Math.max(record.value.capacity, nextCapacity(Math.max(1, count)));
1273
+ record.value.revision += 1;
1274
+ record.value.dirtyRanges = count === 0 ? [] : [{ start: 0, end: count }];
1275
+ record.value.lastSnapshotRevision = record.value.revision - 1;
1276
+ this.epochValue += 1;
1277
+ return ok(this.info(record.value));
1278
+ }
1279
+ update(id, input) {
1280
+ const record = this.live("update", id);
1281
+ if (!record.ok) return record;
1282
+ const invalidPayload = validateTransforms("update", input.transforms, id);
1283
+ if (invalidPayload !== void 0) return err(invalidPayload);
1284
+ if (!Number.isInteger(input.start) || input.start < 0) {
1285
+ return err(
1286
+ invalid("update", "start is a non-negative matrix ordinal", input.start, id, {
1287
+ requestedBytes: input.transforms.byteLength,
1288
+ supportedBytes: record.value.capacity * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1289
+ cause: "invalid-update-range-start"
1290
+ })
1291
+ );
1292
+ }
1293
+ const span = input.transforms.length / MATRIX_STRIDE;
1294
+ const attemptedEnd = input.start + span;
1295
+ if (attemptedEnd > record.value.count) {
1296
+ return err(
1297
+ invalid(
1298
+ "update",
1299
+ `start + matrix count is <= collection count (${record.value.count})`,
1300
+ attemptedEnd,
1301
+ id,
1302
+ {
1303
+ requestedBytes: attemptedEnd * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1304
+ supportedBytes: record.value.count * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1305
+ cause: "invalid-update-range-end"
1306
+ }
1307
+ )
1308
+ );
1309
+ }
1310
+ if (record.value.lastSnapshotRevision === record.value.revision) {
1311
+ record.value.dirtyRanges = [];
1312
+ }
1313
+ record.value.transforms.set(input.transforms, input.start * MATRIX_STRIDE);
1314
+ record.value.revision += 1;
1315
+ appendDirtyRange(record.value, input.start, input.start + span);
1316
+ this.epochValue += 1;
1317
+ return ok(this.info(record.value));
1318
+ }
1319
+ inspect(id) {
1320
+ const record = this.live("inspect", id);
1321
+ return record.ok ? ok(this.info(record.value)) : record;
1322
+ }
1323
+ /**
1324
+ * Return detached residency facts for every live collection.
1325
+ *
1326
+ * @internal Record-stage evidence is reported through the two methods below;
1327
+ * callers only receive immutable PODs and never GPU handles.
1328
+ */
1329
+ _inspections() {
1330
+ return Object.freeze(
1331
+ [...this.records.values()].map((record) => this.projectInspection(record))
1332
+ );
1333
+ }
1334
+ /** @internal Renderer record owner reports the accepted collection lane. */
1335
+ _reportResidency(input) {
1336
+ if (!this.records.has(input.collectionId)) return;
1337
+ const previous = this.residency.get(input.collectionId);
1338
+ const sameFrame = previous !== void 0 && previous.frameNumber === input.frameNumber && previous.error === void 0;
1339
+ const uploadRanges = sameFrame ? [...previous.uploadRanges].reduce(
1340
+ (ranges, range) => {
1341
+ appendRange(ranges, range.start, range.end);
1342
+ return ranges;
1343
+ },
1344
+ input.uploadRanges.map((range) => ({ ...range }))
1345
+ ) : input.uploadRanges.map((range) => ({ ...range }));
1346
+ this.residency.set(input.collectionId, {
1347
+ frameNumber: input.frameNumber,
1348
+ residentGeneration: input.residentGeneration,
1349
+ lane: input.lane,
1350
+ uploadRanges,
1351
+ uploadedBytes: sameFrame ? previous.uploadedBytes + input.uploadedBytes : input.uploadedBytes,
1352
+ requestedBytes: input.requestedBytes,
1353
+ supportedBytes: input.supportedBytes,
1354
+ backend: input.backend,
1355
+ error: void 0
1356
+ });
1357
+ }
1358
+ /** @internal Renderer record owner reports a typed admission failure. */
1359
+ _reportFailure(input) {
1360
+ if (!this.records.has(input.collectionId)) return;
1361
+ this.residency.set(input.collectionId, {
1362
+ frameNumber: -1,
1363
+ residentGeneration: void 0,
1364
+ lane: "unavailable",
1365
+ uploadRanges: [],
1366
+ uploadedBytes: 0,
1367
+ requestedBytes: input.facts.requestedBytes,
1368
+ supportedBytes: input.facts.supportedBytes,
1369
+ backend: input.facts.backend,
1370
+ error: {
1371
+ code: input.code,
1372
+ expected: input.expected,
1373
+ hint: input.hint,
1374
+ detail: { ...input.facts }
1375
+ }
1376
+ });
1377
+ }
1378
+ /** @internal A lost device invalidates every renderer-owned GPU resident. */
1379
+ _resetResidency() {
1380
+ this.residency.clear();
1381
+ }
1382
+ snapshot(id) {
1383
+ const record = this.live("inspect", id);
1384
+ if (!record.ok) return record;
1385
+ const value = record.value;
1386
+ value.lastSnapshotRevision = value.revision;
1387
+ const result = {
1388
+ ...this.info(value),
1389
+ transforms: new Float32Array(value.transforms),
1390
+ dirtyRanges: value.dirtyRanges.map((range) => ({ ...range }))
1391
+ };
1392
+ return ok(result);
1393
+ }
1394
+ release(id) {
1395
+ const record = this.records.get(id);
1396
+ if (record === void 0) return err(missing("release", id));
1397
+ if (record.released) {
1398
+ return err(
1399
+ new InstanceCollectionError(
1400
+ "instance-collection-released",
1401
+ `instance collection ${Number(id)} has not already been released`,
1402
+ "do not reuse a released collection id; create a new collection",
1403
+ {
1404
+ operation: "release",
1405
+ expected: "a live instance collection id",
1406
+ actual: Number(id),
1407
+ collectionId: id
1408
+ }
1409
+ )
1410
+ );
1411
+ }
1412
+ record.released = true;
1413
+ this.records.delete(id);
1414
+ this.residency.delete(id);
1415
+ this.epochValue += 1;
1416
+ return ok(void 0);
1417
+ }
1418
+ /** Drop all canonical matrices during Renderer disposal. */
1419
+ dispose() {
1420
+ if (this.disposed) return;
1421
+ this.disposed = true;
1422
+ for (const record of this.records.values()) record.released = true;
1423
+ this.records.clear();
1424
+ this.residency.clear();
1425
+ this.epochValue += 1;
1426
+ }
1427
+ live(operation, id) {
1428
+ if (!Number.isInteger(id) || id <= 0) {
1429
+ return err(invalid(operation, "collectionId is a positive integer", id, id));
1430
+ }
1431
+ if (this.disposed) {
1432
+ return err(
1433
+ new InstanceCollectionError(
1434
+ "instance-collection-released",
1435
+ "the Renderer-owned instance collection store is live",
1436
+ "create a new Renderer before using instance collections",
1437
+ { operation, expected: "a live collection store", actual: "disposed", collectionId: id }
1438
+ )
1439
+ );
1440
+ }
1441
+ const record = this.records.get(id);
1442
+ return record === void 0 ? err(missing(operation, id)) : ok(record);
1443
+ }
1444
+ info(record) {
1445
+ return Object.freeze({
1446
+ collectionId: record.id,
1447
+ count: record.count,
1448
+ capacity: record.capacity,
1449
+ revision: record.revision
1450
+ });
1451
+ }
1452
+ projectInspection(record) {
1453
+ const residency = this.residency.get(record.id);
1454
+ return Object.freeze({
1455
+ ...this.info(record),
1456
+ residentGeneration: residency?.residentGeneration,
1457
+ lane: residency?.lane ?? "unresident",
1458
+ dirtyRanges: Object.freeze(record.dirtyRanges.map((range) => ({ ...range }))),
1459
+ uploadRanges: Object.freeze(residency?.uploadRanges.map((range) => ({ ...range })) ?? []),
1460
+ uploadedBytes: residency?.uploadedBytes ?? 0,
1461
+ requestedBytes: residency?.requestedBytes ?? record.count * MATRIX_STRIDE * 4,
1462
+ supportedBytes: residency?.supportedBytes,
1463
+ backend: residency?.backend ?? "unknown",
1464
+ owner: "renderer.instances",
1465
+ error: residency?.error
1466
+ });
1467
+ }
1468
+ };
1469
+
1470
+ // src/scene/visibility/budget.ts
1471
+ var DEFAULT_CONFIGURED_QUERY_BUDGET = 2048;
1472
+ var MAX_QUERY_BUDGET = 4096;
1473
+ var VISIBILITY_CANDIDATE_COUNT = 1e5;
1474
+ var VISIBILITY_OCCLUDED_COUNT = 9e4;
1475
+ function createVisibilityBudget(configuredQueryBudget = DEFAULT_CONFIGURED_QUERY_BUDGET) {
1476
+ if (!Number.isSafeInteger(configuredQueryBudget) || configuredQueryBudget <= 0) {
1477
+ throw new RangeError("configuredQueryBudget must be a positive safe integer");
1478
+ }
1479
+ const effectiveQueryBudget = Math.min(configuredQueryBudget, MAX_QUERY_BUDGET);
1480
+ const oneSweepCandidates = oneSweep(VISIBILITY_CANDIDATE_COUNT, effectiveQueryBudget);
1481
+ const oneSweepOccluded = oneSweep(VISIBILITY_OCCLUDED_COUNT, effectiveQueryBudget);
1482
+ const retestSubmits = Math.max(6, oneSweepOccluded);
1483
+ return Object.freeze({
1484
+ configuredQueryBudget,
1485
+ effectiveQueryBudget,
1486
+ oneSweepCandidates,
1487
+ oneSweepOccluded,
1488
+ settleSubmits: 2 * oneSweepCandidates,
1489
+ retestSubmits,
1490
+ expirySubmits: Math.max(8, retestSubmits + oneSweepOccluded)
1491
+ });
1492
+ }
1493
+ function oneSweep(candidateCount, effectiveQueryBudget) {
1494
+ return Math.ceil(candidateCount / effectiveQueryBudget);
1495
+ }
1496
+
932
1497
  // src/render-contract.ts
933
1498
  var STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = "forgeax::standard::output-transform";
934
1499
  var FXAA_POST_PROCESS_ID = "forgeax::post::fxaa";
@@ -960,6 +1525,11 @@ var RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
960
1525
  "record/graph-execute/bloom-blur-h",
961
1526
  "record/graph-execute/bloom-blur-v",
962
1527
  "record/graph-execute/bloom-composite",
1528
+ "record/graph-execute/ssr-hiz",
1529
+ "record/graph-execute/ssr-trace",
1530
+ "record/graph-execute/ssr-temporal",
1531
+ "record/graph-execute/ssr-reflection-mip",
1532
+ "record/graph-execute/ssr-compose",
963
1533
  "record/graph-execute/other"
964
1534
  ];
965
1535
  var RENDER_HDRP_BINNER_PHASE_CATALOG = [
@@ -1012,6 +1582,6 @@ var RENDER_PHASE_CATALOG = [
1012
1582
  ...RENDER_RECORD_PHASE_CATALOG
1013
1583
  ];
1014
1584
 
1015
- export { AtmosphereInvalidParameterError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, EquirectProjectionFailedError, FXAA_POST_PROCESS_ID, FogCardinalityError, FrameReceiptStaleError, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_COPY_SRC, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_TEXTURE_BINDING, LifecycleConstructionError, MaterialSkinAttrMissingError, ObservationUnavailableError, OwnerStageFailedError, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointsLinesBudgetExceededError, PointsLinesInvalidStyleError, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PointsLinesStyleUnsupportedError, PointsLinesTopologyMismatchError, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RenderIntentInvalidError, RenderTargetCapabilityMissingError, RenderTargetDescriptorInvalidError, RenderTargetOperationFailedError, RenderTargetStateInvalidError, RendererContractFailureError, RendererOperationError, SHADOW_ATLAS_DEFAULT_FACE_SIZE, SHADOW_ATLAS_DEFAULT_LAYERS, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, SceneDataUnavailableError, ShadowAtlas, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, StandardClusterIndexOverflowError, StandardClusterTransportUnavailableError, StandardLightBudgetExceededError, StandardProfileInvalidError, TaaCapsInsufficientError, TemporalFrameSubmitError, TransmissionCapabilityMissingError, VertexColorVariantConflictError, VideoUploadUnsupportedError, VolumeDensityShapeMismatchError, VolumeInvalidBoundsError, VolumeInvalidParametersError, VolumeOwnerConflictError, createLightResourceUnavailable };
1016
- //# sourceMappingURL=chunk-ZZ4YQ474.mjs.map
1017
- //# sourceMappingURL=chunk-ZZ4YQ474.mjs.map
1585
+ export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, EquirectProjectionFailedError, FXAA_POST_PROCESS_ID, FogCardinalityError, FrameReceiptStaleError, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_COPY_SRC, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_STORAGE_BINDING, GPU_TEXTURE_USAGE_TEXTURE_BINDING, GpuDrivenPreparationError, InstanceCollectionError, InstanceCollectionStore, LifecycleConstructionError, MaterialSkinAttrMissingError, ObservationUnavailableError, OwnerStageFailedError, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointsLinesBudgetExceededError, PointsLinesInvalidStyleError, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PointsLinesStyleUnsupportedError, PointsLinesTopologyMismatchError, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RenderIntentInvalidError, RenderTargetCapabilityMissingError, RenderTargetDescriptorInvalidError, RenderTargetOperationFailedError, RenderTargetStateInvalidError, RendererContractFailureError, RendererOperationError, SHADOW_ATLAS_DEFAULT_FACE_SIZE, SHADOW_ATLAS_DEFAULT_LAYERS, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, SceneDataUnavailableError, ShadowAtlas, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, StandardClusterIndexOverflowError, StandardClusterTransportUnavailableError, StandardLightBudgetExceededError, StandardProfileInvalidError, TaaCapsInsufficientError, TemporalFrameSubmitError, TransmissionCapabilityMissingError, VertexColorVariantConflictError, VideoUploadUnsupportedError, VolumeDensityShapeMismatchError, VolumeInvalidBoundsError, VolumeInvalidParametersError, VolumeOwnerConflictError, createAutoExposureError, createAutoExposureInspection, createLightResourceUnavailable, createVisibilityBudget, instanceUploadRangesForResident };
1586
+ //# sourceMappingURL=chunk-NRNXBLIJ.mjs.map
1587
+ //# sourceMappingURL=chunk-NRNXBLIJ.mjs.map