@forgeax/engine-render 0.1.28 → 0.1.30

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 (768) hide show
  1. package/README.md +856 -126
  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/device-feature-admission.d.ts +4 -3
  5. package/dist/assembly/device-feature-admission.d.ts.map +1 -1
  6. package/dist/assembly/dynamic-geometry-host.d.ts +27 -0
  7. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
  8. package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
  9. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
  10. package/dist/assembly/factory.d.ts +3 -1
  11. package/dist/assembly/factory.d.ts.map +1 -1
  12. package/dist/assembly/gpu-driven-owner.d.ts +10 -0
  13. package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
  14. package/dist/assembly/host-contract.d.ts +14 -0
  15. package/dist/assembly/host-contract.d.ts.map +1 -1
  16. package/dist/assembly/material/assembly.d.ts +31 -1
  17. package/dist/assembly/material/assembly.d.ts.map +1 -1
  18. package/dist/assembly/material/pipeline-helpers.d.ts +24 -0
  19. package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -0
  20. package/dist/assembly/material-shader-policy.d.ts +3 -1
  21. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  22. package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
  23. package/dist/assembly/recovery/failure-location.d.ts +12 -0
  24. package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
  25. package/dist/assembly/recovery/recovery-attempt.d.ts +1 -6
  26. package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -1
  27. package/dist/assembly/recovery/renderer-recover.d.ts +7 -4
  28. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  29. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  30. package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
  31. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
  32. package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
  33. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  34. package/dist/assembly/renderer-helpers.d.ts +3 -0
  35. package/dist/assembly/renderer-helpers.d.ts.map +1 -1
  36. package/dist/assembly/renderer-inspection.d.ts +4 -0
  37. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  38. package/dist/assembly/shader-prewarm-policy.d.ts +7 -1
  39. package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
  40. package/dist/assembly/skin-palette-owner.d.ts +8 -0
  41. package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
  42. package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
  43. package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
  44. package/dist/assembly/webgpu-device-loss.d.ts +15 -0
  45. package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
  46. package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
  47. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
  48. package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
  49. package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
  50. package/dist/assembly/webgpu-ready.d.ts +7 -3
  51. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  52. package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
  53. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
  54. package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
  55. package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
  56. package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
  57. package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
  58. package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
  59. package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
  60. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
  61. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
  62. package/dist/assembly/webgpu-renderer.d.ts +7 -141
  63. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  64. package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
  65. package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
  66. package/dist/authoring.mjs +2 -2
  67. package/dist/capture/scene-projection.d.ts +41 -0
  68. package/dist/capture/scene-projection.d.ts.map +1 -0
  69. package/dist/{chunk-J52NMQKR.mjs → chunk-7MQ3XBSP.mjs} +1098 -844
  70. package/dist/chunk-7MQ3XBSP.mjs.map +1 -0
  71. package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
  72. package/dist/chunk-BLXGONR2.mjs.map +1 -0
  73. package/dist/{chunk-VSL23LZE.mjs → chunk-C3DDSXYK.mjs} +1188 -463
  74. package/dist/chunk-C3DDSXYK.mjs.map +1 -0
  75. package/dist/{chunk-IQMKJLNU.mjs → chunk-FUUO4UND.mjs} +443 -30
  76. package/dist/chunk-FUUO4UND.mjs.map +1 -0
  77. package/dist/{chunk-J6KACNOH.mjs → chunk-JRBDO2KB.mjs} +617 -7
  78. package/dist/chunk-JRBDO2KB.mjs.map +1 -0
  79. package/dist/{chunk-GE3SDD72.mjs → chunk-MDQJPY3T.mjs} +20 -40
  80. package/dist/chunk-MDQJPY3T.mjs.map +1 -0
  81. package/dist/{chunk-MYJ5RPJO.mjs → chunk-NO4WZCAH.mjs} +3 -3
  82. package/dist/chunk-NO4WZCAH.mjs.map +1 -0
  83. package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
  84. package/dist/chunk-PA5DRJNI.mjs.map +1 -0
  85. package/dist/{chunk-MBU4ZVE7.mjs → chunk-PSEQ6QPH.mjs} +4655 -892
  86. package/dist/chunk-PSEQ6QPH.mjs.map +1 -0
  87. package/dist/{chunk-JAASCMXA.mjs → chunk-S5UE2T5P.mjs} +289 -41
  88. package/dist/chunk-S5UE2T5P.mjs.map +1 -0
  89. package/dist/components/camera.d.ts +62 -2
  90. package/dist/components/camera.d.ts.map +1 -1
  91. package/dist/components/directional-light.d.ts +2 -2
  92. package/dist/components/dynamic-resolution.d.ts +15 -0
  93. package/dist/components/dynamic-resolution.d.ts.map +1 -0
  94. package/dist/components/index.d.ts +2 -0
  95. package/dist/components/index.d.ts.map +1 -1
  96. package/dist/components/instances.d.ts +6 -20
  97. package/dist/components/instances.d.ts.map +1 -1
  98. package/dist/components/light-helpers.d.ts.map +1 -1
  99. package/dist/components/reflection-probe.d.ts +1 -0
  100. package/dist/components/reflection-probe.d.ts.map +1 -1
  101. package/dist/components/scene-instance.d.ts +2 -1
  102. package/dist/components/scene-instance.d.ts.map +1 -1
  103. package/dist/components/screen-space-reflection.d.ts +14 -0
  104. package/dist/components/screen-space-reflection.d.ts.map +1 -0
  105. package/dist/components/skylight.d.ts +4 -1
  106. package/dist/components/skylight.d.ts.map +1 -1
  107. package/dist/construct-renderer.mjs +14809 -7570
  108. package/dist/construct-renderer.mjs.map +1 -1
  109. package/dist/device/device-scope.d.ts +2 -0
  110. package/dist/device/device-scope.d.ts.map +1 -1
  111. package/dist/device/gpu-residency.d.ts +3 -14
  112. package/dist/device/gpu-residency.d.ts.map +1 -1
  113. package/dist/dynamic-geometry.d.ts.map +1 -1
  114. package/dist/environment/background.d.ts +7 -0
  115. package/dist/environment/background.d.ts.map +1 -0
  116. package/dist/environment/ibl.d.ts +11 -0
  117. package/dist/environment/ibl.d.ts.map +1 -0
  118. package/dist/environment/storage.d.ts +14 -0
  119. package/dist/environment/storage.d.ts.map +1 -0
  120. package/dist/errors/gpu-driven.d.ts +6 -3
  121. package/dist/errors/gpu-driven.d.ts.map +1 -1
  122. package/dist/errors/render.d.ts +41 -4
  123. package/dist/errors/render.d.ts.map +1 -1
  124. package/dist/extract/camera.d.ts.map +1 -1
  125. package/dist/extract/contracts.d.ts +7 -0
  126. package/dist/extract/contracts.d.ts.map +1 -1
  127. package/dist/extract/gpu-driven.d.ts +50 -3
  128. package/dist/extract/gpu-driven.d.ts.map +1 -1
  129. package/dist/features/host.d.ts +23 -1
  130. package/dist/features/host.d.ts.map +1 -1
  131. package/dist/features/noise-texture.d.ts +17 -0
  132. package/dist/features/noise-texture.d.ts.map +1 -0
  133. package/dist/features/plan.d.ts +83 -2
  134. package/dist/features/plan.d.ts.map +1 -1
  135. package/dist/features/prepared-gpu-work.d.ts +37 -4
  136. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  137. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  138. package/dist/features/prepared-graphics.d.ts +5 -0
  139. package/dist/features/prepared-graphics.d.ts.map +1 -1
  140. package/dist/features/render-graph-compute.d.ts +5 -3
  141. package/dist/features/render-graph-compute.d.ts.map +1 -1
  142. package/dist/features/render-graph-contribution.d.ts +11 -3
  143. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  144. package/dist/features/render-graph-raster.d.ts +19 -3
  145. package/dist/features/render-graph-raster.d.ts.map +1 -1
  146. package/dist/features/types.d.ts +11 -0
  147. package/dist/features/types.d.ts.map +1 -1
  148. package/dist/fullscreen-post-process-pass.d.ts +2 -0
  149. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  150. package/dist/gpu-driven/batch-topology.d.ts +34 -1
  151. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  152. package/dist/gpu-driven/material-artifacts.d.ts +24 -0
  153. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -0
  154. package/dist/gpu-driven/material-bindings.d.ts +7 -0
  155. package/dist/gpu-driven/material-bindings.d.ts.map +1 -0
  156. package/dist/gpu-driven/pbr-program.d.ts +10 -0
  157. package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
  158. package/dist/gpu-driven/prepared-draw.d.ts +2 -0
  159. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  160. package/dist/gpu-driven/production-raster.d.ts +169 -27
  161. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  162. package/dist/gpu-driven/shadow-views.d.ts +126 -0
  163. package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
  164. package/dist/gpu-driven/view-gpu.d.ts +18 -2
  165. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  166. package/dist/gpu-resource.d.ts +5 -2
  167. package/dist/gpu-resource.d.ts.map +1 -1
  168. package/dist/gpu-scene-schema.d.ts +2 -8
  169. package/dist/gpu-scene-schema.d.ts.map +1 -1
  170. package/dist/gpu-scene.d.ts +14 -0
  171. package/dist/gpu-scene.d.ts.map +1 -1
  172. package/dist/gpu-texture-usage.d.ts +1 -0
  173. package/dist/gpu-texture-usage.d.ts.map +1 -1
  174. package/dist/hdrp-buffers.d.ts +9 -0
  175. package/dist/hdrp-buffers.d.ts.map +1 -1
  176. package/dist/ibl/IblPipelineCache.d.ts +2 -0
  177. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  178. package/dist/ibl/frame-resources.d.ts +8 -0
  179. package/dist/ibl/frame-resources.d.ts.map +1 -0
  180. package/dist/ibl/skylight-bind-group.d.ts +3 -1
  181. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  182. package/dist/index.d.ts +87 -75
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.mjs +10 -8
  185. package/dist/index.mjs.map +1 -1
  186. package/dist/inspection-types.d.ts +180 -1
  187. package/dist/inspection-types.d.ts.map +1 -1
  188. package/dist/instances-derived-bounds.d.ts +11 -0
  189. package/dist/instances-derived-bounds.d.ts.map +1 -1
  190. package/dist/instances.d.ts +89 -44
  191. package/dist/instances.d.ts.map +1 -1
  192. package/dist/internal.d.ts +3 -0
  193. package/dist/internal.d.ts.map +1 -1
  194. package/dist/internal.mjs +117 -9
  195. package/dist/internal.mjs.map +1 -1
  196. package/dist/lifecycle.d.ts +2 -1
  197. package/dist/lifecycle.d.ts.map +1 -1
  198. package/dist/material-row.d.ts +15 -0
  199. package/dist/material-row.d.ts.map +1 -0
  200. package/dist/materials.d.ts +15 -0
  201. package/dist/materials.d.ts.map +1 -1
  202. package/dist/pbr-pipeline.d.ts +23 -5
  203. package/dist/pbr-pipeline.d.ts.map +1 -1
  204. package/dist/pipeline/render-extent.d.ts +51 -0
  205. package/dist/pipeline/render-extent.d.ts.map +1 -0
  206. package/dist/pipeline/standard-build-context.d.ts +7 -0
  207. package/dist/pipeline/standard-build-context.d.ts.map +1 -0
  208. package/dist/pipeline/standard-forward-lane.d.ts +3 -2
  209. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  210. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
  211. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
  212. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
  213. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
  214. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
  215. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
  216. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
  217. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
  218. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
  219. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
  220. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
  221. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
  222. package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
  223. package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
  224. package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
  225. package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
  226. package/dist/pipeline/standard-output/graph.d.ts +15 -0
  227. package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
  228. package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
  229. package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
  230. package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
  231. package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
  232. package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
  233. package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
  234. package/dist/pipeline/standard-output/resources.d.ts +10 -0
  235. package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
  236. package/dist/pipeline/standard-output/types.d.ts +39 -0
  237. package/dist/pipeline/standard-output/types.d.ts.map +1 -0
  238. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  239. package/dist/pipeline/standard-post.d.ts +2 -2
  240. package/dist/pipeline/standard-post.d.ts.map +1 -1
  241. package/dist/pipeline/standard-profile.d.ts +2 -1
  242. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  243. package/dist/pipeline-builder.d.ts +5 -2
  244. package/dist/pipeline-builder.d.ts.map +1 -1
  245. package/dist/pipeline-spec-types.d.ts +4 -0
  246. package/dist/pipeline-spec-types.d.ts.map +1 -1
  247. package/dist/pipeline-spec.d.ts +1 -9
  248. package/dist/pipeline-spec.d.ts.map +1 -1
  249. package/dist/plugin.d.ts.map +1 -1
  250. package/dist/points-lines/standard-owner.d.ts +1 -1
  251. package/dist/points-lines/standard-owner.d.ts.map +1 -1
  252. package/dist/post-process-errors.d.ts +9 -2
  253. package/dist/post-process-errors.d.ts.map +1 -1
  254. package/dist/prepare/extended-lighting/resources.d.ts +3 -3
  255. package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
  256. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  257. package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
  258. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
  259. package/dist/record/frame-lighting.d.ts +3 -3
  260. package/dist/record/frame-lighting.d.ts.map +1 -1
  261. package/dist/record/frame-snapshot.d.ts +109 -13
  262. package/dist/record/frame-snapshot.d.ts.map +1 -1
  263. package/dist/record/frame-targets.d.ts.map +1 -1
  264. package/dist/record/frame.d.ts +41 -5
  265. package/dist/record/frame.d.ts.map +1 -1
  266. package/dist/record/main-pass-geometry.d.ts +13 -9
  267. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  268. package/dist/record/main-pass-material.d.ts +43 -3
  269. package/dist/record/main-pass-material.d.ts.map +1 -1
  270. package/dist/record/main-pass-sprite-draws.d.ts +2 -10
  271. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  272. package/dist/record/main-pass.d.ts +14 -2
  273. package/dist/record/main-pass.d.ts.map +1 -1
  274. package/dist/record/mesh-ssbo.d.ts +15 -6
  275. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  276. package/dist/record/prepared-material-bindings.d.ts +19 -0
  277. package/dist/record/prepared-material-bindings.d.ts.map +1 -0
  278. package/dist/record/recovery-pipeline.d.ts +1 -0
  279. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  280. package/dist/record/render-context.d.ts +101 -22
  281. package/dist/record/render-context.d.ts.map +1 -1
  282. package/dist/record/shadow-pass.d.ts +62 -7
  283. package/dist/record/shadow-pass.d.ts.map +1 -1
  284. package/dist/record/skybox-post-pass.d.ts +1 -1
  285. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  286. package/dist/record/typed-frame-graph.d.ts +39 -8
  287. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  288. package/dist/record/view-ubo.d.ts +1 -0
  289. package/dist/record/view-ubo.d.ts.map +1 -1
  290. package/dist/recovery/render-system-candidate.d.ts +10 -2
  291. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  292. package/dist/recovery/render-system-roots.d.ts +11 -0
  293. package/dist/recovery/render-system-roots.d.ts.map +1 -0
  294. package/dist/recovery/types.d.ts +76 -0
  295. package/dist/recovery/types.d.ts.map +1 -0
  296. package/dist/reflection/background.d.ts +14 -0
  297. package/dist/reflection/background.d.ts.map +1 -0
  298. package/dist/reflection/filter.d.ts.map +1 -1
  299. package/dist/reflection/projection.d.ts +1 -0
  300. package/dist/reflection/projection.d.ts.map +1 -1
  301. package/dist/reflection/record-owner.d.ts +4 -4
  302. package/dist/reflection/record-owner.d.ts.map +1 -1
  303. package/dist/render-contract.d.ts +211 -53
  304. package/dist/render-contract.d.ts.map +1 -1
  305. package/dist/render-graph-primitives.d.ts +1 -0
  306. package/dist/render-graph-primitives.d.ts.map +1 -1
  307. package/dist/render-pipeline.d.ts +81 -6
  308. package/dist/render-pipeline.d.ts.map +1 -1
  309. package/dist/render-system-extract-tail.d.ts +15 -6
  310. package/dist/render-system-extract-tail.d.ts.map +1 -1
  311. package/dist/render-system-extract.d.ts +128 -41
  312. package/dist/render-system-extract.d.ts.map +1 -1
  313. package/dist/render-system-projections.d.ts +22 -0
  314. package/dist/render-system-projections.d.ts.map +1 -0
  315. package/dist/render-system.d.ts +27 -77
  316. package/dist/render-system.d.ts.map +1 -1
  317. package/dist/scene/render-scene-types.d.ts +14 -7
  318. package/dist/scene/render-scene-types.d.ts.map +1 -1
  319. package/dist/scene/render-scene.d.ts +31 -11
  320. package/dist/scene/render-scene.d.ts.map +1 -1
  321. package/dist/scene/shadow-visibility.d.ts +5 -0
  322. package/dist/scene/shadow-visibility.d.ts.map +1 -0
  323. package/dist/ssao-config.d.ts +8 -6
  324. package/dist/ssao-config.d.ts.map +1 -1
  325. package/dist/ssr/admission.d.ts +70 -1
  326. package/dist/ssr/admission.d.ts.map +1 -1
  327. package/dist/ssr/compose.d.ts +13 -0
  328. package/dist/ssr/compose.d.ts.map +1 -0
  329. package/dist/ssr/errors.d.ts +35 -0
  330. package/dist/ssr/errors.d.ts.map +1 -1
  331. package/dist/ssr/graph.d.ts +60 -0
  332. package/dist/ssr/graph.d.ts.map +1 -0
  333. package/dist/ssr/history.d.ts +97 -0
  334. package/dist/ssr/history.d.ts.map +1 -0
  335. package/dist/ssr/hiz.d.ts +37 -0
  336. package/dist/ssr/hiz.d.ts.map +1 -0
  337. package/dist/ssr/inspection.d.ts +42 -0
  338. package/dist/ssr/inspection.d.ts.map +1 -0
  339. package/dist/ssr/resources.d.ts +58 -0
  340. package/dist/ssr/resources.d.ts.map +1 -0
  341. package/dist/ssr/temporal.d.ts +38 -0
  342. package/dist/ssr/temporal.d.ts.map +1 -0
  343. package/dist/systems/skin-palette-allocator.d.ts +32 -10
  344. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  345. package/dist/systems/skin-palette-types.d.ts +15 -0
  346. package/dist/systems/skin-palette-types.d.ts.map +1 -1
  347. package/dist/systems/transparent-dispatch.d.ts +9 -0
  348. package/dist/systems/transparent-dispatch.d.ts.map +1 -0
  349. package/dist/targets/material-source.d.ts +7 -0
  350. package/dist/targets/material-source.d.ts.map +1 -1
  351. package/dist/temporal/frame-coordinator.d.ts +7 -0
  352. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  353. package/dist/temporal/gpu.d.ts +8 -0
  354. package/dist/temporal/gpu.d.ts.map +1 -1
  355. package/dist/temporal/history.d.ts.map +1 -1
  356. package/dist/temporal/index.mjs +6 -6
  357. package/dist/temporal/inspection.d.ts.map +1 -1
  358. package/dist/temporal/standard-scene-data.d.ts +4 -2
  359. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  360. package/dist/temporal/target-coverage-attachment.d.ts +15 -0
  361. package/dist/temporal/target-coverage-attachment.d.ts.map +1 -0
  362. package/dist/temporal/temporal-view.d.ts +6 -0
  363. package/dist/temporal/temporal-view.d.ts.map +1 -1
  364. package/dist/temporal/view.d.ts +6 -0
  365. package/dist/temporal/view.d.ts.map +1 -1
  366. package/dist/typed-render-graph-primitives.d.ts +41 -1
  367. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  368. package/dist/typed-shadow-passes.d.ts +3 -1
  369. package/dist/typed-shadow-passes.d.ts.map +1 -1
  370. package/dist/volume/component.d.ts +1 -0
  371. package/dist/volume/component.d.ts.map +1 -1
  372. package/dist/volume/temporal.d.ts +6 -0
  373. package/dist/volume/temporal.d.ts.map +1 -1
  374. package/package.json +21 -20
  375. package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
  376. package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
  377. package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
  378. package/src/__tests__/auto-exposure.browser.test.ts +33 -0
  379. package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
  380. package/src/__tests__/capture-scene-projection.unit.test.ts +24 -0
  381. package/src/__tests__/detached-inspection.integration.test.ts +5 -0
  382. package/src/__tests__/device-feature-admission.unit.test.ts +15 -24
  383. package/src/__tests__/device-loss-fanout.unit.test.ts +43 -0
  384. package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
  385. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
  386. package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
  387. package/src/__tests__/dynamic-geometry-batch.unit.test.ts +157 -0
  388. package/src/__tests__/dynamic-geometry.unit.test.ts +36 -0
  389. package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +81 -0
  390. package/src/__tests__/factory-contract.integration.test.ts +231 -9
  391. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
  392. package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
  393. package/src/__tests__/feature-noise.unit.test.ts +38 -0
  394. package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
  395. package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
  396. package/src/__tests__/frame-observation.contract.test.ts +21 -0
  397. package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
  398. package/src/__tests__/frame-targets.unit.test.ts +24 -0
  399. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
  400. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
  401. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +307 -7
  402. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
  403. package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
  404. package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +261 -0
  405. package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +346 -0
  406. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1422 -0
  407. package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
  408. package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
  409. package/src/__tests__/gpu-driven-production.integration.test.ts +1076 -106
  410. package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
  411. package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
  412. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
  413. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
  414. package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
  415. package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
  416. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
  417. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
  418. package/src/__tests__/gpu-driven-view.unit.test.ts +160 -52
  419. package/src/__tests__/gpu-pass-timing-browser-runner.ts +15 -0
  420. package/src/__tests__/gpu-pass-timing.browser.test.ts +20 -2
  421. package/src/__tests__/gpu-resource-scope.unit.test.ts +71 -0
  422. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
  423. package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
  424. package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
  425. package/src/__tests__/gpu-scene.unit.test.ts +613 -33
  426. package/src/__tests__/instances-culling.integration.test.ts +36 -10
  427. package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
  428. package/src/__tests__/instances-store.unit.test.ts +242 -39
  429. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
  430. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
  431. package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
  432. package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
  433. package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
  434. package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
  435. package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
  436. package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
  437. package/src/__tests__/material-texture-source.unit.test.ts +87 -0
  438. package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
  439. package/src/__tests__/materials-standard-contract.unit.test.ts +57 -3
  440. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
  441. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +8 -0
  442. package/src/__tests__/morph-neutral-admission.unit.test.ts +19 -0
  443. package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
  444. package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
  445. package/src/__tests__/physical-clearcoat.integration.test.ts +42 -3
  446. package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
  447. package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
  448. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -5
  449. package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
  450. package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
  451. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +251 -9
  452. package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
  453. package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
  454. package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
  455. package/src/__tests__/public-surface.test-d.ts +3 -0
  456. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
  457. package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +171 -0
  458. package/src/__tests__/reflection-probe-authoring.unit.test.ts +12 -10
  459. package/src/__tests__/reflection-probe-box.dawn.test.ts +71 -0
  460. package/src/__tests__/reflection-probe-filter.unit.test.ts +9 -0
  461. package/src/__tests__/reflection-probe-orientation.dawn.test.ts +294 -0
  462. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +5 -14
  463. package/src/__tests__/reflection-probe-updates.unit.test.ts +129 -0
  464. package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
  465. package/src/__tests__/render-error-detail-ssot.test-d.ts +27 -1
  466. package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
  467. package/src/__tests__/render-extent.unit.test.ts +63 -0
  468. package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
  469. package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
  470. package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
  471. package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
  472. package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
  473. package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
  474. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
  475. package/src/__tests__/render-scene-projection.unit.test.ts +915 -23
  476. package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
  477. package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
  478. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
  479. package/src/__tests__/render-target-material-source.test-d.ts +27 -3
  480. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +233 -9
  481. package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
  482. package/src/__tests__/shader-manifest-fixture.ts +45 -0
  483. package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
  484. package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
  485. package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
  486. package/src/__tests__/skinned-shadow-caster.test.ts +125 -14
  487. package/src/__tests__/specular-environment-scale.dawn.test.ts +158 -0
  488. package/src/__tests__/ssao-config.unit.test.ts +7 -0
  489. package/src/__tests__/ssao-surface.dawn.test.ts +252 -0
  490. package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
  491. package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
  492. package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
  493. package/src/__tests__/ssr-cube-silhouette.dawn.test.ts +270 -0
  494. package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
  495. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +99 -0
  496. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +116 -0
  497. package/src/__tests__/ssr-gpu-dispatch.ts +951 -0
  498. package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
  499. package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
  500. package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
  501. package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
  502. package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
  503. package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
  504. package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
  505. package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
  506. package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
  507. package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
  508. package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
  509. package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
  510. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
  511. package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
  512. package/src/__tests__/ssr-reprojection-probe.ts +90 -0
  513. package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
  514. package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
  515. package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
  516. package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
  517. package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
  518. package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
  519. package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
  520. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +84 -12
  521. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
  522. package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
  523. package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
  524. package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
  525. package/src/__tests__/standard-output.browser.test.ts +15 -0
  526. package/src/__tests__/standard-output.dawn.test.ts +15 -0
  527. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +275 -0
  528. package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
  529. package/src/__tests__/standard-profile-oracle.unit.test.ts +49 -0
  530. package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
  531. package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
  532. package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
  533. package/src/__tests__/taa-coverage-edge.dawn.test.ts +199 -0
  534. package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
  535. package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +782 -0
  536. package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
  537. package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
  538. package/src/__tests__/taa-stability-feedback.ts +342 -0
  539. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
  540. package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
  541. package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
  542. package/src/__tests__/temporal-view.unit.test.ts +17 -0
  543. package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
  544. package/src/__tests__/transmission-prewarm.unit.test.ts +57 -0
  545. package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
  546. package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
  547. package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
  548. package/src/__tests__/visibility-extract.perf.test.ts +20 -8
  549. package/src/__tests__/visibility-instances.integration.test.ts +19 -7
  550. package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
  551. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +62 -13
  552. package/src/__tests__/volumetric-fog-topology.unit.test.ts +7 -7
  553. package/src/assembly/atmosphere-shader-prewarm.ts +39 -0
  554. package/src/assembly/device-feature-admission.ts +9 -4
  555. package/src/assembly/dynamic-geometry-host.ts +284 -163
  556. package/src/assembly/dynamic-geometry-runtime.ts +71 -0
  557. package/src/assembly/factory.ts +4 -0
  558. package/src/assembly/gpu-driven-owner.ts +29 -0
  559. package/src/assembly/host-contract.ts +19 -0
  560. package/src/assembly/material/assembly.ts +383 -1
  561. package/src/assembly/material/pipeline-helpers.ts +100 -0
  562. package/src/assembly/material-shader-policy.ts +110 -46
  563. package/src/assembly/recovery/device-loss-fanout.ts +5 -0
  564. package/src/assembly/recovery/failure-location.ts +62 -0
  565. package/src/assembly/recovery/recovery-attempt.ts +2 -29
  566. package/src/assembly/recovery/renderer-recover.ts +16 -17
  567. package/src/assembly/renderer-facade.ts +34 -1
  568. package/src/assembly/renderer-feature-inspection.ts +13 -0
  569. package/src/assembly/renderer-frame-transaction.ts +63 -0
  570. package/src/assembly/renderer-helpers.ts +26 -0
  571. package/src/assembly/renderer-inspection.ts +6 -0
  572. package/src/assembly/shader-prewarm-policy.ts +46 -1
  573. package/src/assembly/skin-palette-owner.ts +21 -0
  574. package/src/assembly/ssr-shader-prewarm.ts +41 -0
  575. package/src/assembly/webgpu-device-loss.ts +75 -0
  576. package/src/assembly/webgpu-pbr-ready.ts +232 -0
  577. package/src/assembly/webgpu-ready-mipmap.ts +26 -0
  578. package/src/assembly/webgpu-ready.ts +161 -131
  579. package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
  580. package/src/assembly/webgpu-renderer-contract.ts +69 -0
  581. package/src/assembly/webgpu-renderer-guards.ts +32 -0
  582. package/src/assembly/webgpu-renderer-observation.ts +43 -0
  583. package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
  584. package/src/assembly/webgpu-renderer.ts +744 -730
  585. package/src/assembly/webgpu-vertex-layouts.ts +233 -87
  586. package/src/capture/scene-projection.ts +37 -0
  587. package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
  588. package/src/components/__tests__/dynamic-resolution-schema.unit.test.ts +65 -0
  589. package/src/components/__tests__/light-radius.integration.test.ts +59 -0
  590. package/src/components/camera.ts +287 -7
  591. package/src/components/directional-light.ts +3 -3
  592. package/src/components/dynamic-resolution.ts +67 -0
  593. package/src/components/index.ts +2 -0
  594. package/src/components/instances.ts +45 -18
  595. package/src/components/light-helpers.ts +6 -1
  596. package/src/components/reflection-probe.ts +1 -0
  597. package/src/components/scene-instance.ts +2 -1
  598. package/src/components/screen-space-reflection.ts +21 -0
  599. package/src/components/skylight.ts +4 -1
  600. package/src/components/sprite-animation.ts +2 -2
  601. package/src/components/sprite-instances.ts +1 -1
  602. package/src/device/device-scope.ts +13 -7
  603. package/src/device/gpu-residency.ts +45 -42
  604. package/src/dynamic-geometry.ts +13 -8
  605. package/src/environment/background.ts +281 -0
  606. package/src/environment/ibl.ts +211 -0
  607. package/src/environment/storage.ts +63 -0
  608. package/src/errors/gpu-driven.ts +49 -8
  609. package/src/errors/render.ts +91 -3
  610. package/src/extract/camera.ts +37 -1
  611. package/src/extract/contracts.ts +10 -0
  612. package/src/extract/gpu-driven.ts +240 -10
  613. package/src/features/host.ts +237 -19
  614. package/src/features/noise-texture.ts +91 -0
  615. package/src/features/plan.ts +553 -24
  616. package/src/features/prepared-gpu-work.ts +631 -49
  617. package/src/features/prepared-graphics-store.ts +31 -0
  618. package/src/features/prepared-graphics.ts +5 -0
  619. package/src/features/render-graph-compute.ts +41 -8
  620. package/src/features/render-graph-contribution.ts +141 -3
  621. package/src/features/render-graph-raster.ts +143 -30
  622. package/src/features/types.ts +11 -0
  623. package/src/fullscreen-post-process-pass.ts +3 -0
  624. package/src/gpu-driven/batch-topology.ts +452 -108
  625. package/src/gpu-driven/material-artifacts.ts +179 -0
  626. package/src/gpu-driven/material-bindings.ts +41 -0
  627. package/src/gpu-driven/pbr-program.ts +31 -0
  628. package/src/gpu-driven/prepared-draw.ts +42 -6
  629. package/src/gpu-driven/production-raster.ts +2806 -716
  630. package/src/gpu-driven/shadow-views.ts +539 -0
  631. package/src/gpu-driven/view-gpu.ts +188 -41
  632. package/src/gpu-resource.ts +21 -2
  633. package/src/gpu-scene-schema.ts +61 -11
  634. package/src/gpu-scene.ts +197 -99
  635. package/src/gpu-texture-usage.ts +1 -0
  636. package/src/hdrp-buffers.ts +141 -36
  637. package/src/ibl/IblPipelineCache.ts +5 -0
  638. package/src/ibl/frame-resources.ts +38 -0
  639. package/src/ibl/skylight-bind-group.ts +32 -21
  640. package/src/index.ts +194 -75
  641. package/src/inspection-types.ts +207 -1
  642. package/src/instances-derived-bounds.ts +258 -34
  643. package/src/instances.ts +459 -150
  644. package/src/internal.ts +22 -0
  645. package/src/lifecycle.ts +2 -0
  646. package/src/material-row.ts +194 -0
  647. package/src/materials.ts +44 -8
  648. package/src/pbr-pipeline.ts +172 -19
  649. package/src/pipeline/render-extent.ts +111 -0
  650. package/src/pipeline/standard-build-context.ts +7 -0
  651. package/src/pipeline/standard-forward-lane.ts +74 -29
  652. package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
  653. package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
  654. package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
  655. package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
  656. package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
  657. package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
  658. package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
  659. package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
  660. package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
  661. package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
  662. package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
  663. package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
  664. package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
  665. package/src/pipeline/standard-output/color-transform.ts +124 -0
  666. package/src/pipeline/standard-output/graph.ts +139 -0
  667. package/src/pipeline/standard-output/lut-admission.ts +121 -0
  668. package/src/pipeline/standard-output/lut-gpu.ts +399 -0
  669. package/src/pipeline/standard-output/lut-state.ts +176 -0
  670. package/src/pipeline/standard-output/resources.ts +121 -0
  671. package/src/pipeline/standard-output/types.ts +58 -0
  672. package/src/pipeline/standard-pipeline.ts +232 -70
  673. package/src/pipeline/standard-post.ts +190 -27
  674. package/src/pipeline/standard-profile.ts +2 -1
  675. package/src/pipeline-builder.ts +28 -9
  676. package/src/pipeline-spec-types.ts +4 -0
  677. package/src/pipeline-spec.ts +37 -29
  678. package/src/plugin.ts +4 -0
  679. package/src/points-lines/standard-owner.ts +6 -14
  680. package/src/post-process-errors.ts +26 -18
  681. package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +2 -2
  682. package/src/prepare/extended-lighting/resources.ts +3 -3
  683. package/src/prepare/prepared-graphics-resolver.ts +9 -2
  684. package/src/record/__tests__/main-pass-geometry.unit.test.ts +68 -0
  685. package/src/record/__tests__/material-bg-cache.unit.test.ts +45 -0
  686. package/src/record/__tests__/material-slot-plan.unit.test.ts +57 -0
  687. package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
  688. package/src/record/__tests__/recovery-pipeline.unit.test.ts +20 -1
  689. package/src/record/__tests__/sprite-material-abi.unit.test.ts +41 -6
  690. package/src/record/__tests__/temporal-payload.unit.test.ts +2 -0
  691. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
  692. package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
  693. package/src/record/dynamic-geometry-consumption.ts +59 -0
  694. package/src/record/frame-lighting.ts +15 -12
  695. package/src/record/frame-snapshot.ts +146 -34
  696. package/src/record/frame-targets.ts +9 -0
  697. package/src/record/frame.ts +838 -170
  698. package/src/record/main-pass-geometry.ts +209 -103
  699. package/src/record/main-pass-material.ts +157 -40
  700. package/src/record/main-pass-sprite-draws.ts +16 -107
  701. package/src/record/main-pass.ts +141 -12
  702. package/src/record/material-uniforms.ts +1 -1
  703. package/src/record/mesh-ssbo.ts +59 -15
  704. package/src/record/prepared-material-bindings.ts +238 -0
  705. package/src/record/recovery-pipeline.ts +69 -90
  706. package/src/record/render-context.ts +123 -24
  707. package/src/record/shadow-pass.ts +1389 -230
  708. package/src/record/skybox-post-pass.ts +14 -3
  709. package/src/record/typed-frame-graph.ts +1064 -47
  710. package/src/record/view-ubo.ts +12 -1
  711. package/src/recovery/render-system-candidate.ts +135 -68
  712. package/src/recovery/render-system-roots.ts +113 -0
  713. package/src/recovery/types.ts +77 -0
  714. package/src/reflection/background.ts +151 -0
  715. package/src/reflection/filter.ts +3 -0
  716. package/src/reflection/projection.ts +16 -6
  717. package/src/reflection/record-owner.ts +308 -140
  718. package/src/render-contract.ts +237 -49
  719. package/src/render-graph-primitives.ts +34 -5
  720. package/src/render-pipeline.ts +90 -2
  721. package/src/render-system-extract-tail.ts +431 -162
  722. package/src/render-system-extract.ts +478 -119
  723. package/src/render-system-projections.ts +241 -0
  724. package/src/render-system.ts +715 -828
  725. package/src/scene/render-scene-types.ts +13 -4
  726. package/src/scene/render-scene.ts +577 -355
  727. package/src/scene/shadow-visibility.ts +21 -0
  728. package/src/ssao-config.ts +25 -8
  729. package/src/ssr/admission.ts +380 -14
  730. package/src/ssr/compose.ts +144 -0
  731. package/src/ssr/errors.ts +48 -0
  732. package/src/ssr/graph.ts +797 -0
  733. package/src/ssr/history.ts +436 -0
  734. package/src/ssr/hiz.ts +124 -0
  735. package/src/ssr/inspection.ts +124 -0
  736. package/src/ssr/resources.ts +202 -0
  737. package/src/ssr/temporal.ts +164 -0
  738. package/src/systems/skin-palette-allocator.ts +495 -148
  739. package/src/systems/skin-palette-types.ts +17 -0
  740. package/src/systems/transparent-dispatch.ts +90 -0
  741. package/src/targets/material-source.ts +34 -0
  742. package/src/temporal/coverage.ts +1 -1
  743. package/src/temporal/frame-coordinator.ts +23 -2
  744. package/src/temporal/gpu.ts +79 -12
  745. package/src/temporal/history.ts +3 -1
  746. package/src/temporal/inspection.ts +2 -1
  747. package/src/temporal/standard-scene-data.ts +10 -2
  748. package/src/temporal/target-coverage-attachment.ts +72 -0
  749. package/src/temporal/temporal-view.ts +11 -2
  750. package/src/temporal/view.ts +12 -2
  751. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +219 -139
  752. package/src/typed-render-graph-primitives.ts +304 -74
  753. package/src/typed-shadow-passes.ts +122 -12
  754. package/src/volume/component.ts +1 -0
  755. package/src/volume/passes.ts +3 -3
  756. package/src/volume/temporal.ts +10 -0
  757. package/dist/chunk-GE3SDD72.mjs.map +0 -1
  758. package/dist/chunk-GF523LHF.mjs.map +0 -1
  759. package/dist/chunk-IQMKJLNU.mjs.map +0 -1
  760. package/dist/chunk-J52NMQKR.mjs.map +0 -1
  761. package/dist/chunk-J6KACNOH.mjs.map +0 -1
  762. package/dist/chunk-JAASCMXA.mjs.map +0 -1
  763. package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
  764. package/dist/chunk-MYJ5RPJO.mjs.map +0 -1
  765. package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
  766. package/dist/chunk-VSL23LZE.mjs.map +0 -1
  767. package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
  768. 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 {
@@ -512,6 +626,41 @@ var AtmosphereInvalidParameterError = class extends Error {
512
626
  this.hint = `set Atmosphere.${field} to a finite value ${rangeText}`;
513
627
  }
514
628
  };
629
+ var DynamicResolutionInvalidParameterError = class extends Error {
630
+ code = "dynamic-resolution-invalid-parameter";
631
+ expected;
632
+ hint;
633
+ detail;
634
+ constructor(detail) {
635
+ super(`DynamicResolution.${detail.field} is invalid`);
636
+ this.name = "DynamicResolutionInvalidParameterError";
637
+ this.expected = `DynamicResolution.${detail.field} must be ${detail.expected}`;
638
+ this.hint = `set DynamicResolution.${detail.field} to a value that is ${detail.expected}`;
639
+ this.detail = detail;
640
+ }
641
+ };
642
+ var DynamicResolutionRequiresTaaError = class extends Error {
643
+ code = "dynamic-resolution-requires-taa";
644
+ expected = "DynamicResolution requires Camera.antialias to be 'taa'";
645
+ hint = "set Camera.antialias to 'taa' or remove DynamicResolution before retrying";
646
+ detail;
647
+ constructor(detail) {
648
+ super("DynamicResolution requires TAA");
649
+ this.name = "DynamicResolutionRequiresTaaError";
650
+ this.detail = detail;
651
+ }
652
+ };
653
+ var DynamicResolutionTimingUnavailableError = class extends Error {
654
+ code = "dynamic-resolution-timing-unavailable";
655
+ expected = "adaptive resolution receives a completed GPU timing sample";
656
+ hint = "use fixed minScale=maxScale or retry after timestamp support is available";
657
+ detail;
658
+ constructor(detail) {
659
+ super(`DynamicResolution timing is unavailable for generation ${detail.generation}`);
660
+ this.name = "DynamicResolutionTimingUnavailableError";
661
+ this.detail = detail;
662
+ }
663
+ };
515
664
  var OwnerStageFailedError = class extends Error {
516
665
  code = "owner-stage-failed";
517
666
  expected = "the owner completes its current frame stage";
@@ -778,6 +927,7 @@ var VolumeInvalidParametersError = class extends Error {
778
927
  var GPU_TEXTURE_USAGE_COPY_SRC = 1;
779
928
  var GPU_TEXTURE_USAGE_COPY_DST = 2;
780
929
  var GPU_TEXTURE_USAGE_TEXTURE_BINDING = 4;
930
+ var GPU_TEXTURE_USAGE_STORAGE_BINDING = 8;
781
931
  var GPU_TEXTURE_USAGE_RENDER_ATTACHMENT = 16;
782
932
  var GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING = GPU_TEXTURE_USAGE_RENDER_ATTACHMENT | GPU_TEXTURE_USAGE_TEXTURE_BINDING;
783
933
 
@@ -929,6 +1079,461 @@ var ShadowAtlas = class {
929
1079
  }
930
1080
  };
931
1081
 
1082
+ // src/errors/gpu-driven.ts
1083
+ var ERROR_POLICY2 = {
1084
+ "missing-material-receipt": {
1085
+ expected: "a producer-owned material program receipt is present",
1086
+ hint: "cook and load the selected material program artifact, then retry preparation",
1087
+ recovery: "rebuild-producer"
1088
+ },
1089
+ "material-abi-not-executable": {
1090
+ expected: "the published material ABI fits the GPU Scene submission layout",
1091
+ hint: "recook the material with a scene-index ABI supported by the GPU-driven owner or keep it on its authored lane",
1092
+ recovery: "route-cpu-lane"
1093
+ },
1094
+ "missing-uv": {
1095
+ expected: "the geometry exposes every UV set named by the material receipt",
1096
+ hint: "repair the geometry UV semantic or route the draw to the CPU semantic lane",
1097
+ recovery: "route-cpu-lane"
1098
+ },
1099
+ "reflection-mismatch": {
1100
+ expected: "the loaded reflection receipt matches the artifact layout identity",
1101
+ hint: "rebuild the material artifact and reflection from one source, then retry",
1102
+ recovery: "rebuild-producer"
1103
+ },
1104
+ "vertex-input-mismatch": {
1105
+ expected: "geometry vertex semantics match the material reflection receipt",
1106
+ hint: "repair the geometry vertex semantic layout or route the draw to the CPU lane",
1107
+ recovery: "route-cpu-lane"
1108
+ },
1109
+ "alpha-mask-mismatch": {
1110
+ expected: "the Alpha Mask cutoff is present in the material receipt",
1111
+ hint: "declare the pass coverage cutoff in the material schema and recook it",
1112
+ recovery: "rebuild-producer"
1113
+ },
1114
+ "resource-not-ready": {
1115
+ expected: "all material resource slots have resolved handles",
1116
+ hint: "resolve the declared texture and sampler resources before recording",
1117
+ recovery: "retry-same-draw"
1118
+ },
1119
+ "stale-generation": {
1120
+ expected: "receipt and prepared inputs belong to the requested generation",
1121
+ hint: "discard stale GPU facts, rebuild the producer receipt, and retry the same draw",
1122
+ recovery: "rebuild-generation"
1123
+ },
1124
+ "skin-receipt-mismatch": {
1125
+ expected: "skinned geometry has a current palette address receipt",
1126
+ hint: "rebuild the Skin palette receipt for this generation before recording",
1127
+ recovery: "rebuild-producer"
1128
+ },
1129
+ "shadow-ownership": {
1130
+ expected: "every declared ShadowCaster pass has one GPU-compatible draw-item owner",
1131
+ hint: "repair the ShadowCaster producer membership or keep the residual on its explicit CPU lane",
1132
+ recovery: "route-cpu-lane"
1133
+ }
1134
+ };
1135
+ var GpuDrivenPreparationError = class extends Error {
1136
+ code;
1137
+ expected;
1138
+ hint;
1139
+ detail;
1140
+ constructor(code, detail) {
1141
+ const policy = ERROR_POLICY2[code];
1142
+ super(`[GpuDrivenPreparationError ${code}] ${policy.expected}`);
1143
+ this.name = "GpuDrivenPreparationError";
1144
+ this.code = code;
1145
+ this.expected = policy.expected;
1146
+ this.hint = policy.hint;
1147
+ this.detail = Object.freeze({
1148
+ ...detail,
1149
+ recovery: detail.recovery ?? policy.recovery
1150
+ });
1151
+ }
1152
+ };
1153
+ var MATRIX_STRIDE = 16;
1154
+ var INITIAL_CAPACITY = 1;
1155
+ function instanceUploadRangesForResident(activeIsNew, dirtyRanges, fullRange) {
1156
+ return activeIsNew ? [fullRange] : dirtyRanges;
1157
+ }
1158
+ function instanceCollectionFailureFacts(cause, recovery, requestedBytes = 0, supportedBytes = void 0, backend = "unknown") {
1159
+ return {
1160
+ requestedBytes,
1161
+ supportedBytes,
1162
+ backend,
1163
+ owner: "renderer.instances",
1164
+ cause,
1165
+ recovery
1166
+ };
1167
+ }
1168
+ var InstanceCollectionError = class extends Error {
1169
+ code;
1170
+ expected;
1171
+ hint;
1172
+ detail;
1173
+ owner = "renderer.instances";
1174
+ recovery;
1175
+ facts;
1176
+ constructor(code, expected, hint, detail, facts) {
1177
+ super(`${code}: ${expected}`);
1178
+ this.name = "InstanceCollectionError";
1179
+ this.code = code;
1180
+ this.expected = expected;
1181
+ this.hint = hint;
1182
+ this.detail = detail;
1183
+ this.facts = facts ?? instanceCollectionFailureFacts(
1184
+ code,
1185
+ hint,
1186
+ detail?.operation === "create" || detail?.operation === "replace" ? typeof detail.actual === "number" && Number.isFinite(detail.actual) ? detail.actual * Float32Array.BYTES_PER_ELEMENT : 0 : 0
1187
+ );
1188
+ this.recovery = this.facts.recovery;
1189
+ }
1190
+ };
1191
+ function nextCapacity(required) {
1192
+ let capacity = INITIAL_CAPACITY;
1193
+ while (capacity < required) capacity *= 2;
1194
+ return capacity;
1195
+ }
1196
+ function invalid(operation, expected, actual, collectionId, context) {
1197
+ const hint = "repair the collection payload and retry the same authoring operation";
1198
+ return new InstanceCollectionError(
1199
+ "instance-collection-invalid",
1200
+ expected,
1201
+ hint,
1202
+ { operation, expected, actual, ...collectionId === void 0 ? {} : { collectionId } },
1203
+ instanceCollectionFailureFacts(
1204
+ context?.cause ?? `invalid-${operation}-authoring`,
1205
+ context?.recovery ?? hint,
1206
+ context?.requestedBytes ?? 0,
1207
+ context?.supportedBytes
1208
+ )
1209
+ );
1210
+ }
1211
+ function validateTransforms(operation, transforms, collectionId) {
1212
+ if (!(transforms instanceof Float32Array)) {
1213
+ return invalid(operation, "transforms is a Float32Array", typeof transforms, collectionId, {
1214
+ cause: "invalid-transform-type"
1215
+ });
1216
+ }
1217
+ if (transforms.length % MATRIX_STRIDE !== 0) {
1218
+ return invalid(
1219
+ operation,
1220
+ `transforms.length is a multiple of ${MATRIX_STRIDE}`,
1221
+ transforms.length,
1222
+ collectionId,
1223
+ {
1224
+ requestedBytes: transforms.byteLength,
1225
+ cause: "invalid-transform-stride"
1226
+ }
1227
+ );
1228
+ }
1229
+ for (const value of transforms) {
1230
+ if (!Number.isFinite(value)) {
1231
+ return invalid(operation, "every transform value is finite", value, collectionId, {
1232
+ requestedBytes: transforms.byteLength,
1233
+ cause: "invalid-transform-value"
1234
+ });
1235
+ }
1236
+ }
1237
+ return void 0;
1238
+ }
1239
+ function appendRange(ranges, start, end) {
1240
+ if (start >= end) return;
1241
+ let index = 0;
1242
+ while (index < ranges.length) {
1243
+ const existing = ranges[index];
1244
+ if (existing === void 0 || existing.end >= start) break;
1245
+ index += 1;
1246
+ }
1247
+ while (index < ranges.length) {
1248
+ const existing = ranges[index];
1249
+ if (existing === void 0 || existing.start > end) break;
1250
+ start = Math.min(start, existing.start);
1251
+ end = Math.max(end, existing.end);
1252
+ ranges.splice(index, 1);
1253
+ }
1254
+ ranges.splice(index, 0, { start, end });
1255
+ }
1256
+ function appendDirtyRange(record, start, end) {
1257
+ appendRange(record.dirtyRanges, start, end);
1258
+ }
1259
+ function missing(operation, id) {
1260
+ return new InstanceCollectionError(
1261
+ "instance-collection-not-found",
1262
+ `instance collection ${Number(id)} is live and owned by this Renderer`,
1263
+ "create a collection with renderer.instances.create or retain the original collection id",
1264
+ { operation, expected: "a live instance collection id", actual: Number(id), collectionId: id }
1265
+ );
1266
+ }
1267
+ var InstanceCollectionStore = class {
1268
+ nextId = 1;
1269
+ epochValue = 0;
1270
+ disposed = false;
1271
+ records = /* @__PURE__ */ new Map();
1272
+ residency = /* @__PURE__ */ new Map();
1273
+ get epoch() {
1274
+ return this.epochValue;
1275
+ }
1276
+ create(input) {
1277
+ if (this.disposed) {
1278
+ return err(
1279
+ new InstanceCollectionError(
1280
+ "instance-collection-released",
1281
+ "the Renderer-owned instance collection store is live",
1282
+ "create a new Renderer before authoring instance collections"
1283
+ )
1284
+ );
1285
+ }
1286
+ const invalidPayload = validateTransforms("create", input.transforms);
1287
+ if (invalidPayload !== void 0) return err(invalidPayload);
1288
+ const id = this.nextId++;
1289
+ const count = input.transforms.length / MATRIX_STRIDE;
1290
+ const record = {
1291
+ id,
1292
+ transforms: new Float32Array(input.transforms),
1293
+ count,
1294
+ capacity: nextCapacity(Math.max(INITIAL_CAPACITY, count)),
1295
+ revision: 1,
1296
+ dirtyRanges: count === 0 ? [] : [{ start: 0, end: count }],
1297
+ lastSnapshotRevision: 0,
1298
+ released: false
1299
+ };
1300
+ this.records.set(id, record);
1301
+ this.epochValue += 1;
1302
+ return ok(this.info(record));
1303
+ }
1304
+ replace(id, transforms) {
1305
+ const record = this.live("replace", id);
1306
+ if (!record.ok) return record;
1307
+ const invalidPayload = validateTransforms("replace", transforms, id);
1308
+ if (invalidPayload !== void 0) return err(invalidPayload);
1309
+ const count = transforms.length / MATRIX_STRIDE;
1310
+ record.value.transforms = new Float32Array(transforms);
1311
+ record.value.count = count;
1312
+ record.value.capacity = Math.max(record.value.capacity, nextCapacity(Math.max(1, count)));
1313
+ record.value.revision += 1;
1314
+ record.value.dirtyRanges = count === 0 ? [] : [{ start: 0, end: count }];
1315
+ record.value.lastSnapshotRevision = record.value.revision - 1;
1316
+ this.epochValue += 1;
1317
+ return ok(this.info(record.value));
1318
+ }
1319
+ update(id, input) {
1320
+ const record = this.live("update", id);
1321
+ if (!record.ok) return record;
1322
+ const invalidPayload = validateTransforms("update", input.transforms, id);
1323
+ if (invalidPayload !== void 0) return err(invalidPayload);
1324
+ if (!Number.isInteger(input.start) || input.start < 0) {
1325
+ return err(
1326
+ invalid("update", "start is a non-negative matrix ordinal", input.start, id, {
1327
+ requestedBytes: input.transforms.byteLength,
1328
+ supportedBytes: record.value.capacity * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1329
+ cause: "invalid-update-range-start"
1330
+ })
1331
+ );
1332
+ }
1333
+ const span = input.transforms.length / MATRIX_STRIDE;
1334
+ const attemptedEnd = input.start + span;
1335
+ if (attemptedEnd > record.value.count) {
1336
+ return err(
1337
+ invalid(
1338
+ "update",
1339
+ `start + matrix count is <= collection count (${record.value.count})`,
1340
+ attemptedEnd,
1341
+ id,
1342
+ {
1343
+ requestedBytes: attemptedEnd * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1344
+ supportedBytes: record.value.count * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1345
+ cause: "invalid-update-range-end"
1346
+ }
1347
+ )
1348
+ );
1349
+ }
1350
+ if (record.value.lastSnapshotRevision === record.value.revision) {
1351
+ record.value.dirtyRanges = [];
1352
+ }
1353
+ record.value.transforms.set(input.transforms, input.start * MATRIX_STRIDE);
1354
+ record.value.revision += 1;
1355
+ appendDirtyRange(record.value, input.start, input.start + span);
1356
+ this.epochValue += 1;
1357
+ return ok(this.info(record.value));
1358
+ }
1359
+ inspect(id) {
1360
+ const record = this.live("inspect", id);
1361
+ return record.ok ? ok(this.info(record.value)) : record;
1362
+ }
1363
+ /**
1364
+ * Return detached residency facts for every live collection.
1365
+ *
1366
+ * @internal Record-stage evidence is reported through the two methods below;
1367
+ * callers only receive immutable PODs and never GPU handles.
1368
+ */
1369
+ _inspections() {
1370
+ return Object.freeze(
1371
+ [...this.records.values()].map((record) => this.projectInspection(record))
1372
+ );
1373
+ }
1374
+ /** @internal Renderer record owner reports the accepted collection lane. */
1375
+ _reportResidency(input) {
1376
+ if (!this.records.has(input.collectionId)) return;
1377
+ const previous = this.residency.get(input.collectionId);
1378
+ const sameFrame = previous !== void 0 && previous.frameNumber === input.frameNumber && previous.error === void 0;
1379
+ const uploadRanges = sameFrame ? [...previous.uploadRanges].reduce(
1380
+ (ranges, range) => {
1381
+ appendRange(ranges, range.start, range.end);
1382
+ return ranges;
1383
+ },
1384
+ input.uploadRanges.map((range) => ({ ...range }))
1385
+ ) : input.uploadRanges.map((range) => ({ ...range }));
1386
+ this.residency.set(input.collectionId, {
1387
+ frameNumber: input.frameNumber,
1388
+ residentGeneration: input.residentGeneration,
1389
+ lane: input.lane,
1390
+ uploadRanges,
1391
+ uploadedBytes: sameFrame ? previous.uploadedBytes + input.uploadedBytes : input.uploadedBytes,
1392
+ requestedBytes: input.requestedBytes,
1393
+ supportedBytes: input.supportedBytes,
1394
+ backend: input.backend,
1395
+ error: void 0
1396
+ });
1397
+ }
1398
+ /** @internal Renderer record owner reports a typed admission failure. */
1399
+ _reportFailure(input) {
1400
+ if (!this.records.has(input.collectionId)) return;
1401
+ this.residency.set(input.collectionId, {
1402
+ frameNumber: -1,
1403
+ residentGeneration: void 0,
1404
+ lane: "unavailable",
1405
+ uploadRanges: [],
1406
+ uploadedBytes: 0,
1407
+ requestedBytes: input.facts.requestedBytes,
1408
+ supportedBytes: input.facts.supportedBytes,
1409
+ backend: input.facts.backend,
1410
+ error: {
1411
+ code: input.code,
1412
+ expected: input.expected,
1413
+ hint: input.hint,
1414
+ detail: { ...input.facts }
1415
+ }
1416
+ });
1417
+ }
1418
+ /** @internal A lost device invalidates every renderer-owned GPU resident. */
1419
+ _resetResidency() {
1420
+ this.residency.clear();
1421
+ }
1422
+ snapshot(id) {
1423
+ const record = this.live("inspect", id);
1424
+ if (!record.ok) return record;
1425
+ const value = record.value;
1426
+ value.lastSnapshotRevision = value.revision;
1427
+ const result = {
1428
+ ...this.info(value),
1429
+ transforms: new Float32Array(value.transforms),
1430
+ dirtyRanges: value.dirtyRanges.map((range) => ({ ...range }))
1431
+ };
1432
+ return ok(result);
1433
+ }
1434
+ release(id) {
1435
+ const record = this.records.get(id);
1436
+ if (record === void 0) return err(missing("release", id));
1437
+ if (record.released) {
1438
+ return err(
1439
+ new InstanceCollectionError(
1440
+ "instance-collection-released",
1441
+ `instance collection ${Number(id)} has not already been released`,
1442
+ "do not reuse a released collection id; create a new collection",
1443
+ {
1444
+ operation: "release",
1445
+ expected: "a live instance collection id",
1446
+ actual: Number(id),
1447
+ collectionId: id
1448
+ }
1449
+ )
1450
+ );
1451
+ }
1452
+ record.released = true;
1453
+ this.records.delete(id);
1454
+ this.residency.delete(id);
1455
+ this.epochValue += 1;
1456
+ return ok(void 0);
1457
+ }
1458
+ /** Drop all canonical matrices during Renderer disposal. */
1459
+ dispose() {
1460
+ if (this.disposed) return;
1461
+ this.disposed = true;
1462
+ for (const record of this.records.values()) record.released = true;
1463
+ this.records.clear();
1464
+ this.residency.clear();
1465
+ this.epochValue += 1;
1466
+ }
1467
+ live(operation, id) {
1468
+ if (!Number.isInteger(id) || id <= 0) {
1469
+ return err(invalid(operation, "collectionId is a positive integer", id, id));
1470
+ }
1471
+ if (this.disposed) {
1472
+ return err(
1473
+ new InstanceCollectionError(
1474
+ "instance-collection-released",
1475
+ "the Renderer-owned instance collection store is live",
1476
+ "create a new Renderer before using instance collections",
1477
+ { operation, expected: "a live collection store", actual: "disposed", collectionId: id }
1478
+ )
1479
+ );
1480
+ }
1481
+ const record = this.records.get(id);
1482
+ return record === void 0 ? err(missing(operation, id)) : ok(record);
1483
+ }
1484
+ info(record) {
1485
+ return Object.freeze({
1486
+ collectionId: record.id,
1487
+ count: record.count,
1488
+ capacity: record.capacity,
1489
+ revision: record.revision
1490
+ });
1491
+ }
1492
+ projectInspection(record) {
1493
+ const residency = this.residency.get(record.id);
1494
+ return Object.freeze({
1495
+ ...this.info(record),
1496
+ residentGeneration: residency?.residentGeneration,
1497
+ lane: residency?.lane ?? "unresident",
1498
+ dirtyRanges: Object.freeze(record.dirtyRanges.map((range) => ({ ...range }))),
1499
+ uploadRanges: Object.freeze(residency?.uploadRanges.map((range) => ({ ...range })) ?? []),
1500
+ uploadedBytes: residency?.uploadedBytes ?? 0,
1501
+ requestedBytes: residency?.requestedBytes ?? record.count * MATRIX_STRIDE * 4,
1502
+ supportedBytes: residency?.supportedBytes,
1503
+ backend: residency?.backend ?? "unknown",
1504
+ owner: "renderer.instances",
1505
+ error: residency?.error
1506
+ });
1507
+ }
1508
+ };
1509
+
1510
+ // src/scene/visibility/budget.ts
1511
+ var DEFAULT_CONFIGURED_QUERY_BUDGET = 2048;
1512
+ var MAX_QUERY_BUDGET = 4096;
1513
+ var VISIBILITY_CANDIDATE_COUNT = 1e5;
1514
+ var VISIBILITY_OCCLUDED_COUNT = 9e4;
1515
+ function createVisibilityBudget(configuredQueryBudget = DEFAULT_CONFIGURED_QUERY_BUDGET) {
1516
+ if (!Number.isSafeInteger(configuredQueryBudget) || configuredQueryBudget <= 0) {
1517
+ throw new RangeError("configuredQueryBudget must be a positive safe integer");
1518
+ }
1519
+ const effectiveQueryBudget = Math.min(configuredQueryBudget, MAX_QUERY_BUDGET);
1520
+ const oneSweepCandidates = oneSweep(VISIBILITY_CANDIDATE_COUNT, effectiveQueryBudget);
1521
+ const oneSweepOccluded = oneSweep(VISIBILITY_OCCLUDED_COUNT, effectiveQueryBudget);
1522
+ const retestSubmits = Math.max(6, oneSweepOccluded);
1523
+ return Object.freeze({
1524
+ configuredQueryBudget,
1525
+ effectiveQueryBudget,
1526
+ oneSweepCandidates,
1527
+ oneSweepOccluded,
1528
+ settleSubmits: 2 * oneSweepCandidates,
1529
+ retestSubmits,
1530
+ expirySubmits: Math.max(8, retestSubmits + oneSweepOccluded)
1531
+ });
1532
+ }
1533
+ function oneSweep(candidateCount, effectiveQueryBudget) {
1534
+ return Math.ceil(candidateCount / effectiveQueryBudget);
1535
+ }
1536
+
932
1537
  // src/render-contract.ts
933
1538
  var STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = "forgeax::standard::output-transform";
934
1539
  var FXAA_POST_PROCESS_ID = "forgeax::post::fxaa";
@@ -960,6 +1565,11 @@ var RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
960
1565
  "record/graph-execute/bloom-blur-h",
961
1566
  "record/graph-execute/bloom-blur-v",
962
1567
  "record/graph-execute/bloom-composite",
1568
+ "record/graph-execute/ssr-hiz",
1569
+ "record/graph-execute/ssr-trace",
1570
+ "record/graph-execute/ssr-temporal",
1571
+ "record/graph-execute/ssr-reflection-mip",
1572
+ "record/graph-execute/ssr-compose",
963
1573
  "record/graph-execute/other"
964
1574
  ];
965
1575
  var RENDER_HDRP_BINNER_PHASE_CATALOG = [
@@ -1012,6 +1622,6 @@ var RENDER_PHASE_CATALOG = [
1012
1622
  ...RENDER_RECORD_PHASE_CATALOG
1013
1623
  ];
1014
1624
 
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-J6KACNOH.mjs.map
1017
- //# sourceMappingURL=chunk-J6KACNOH.mjs.map
1625
+ export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, DynamicResolutionInvalidParameterError, DynamicResolutionRequiresTaaError, DynamicResolutionTimingUnavailableError, 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 };
1626
+ //# sourceMappingURL=chunk-JRBDO2KB.mjs.map
1627
+ //# sourceMappingURL=chunk-JRBDO2KB.mjs.map