@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
@@ -0,0 +1,211 @@
1
+ import type {
2
+ GraphBuffer,
3
+ GraphTextureView,
4
+ RenderGraphBuilder,
5
+ RenderGraphError,
6
+ } from '@forgeax/engine-render-graph';
7
+ import {
8
+ type BindGroup,
9
+ type BindGroupLayout,
10
+ type RenderPipeline,
11
+ RhiError,
12
+ type Sampler,
13
+ } from '@forgeax/engine-rhi';
14
+ import { ok, type Result } from '@forgeax/engine-types';
15
+ import type { RenderPipelineFrame } from '../render-pipeline';
16
+ import { atmosphereStorage } from './storage';
17
+
18
+ /** Graph views of the shared device-owned sky and its lighting products. */
19
+ export interface GraphEnvironment {
20
+ readonly sky: GraphTextureView;
21
+ readonly irradiance: GraphTextureView;
22
+ readonly prefilter: GraphTextureView;
23
+ }
24
+
25
+ export function addAtmosphereIbl(
26
+ graph: RenderGraphBuilder<RenderPipelineFrame>,
27
+ sky: GraphTextureView,
28
+ vertices: GraphBuffer,
29
+ dirty: (frame: RenderPipelineFrame) => boolean,
30
+ ): Result<GraphEnvironment, RenderGraphError> {
31
+ const irradiance = graph.importTexture(
32
+ 'atmosphere-irradiance',
33
+ {
34
+ format: 'rgba16float',
35
+ size: { width: 16, height: 16, depthOrArrayLayers: 6 },
36
+ usage: 0x14,
37
+ },
38
+ (frame) => atmosphereStorage(frame).irradiance,
39
+ );
40
+ if (!irradiance.ok) return irradiance;
41
+ const prefilter = graph.importTexture(
42
+ 'atmosphere-prefilter',
43
+ {
44
+ format: 'rgba16float',
45
+ size: { width: 64, height: 64, depthOrArrayLayers: 6 },
46
+ mipLevelCount: 5,
47
+ usage: 0x14,
48
+ },
49
+ (frame) => atmosphereStorage(frame).prefilter,
50
+ );
51
+ if (!prefilter.ok) return prefilter;
52
+ const irradianceView = graph.view(irradiance.value, { dimension: 'cube', arrayLayerCount: 6 });
53
+ if (!irradianceView.ok) return irradianceView;
54
+ const prefilterView = graph.view(prefilter.value, { dimension: 'cube', arrayLayerCount: 6 });
55
+ if (!prefilterView.ok) return prefilterView;
56
+ const parameters = graph.importBuffer(
57
+ 'atmosphere-ibl-params',
58
+ { size: 5 * 256, usage: 0x48 },
59
+ (frame) => atmosphereStorage(frame).iblParams,
60
+ );
61
+ if (!parameters.ok) return parameters;
62
+ const upload = graph.addCopyPass('atmosphere-ibl-prepare', {
63
+ accesses: [{ resource: parameters.value, usage: 'copy-dst' }],
64
+ executeIf: dirty,
65
+ encode: ({ frame, resources }) => {
66
+ const values = new Float32Array(5 * 64);
67
+ for (let mip = 0; mip < 5; mip++) values[mip * 64 + 14] = mip / 4;
68
+ frame.runtime.device.queue
69
+ .writeBuffer(resources.buffer(parameters.value).unwrap(), 0, values)
70
+ .unwrap();
71
+ },
72
+ });
73
+ if (!upload.ok) return upload;
74
+ let state:
75
+ | {
76
+ layout: BindGroupLayout;
77
+ inputLayout: BindGroupLayout;
78
+ sampler: Sampler;
79
+ irradiance: RenderPipeline;
80
+ prefilter: RenderPipeline;
81
+ inputs?: BindGroup;
82
+ parameters: BindGroup[];
83
+ }
84
+ | undefined;
85
+ const ensureState = (frame: RenderPipelineFrame) => {
86
+ if (state !== undefined) return state;
87
+ const device = frame.runtime.device;
88
+ const source = frame.atmosphereShaders?.ibl;
89
+ const factory = frame.runtime.shaderModuleFactory;
90
+ if (source === undefined || factory === undefined)
91
+ throw new RhiError({
92
+ code: 'shader-compile-failed',
93
+ expected: 'the compiled Atmosphere IBL program is available',
94
+ hint: 'rebuild the Engine shader manifest before selecting Atmosphere lighting',
95
+ });
96
+ const module = factory.createShaderModule({ code: source, label: 'atmosphere_ibl' }).unwrap();
97
+ const layout = device
98
+ .createBindGroupLayout({
99
+ entries: [{ binding: 0, visibility: 2, buffer: { type: 'uniform', minBindingSize: 64 } }],
100
+ })
101
+ .unwrap();
102
+ const inputLayout = device
103
+ .createBindGroupLayout({
104
+ entries: [
105
+ { binding: 0, visibility: 2, texture: { sampleType: 'float', viewDimension: 'cube' } },
106
+ { binding: 1, visibility: 2, sampler: { type: 'filtering' } },
107
+ ],
108
+ })
109
+ .unwrap();
110
+ const pipelineLayout = device
111
+ .createPipelineLayout({ bindGroupLayouts: [layout, inputLayout] })
112
+ .unwrap();
113
+ const pipeline = (entryPoint: string) =>
114
+ device
115
+ .createRenderPipeline({
116
+ label: entryPoint,
117
+ layout: pipelineLayout,
118
+ vertex: {
119
+ module,
120
+ entryPoint: 'atmosphere_ibl_vs',
121
+ buffers: [
122
+ {
123
+ arrayStride: 12,
124
+ attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }],
125
+ },
126
+ ],
127
+ },
128
+ fragment: { module, entryPoint, targets: [{ format: 'rgba16float' }] },
129
+ primitive: { topology: 'triangle-list' },
130
+ })
131
+ .unwrap();
132
+ state = {
133
+ layout,
134
+ inputLayout,
135
+ sampler: device
136
+ .createSampler({ magFilter: 'linear', minFilter: 'linear', mipmapFilter: 'linear' })
137
+ .unwrap(),
138
+ irradiance: pipeline('atmosphere_irradiance_fs'),
139
+ prefilter: pipeline('atmosphere_prefilter_fs'),
140
+ parameters: [],
141
+ };
142
+ return state;
143
+ };
144
+ for (const product of ['irradiance', 'prefilter'] as const) {
145
+ for (let mip = 0; mip < (product === 'irradiance' ? 1 : 5); mip++)
146
+ for (let face = 0; face < 6; face++) {
147
+ const target = graph.view(product === 'irradiance' ? irradiance.value : prefilter.value, {
148
+ dimension: '2d',
149
+ baseArrayLayer: face,
150
+ arrayLayerCount: 1,
151
+ baseMipLevel: mip,
152
+ mipLevelCount: 1,
153
+ });
154
+ if (!target.ok) return target;
155
+ const pass = graph.addRasterPass(`atmosphere-${product}-${mip}-${face}`, {
156
+ accesses: [
157
+ { resource: sky, usage: 'sampled-read' },
158
+ { resource: parameters.value, usage: 'uniform-read' },
159
+ { resource: vertices, usage: 'vertex-read' },
160
+ { resource: target.value, usage: 'color-attachment' },
161
+ ],
162
+ colorAttachments: [{ view: target.value, loadOp: 'clear', storeOp: 'store' }],
163
+ executeIf: dirty,
164
+ encode: ({ frame, resources, pass }) => {
165
+ const current = ensureState(frame);
166
+ current.inputs ??= frame.runtime.device
167
+ .createBindGroup({
168
+ layout: current.inputLayout,
169
+ entries: [
170
+ {
171
+ binding: 0,
172
+ resource: { kind: 'textureView', value: resources.textureView(sky).unwrap() },
173
+ },
174
+ { binding: 1, resource: { kind: 'sampler', value: current.sampler } },
175
+ ],
176
+ })
177
+ .unwrap();
178
+ let parameterGroup = current.parameters[mip];
179
+ if (parameterGroup === undefined) {
180
+ parameterGroup = frame.runtime.device
181
+ .createBindGroup({
182
+ layout: current.layout,
183
+ entries: [
184
+ {
185
+ binding: 0,
186
+ resource: {
187
+ kind: 'buffer',
188
+ value: {
189
+ buffer: resources.buffer(parameters.value).unwrap(),
190
+ offset: mip * 256,
191
+ size: 64,
192
+ },
193
+ },
194
+ },
195
+ ],
196
+ })
197
+ .unwrap();
198
+ current.parameters[mip] = parameterGroup;
199
+ }
200
+ pass.setPipeline(current[product]);
201
+ pass.setBindGroup(0, parameterGroup);
202
+ pass.setBindGroup(1, current.inputs);
203
+ pass.setVertexBuffer(0, resources.buffer(vertices).unwrap());
204
+ pass.draw(3, 1, face * 3);
205
+ },
206
+ });
207
+ if (!pass.ok) return pass;
208
+ }
209
+ }
210
+ return ok({ sky, irradiance: irradianceView.value, prefilter: prefilterView.value });
211
+ }
@@ -0,0 +1,63 @@
1
+ import type { Buffer, Texture } from '@forgeax/engine-rhi';
2
+ import type { DeviceScope } from '../device/device-scope';
3
+ import type { _InternalRenderPipelineContext } from '../record/render-context';
4
+ import type { RenderPipelineFrame } from '../render-pipeline';
5
+
6
+ /** Device-generation resources survive unrelated probe/scene graph topology changes. */
7
+ export interface AtmosphereStorage {
8
+ readonly sky: Texture;
9
+ readonly irradiance: Texture;
10
+ readonly prefilter: Texture;
11
+ readonly params: Buffer;
12
+ readonly vertices: Buffer;
13
+ readonly iblParams: Buffer;
14
+ submittedSignature?: string | undefined;
15
+ }
16
+ const generations = new WeakMap<DeviceScope, AtmosphereStorage>();
17
+
18
+ export function atmosphereStorage(frame: RenderPipelineFrame): AtmosphereStorage {
19
+ const runtime = (frame as _InternalRenderPipelineContext).runtime;
20
+ const owner = runtime.deviceScope;
21
+ const existing = generations.get(owner);
22
+ if (existing !== undefined) return existing;
23
+ const scope = owner.createChild('atmosphere');
24
+ const device = runtime.device;
25
+ try {
26
+ const texture = (name: string, size: number, mipLevelCount = 1) => {
27
+ const value = device
28
+ .createTexture({
29
+ label: name,
30
+ format: 'rgba16float',
31
+ size: { width: size, height: size, depthOrArrayLayers: 6 },
32
+ mipLevelCount,
33
+ usage: 0x14,
34
+ textureBindingViewDimension: undefined,
35
+ })
36
+ .unwrap();
37
+ scope._adopt('texture', value, (value) => {
38
+ device.destroyTexture(value).unwrap();
39
+ });
40
+ return value;
41
+ };
42
+ const buffer = (name: string, size: number, usage: number) => {
43
+ const value = device.createBuffer({ label: name, size, usage }).unwrap();
44
+ scope._adopt('buffer', value, (value) => {
45
+ device.destroyBuffer(value).unwrap();
46
+ });
47
+ return value;
48
+ };
49
+ const created: AtmosphereStorage = {
50
+ sky: texture('atmosphere-sky', 128),
51
+ irradiance: texture('atmosphere-irradiance', 16),
52
+ prefilter: texture('atmosphere-prefilter', 64, 5),
53
+ params: buffer('atmosphere-params', 64, 0x48),
54
+ vertices: buffer('atmosphere-face-vertices', 216, 0x28),
55
+ iblParams: buffer('atmosphere-ibl-params', 1280, 0x48),
56
+ };
57
+ generations.set(owner, created);
58
+ return created;
59
+ } catch (cause) {
60
+ scope.retire();
61
+ throw cause;
62
+ }
63
+ }
@@ -2,67 +2,105 @@ import type { MaterialShaderArtifactReceipt } from '@forgeax/engine-shader';
2
2
 
3
3
  export type GpuDrivenPreparationErrorCode =
4
4
  | 'missing-material-receipt'
5
+ | 'material-abi-not-executable'
5
6
  | 'missing-uv'
6
7
  | 'reflection-mismatch'
7
8
  | 'vertex-input-mismatch'
8
9
  | 'alpha-mask-mismatch'
9
10
  | 'resource-not-ready'
10
11
  | 'stale-generation'
11
- | 'skin-receipt-mismatch';
12
+ | 'skin-receipt-mismatch'
13
+ | 'shadow-ownership';
12
14
 
13
15
  export type GpuDrivenPreparationReason =
14
16
  | 'material-receipt-missing'
17
+ | 'material-abi-not-executable'
15
18
  | 'uv-set-missing'
16
19
  | 'reflection-receipt-mismatch'
17
20
  | 'vertex-semantic-mismatch'
18
21
  | 'alpha-mask-receipt-missing'
19
22
  | 'material-resource-missing'
20
23
  | 'generation-stale'
21
- | 'skin-address-missing';
24
+ | 'skin-address-missing'
25
+ | 'shadow-ownership-missing';
26
+
27
+ /** Closed next action; AI callers never need to parse an error message. */
28
+ export type GpuDrivenRecoveryAction =
29
+ | 'rebuild-producer'
30
+ | 'route-cpu-lane'
31
+ | 'retry-same-draw'
32
+ | 'rebuild-generation'
33
+ | 'stop-promotion';
22
34
 
23
35
  export interface GpuDrivenPreparationErrorDetail {
24
36
  readonly reason: GpuDrivenPreparationReason;
25
- readonly owner: 'material' | 'geometry' | 'skin' | 'generation';
37
+ readonly owner: 'material' | 'geometry' | 'skin' | 'generation' | 'shadow';
26
38
  readonly expected?: string;
27
39
  readonly actual?: string;
28
40
  readonly expectedGeneration?: number;
29
41
  readonly actualGeneration?: number;
42
+ readonly recovery?: GpuDrivenRecoveryAction;
30
43
  }
31
44
 
32
45
  const ERROR_POLICY: Readonly<
33
- Record<GpuDrivenPreparationErrorCode, { readonly expected: string; readonly hint: string }>
46
+ Record<
47
+ GpuDrivenPreparationErrorCode,
48
+ {
49
+ readonly expected: string;
50
+ readonly hint: string;
51
+ readonly recovery: GpuDrivenRecoveryAction;
52
+ }
53
+ >
34
54
  > = {
35
55
  'missing-material-receipt': {
36
- expected: 'a producer-owned Standard PBR material receipt is present',
37
- hint: 'cook and load the Standard PBR artifact, then retry preparation',
56
+ expected: 'a producer-owned material program receipt is present',
57
+ hint: 'cook and load the selected material program artifact, then retry preparation',
58
+ recovery: 'rebuild-producer',
59
+ },
60
+ 'material-abi-not-executable': {
61
+ expected: 'the published material ABI fits the GPU Scene submission layout',
62
+ hint: 'recook the material with a scene-index ABI supported by the GPU-driven owner or keep it on its authored lane',
63
+ recovery: 'route-cpu-lane',
38
64
  },
39
65
  'missing-uv': {
40
66
  expected: 'the geometry exposes every UV set named by the material receipt',
41
67
  hint: 'repair the geometry UV semantic or route the draw to the CPU semantic lane',
68
+ recovery: 'route-cpu-lane',
42
69
  },
43
70
  'reflection-mismatch': {
44
71
  expected: 'the loaded reflection receipt matches the artifact layout identity',
45
72
  hint: 'rebuild the material artifact and reflection from one source, then retry',
73
+ recovery: 'rebuild-producer',
46
74
  },
47
75
  'vertex-input-mismatch': {
48
76
  expected: 'geometry vertex semantics match the material reflection receipt',
49
77
  hint: 'repair the geometry vertex semantic layout or route the draw to the CPU lane',
78
+ recovery: 'route-cpu-lane',
50
79
  },
51
80
  'alpha-mask-mismatch': {
52
81
  expected: 'the Alpha Mask cutoff is present in the material receipt',
53
- hint: 'declare alphaCutoff in the Standard PBR material schema and recook it',
82
+ hint: 'declare the pass coverage cutoff in the material schema and recook it',
83
+ recovery: 'rebuild-producer',
54
84
  },
55
85
  'resource-not-ready': {
56
86
  expected: 'all material resource slots have resolved handles',
57
87
  hint: 'resolve the declared texture and sampler resources before recording',
88
+ recovery: 'retry-same-draw',
58
89
  },
59
90
  'stale-generation': {
60
91
  expected: 'receipt and prepared inputs belong to the requested generation',
61
92
  hint: 'discard stale GPU facts, rebuild the producer receipt, and retry the same draw',
93
+ recovery: 'rebuild-generation',
62
94
  },
63
95
  'skin-receipt-mismatch': {
64
96
  expected: 'skinned geometry has a current palette address receipt',
65
97
  hint: 'rebuild the Skin palette receipt for this generation before recording',
98
+ recovery: 'rebuild-producer',
99
+ },
100
+ 'shadow-ownership': {
101
+ expected: 'every declared ShadowCaster pass has one GPU-compatible draw-item owner',
102
+ hint: 'repair the ShadowCaster producer membership or keep the residual on its explicit CPU lane',
103
+ recovery: 'route-cpu-lane',
66
104
  },
67
105
  };
68
106
 
@@ -79,7 +117,10 @@ export class GpuDrivenPreparationError extends Error {
79
117
  this.code = code;
80
118
  this.expected = policy.expected;
81
119
  this.hint = policy.hint;
82
- this.detail = detail;
120
+ this.detail = Object.freeze({
121
+ ...detail,
122
+ recovery: detail.recovery ?? policy.recovery,
123
+ });
83
124
  }
84
125
  }
85
126
 
@@ -25,6 +25,7 @@ import type {
25
25
  RenderFeatureRecovery,
26
26
  RenderFeatureStage,
27
27
  } from '../features/vocabulary';
28
+ import type { AutoExposureError } from '../pipeline/standard-output/auto-exposure/inspection';
28
29
  import type { SceneDataLane, SceneDataSchemaId } from '../temporal/scene-data';
29
30
  import type { TransmissionCapabilityFact } from '../transmission/backdrop';
30
31
  import type { RecoveryOutcome, RecoveryPhase } from './recover';
@@ -33,6 +34,28 @@ import type { RecoveryOutcome, RecoveryPhase } from './recover';
33
34
  // expected state, actionable `hint`, then typed `detail`. Consumers branch on
34
35
  // that shape and never use Error.message as a protocol.
35
36
 
37
+ export type {
38
+ AutoExposureCapabilityUnavailableDetail,
39
+ AutoExposureError,
40
+ AutoExposureErrorCode,
41
+ AutoExposureErrorDetail,
42
+ AutoExposureErrorDetailByCode,
43
+ AutoExposureErrorRecord,
44
+ AutoExposureInspection,
45
+ AutoExposureInspectionInput,
46
+ AutoExposureInvalidParameterDetail,
47
+ AutoExposureReceipt,
48
+ AutoExposureResetReason,
49
+ AutoExposureStageFailedDetail,
50
+ AutoExposureStaleGenerationDetail,
51
+ } from '../pipeline/standard-output/auto-exposure/inspection';
52
+ export {
53
+ AutoExposureCapabilityUnavailableError,
54
+ AutoExposureInvalidParameterError,
55
+ AutoExposureStageFailedError,
56
+ AutoExposureStaleGenerationError,
57
+ } from '../pipeline/standard-output/auto-exposure/inspection';
58
+
36
59
  export interface LifecycleConstructionFailureDetail {
37
60
  readonly owner: string;
38
61
  readonly generation: number;
@@ -1177,7 +1200,7 @@ export class FrameReceiptStaleError extends Error {
1177
1200
  }
1178
1201
 
1179
1202
  export interface RendererContractFailureDetail {
1180
- readonly operation: 'construct' | 'attach' | 'draw' | 'observe';
1203
+ readonly operation: 'construct' | 'attach' | 'draw' | 'request-observation' | 'observe';
1181
1204
  readonly cause: string;
1182
1205
  }
1183
1206
 
@@ -1297,6 +1320,67 @@ export class AtmosphereInvalidParameterError extends Error {
1297
1320
  }
1298
1321
  }
1299
1322
 
1323
+ export interface DynamicResolutionInvalidParameterDetail {
1324
+ readonly field: 'targetGpuMs' | 'minScale' | 'maxScale';
1325
+ readonly value: number;
1326
+ readonly expected: string;
1327
+ }
1328
+
1329
+ export class DynamicResolutionInvalidParameterError extends Error {
1330
+ readonly code = 'dynamic-resolution-invalid-parameter' as const;
1331
+ readonly expected: string;
1332
+ readonly hint: string;
1333
+ readonly detail: DynamicResolutionInvalidParameterDetail;
1334
+
1335
+ constructor(detail: DynamicResolutionInvalidParameterDetail) {
1336
+ super(`DynamicResolution.${detail.field} is invalid`);
1337
+ this.name = 'DynamicResolutionInvalidParameterError';
1338
+ this.expected = `DynamicResolution.${detail.field} must be ${detail.expected}`;
1339
+ this.hint = `set DynamicResolution.${detail.field} to a value that is ${detail.expected}`;
1340
+ this.detail = detail;
1341
+ }
1342
+ }
1343
+
1344
+ export interface DynamicResolutionRequiresTaaDetail {
1345
+ readonly antialias: 'none' | 'fxaa' | 'msaa';
1346
+ }
1347
+
1348
+ export class DynamicResolutionRequiresTaaError extends Error {
1349
+ readonly code = 'dynamic-resolution-requires-taa' as const;
1350
+ readonly expected = "DynamicResolution requires Camera.antialias to be 'taa'";
1351
+ readonly hint = "set Camera.antialias to 'taa' or remove DynamicResolution before retrying";
1352
+ readonly detail: DynamicResolutionRequiresTaaDetail;
1353
+
1354
+ constructor(detail: DynamicResolutionRequiresTaaDetail) {
1355
+ super('DynamicResolution requires TAA');
1356
+ this.name = 'DynamicResolutionRequiresTaaError';
1357
+ this.detail = detail;
1358
+ }
1359
+ }
1360
+
1361
+ export interface DynamicResolutionTimingUnavailableDetail {
1362
+ readonly generation: number;
1363
+ readonly operation: 'timestamp-query';
1364
+ }
1365
+
1366
+ export class DynamicResolutionTimingUnavailableError extends Error {
1367
+ readonly code = 'dynamic-resolution-timing-unavailable' as const;
1368
+ readonly expected = 'adaptive resolution receives a completed GPU timing sample';
1369
+ readonly hint = 'use fixed minScale=maxScale or retry after timestamp support is available';
1370
+ readonly detail: DynamicResolutionTimingUnavailableDetail;
1371
+
1372
+ constructor(detail: DynamicResolutionTimingUnavailableDetail) {
1373
+ super(`DynamicResolution timing is unavailable for generation ${detail.generation}`);
1374
+ this.name = 'DynamicResolutionTimingUnavailableError';
1375
+ this.detail = detail;
1376
+ }
1377
+ }
1378
+
1379
+ export type DynamicResolutionError =
1380
+ | DynamicResolutionInvalidParameterError
1381
+ | DynamicResolutionRequiresTaaError
1382
+ | DynamicResolutionTimingUnavailableError;
1383
+
1300
1384
  export interface OwnerStageFailedDetail {
1301
1385
  readonly owner: 'environment' | 'temporal' | 'fog' | 'renderer';
1302
1386
  readonly stage: 'extract' | 'prepare' | 'record' | 'finish' | 'submit';
@@ -1328,7 +1412,7 @@ export interface RendererOperationDetailByCode {
1328
1412
  readonly cause: RendererOperationCause;
1329
1413
  };
1330
1414
  readonly 'frame-input-invalid': {
1331
- readonly operation: 'draw' | 'set-profile';
1415
+ readonly operation: 'draw' | 'set-profile' | 'request-observation';
1332
1416
  readonly cause: RendererOperationCause;
1333
1417
  };
1334
1418
  readonly 'scene-projection-failed': {
@@ -1358,7 +1442,7 @@ export interface RendererOperationDetailByCode {
1358
1442
  readonly cause: RendererOperationCause;
1359
1443
  };
1360
1444
  readonly 'renderer-state-invalid': {
1361
- readonly operation: 'draw' | 'set-profile' | 'recover' | 'dispose';
1445
+ readonly operation: 'draw' | 'set-profile' | 'request-observation' | 'recover' | 'dispose';
1362
1446
  readonly state: string;
1363
1447
  readonly cause?: RendererOperationCause;
1364
1448
  };
@@ -1851,6 +1935,7 @@ export type RenderErrorCode = RenderError['code'];
1851
1935
  */
1852
1936
  export type RenderError =
1853
1937
  | LifecycleConstructionError
1938
+ | AutoExposureError
1854
1939
  | RendererExpectedOperationError
1855
1940
  | FrameReceiptStaleError
1856
1941
  | RendererContractFailureError
@@ -1884,6 +1969,9 @@ export type RenderError =
1884
1969
  | TaaCapsInsufficientError
1885
1970
  | EnvironmentGenerationFailedError
1886
1971
  | AtmosphereInvalidParameterError
1972
+ | DynamicResolutionInvalidParameterError
1973
+ | DynamicResolutionRequiresTaaError
1974
+ | DynamicResolutionTimingUnavailableError
1887
1975
  | OwnerStageFailedError
1888
1976
  | PointsLinesInvalidStyleError
1889
1977
  | PointsLinesTopologyMismatchError
@@ -6,10 +6,17 @@ import {
6
6
  antialiasFromF32,
7
7
  bloomEnabledFromF32,
8
8
  Camera,
9
+ cameraExposureFromColumns,
9
10
  cameraProjectionFromF32,
10
11
  tonemapFromF32,
12
+ validateCameraColorGrading,
11
13
  } from '../components/camera';
14
+ import {
15
+ DynamicResolution,
16
+ validateDynamicResolutionCamera,
17
+ } from '../components/dynamic-resolution';
12
18
  import { MotionBlur } from '../components/motion-blur';
19
+ import { ScreenSpaceReflection } from '../components/screen-space-reflection';
13
20
  import type { CameraSnapshot } from '../render-contract';
14
21
  import { getActiveCamera, selectActiveCameraIndex } from '../systems/active-camera';
15
22
 
@@ -23,14 +30,24 @@ export function extractCameraSnapshots(world: World): CameraSnapshot[] {
23
30
  const cameras: CameraSnapshot[] = [];
24
31
  const cameraEntities: number[] = [];
25
32
  const cameraQuery = world
26
- .query({ read: [Camera], optional: [MotionBlur], with: [GlobalTransform] })
33
+ .query({
34
+ read: [Camera],
35
+ optional: [MotionBlur, DynamicResolution, ScreenSpaceReflection],
36
+ with: [GlobalTransform],
37
+ })
27
38
  .unwrap();
28
39
  for (const row of cameraQuery) {
29
40
  const cam = row.get(Camera);
30
41
  const motionBlur = row.get(MotionBlur);
42
+ validateCameraColorGrading(cam.temperature, cam.tint, cam.colorLutStrength);
43
+ const dynamicResolution = row.get(DynamicResolution);
44
+ const screenSpaceReflection = row.get(ScreenSpaceReflection);
31
45
  const entity = row.entity as EntityHandle;
32
46
  const worldMat = readWorldMatrix(world, entity);
33
47
  if (worldMat === undefined) continue;
48
+ const antialias = antialiasFromF32(cam.antialias);
49
+ const dynamicResolutionResult = validateDynamicResolutionCamera(dynamicResolution, antialias);
50
+ if (!dynamicResolutionResult.ok) throw dynamicResolutionResult.error;
34
51
  cameras.push({
35
52
  entityKey: entity as number,
36
53
  historyVersion: cam.historyVersion,
@@ -48,7 +65,17 @@ export function extractCameraSnapshots(world: World): CameraSnapshot[] {
48
65
  tonemap: tonemapFromF32(cam.tonemap),
49
66
  exposure: cam.exposure,
50
67
  whitePoint: cam.whitePoint,
68
+ output: {
69
+ exposure: cameraExposureFromColumns(cam),
70
+ temperature: cam.temperature,
71
+ tint: cam.tint,
72
+ colorLut: cam.colorLut,
73
+ colorLutStrength: cam.colorLutStrength,
74
+ },
51
75
  antialias: antialiasFromF32(cam.antialias),
76
+ ...(dynamicResolutionResult.value === undefined
77
+ ? {}
78
+ : { dynamicResolution: dynamicResolutionResult.value }),
52
79
  bloom: bloomEnabledFromF32(cam.bloom),
53
80
  bloomThreshold: cam.bloomThreshold,
54
81
  bloomIntensity: cam.bloomIntensity,
@@ -68,6 +95,15 @@ export function extractCameraSnapshots(world: World): CameraSnapshot[] {
68
95
  sampleCount: motionBlur.sampleCount,
69
96
  },
70
97
  }),
98
+ ...(screenSpaceReflection === undefined
99
+ ? {}
100
+ : {
101
+ screenSpaceReflection: {
102
+ maxDistance: screenSpaceReflection.maxDistance,
103
+ thickness: screenSpaceReflection.thickness,
104
+ maxRoughness: screenSpaceReflection.maxRoughness,
105
+ },
106
+ }),
71
107
  });
72
108
  cameraEntities.push(entity as number);
73
109
  }
@@ -660,6 +660,10 @@ export interface MaterialSnapshot {
660
660
  */
661
661
  readonly materialShaderId?: string | undefined;
662
662
  readonly materialProgramKeys?: Readonly<Record<string, string>> | undefined;
663
+ /** Producer-selected scene-index program keys, when a cooked publication carries them. */
664
+ readonly materialSceneIndexProgramKeys?:
665
+ | Readonly<Record<string, MaterialSceneIndexProgramKey>>
666
+ | undefined;
663
667
  /**
664
668
  * Stable source handle for the material asset. Record uses this only for
665
669
  * same-frame assembly reuse; GPU bind-group validity still comes from the
@@ -776,6 +780,12 @@ export interface MaterialSnapshot {
776
780
  readonly transparent?: boolean | undefined;
777
781
  }
778
782
 
783
+ /** Producer-selected scene-index key plus the Pass kind that owns it. */
784
+ export interface MaterialSceneIndexProgramKey {
785
+ readonly specializationKey: string;
786
+ readonly pass: 'forward' | 'shadow' | 'depth';
787
+ }
788
+
779
789
  export interface MaterialCacheChainIdentity {
780
790
  readonly asset: MaterialAsset;
781
791
  readonly parentGuid: string | undefined;