@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
@@ -6,13 +6,20 @@ import type {
6
6
  RenderGraphError,
7
7
  ResolveContext,
8
8
  } from '@forgeax/engine-render-graph';
9
- import { RhiError, type TextureView } from '@forgeax/engine-rhi';
9
+ import {
10
+ type Buffer,
11
+ RhiError,
12
+ type Texture,
13
+ type TextureFormat,
14
+ type TextureView,
15
+ } from '@forgeax/engine-rhi';
10
16
  import { ok, type PassKind, type PassSelector, type Result } from '@forgeax/engine-types';
11
17
  import {
12
18
  GPU_TEXTURE_USAGE_COPY_SRC,
13
19
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
14
20
  GPU_TEXTURE_USAGE_TEXTURE_BINDING,
15
21
  } from './gpu-texture-usage';
22
+ import { GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_MAP_READ } from './gpu-usage';
16
23
  import { buildPerFrameBindGroups } from './record/frame-lighting';
17
24
  import { encodeMainPass } from './record/main-pass';
18
25
  import type {
@@ -88,6 +95,136 @@ function resolvedDepthView(
88
95
  return view.value;
89
96
  }
90
97
 
98
+ export type TypedFrameObservationDomain = 'linear-hdr' | 'linear-ldr' | 'final-srgb';
99
+
100
+ /**
101
+ * One graph-owned copy destination for a receipt-bound color-domain capture.
102
+ * The buffer is created by the same encoder transaction as the source copy;
103
+ * callers map it only after the matching receipt fence resolves.
104
+ */
105
+ export interface TypedFrameObservationCapture {
106
+ readonly domain: TypedFrameObservationDomain;
107
+ /** Native source format is required so consumers can decode BGRA surfaces truthfully. */
108
+ readonly format: TextureFormat;
109
+ readonly device: import('@forgeax/engine-rhi').RhiDevice;
110
+ readonly texture: Texture;
111
+ readonly buffer: Buffer;
112
+ readonly frameNumber: number;
113
+ readonly deviceGeneration: number;
114
+ readonly graphGeneration: number;
115
+ readonly backendId: string;
116
+ readonly width: number;
117
+ readonly height: number;
118
+ readonly bytesPerRow: number;
119
+ }
120
+
121
+ function observationBytesPerPixel(format: TextureFormat): number {
122
+ return format === 'rgba16float' ? 8 : 4;
123
+ }
124
+
125
+ function observationBytesPerRow(width: number, format: TextureFormat): number {
126
+ const unaligned = width * observationBytesPerPixel(format);
127
+ return Math.ceil(unaligned / 256) * 256;
128
+ }
129
+
130
+ function addObservationCapturePass(
131
+ graph: RenderGraphBuilder<RenderPipelineFrame>,
132
+ target: RenderPipelineTarget,
133
+ domain: TypedFrameObservationDomain,
134
+ ): Result<void, RenderGraphError> {
135
+ return graph.addCopyPass(`${domain}-observation`, {
136
+ accesses: [{ resource: target.view, usage: 'copy-src' }],
137
+ encode: ({ encoder, frame, resources }) => {
138
+ const texture = resources.texture(target.texture);
139
+ if (!texture.ok) throw texture.error;
140
+ const internal = frame as _InternalRenderPipelineContext;
141
+ // The RenderSystem frame counter is the identity used by
142
+ // observeCurrentFrame after this submission. The public receipt counter
143
+ // is intentionally separate and is only used by receipt-bound copies;
144
+ // using observationFrameId here makes a current source look stale by one
145
+ // frame to the legacy same-frame observer.
146
+ if (domain === 'linear-hdr') {
147
+ internal.frameState.currentFrameObservationSource = {
148
+ texture: texture.value,
149
+ descriptor: {
150
+ texture: texture.value,
151
+ format: target.format,
152
+ size: { width: frame.targetW, height: frame.targetH },
153
+ usage:
154
+ GPU_TEXTURE_USAGE_COPY_SRC |
155
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
156
+ GPU_TEXTURE_USAGE_TEXTURE_BINDING,
157
+ sample: target.sampleCount,
158
+ },
159
+ frameId: internal.frameState.frameNumber,
160
+ pipelineId: 'forgeax::standard',
161
+ backendId: frame.runtime.device.caps.backendKind,
162
+ };
163
+ }
164
+ const owner = frame.runtime.observationCaptureOwner;
165
+ if (owner === undefined) {
166
+ // Standalone graph-contract tests do not assemble a renderer owner.
167
+ // Preserve the legacy HDR source projection without allocating an
168
+ // unowned readback buffer; production frames always inject the owner.
169
+ return;
170
+ }
171
+ // Observation is an explicit host demand, not a property of every
172
+ // submitted frame. The graph keeps its copy pass declaration so the
173
+ // committed topology remains inspectable, but ordinary production
174
+ // frames must not allocate a MAP_READ buffer or enqueue a copy.
175
+ // The source projection is different: the Renderer owns the current
176
+ // linear-HDR texture for every submitted frame, even when no host asked
177
+ // for a MAP_READ copy. Consumers such as the auto-exposure meter use
178
+ // this same-frame source; publishing it only on an explicit capture
179
+ // would make ordinary frames appear to have no observation source.
180
+ if (!frame.runtime.observationCaptureDomains?.includes(domain)) return;
181
+ const width = frame.targetW;
182
+ const height = frame.targetH;
183
+ const bytesPerRow = observationBytesPerRow(width, target.format);
184
+ const created = frame.runtime.device.createBuffer({
185
+ label: `${domain}-observation-readback`,
186
+ size: bytesPerRow * height,
187
+ usage: GPU_BUFFER_USAGE_COPY_DST | GPU_BUFFER_USAGE_MAP_READ,
188
+ mappedAtCreation: false,
189
+ });
190
+ if (!created.ok) throw created.error;
191
+ try {
192
+ encoder.copyTextureToBuffer(
193
+ { texture: texture.value, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } },
194
+ { buffer: created.value, bytesPerRow, rowsPerImage: height },
195
+ { width, height, depthOrArrayLayers: 1 },
196
+ );
197
+ // Publish the graph fence through the renderer runtime before any
198
+ // capture is registered. The assembly consumes this renderer-issued
199
+ // value for the receipt; it never derives the expected fence from the
200
+ // first capture in an otherwise untrusted capture set.
201
+ frame.runtime.observationGraphGeneration = internal.frameState.graphGeneration;
202
+ owner.register({
203
+ domain,
204
+ format: target.format,
205
+ device: frame.runtime.device,
206
+ texture: texture.value,
207
+ buffer: created.value,
208
+ // The assembly reserves this public receipt identity before encoding.
209
+ // The frame-state counter is an internal record counter and is not an
210
+ // identity source when non-receipt frames are recorded.
211
+ frameNumber: frame.runtime.observationFrameId ?? internal.frameState.frameNumber,
212
+ deviceGeneration: frame.runtime.deviceGeneration ?? 0,
213
+ graphGeneration: internal.frameState.graphGeneration,
214
+ backendId: frame.runtime.device.caps.backendKind,
215
+ width,
216
+ height,
217
+ bytesPerRow,
218
+ });
219
+ } catch (cause) {
220
+ const destroyed = frame.runtime.device.destroyBuffer(created.value);
221
+ if (!destroyed.ok) throw destroyed.error;
222
+ throw cause;
223
+ }
224
+ },
225
+ });
226
+ }
227
+
91
228
  function legacyResolver(
92
229
  resources: GraphResourceResolver,
93
230
  targets: Readonly<Record<string, RenderPipelineTarget>>,
@@ -119,6 +256,7 @@ export function addTypedSkyboxPass(
119
256
  }
120
257
 
121
258
  export interface TypedScenePassOptions {
259
+ readonly environment?: import('./environment/ibl').GraphEnvironment | undefined;
122
260
  readonly name: string;
123
261
  readonly color: RenderPipelineTarget;
124
262
  readonly depth: RenderPipelineTarget;
@@ -131,9 +269,14 @@ export interface TypedScenePassOptions {
131
269
  readonly passKind?: PassKind | undefined;
132
270
  readonly colorTargets?: readonly RenderPipelineTarget[] | undefined;
133
271
  readonly clearColor?: readonly [number, number, number, number] | undefined;
134
- readonly colorLoadOp?: GPULoadOp | undefined;
272
+ readonly colorLoadOp?: GPULoadOp | readonly GPULoadOp[] | undefined;
135
273
  readonly depthLoadOp?: GPULoadOp | undefined;
274
+ readonly coverageOnly?: boolean | undefined;
136
275
  readonly recordMode?: 'opaque' | 'transmission' | 'transparent' | undefined;
276
+ /** Exclude material/pass pairs consumed by an earlier graph lane. */
277
+ readonly excludeSelector?: PassSelector | undefined;
278
+ /** Require material membership in another lane without selecting its entries. */
279
+ readonly includeSelector?: PassSelector | undefined;
137
280
  readonly transmissionBackdrop?: GraphTextureView | undefined;
138
281
  readonly extraAccesses?: readonly GraphAccess[] | undefined;
139
282
  readonly gpuDriven?: RenderPipelineGpuDrivenProjection | undefined;
@@ -158,6 +301,12 @@ export function addTypedScenePass(
158
301
  ...(options.transmissionBackdrop === undefined
159
302
  ? []
160
303
  : [{ resource: options.transmissionBackdrop, usage: 'sampled-read' as const }]),
304
+ ...(options.environment === undefined
305
+ ? []
306
+ : [options.environment.irradiance, options.environment.prefilter].map((resource) => ({
307
+ resource,
308
+ usage: 'sampled-read' as const,
309
+ }))),
161
310
  ...(options.extraAccesses ?? []),
162
311
  ...(options.gpuDriven?.accesses ?? []),
163
312
  ];
@@ -171,7 +320,10 @@ export function addTypedScenePass(
171
320
  ...(index === 0 && options.resolve !== undefined
172
321
  ? { resolveTarget: options.resolve.view }
173
322
  : {}),
174
- loadOp: options.colorLoadOp ?? 'clear',
323
+ loadOp:
324
+ (typeof options.colorLoadOp === 'string'
325
+ ? options.colorLoadOp
326
+ : options.colorLoadOp?.[index]) ?? 'clear',
175
327
  storeOp: 'store',
176
328
  clearValue: {
177
329
  r: options.clearColor?.[0] ?? 0,
@@ -228,47 +380,75 @@ export function addTypedScenePass(
228
380
  true,
229
381
  internal.standardLighting,
230
382
  );
231
- if (groups.viewBindGroup !== null) {
232
- options.gpuDriven?.encode(groups.viewBindGroup, pass, resources);
233
- }
383
+ // GPU-driven indirect draws are encoded by `recordMainPass` after it
384
+ // has populated the frame-global material bind-group receipt. Encoding
385
+ // here would race that producer and either observe an empty receipt or
386
+ // issue the same indirect draw twice. Keep this wrapper responsible for
387
+ // resolving graph-owned attachments; the main-pass owner orders the
388
+ // material producer before the GPU consumer.
234
389
  // The context carries the frame's primary occlusion projection for
235
390
  // pipeline construction, but only the pass that owns that projection
236
391
  // may begin its query. Forwarding it to deferred/temporal scene passes
237
392
  // leaves their descriptors without an occlusionQuerySet and makes Dawn
238
393
  // reject beginOcclusionQuery in those passes.
239
394
  const activeOcclusion = options.occlusion;
240
- encodeMainPass(
241
- {
242
- ...internal,
243
- ...(activeOcclusion === undefined ? {} : { occlusion: activeOcclusion }),
244
- geometryColorView: colorViews[0] ?? null,
245
- geometryDepthView: depthView,
246
- geometryColorResolveView: resolveView,
247
- transparentColorFormat: colorTargets[0]?.format as GPUTextureFormat,
248
- ...(colorTargets[1]?.format === 'rgba16float'
249
- ? { reflectionFallbackColorFormat: 'rgba16float' as const }
250
- : {}),
251
- msaaActive: colorTargets[0]?.sampleCount === 4,
252
- viewBindGroup: groups.viewBindGroup,
253
- meshBindGroup: groups.meshBindGroup,
254
- hdrpClusterBindGroup: groups.hdrpClusterBindGroup,
255
- hdrpClusterMembershipBindGroup: groups.hdrpClusterMembershipBindGroup,
256
- ...(ssao === undefined ? {} : { hdrpSsaoBlurredView: ssao }),
257
- },
258
- pass,
259
- options.selector,
260
- {
261
- colorViews,
262
- colorFormats: colorTargets.map((target) => target.format as GPUTextureFormat),
263
- depthView,
264
- passKind: options.passKind ?? 'forward',
265
- ...(options.clearColor === undefined ? {} : { clearColor: options.clearColor }),
266
- ...(options.recordMode === undefined ? {} : { recordMode: options.recordMode }),
267
- ...(options.transmissionBackdrop === undefined
268
- ? {}
269
- : { transmissionBackdropView: transmissionBackdrop }),
270
- },
271
- );
395
+ const passContext: _InternalRenderPipelineContext = {
396
+ ...internal,
397
+ ...(options.environment === undefined
398
+ ? {}
399
+ : {
400
+ environmentIbl: {
401
+ irradiance: resolvedView(resources, options.environment.irradiance),
402
+ prefilter: resolvedView(resources, options.environment.prefilter),
403
+ },
404
+ }),
405
+ ...(activeOcclusion === undefined ? {} : { occlusion: activeOcclusion }),
406
+ geometryColorView: colorViews[0] ?? null,
407
+ geometryDepthView: depthView,
408
+ geometryColorResolveView: resolveView,
409
+ transparentColorFormat: colorTargets[0]?.format as GPUTextureFormat,
410
+ ...((options.passKind === 'deferred'
411
+ ? colorTargets[3]?.format
412
+ : colorTargets[1]?.format) === 'rgba16float'
413
+ ? { reflectionFallbackColorFormat: 'rgba16float' as const }
414
+ : {}),
415
+ msaaActive: colorTargets[0]?.sampleCount === 4,
416
+ viewBindGroup: groups.viewBindGroup,
417
+ meshBindGroup: groups.meshBindGroup,
418
+ hdrpClusterBindGroup: groups.hdrpClusterBindGroup,
419
+ hdrpClusterMembershipBindGroup: groups.hdrpClusterMembershipBindGroup,
420
+ ...(ssao === undefined ? {} : { hdrpSsaoBlurredView: ssao }),
421
+ };
422
+ encodeMainPass(passContext, pass, options.selector, {
423
+ colorViews,
424
+ colorFormats: colorTargets.map((target) => target.format as GPUTextureFormat),
425
+ depthView,
426
+ passKind: options.passKind ?? 'forward',
427
+ ...(options.clearColor === undefined ? {} : { clearColor: options.clearColor }),
428
+ ...(options.recordMode === undefined ? {} : { recordMode: options.recordMode }),
429
+ ...(options.coverageOnly === undefined ? {} : { coverageOnly: options.coverageOnly }),
430
+ ...(options.excludeSelector === undefined
431
+ ? {}
432
+ : { excludeSelector: options.excludeSelector }),
433
+ ...(options.includeSelector === undefined
434
+ ? {}
435
+ : { includeSelector: options.includeSelector }),
436
+ ...(options.transmissionBackdrop === undefined
437
+ ? {}
438
+ : { transmissionBackdropView: transmissionBackdrop }),
439
+ ...(options.gpuDriven === undefined
440
+ ? {}
441
+ : { gpuDriven: { projection: options.gpuDriven, resources } }),
442
+ });
443
+ // encodeMainPass receives a pass-local context so attachment and
444
+ // bind-group overrides stay isolated. Its material UBO payload cache is
445
+ // frame-owned, however: return it to the original context so the next
446
+ // Standard scene pass can reuse the same validated slot projection.
447
+ // This remains frame-local and keeps the existing writeBuffer, texture
448
+ // readiness, UV-scale, and missing-texture diagnostic behavior intact.
449
+ if (passContext.materialUboPayloadCache !== undefined) {
450
+ internal.materialUboPayloadCache = passContext.materialUboPayloadCache;
451
+ }
272
452
  if (activeOcclusion !== undefined) {
273
453
  const proxyResult = activeOcclusion.encodeProxyBounds(pass);
274
454
  if (!proxyResult.ok) throw proxyResult.error;
@@ -282,30 +462,8 @@ export function addTypedFrameObservationPass(
282
462
  target: RenderPipelineTarget,
283
463
  pipelineId: 'forgeax::standard',
284
464
  ): Result<void, RenderGraphError> {
285
- return graph.addCopyPass('linear-hdr-observation', {
286
- accesses: [{ resource: target.view, usage: 'copy-src' }],
287
- encode: ({ frame, resources }) => {
288
- const internal = frame as _InternalRenderPipelineContext;
289
- const texture = resources.texture(target.texture);
290
- if (!texture.ok) throw texture.error;
291
- internal.frameState.currentFrameObservationSource = {
292
- texture: texture.value,
293
- descriptor: {
294
- texture: texture.value,
295
- format: target.format,
296
- size: { width: frame.targetW, height: frame.targetH },
297
- usage:
298
- GPU_TEXTURE_USAGE_COPY_SRC |
299
- GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
300
- GPU_TEXTURE_USAGE_TEXTURE_BINDING,
301
- sample: target.sampleCount,
302
- },
303
- frameId: internal.frameState.frameNumber,
304
- pipelineId,
305
- backendId: frame.runtime.device.caps.backendKind,
306
- };
307
- },
308
- });
465
+ void pipelineId;
466
+ return addObservationCapturePass(graph, target, 'linear-hdr');
309
467
  }
310
468
 
311
469
  /** Publish the same-frame fallback MRT as a detached, copy-readable source. */
@@ -508,6 +666,8 @@ export function addTypedSsaoPasses(
508
666
  export interface TypedFullscreenPassOptions {
509
667
  readonly name: string;
510
668
  readonly shader: string;
669
+ /** Optional fragment entry point override for composed fullscreen shaders. */
670
+ readonly fragmentEntryPoint?: string | undefined;
511
671
  readonly input: RenderPipelineTarget;
512
672
  readonly output: RenderPipelineTarget;
513
673
  readonly outputOnly?: boolean | undefined;
@@ -525,12 +685,20 @@ export interface TypedFullscreenPassOptions {
525
685
 
526
686
  export interface TypedTemporalResolveTargets {
527
687
  readonly scene: RenderPipelineTarget;
688
+ /** Output-domain coverage produced by the Standard raster witness. */
689
+ readonly coverage?: RenderPipelineTarget | undefined;
690
+ /** Paired output-domain depth used to keep the producer observable. */
691
+ readonly coverageDepth?: RenderPipelineTarget | undefined;
692
+ /** Optional producer-owned R-channel reactivity in current screen space. */
693
+ readonly secondaryReactivity?: GraphTextureView;
528
694
  readonly currentTemporal: RenderPipelineTarget;
529
695
  readonly depth: RenderPipelineTarget;
530
696
  readonly historyColor: RenderPipelineTarget;
531
697
  readonly historyTemporal: RenderPipelineTarget;
698
+ readonly historyStability: RenderPipelineTarget;
532
699
  readonly writeColor: RenderPipelineTarget;
533
700
  readonly writeTemporal: RenderPipelineTarget;
701
+ readonly writeStability: RenderPipelineTarget;
534
702
  }
535
703
 
536
704
  export function addTypedTemporalResolvePass(
@@ -541,10 +709,21 @@ export function addTypedTemporalResolvePass(
541
709
  accesses: [
542
710
  { resource: targets.scene.view, usage: 'sampled-read' },
543
711
  { resource: targets.currentTemporal.view, usage: 'sampled-read' },
712
+ ...(targets.coverage === undefined
713
+ ? []
714
+ : [{ resource: targets.coverage.view, usage: 'sampled-read' as const }]),
715
+ ...(targets.coverageDepth === undefined
716
+ ? []
717
+ : [{ resource: targets.coverageDepth.view, usage: 'sampled-read' as const }]),
544
718
  { resource: targets.historyColor.view, usage: 'sampled-read' },
545
719
  { resource: targets.historyTemporal.view, usage: 'sampled-read' },
720
+ { resource: targets.historyStability.view, usage: 'sampled-read' },
721
+ ...(targets.secondaryReactivity === undefined
722
+ ? []
723
+ : [{ resource: targets.secondaryReactivity, usage: 'sampled-read' as const }]),
546
724
  { resource: targets.writeColor.view, usage: 'color-attachment' },
547
725
  { resource: targets.writeTemporal.view, usage: 'color-attachment' },
726
+ { resource: targets.writeStability.view, usage: 'color-attachment' },
548
727
  ],
549
728
  colorAttachments: [
550
729
  {
@@ -559,6 +738,12 @@ export function addTypedTemporalResolvePass(
559
738
  storeOp: 'store',
560
739
  clearValue: { r: 0, g: 0, b: 0, a: 0 },
561
740
  },
741
+ {
742
+ view: targets.writeStability.view,
743
+ loadOp: 'clear',
744
+ storeOp: 'store',
745
+ clearValue: { r: 0, g: 0, b: 0, a: 0 },
746
+ },
562
747
  ],
563
748
  encode: ({ pass, frame, resources }) => {
564
749
  const internal = frame as _InternalRenderPipelineContext;
@@ -574,11 +759,12 @@ export function addTypedTemporalResolvePass(
574
759
  const currentTemporal = resolvedView(resources, targets.currentTemporal.view);
575
760
  const historyColor = resolvedView(resources, targets.historyColor.view);
576
761
  const historyTemporal = resolvedView(resources, targets.historyTemporal.view);
762
+ const historyStability = resolvedView(resources, targets.historyStability.view);
577
763
  const params = getTemporalParamsBuffer(state);
578
- if (params === undefined || built.sampler === null) {
764
+ if (params === undefined || built.sampler === null || built.temporalSampler === null) {
579
765
  throwTemporalEncodeFailure('TAA resolve has an admitted params buffer and sampler');
580
766
  }
581
- const payload = new ArrayBuffer(16);
767
+ const payload = new ArrayBuffer(32);
582
768
  new Float32Array(payload).set([
583
769
  frame.camera.temporal?.currentJitterUv?.[0] ?? 0,
584
770
  frame.camera.temporal?.currentJitterUv?.[1] ?? 0,
@@ -586,6 +772,8 @@ export function addTypedTemporalResolvePass(
586
772
  const words = new Uint32Array(payload);
587
773
  words[2] = state.valid && (frame.camera.temporal?.historyValid ?? true) ? 1 : 0;
588
774
  words[3] = frame.camera.temporal?.temporalFrameIndex ?? 0;
775
+ words[4] = Number(targets.secondaryReactivity !== undefined);
776
+ words[5] = Number(targets.coverage !== undefined);
589
777
  const written = frame.runtime.device.queue.writeBuffer(params, 0, new Uint8Array(payload));
590
778
  if (!written.ok)
591
779
  throwTemporalEncodeFailure('TAA resolve params upload succeeds', written.error);
@@ -598,20 +786,41 @@ export function addTypedTemporalResolvePass(
598
786
  { binding: 2, resource: { kind: 'textureView', value: historyColor } },
599
787
  { binding: 3, resource: { kind: 'sampler', value: built.sampler } },
600
788
  { binding: 4, resource: { kind: 'textureView', value: historyTemporal } },
601
- { binding: 5, resource: { kind: 'sampler', value: built.sampler } },
789
+ { binding: 5, resource: { kind: 'sampler', value: built.temporalSampler } },
602
790
  { binding: 6, resource: { kind: 'textureView', value: currentTemporal } },
603
- { binding: 7, resource: { kind: 'sampler', value: built.sampler } },
791
+ { binding: 7, resource: { kind: 'sampler', value: built.temporalSampler } },
604
792
  { binding: 8, resource: { kind: 'buffer', value: { buffer: params } } },
793
+ { binding: 9, resource: { kind: 'textureView', value: historyStability } },
794
+ {
795
+ binding: 10,
796
+ resource: {
797
+ kind: 'textureView',
798
+ value:
799
+ targets.secondaryReactivity === undefined
800
+ ? currentTemporal
801
+ : resolvedView(resources, targets.secondaryReactivity),
802
+ },
803
+ },
804
+ {
805
+ binding: 11,
806
+ resource: {
807
+ kind: 'textureView',
808
+ value:
809
+ targets.coverage === undefined
810
+ ? currentTemporal
811
+ : resolvedView(resources, targets.coverage.view),
812
+ },
813
+ },
605
814
  ] as never,
606
815
  });
607
816
  if (!bindGroup.ok) {
608
817
  throwTemporalEncodeFailure('TAA resolve bind group creation succeeds', bindGroup.error);
609
818
  }
610
- const pipeline = frame.runtime.getPostProcessPipeline?.(
611
- 'forgeax.taa-resolve',
612
- built.layout,
613
- targets.writeColor.format as GPUTextureFormat,
614
- );
819
+ const pipeline = frame.runtime.getPostProcessPipeline?.('forgeax.taa-resolve', built.layout, [
820
+ targets.writeColor.format,
821
+ targets.writeTemporal.format,
822
+ targets.writeStability.format,
823
+ ] as GPUTextureFormat[]);
615
824
  if (pipeline === null || pipeline === undefined) {
616
825
  throwTemporalEncodeFailure('TAA resolve pipeline is ready before frame encoding');
617
826
  }
@@ -680,6 +889,9 @@ export function addTypedFullscreenPass(
680
889
  : {
681
890
  paramsOverride: options.paramsTransform(frame.postProcessParams.get(options.shader)),
682
891
  }),
892
+ ...(options.fragmentEntryPoint === undefined
893
+ ? {}
894
+ : { fragmentEntryPoint: options.fragmentEntryPoint }),
683
895
  });
684
896
  },
685
897
  });
@@ -746,11 +958,20 @@ export function addTypedOutputTransformPass(
746
958
  graph: RenderGraphBuilder<RenderPipelineFrame>,
747
959
  input: RenderPipelineTarget,
748
960
  output: RenderPipelineTarget,
749
- options: { readonly outputOnly?: boolean; readonly dither?: boolean } = {},
961
+ options: {
962
+ readonly outputOnly?: boolean;
963
+ readonly dither?: boolean;
964
+ readonly name?: string | undefined;
965
+ readonly fragmentEntryPoint?: string | undefined;
966
+ } = {},
750
967
  ): Result<void, RenderGraphError> {
751
968
  const outputOnly = options.outputOnly ?? false;
752
- return addTypedFullscreenPass(graph, {
753
- name: outputOnly ? 'present' : 'output-transform',
969
+ if (options.fragmentEntryPoint === 'fs_encode_only') {
970
+ const ldrCapture = addObservationCapturePass(graph, input, 'linear-ldr');
971
+ if (!ldrCapture.ok) return ldrCapture;
972
+ }
973
+ const transformed = addTypedFullscreenPass(graph, {
974
+ name: options.name ?? (outputOnly ? 'present' : 'output-transform'),
754
975
  shader: STANDARD_OUTPUT_TRANSFORM_FEATURE_ID,
755
976
  input,
756
977
  output,
@@ -770,5 +991,14 @@ export function addTypedOutputTransformPass(
770
991
  },
771
992
  }
772
993
  : {}),
994
+ ...(options.fragmentEntryPoint === undefined
995
+ ? {}
996
+ : { fragmentEntryPoint: options.fragmentEntryPoint }),
773
997
  });
998
+ if (!transformed.ok) return transformed;
999
+ if (options.fragmentEntryPoint === 'fs_encode_only') {
1000
+ const finalCapture = addObservationCapturePass(graph, output, 'final-srgb');
1001
+ if (!finalCapture.ok) return finalCapture;
1002
+ }
1003
+ return ok(undefined);
774
1004
  }