@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
@@ -129,6 +129,7 @@ export function writePointsLinesViewUbo(
129
129
  * folded from standalone binding 9 to fix WebGL2 fragment uniform-buffer
130
130
  * overflow; lane N = spot with shadowAtlasTile === N, 16 f32 / lane,
131
131
  * 16 B-aligned at byte 528 = float 132).
132
+ * [236..239] ssrParams (maxDistance, thickness, maxRoughness, enabled).
132
133
  *
133
134
  * @internal
134
135
  */
@@ -218,6 +219,16 @@ export function writeViewUbo(
218
219
  viewPayload[234] = previousCameraPosition[2] ?? 0;
219
220
  viewPayload[235] = 1;
220
221
  }
222
+ // SSR uses the fixed View tail as its single per-camera parameter carrier.
223
+ // Admission has already validated these values; the enabled lane remains
224
+ // zero when the component is absent so disabled frames carry no demand.
225
+ const ssr = camera.screenSpaceReflection;
226
+ if (ssr !== undefined) {
227
+ viewPayload[236] = ssr.maxDistance;
228
+ viewPayload[237] = ssr.thickness;
229
+ viewPayload[238] = ssr.maxRoughness;
230
+ viewPayload[239] = 1;
231
+ }
221
232
  // splitPlanes at [108..123] (four vec4 lanes: split/world texel/depth span/reserved).
222
233
  if (lights.splitPlanes !== undefined) {
223
234
  for (let s = 0; s < 4; s++) {
@@ -233,7 +244,7 @@ export function writeViewUbo(
233
244
  // accepted quality union occupies the existing four-float tail [128..131].
234
245
  // Point and Spot pcfKernelSize stay in their own snapshot paths and never
235
246
  // enter this Directional View projection.
236
- viewPayload[126] = lights.depthBias ?? 0.005;
247
+ viewPayload[126] = lights.depthBias ?? 0.00001;
237
248
  viewPayload[127] = lights.normalBias ?? 0.05;
238
249
  const filterCarrier = directionalShadowFilterCarrier(lights.directionalShadowQuality);
239
250
  viewPayload[128] = filterCarrier[0] ?? 0;
@@ -27,16 +27,20 @@ import {
27
27
  type PostProcessShaderEntry,
28
28
  postProcessShaderEntrySignature,
29
29
  } from '../fullscreen-post-process-pass';
30
+ import { collectGpuDrivenMaterialArtifacts } from '../gpu-driven/material-artifacts';
30
31
  import { GpuDrivenProduction } from '../gpu-driven/production-raster';
31
- import { disposeInstanceBufferChunks, disposeInstanceBuffers } from '../instance-buffer-cache';
32
32
  import { inspectStandardLighting } from '../pipeline/standard-lighting/inspection';
33
+ import { retireAutoExposureGpuResources } from '../pipeline/standard-output/auto-exposure/gpu';
34
+ import {
35
+ prepareStandardOutputResources,
36
+ resetStandardOutputForDeviceLoss,
37
+ } from '../pipeline/standard-output/resources';
33
38
  import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
34
39
  import { inspectPointShadow } from '../point-shadow-inspection';
35
40
  import type { PreparedGraphicsResolver } from '../prepare/prepared-graphics-resolver';
36
- import { validateRenderables } from '../record/frame';
41
+ import { gpuDrivenMeshesForFrame, validateRenderables } from '../record/frame';
37
42
  import { prepareFrameLighting } from '../record/frame-lighting';
38
43
  import type { RenderFrameState, ValidatedRenderable } from '../record/frame-snapshot';
39
- import { resolveGeometryInstanceBuffer } from '../record/main-pass-geometry';
40
44
  import { computeSplitLdrSprite } from '../record/main-pass-sprite-draws';
41
45
  import {
42
46
  prepareRecoveryPipelineReadiness,
@@ -50,13 +54,10 @@ import {
50
54
  } from '../record/typed-frame-graph';
51
55
  import { STANDARD_OUTPUT_TRANSFORM_FEATURE_ID } from '../render-contract';
52
56
  import type {
53
- RecoveryGraphCandidate,
54
- RecoveryGraphCandidatePreparation,
55
- RecoveryGraphCandidateRuntime,
56
- RecoveryGraphSetupSubmission,
57
- RecoveryPointsLinesCandidate,
58
- } from '../render-system';
59
- import type { ExtractedFrame, MaterialSnapshot } from '../render-system-extract';
57
+ ExtractedFrame,
58
+ MaterialSnapshot,
59
+ RenderableSnapshot,
60
+ } from '../render-system-extract';
60
61
  import type { PersistentGpuDrivenCandidate, PersistentRenderScene } from '../scene/render-scene';
61
62
  import { SHADOW_ATLAS_DEFAULT_LAYERS } from '../shadow-atlas';
62
63
  import { createTemporalFrameTransaction } from '../temporal/frame';
@@ -64,7 +65,15 @@ import {
64
65
  getTemporalBindGroupResources,
65
66
  getTemporalGpuState,
66
67
  getTemporalParamsBuffer,
68
+ TEMPORAL_HISTORY_FORMATS,
67
69
  } from '../temporal/gpu';
70
+ import type {
71
+ RecoveryGraphCandidate,
72
+ RecoveryGraphCandidatePreparation,
73
+ RecoveryGraphCandidateRuntime,
74
+ RecoveryGraphSetupSubmission,
75
+ RecoveryPointsLinesCandidate,
76
+ } from './types';
68
77
 
69
78
  export interface PreparedResolverCaches {
70
79
  readonly preparedPipelineIds: WeakMap<object, string>;
@@ -123,7 +132,7 @@ export interface RenderSystemRecoveryOwner {
123
132
  setLastSuccessfulFrameSeed(seed: RecoveryFrameSeed): void;
124
133
  prepareRecoveryGraphCandidate(
125
134
  runtime: RecoveryGraphCandidateRuntime,
126
- ): Promise<RecoveryGraphCandidatePreparation>;
135
+ ): RecoveryGraphCandidatePreparation;
127
136
  submitCandidateSetup(
128
137
  candidate: RecoveryGraphCandidate,
129
138
  isValid: () => boolean,
@@ -132,22 +141,36 @@ export interface RenderSystemRecoveryOwner {
132
141
  discardRecoveryGraphCandidate(candidate: RecoveryGraphCandidate): void;
133
142
  }
134
143
 
135
- export function materialTextureHandles(
136
- material: MaterialSnapshot,
144
+ /**
145
+ * Keep the missing-texture sentinel out of residency preparation. A zero
146
+ * handle is the same absent-reference value used by materialHandle; resolving
147
+ * it as a real TextureAsset would otherwise pass an undefined pod to the GPU
148
+ * store and fail before the renderer can produce a structured readiness
149
+ * result.
150
+ */
151
+ export function materialTextureHandlesForResidency(
152
+ candidates: Iterable<Handle<'TextureAsset', 'shared'> | undefined>,
137
153
  ): readonly Handle<'TextureAsset', 'shared'>[] {
138
154
  const handles = new Map<number, Handle<'TextureAsset', 'shared'>>();
139
- const add = (handle: Handle<'TextureAsset', 'shared'> | undefined): void => {
140
- if (handle !== undefined) handles.set(Number(handle), handle);
141
- };
142
- for (const handle of material.textureHandles?.values() ?? []) add(handle);
143
- add(material.baseColorTexture);
144
- add(material.metallicRoughnessTexture);
145
- add(material.normalTexture);
146
- add(material.emissiveTexture);
147
- add(material.occlusionTexture);
155
+ for (const handle of candidates) {
156
+ if (handle !== undefined && Number(handle) !== 0) handles.set(Number(handle), handle);
157
+ }
148
158
  return [...handles.values()];
149
159
  }
150
160
 
161
+ export function materialTextureHandles(
162
+ material: MaterialSnapshot,
163
+ ): readonly Handle<'TextureAsset', 'shared'>[] {
164
+ return materialTextureHandlesForResidency([
165
+ ...(material.textureHandles?.values() ?? []),
166
+ material.baseColorTexture,
167
+ material.metallicRoughnessTexture,
168
+ material.normalTexture,
169
+ material.emissiveTexture,
170
+ material.occlusionTexture,
171
+ ]);
172
+ }
173
+
151
174
  export function materialSamplerHandles(
152
175
  material: MaterialSnapshot,
153
176
  ): readonly Handle<'SamplerAsset', 'shared'>[] {
@@ -196,6 +219,13 @@ export function createRenderSystemRecovery(
196
219
  successfulTemporalFrameIndex: 0,
197
220
  temporalFrameTransaction: createTemporalFrameTransaction({ deviceEpoch: 0 }),
198
221
  temporalFrameInput: undefined,
222
+ ssrRequested: false,
223
+ ssrSpatialAdmission: undefined,
224
+ ssrHistoryOwner: undefined,
225
+ ssrHistoryCandidate: undefined,
226
+ ssrTemporalParamsPayload: undefined,
227
+ ssrLastCameraEntity: undefined,
228
+ ssrLastHistoryVersion: undefined,
199
229
  graphTargetCapture: undefined,
200
230
  perFrameGraph: null,
201
231
  directionalShadowCache: null,
@@ -227,8 +257,6 @@ export function createRenderSystemRecovery(
227
257
  currentDirectionalShadowView: null,
228
258
  currentSpotShadowView: null,
229
259
  instanceBuffers: new Map(),
230
- instanceBufferChunks: new Map(),
231
- instanceResidency: new Map(),
232
260
  morphBuffers: new Map(),
233
261
  hdrpClusterBinScratch: createClusterBinScratch(),
234
262
  hdrpClusterGridScratch: null,
@@ -248,7 +276,7 @@ export function createRenderSystemRecovery(
248
276
  instancesBgShared: new WeakMap(),
249
277
  materialBgShared: new Map(),
250
278
  materialBgAssemblyCache: new Map(),
251
- singletonMaterialCache: new Map(),
279
+ shadowMaterialBindGroups: new WeakMap(),
252
280
  postProcessBgCache: new WeakMap(),
253
281
  probeBlendBuffers: new Map(),
254
282
  probeBlendRecordBufferCapacity: 0,
@@ -257,7 +285,11 @@ export function createRenderSystemRecovery(
257
285
  };
258
286
 
259
287
  const publishRecoveryGraphCandidate = (candidate: RecoveryGraphCandidate): void => {
260
- candidate.recoveryReadiness.assertFirstRecoveryFrame();
288
+ if (candidate.recoveryReadiness.assertFirstRecoveryFrame) {
289
+ candidate.recoveryReadiness.assertFirstRecoveryFrame();
290
+ } else {
291
+ candidate.recoveryReadiness.assertPreparedCache();
292
+ }
261
293
  const previousFeatureHost = internals.featureHost;
262
294
  // The caller enters this method only after the active generation swap and
263
295
  // after resetForRecover() has shed every lost-device owner. Replace the
@@ -317,9 +349,9 @@ export function createRenderSystemRecovery(
317
349
  candidate.release();
318
350
  };
319
351
 
320
- const prepareRecoveryGraphCandidate = async (
352
+ const prepareRecoveryGraphCandidate = (
321
353
  runtime: RecoveryGraphCandidateRuntime,
322
- ): Promise<RecoveryGraphCandidatePreparation> => {
354
+ ): RecoveryGraphCandidatePreparation => {
323
355
  const seed = lastSuccessfulFrameSeed;
324
356
  if (seed === undefined) return { kind: 'no-seed' };
325
357
  const camera = seed.frame.cameras[0];
@@ -330,6 +362,7 @@ export function createRenderSystemRecovery(
330
362
  if (camera === undefined) return { kind: 'no-seed' };
331
363
 
332
364
  const candidateFrameState = createRecoveryCandidateFrameState();
365
+ resetStandardOutputForDeviceLoss(candidateFrameState, runtime.internals.deviceScope.generation);
333
366
  Object.assign(candidateFrameState, {
334
367
  temporalFrame: undefined,
335
368
  bloomFrameReceipts: undefined,
@@ -356,6 +389,9 @@ export function createRenderSystemRecovery(
356
389
  const releaseCandidate = (): void => {
357
390
  if (candidateReleased || candidatePublished) return;
358
391
  candidateReleased = true;
392
+ const pendingOutput = candidateFrameState.pendingAutoExposureGpuResources;
393
+ if (pendingOutput !== undefined) retireAutoExposureGpuResources(pendingOutput);
394
+ candidateFrameState.pendingAutoExposureGpuResources = undefined;
359
395
  for (const work of setupWorks) work.discard();
360
396
  setupWorks.length = 0;
361
397
  const graph = candidateFrameState.compiledFrameGraph;
@@ -386,13 +422,6 @@ export function createRenderSystemRecovery(
386
422
  candidateGpuDrivenScene = undefined;
387
423
  candidatePointsLines?.release();
388
424
  candidatePointsLines = undefined;
389
- disposeInstanceBuffers(candidateFrameState.instanceBuffers, runtime.internals.errorRegistry);
390
- if (candidateFrameState.instanceBufferChunks !== undefined) {
391
- disposeInstanceBufferChunks(
392
- candidateFrameState.instanceBufferChunks,
393
- runtime.internals.errorRegistry,
394
- );
395
- }
396
425
  candidateGpuStore.destroyAll();
397
426
  };
398
427
  const markPublished = (): void => {
@@ -408,30 +437,77 @@ export function createRenderSystemRecovery(
408
437
  };
409
438
 
410
439
  try {
440
+ const output = prepareStandardOutputResources(
441
+ candidateFrameState,
442
+ runtime.internals,
443
+ camera,
444
+ seed.worlds[seed.cameraOwner] as World,
445
+ );
446
+ if (!output.ok) return failed('candidate Standard output preparation failed', output.error);
411
447
  const gpuScene = persistentRenderScene.prepareRecoveryGpuDrivenCandidate(
412
448
  runtime.internals.device,
413
449
  );
414
450
  if (!gpuScene.ok) return failed('candidate GPU scene preparation failed', gpuScene.error);
415
451
  candidateGpuDrivenScene = gpuScene.value;
416
452
  if (candidateGpuDrivenScene.state !== undefined) {
417
- const production = await GpuDrivenProduction.forRecoveryDevice(
453
+ candidateGpuDrivenProduction = GpuDrivenProduction.forDevice(
418
454
  runtime.internals.device,
419
455
  gpuDrivenShaderFactory,
420
- (descriptor) =>
421
- internals.createShaderModule === undefined
422
- ? Promise.resolve(gpuDrivenShaderFactory.createShaderModule(descriptor))
423
- : internals.createShaderModule(runtime.internals.device, descriptor),
424
456
  );
425
- if (!production.ok)
426
- return failed('candidate GPU-driven shader preparation failed', production.error);
427
- candidateGpuDrivenProduction = production.value;
457
+ const shadowProjection = persistentRenderScene.shadowCasterProjection();
458
+ // The retained scene owns prepared draw receipts. The extraction seed
459
+ // precedes GPU admission and must not stand in for that projection.
460
+ const preparedSnapshots = new Map(
461
+ candidateGpuDrivenScene.state.slots.map((slot) => [
462
+ `${slot.snapshot.worldId}:${slot.snapshot.entityKey}`,
463
+ slot.snapshot,
464
+ ]),
465
+ );
466
+ const artifactRows = (renderables: readonly RenderableSnapshot[]) =>
467
+ renderables.map((source, renderableIndex) => ({
468
+ source: {
469
+ ...source,
470
+ gpuDrivenDraws:
471
+ preparedSnapshots.get(`${source.worldId}:${source.entityKey}`)?.gpuDrivenDraws ??
472
+ source.gpuDrivenDraws ??
473
+ [],
474
+ },
475
+ renderableIndex,
476
+ }));
477
+ const { materialArtifacts, shadowMaterialArtifacts, firstArtifact, firstSkinArtifact } =
478
+ collectGpuDrivenMaterialArtifacts({
479
+ rows: artifactRows(seed.frame.renderables),
480
+ shadowRows: artifactRows(shadowProjection?.renderables ?? []),
481
+ dispatch: seed.frame.dispatch,
482
+ shadowDispatch: shadowProjection?.dispatch ?? seed.frame.dispatch,
483
+ resolve: runtime.internals.getMaterialShaderArtifact,
484
+ clustered:
485
+ seed.frame.lights.point.length +
486
+ seed.frame.lights.spot.length +
487
+ seed.frame.lights.rect.length >
488
+ 0 || candidateFrameState.installedPipelineConfig?.ssao?.enabled === true,
489
+ reflectionFallback: candidateFrameState.reflectionFallbackDemand === true,
490
+ });
428
491
  const prepared = candidateGpuDrivenProduction.prepare({
429
492
  scene: candidateGpuDrivenScene.state,
430
493
  camera,
431
- meshes: runtime.pipelineState.meshes,
494
+ meshBySlot: gpuDrivenMeshesForFrame(
495
+ runtime.internals,
496
+ runtime.pipelineState,
497
+ seed.worlds,
498
+ candidateGpuDrivenScene.state,
499
+ ),
432
500
  viewBindGroupLayout: runtime.pipelineState.viewBindGroupLayout,
433
501
  meshResidencyEpoch: runtime.internals.gpuStore.meshResidencyEpoch,
434
- hdrp: false,
502
+
503
+ ...(firstArtifact === undefined ? {} : { materialArtifact: firstArtifact }),
504
+ ...(firstSkinArtifact === undefined ? {} : { materialSkinArtifact: firstSkinArtifact }),
505
+ ...(materialArtifacts.size === 0 ? {} : { materialArtifacts }),
506
+ ...(shadowMaterialArtifacts.size === 0 ? {} : { shadowMaterialArtifacts }),
507
+ materialPipelineState: runtime.pipelineState,
508
+ ...(runtime.internals.getMaterialShaderPipelineEntry === undefined
509
+ ? {}
510
+ : { materialPipelineFactory: runtime.internals.getMaterialShaderPipelineEntry }),
435
511
  });
436
512
  if (!prepared.ok) return failed('candidate GPU-driven preparation failed', prepared.error);
437
513
  preparedGpuDriven = prepared.value;
@@ -501,8 +577,14 @@ export function createRenderSystemRecovery(
501
577
  ...(batches.length === 0
502
578
  ? {}
503
579
  : { preparedResourceKey: `recovery-${runtime.internals.deviceScope.generation}` }),
504
- onRejected: releaseBatches,
505
- onAbandoned: releaseBatches,
580
+ onRejected: () => {
581
+ featureFrame.onAborted();
582
+ releaseBatches();
583
+ },
584
+ onAbandoned: () => {
585
+ featureFrame.onAborted();
586
+ releaseBatches();
587
+ },
506
588
  };
507
589
  }
508
590
  for (const renderable of seed.frame.renderables) {
@@ -596,25 +678,6 @@ export function createRenderSystemRecovery(
596
678
  if (candidateValidated.length !== seed.frame.renderables.length) {
597
679
  return failed('candidate validation did not retain every LKG-visible renderable');
598
680
  }
599
- for (const entry of candidateValidated) {
600
- if (entry.source.instances === undefined) continue;
601
- const prepared = resolveGeometryInstanceBuffer(
602
- {
603
- runtime: runtime.internals,
604
- pipelineState: runtime.pipelineState,
605
- frameState: candidateFrameState,
606
- bindGroupCounts: { createBindGroup: 0, keys: [] },
607
- },
608
- entry,
609
- [],
610
- false,
611
- );
612
- if (prepared === null) return failed('candidate instance preparation failed');
613
- }
614
- // These uploads belong to recovery preparation, never to a rendered frame.
615
- for (const [id, residency] of candidateFrameState.instanceResidency ?? []) {
616
- candidateFrameState.instanceResidency?.set(id, { ...residency, frameNumber: -1 });
617
- }
618
681
  const lighting = prepareFrameLighting(
619
682
  runtime.internals,
620
683
  candidateFrameState,
@@ -680,7 +743,7 @@ export function createRenderSystemRecovery(
680
743
  ) {
681
744
  throw new Error(`recovery post-process bindings are unavailable: ${id}`);
682
745
  }
683
- const pipeline = postProcessPipeline(id, built.bindGroupLayout, colorFormat, entry);
746
+ const pipeline = postProcessPipeline(id, built.bindGroupLayout, [colorFormat], entry);
684
747
  if (pipeline === null) {
685
748
  throw new Error(`recovery post-process pipeline is unavailable: ${id}`);
686
749
  }
@@ -714,7 +777,11 @@ export function createRenderSystemRecovery(
714
777
  const taaPipeline = postProcessPipeline(
715
778
  'forgeax.taa-resolve',
716
779
  temporalBindings.layout,
717
- 'rgba16float',
780
+ [
781
+ TEMPORAL_HISTORY_FORMATS.color,
782
+ TEMPORAL_HISTORY_FORMATS.temporal,
783
+ TEMPORAL_HISTORY_FORMATS.stability,
784
+ ],
718
785
  taaEntry,
719
786
  );
720
787
  if (taaPipeline === null) {
@@ -0,0 +1,113 @@
1
+ import type { LifecycleResourceSpec } from '../device/device-scope';
2
+ import type { EnvironmentGeneration } from '../environment/generation';
3
+ import type { EnvironmentLifecycle } from '../environment/lifecycle';
4
+ import type { RenderFrameState } from '../record/frame-snapshot';
5
+ import type { RecoveryRootBundle, RecoveryRootRuntime } from '../render-system';
6
+
7
+ /**
8
+ * Assemble replacement-device roots without letting candidate construction
9
+ * publish through the active RenderSystem owner. The caller supplies the
10
+ * small state handoff explicitly so this recovery seam remains independent
11
+ * from frame orchestration.
12
+ */
13
+ export function prepareRenderSystemRecoveryRoots(
14
+ runtime: RecoveryRootRuntime,
15
+ environmentLifecycle: EnvironmentLifecycle,
16
+ frameState: RenderFrameState,
17
+ publishEnvironmentLifecycle: (lifecycle: EnvironmentLifecycle) => void,
18
+ ): RecoveryRootBundle {
19
+ const candidateEnvironmentLifecycle = environmentLifecycle.createRecoveryCandidate(runtime.scope);
20
+ const roots: LifecycleResourceSpec<unknown>[] = [];
21
+ let candidateEnvironmentGeneration: EnvironmentGeneration | undefined;
22
+ let environmentRootCleaned = false;
23
+ let published = false;
24
+ if (candidateEnvironmentLifecycle.hasRecoveryFrame()) {
25
+ const environmentRoot = candidateEnvironmentLifecycle.createRecoveryRoot(runtime.scope);
26
+ roots.push({
27
+ ...environmentRoot,
28
+ create: async () => {
29
+ const generation = (await environmentRoot.create()) as EnvironmentGeneration;
30
+ candidateEnvironmentGeneration = generation;
31
+ return generation;
32
+ },
33
+ cleanup: (value) => {
34
+ if (environmentRootCleaned) return;
35
+ environmentRootCleaned = true;
36
+ if (candidateEnvironmentGeneration === value) candidateEnvironmentGeneration = undefined;
37
+ if (published) {
38
+ candidateEnvironmentLifecycle.retirePublishedGeneration(value as EnvironmentGeneration);
39
+ } else {
40
+ environmentRoot.cleanup(value);
41
+ }
42
+ },
43
+ });
44
+ }
45
+ const graphCandidate = runtime.graphCandidate;
46
+ if (graphCandidate !== undefined) {
47
+ const releaseGraphCandidate = (): void => graphCandidate.release();
48
+ const compiledGraph = graphCandidate.frameState.compiledFrameGraph;
49
+ if (compiledGraph !== null) {
50
+ roots.push({
51
+ kind: 'pipeline',
52
+ create: () => {
53
+ if (!runtime.scope.isAlive())
54
+ throw new Error('Recovery graph candidate scope is not active.');
55
+ if (graphCandidate.frameState.compiledFrameGraph !== compiledGraph) {
56
+ throw new Error('Recovery graph candidate was changed before aggregate assembly.');
57
+ }
58
+ return compiledGraph;
59
+ },
60
+ cleanup: releaseGraphCandidate,
61
+ });
62
+ }
63
+ if (graphCandidate.featureHost !== undefined) {
64
+ const featureRoot = graphCandidate.featureHost.createRecoveryRoot(runtime.scope);
65
+ roots.push({ ...featureRoot, cleanup: releaseGraphCandidate });
66
+ }
67
+ if (graphCandidate.featureGpuWork !== undefined) {
68
+ const featureWorkRoot = graphCandidate.featureGpuWork.createRecoveryRoot(runtime.scope);
69
+ roots.push({ ...featureWorkRoot, cleanup: releaseGraphCandidate });
70
+ }
71
+ if (graphCandidate.gpuDrivenProduction !== undefined) {
72
+ const productionRoot = graphCandidate.gpuDrivenProduction.createRecoveryRoot(runtime.scope);
73
+ roots.push({ ...productionRoot, cleanup: releaseGraphCandidate });
74
+ }
75
+ if (graphCandidate.gpuDrivenScene?.state !== undefined) {
76
+ const sceneRoot = graphCandidate.gpuDrivenScene.createRecoveryRoot(runtime.scope);
77
+ roots.push({ ...sceneRoot, cleanup: releaseGraphCandidate });
78
+ }
79
+ if (graphCandidate.pointsLines !== undefined) {
80
+ const pointsLinesRoot = graphCandidate.pointsLines.createRecoveryRoot(runtime.scope);
81
+ roots.push({ ...pointsLinesRoot, cleanup: releaseGraphCandidate });
82
+ }
83
+ if (runtime.gpuStore.recoveryResourceCount() > 0) {
84
+ const gpuStoreRoot = runtime.gpuStore.createRecoveryRoot(runtime.scope);
85
+ roots.push({ ...gpuStoreRoot, cleanup: releaseGraphCandidate });
86
+ }
87
+ }
88
+ let discarded = false;
89
+ return {
90
+ roots: Object.freeze(roots),
91
+ publish: () => {
92
+ if (published || discarded) return;
93
+ if (candidateEnvironmentGeneration !== undefined && !candidateEnvironmentGeneration.retired) {
94
+ environmentLifecycle.retireActiveForReplacement();
95
+ candidateEnvironmentLifecycle.publish(candidateEnvironmentGeneration);
96
+ }
97
+ published = true;
98
+ publishEnvironmentLifecycle(candidateEnvironmentLifecycle);
99
+ Object.assign(frameState, { environmentLifecycle: candidateEnvironmentLifecycle });
100
+ },
101
+ discard: () => {
102
+ if (published || discarded) return;
103
+ discarded = true;
104
+ if (candidateEnvironmentGeneration !== undefined) {
105
+ candidateEnvironmentLifecycle.discard(candidateEnvironmentGeneration);
106
+ candidateEnvironmentGeneration = undefined;
107
+ }
108
+ candidateEnvironmentLifecycle.discardRecoveryCandidates();
109
+ graphCandidate?.release();
110
+ runtime.scope.abandon();
111
+ },
112
+ };
113
+ }
@@ -0,0 +1,77 @@
1
+ import type { MipmapEncoderWork } from '@forgeax/engine-assets-runtime';
2
+ import type { Buffer, RenderPipeline, RhiDevice } from '@forgeax/engine-rhi';
3
+ import type { DeviceScope, LifecycleResourceSpec } from '../device/device-scope';
4
+ import type { GpuResidencyCache } from '../device/gpu-residency';
5
+ import type { RenderFeatureHost } from '../features/host';
6
+ import type { RenderFeatureGpuWorkOwner } from '../features/prepared-gpu-work';
7
+ import type { GpuDrivenProduction } from '../gpu-driven/production-raster';
8
+ import type { RenderFrameState } from '../record/frame-snapshot';
9
+ import type { RecoveryPipelineReadiness } from '../record/recovery-pipeline';
10
+ import type { PipelineState, RenderSystemInternals } from '../record/render-context';
11
+ import type { RenderFeatureGraphCandidate } from '../record/typed-frame-graph';
12
+ import type { PersistentGpuDrivenCandidate } from '../scene/render-scene';
13
+
14
+ /** The single Points/Lines owner's staged device-generation handoff. */
15
+ export interface RecoveryPointsLinesCandidate {
16
+ createRecoveryRoot(scope: DeviceScope): LifecycleResourceSpec<unknown>;
17
+ publish(): void;
18
+ release(): void;
19
+ }
20
+
21
+ /** Candidate-only device/runtime inputs used by the recovery prepare seam. */
22
+ export interface RecoveryGraphCandidateRuntime {
23
+ readonly internals: RenderSystemInternals;
24
+ readonly pipelineState: PipelineState;
25
+ }
26
+
27
+ /** Detached graph state prepared on a replacement device, before publication. */
28
+ export interface RecoveryGraphCandidate {
29
+ readonly frameState: RenderFrameState;
30
+ readonly setupWorks: readonly MipmapEncoderWork[];
31
+ readonly device: RhiDevice;
32
+ readonly generation: number;
33
+ readonly gpuDrivenProduction?: GpuDrivenProduction;
34
+ readonly gpuDrivenScene?: PersistentGpuDrivenCandidate;
35
+ /** Staged CPU-expanded Points/Lines buffers owned by the same RenderSystem. */
36
+ readonly pointsLines?: RecoveryPointsLinesCandidate;
37
+ readonly featureHost?: RenderFeatureHost;
38
+ readonly featureGpuWork?: RenderFeatureGpuWorkOwner;
39
+ readonly featureGraphCandidate?: RenderFeatureGraphCandidate;
40
+ readonly postProcessPipelines?: ReadonlyMap<string, RenderPipeline>;
41
+ readonly recoveryReadiness: RecoveryPipelineReadiness;
42
+ /** Release all candidate roots before publication; safe to call repeatedly. */
43
+ readonly release: () => void;
44
+ /** Transfer candidate-root ownership to the published RenderSystem. */
45
+ readonly markPublished: () => void;
46
+ }
47
+
48
+ /** Candidate setup completion; completion is bounded by the recovery owner. */
49
+ export interface RecoveryGraphSetupSubmission {
50
+ readonly completion?: PromiseLike<unknown>;
51
+ }
52
+
53
+ export type RecoveryGraphCandidatePreparation =
54
+ | { readonly kind: 'no-seed' }
55
+ | { readonly kind: 'ready'; readonly candidate: RecoveryGraphCandidate }
56
+ | { readonly kind: 'failed'; readonly reason: string; readonly cause?: unknown };
57
+
58
+ /** Explicit candidate-owned inputs for lifecycle-root preparation. */
59
+ export interface RecoveryRootRuntime {
60
+ readonly scope: DeviceScope;
61
+ readonly device: RhiDevice;
62
+ readonly gpuStore: GpuResidencyCache;
63
+ readonly graphCandidate?: RecoveryGraphCandidate | undefined;
64
+ }
65
+
66
+ /** Candidate roots plus the one synchronous owner switch at publication. */
67
+ export interface RecoveryRootBundle {
68
+ readonly roots: readonly LifecycleResourceSpec<unknown>[];
69
+ publish(): void;
70
+ discard(): void;
71
+ }
72
+
73
+ /** Device-bound post-process resources prepared off to the side of the active renderer. */
74
+ export interface RecoveryPostProcessResources {
75
+ readonly device: RhiDevice;
76
+ readonly paramsBuffers: Map<string, Buffer>;
77
+ }