@forgeax/engine-render 0.1.27 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. package/README.md +842 -124
  2. package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
  3. package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
  4. package/dist/assembly/dynamic-geometry-host.d.ts +52 -0
  5. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -0
  6. package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
  7. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
  8. package/dist/assembly/factory.d.ts +3 -1
  9. package/dist/assembly/factory.d.ts.map +1 -1
  10. package/dist/assembly/gpu-driven-owner.d.ts +10 -0
  11. package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
  12. package/dist/assembly/host-contract.d.ts +19 -0
  13. package/dist/assembly/host-contract.d.ts.map +1 -1
  14. package/dist/assembly/material/assembly.d.ts +7 -0
  15. package/dist/assembly/material/assembly.d.ts.map +1 -1
  16. package/dist/assembly/material-shader-policy.d.ts +3 -1
  17. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  18. package/dist/assembly/recovery/failure-location.d.ts +12 -0
  19. package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
  20. package/dist/assembly/recovery/renderer-recover.d.ts +6 -4
  21. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  22. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  23. package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
  24. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
  25. package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
  26. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  27. package/dist/assembly/renderer-helpers.d.ts +3 -0
  28. package/dist/assembly/renderer-helpers.d.ts.map +1 -1
  29. package/dist/assembly/renderer-inspection.d.ts +4 -0
  30. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  31. package/dist/assembly/shader-prewarm-policy.d.ts +6 -0
  32. package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
  33. package/dist/assembly/skin-palette-owner.d.ts +8 -0
  34. package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
  35. package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
  36. package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
  37. package/dist/assembly/webgpu-device-loss.d.ts +15 -0
  38. package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
  39. package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
  40. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
  41. package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
  42. package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
  43. package/dist/assembly/webgpu-ready.d.ts +7 -3
  44. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  45. package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
  46. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
  47. package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
  48. package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
  49. package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
  50. package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
  51. package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
  52. package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
  53. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
  54. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
  55. package/dist/assembly/webgpu-renderer.d.ts +7 -141
  56. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  57. package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
  58. package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
  59. package/dist/authoring.mjs +3 -3
  60. package/dist/{chunk-ADHHVYLW.mjs → chunk-33XZFTQU.mjs} +245 -39
  61. package/dist/chunk-33XZFTQU.mjs.map +1 -0
  62. package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
  63. package/dist/chunk-BLXGONR2.mjs.map +1 -0
  64. package/dist/{chunk-KM2NOX2I.mjs → chunk-BQVQOQJH.mjs} +958 -254
  65. package/dist/chunk-BQVQOQJH.mjs.map +1 -0
  66. package/dist/{chunk-HKXTW355.mjs → chunk-BTWH7BP4.mjs} +386 -17
  67. package/dist/chunk-BTWH7BP4.mjs.map +1 -0
  68. package/dist/{chunk-TMIASV2N.mjs → chunk-FUODTTIA.mjs} +3934 -676
  69. package/dist/chunk-FUODTTIA.mjs.map +1 -0
  70. package/dist/{chunk-FJ6P52EE.mjs → chunk-ILQ5MEZF.mjs} +3 -17
  71. package/dist/chunk-ILQ5MEZF.mjs.map +1 -0
  72. package/dist/{chunk-E34VL5VI.mjs → chunk-JQTSEI3Z.mjs} +3 -3
  73. package/dist/{chunk-E34VL5VI.mjs.map → chunk-JQTSEI3Z.mjs.map} +1 -1
  74. package/dist/{chunk-GE3SDD72.mjs → chunk-NICXSHAT.mjs} +16 -38
  75. package/dist/chunk-NICXSHAT.mjs.map +1 -0
  76. package/dist/{chunk-ZZ4YQ474.mjs → chunk-NRNXBLIJ.mjs} +577 -7
  77. package/dist/chunk-NRNXBLIJ.mjs.map +1 -0
  78. package/dist/{chunk-JDWARUOI.mjs → chunk-PA5DRJNI.mjs} +17 -3
  79. package/dist/chunk-PA5DRJNI.mjs.map +1 -0
  80. package/dist/{chunk-XDP6XE5V.mjs → chunk-S4DNKQYQ.mjs} +1118 -446
  81. package/dist/chunk-S4DNKQYQ.mjs.map +1 -0
  82. package/dist/components/camera.d.ts +62 -2
  83. package/dist/components/camera.d.ts.map +1 -1
  84. package/dist/components/index.d.ts +1 -0
  85. package/dist/components/index.d.ts.map +1 -1
  86. package/dist/components/instances.d.ts +6 -20
  87. package/dist/components/instances.d.ts.map +1 -1
  88. package/dist/components/scene-instance.d.ts +2 -1
  89. package/dist/components/scene-instance.d.ts.map +1 -1
  90. package/dist/components/screen-space-reflection.d.ts +14 -0
  91. package/dist/components/screen-space-reflection.d.ts.map +1 -0
  92. package/dist/construct-renderer.mjs +13805 -7186
  93. package/dist/construct-renderer.mjs.map +1 -1
  94. package/dist/device/gpu-residency.d.ts +11 -17
  95. package/dist/device/gpu-residency.d.ts.map +1 -1
  96. package/dist/device/mesh-residency-lifetime.d.ts +21 -0
  97. package/dist/device/mesh-residency-lifetime.d.ts.map +1 -0
  98. package/dist/dynamic-geometry.d.ts +125 -0
  99. package/dist/dynamic-geometry.d.ts.map +1 -0
  100. package/dist/environment/background.d.ts +6 -0
  101. package/dist/environment/background.d.ts.map +1 -0
  102. package/dist/errors/gpu-driven.d.ts +6 -3
  103. package/dist/errors/gpu-driven.d.ts.map +1 -1
  104. package/dist/errors/render.d.ts +7 -4
  105. package/dist/errors/render.d.ts.map +1 -1
  106. package/dist/extract/camera.d.ts.map +1 -1
  107. package/dist/extract/gpu-driven.d.ts +33 -3
  108. package/dist/extract/gpu-driven.d.ts.map +1 -1
  109. package/dist/features/host.d.ts +23 -1
  110. package/dist/features/host.d.ts.map +1 -1
  111. package/dist/features/noise-texture.d.ts +17 -0
  112. package/dist/features/noise-texture.d.ts.map +1 -0
  113. package/dist/features/plan.d.ts +83 -2
  114. package/dist/features/plan.d.ts.map +1 -1
  115. package/dist/features/prepared-gpu-work.d.ts +37 -4
  116. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  117. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  118. package/dist/features/prepared-graphics.d.ts +5 -0
  119. package/dist/features/prepared-graphics.d.ts.map +1 -1
  120. package/dist/features/render-graph-compute.d.ts +5 -3
  121. package/dist/features/render-graph-compute.d.ts.map +1 -1
  122. package/dist/features/render-graph-contribution.d.ts +11 -3
  123. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  124. package/dist/features/render-graph-raster.d.ts +19 -3
  125. package/dist/features/render-graph-raster.d.ts.map +1 -1
  126. package/dist/features/types.d.ts +11 -0
  127. package/dist/features/types.d.ts.map +1 -1
  128. package/dist/fullscreen-post-process-pass.d.ts +2 -0
  129. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  130. package/dist/gpu-driven/batch-topology.d.ts +34 -1
  131. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  132. package/dist/gpu-driven/pbr-program.d.ts +10 -0
  133. package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
  134. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  135. package/dist/gpu-driven/production-raster.d.ts +144 -23
  136. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  137. package/dist/gpu-driven/shadow-views.d.ts +126 -0
  138. package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
  139. package/dist/gpu-driven/view-gpu.d.ts +18 -2
  140. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  141. package/dist/gpu-scene-schema.d.ts +2 -8
  142. package/dist/gpu-scene-schema.d.ts.map +1 -1
  143. package/dist/gpu-scene.d.ts +14 -0
  144. package/dist/gpu-scene.d.ts.map +1 -1
  145. package/dist/gpu-texture-usage.d.ts +1 -0
  146. package/dist/gpu-texture-usage.d.ts.map +1 -1
  147. package/dist/hdrp-buffers.d.ts +6 -0
  148. package/dist/hdrp-buffers.d.ts.map +1 -1
  149. package/dist/ibl/frame-resources.d.ts +8 -0
  150. package/dist/ibl/frame-resources.d.ts.map +1 -0
  151. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  152. package/dist/index.d.ts +21 -8
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.mjs +8 -7
  155. package/dist/index.mjs.map +1 -1
  156. package/dist/inspection-types.d.ts +164 -0
  157. package/dist/inspection-types.d.ts.map +1 -1
  158. package/dist/instances-derived-bounds.d.ts +11 -0
  159. package/dist/instances-derived-bounds.d.ts.map +1 -1
  160. package/dist/instances.d.ts +89 -44
  161. package/dist/instances.d.ts.map +1 -1
  162. package/dist/internal.d.ts +3 -0
  163. package/dist/internal.d.ts.map +1 -1
  164. package/dist/internal.mjs +118 -10
  165. package/dist/internal.mjs.map +1 -1
  166. package/dist/lifecycle.d.ts +2 -1
  167. package/dist/lifecycle.d.ts.map +1 -1
  168. package/dist/material-row.d.ts +5 -0
  169. package/dist/material-row.d.ts.map +1 -0
  170. package/dist/materials.d.ts +15 -0
  171. package/dist/materials.d.ts.map +1 -1
  172. package/dist/pbr-pipeline.d.ts +21 -5
  173. package/dist/pbr-pipeline.d.ts.map +1 -1
  174. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  175. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
  176. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
  177. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
  178. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
  179. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
  180. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
  181. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
  182. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
  183. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
  184. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
  185. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
  186. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
  187. package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
  188. package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
  189. package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
  190. package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
  191. package/dist/pipeline/standard-output/graph.d.ts +15 -0
  192. package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
  193. package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
  194. package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
  195. package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
  196. package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
  197. package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
  198. package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
  199. package/dist/pipeline/standard-output/resources.d.ts +10 -0
  200. package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
  201. package/dist/pipeline/standard-output/types.d.ts +39 -0
  202. package/dist/pipeline/standard-output/types.d.ts.map +1 -0
  203. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  204. package/dist/pipeline/standard-post.d.ts +2 -2
  205. package/dist/pipeline/standard-post.d.ts.map +1 -1
  206. package/dist/pipeline-builder.d.ts +2 -1
  207. package/dist/pipeline-builder.d.ts.map +1 -1
  208. package/dist/pipeline-spec-types.d.ts +4 -0
  209. package/dist/pipeline-spec-types.d.ts.map +1 -1
  210. package/dist/pipeline-spec.d.ts +1 -9
  211. package/dist/pipeline-spec.d.ts.map +1 -1
  212. package/dist/points-lines/standard-owner.d.ts +1 -1
  213. package/dist/points-lines/standard-owner.d.ts.map +1 -1
  214. package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
  215. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  216. package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
  217. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
  218. package/dist/record/frame-lighting.d.ts +3 -3
  219. package/dist/record/frame-lighting.d.ts.map +1 -1
  220. package/dist/record/frame-snapshot.d.ts +106 -5
  221. package/dist/record/frame-snapshot.d.ts.map +1 -1
  222. package/dist/record/frame-targets.d.ts.map +1 -1
  223. package/dist/record/frame.d.ts +39 -4
  224. package/dist/record/frame.d.ts.map +1 -1
  225. package/dist/record/main-pass-geometry.d.ts +7 -8
  226. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  227. package/dist/record/main-pass-material.d.ts +38 -1
  228. package/dist/record/main-pass-material.d.ts.map +1 -1
  229. package/dist/record/main-pass-sprite-draws.d.ts +2 -10
  230. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  231. package/dist/record/main-pass.d.ts +12 -2
  232. package/dist/record/main-pass.d.ts.map +1 -1
  233. package/dist/record/mesh-ssbo.d.ts +15 -6
  234. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  235. package/dist/record/prepared-material-bindings.d.ts +19 -0
  236. package/dist/record/prepared-material-bindings.d.ts.map +1 -0
  237. package/dist/record/recovery-pipeline.d.ts +2 -9
  238. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  239. package/dist/record/render-context.d.ts +76 -26
  240. package/dist/record/render-context.d.ts.map +1 -1
  241. package/dist/record/shadow-pass.d.ts +62 -7
  242. package/dist/record/shadow-pass.d.ts.map +1 -1
  243. package/dist/record/skybox-post-pass.d.ts +1 -1
  244. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  245. package/dist/record/typed-frame-graph.d.ts +35 -7
  246. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  247. package/dist/record/view-ubo.d.ts +1 -0
  248. package/dist/record/view-ubo.d.ts.map +1 -1
  249. package/dist/recovery/render-system-candidate.d.ts +10 -2
  250. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  251. package/dist/recovery/render-system-roots.d.ts +11 -0
  252. package/dist/recovery/render-system-roots.d.ts.map +1 -0
  253. package/dist/recovery/types.d.ts +76 -0
  254. package/dist/recovery/types.d.ts.map +1 -0
  255. package/dist/reflection/record-owner.d.ts +0 -2
  256. package/dist/reflection/record-owner.d.ts.map +1 -1
  257. package/dist/render-contract.d.ts +185 -30
  258. package/dist/render-contract.d.ts.map +1 -1
  259. package/dist/render-graph-primitives.d.ts +1 -0
  260. package/dist/render-graph-primitives.d.ts.map +1 -1
  261. package/dist/render-pipeline.d.ts +64 -5
  262. package/dist/render-pipeline.d.ts.map +1 -1
  263. package/dist/render-system-extract-tail.d.ts +7 -5
  264. package/dist/render-system-extract-tail.d.ts.map +1 -1
  265. package/dist/render-system-extract.d.ts +101 -41
  266. package/dist/render-system-extract.d.ts.map +1 -1
  267. package/dist/render-system-projections.d.ts +22 -0
  268. package/dist/render-system-projections.d.ts.map +1 -0
  269. package/dist/render-system.d.ts +34 -77
  270. package/dist/render-system.d.ts.map +1 -1
  271. package/dist/scene/render-scene-types.d.ts +14 -7
  272. package/dist/scene/render-scene-types.d.ts.map +1 -1
  273. package/dist/scene/render-scene.d.ts +29 -11
  274. package/dist/scene/render-scene.d.ts.map +1 -1
  275. package/dist/scene/shadow-visibility.d.ts +5 -0
  276. package/dist/scene/shadow-visibility.d.ts.map +1 -0
  277. package/dist/ssr/admission.d.ts +70 -1
  278. package/dist/ssr/admission.d.ts.map +1 -1
  279. package/dist/ssr/compose.d.ts +13 -0
  280. package/dist/ssr/compose.d.ts.map +1 -0
  281. package/dist/ssr/errors.d.ts +35 -0
  282. package/dist/ssr/errors.d.ts.map +1 -1
  283. package/dist/ssr/graph.d.ts +60 -0
  284. package/dist/ssr/graph.d.ts.map +1 -0
  285. package/dist/ssr/history.d.ts +97 -0
  286. package/dist/ssr/history.d.ts.map +1 -0
  287. package/dist/ssr/hiz.d.ts +37 -0
  288. package/dist/ssr/hiz.d.ts.map +1 -0
  289. package/dist/ssr/inspection.d.ts +42 -0
  290. package/dist/ssr/inspection.d.ts.map +1 -0
  291. package/dist/ssr/resources.d.ts +58 -0
  292. package/dist/ssr/resources.d.ts.map +1 -0
  293. package/dist/ssr/temporal.d.ts +38 -0
  294. package/dist/ssr/temporal.d.ts.map +1 -0
  295. package/dist/systems/skin-palette-allocator.d.ts +32 -10
  296. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  297. package/dist/systems/skin-palette-types.d.ts +15 -0
  298. package/dist/systems/skin-palette-types.d.ts.map +1 -1
  299. package/dist/systems/transparent-dispatch.d.ts +9 -0
  300. package/dist/systems/transparent-dispatch.d.ts.map +1 -0
  301. package/dist/targets/material-source.d.ts +7 -0
  302. package/dist/targets/material-source.d.ts.map +1 -1
  303. package/dist/temporal/frame-coordinator.d.ts +7 -0
  304. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  305. package/dist/temporal/gpu.d.ts +8 -0
  306. package/dist/temporal/gpu.d.ts.map +1 -1
  307. package/dist/temporal/history.d.ts.map +1 -1
  308. package/dist/temporal/index.mjs +6 -6
  309. package/dist/temporal/inspection.d.ts.map +1 -1
  310. package/dist/temporal/standard-scene-data.d.ts +2 -1
  311. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  312. package/dist/temporal/temporal-view.d.ts +2 -0
  313. package/dist/temporal/temporal-view.d.ts.map +1 -1
  314. package/dist/typed-render-graph-primitives.d.ts +35 -1
  315. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  316. package/dist/typed-shadow-passes.d.ts +3 -1
  317. package/dist/typed-shadow-passes.d.ts.map +1 -1
  318. package/dist/volume/temporal.d.ts +6 -0
  319. package/dist/volume/temporal.d.ts.map +1 -1
  320. package/package.json +21 -20
  321. package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
  322. package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
  323. package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
  324. package/src/__tests__/auto-exposure.browser.test.ts +33 -0
  325. package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
  326. package/src/__tests__/detached-inspection.integration.test.ts +5 -0
  327. package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
  328. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
  329. package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
  330. package/src/__tests__/dynamic-geometry-host.unit.test.ts +1123 -0
  331. package/src/__tests__/dynamic-geometry.unit.test.ts +233 -0
  332. package/src/__tests__/factory-contract.integration.test.ts +73 -22
  333. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
  334. package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
  335. package/src/__tests__/feature-noise.unit.test.ts +38 -0
  336. package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
  337. package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
  338. package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
  339. package/src/__tests__/frame-targets.unit.test.ts +24 -0
  340. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
  341. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
  342. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +287 -6
  343. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
  344. package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
  345. package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +264 -0
  346. package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +349 -0
  347. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1417 -0
  348. package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
  349. package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
  350. package/src/__tests__/gpu-driven-production.integration.test.ts +1075 -93
  351. package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
  352. package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
  353. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
  354. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
  355. package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
  356. package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
  357. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
  358. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
  359. package/src/__tests__/gpu-driven-view.unit.test.ts +159 -52
  360. package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -1
  361. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
  362. package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
  363. package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
  364. package/src/__tests__/gpu-scene.unit.test.ts +559 -33
  365. package/src/__tests__/instances-culling.integration.test.ts +36 -10
  366. package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
  367. package/src/__tests__/instances-store.unit.test.ts +242 -39
  368. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
  369. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
  370. package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
  371. package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
  372. package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
  373. package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
  374. package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
  375. package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
  376. package/src/__tests__/material-texture-source.unit.test.ts +87 -0
  377. package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
  378. package/src/__tests__/materials-standard-contract.unit.test.ts +52 -2
  379. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
  380. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +53 -0
  381. package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
  382. package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
  383. package/src/__tests__/physical-clearcoat.integration.test.ts +37 -3
  384. package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
  385. package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
  386. package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
  387. package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
  388. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +35 -4
  389. package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
  390. package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
  391. package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
  392. package/src/__tests__/public-surface.test-d.ts +3 -0
  393. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
  394. package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +104 -0
  395. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +2 -1
  396. package/src/__tests__/render-error-code-owner.test-d.ts +4 -0
  397. package/src/__tests__/render-error-detail-ssot.test-d.ts +22 -0
  398. package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
  399. package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
  400. package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
  401. package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
  402. package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
  403. package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
  404. package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
  405. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
  406. package/src/__tests__/render-scene-projection.unit.test.ts +914 -23
  407. package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
  408. package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
  409. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
  410. package/src/__tests__/render-target-material-source.test-d.ts +27 -3
  411. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +61 -1
  412. package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
  413. package/src/__tests__/shader-manifest-fixture.ts +39 -0
  414. package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
  415. package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
  416. package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
  417. package/src/__tests__/skinned-shadow-caster.test.ts +118 -14
  418. package/src/__tests__/specular-environment-scale.dawn.test.ts +156 -0
  419. package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
  420. package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
  421. package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
  422. package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
  423. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +91 -0
  424. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +112 -0
  425. package/src/__tests__/ssr-gpu-dispatch.ts +946 -0
  426. package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
  427. package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
  428. package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
  429. package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
  430. package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
  431. package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
  432. package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
  433. package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
  434. package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
  435. package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
  436. package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
  437. package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
  438. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
  439. package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
  440. package/src/__tests__/ssr-reprojection-probe.ts +90 -0
  441. package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
  442. package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
  443. package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
  444. package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
  445. package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
  446. package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
  447. package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
  448. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +44 -12
  449. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
  450. package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
  451. package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
  452. package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
  453. package/src/__tests__/standard-output.browser.test.ts +15 -0
  454. package/src/__tests__/standard-output.dawn.test.ts +15 -0
  455. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +38 -0
  456. package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
  457. package/src/__tests__/standard-profile-oracle.unit.test.ts +22 -0
  458. package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
  459. package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
  460. package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
  461. package/src/__tests__/taa-coverage-edge.dawn.test.ts +193 -0
  462. package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
  463. package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +778 -0
  464. package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
  465. package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
  466. package/src/__tests__/taa-stability-feedback.ts +341 -0
  467. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
  468. package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
  469. package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
  470. package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
  471. package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
  472. package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
  473. package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
  474. package/src/__tests__/visibility-extract.perf.test.ts +20 -8
  475. package/src/__tests__/visibility-instances.integration.test.ts +19 -7
  476. package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
  477. package/src/assembly/atmosphere-shader-prewarm.ts +38 -0
  478. package/src/assembly/dynamic-geometry-host.ts +887 -0
  479. package/src/assembly/dynamic-geometry-runtime.ts +71 -0
  480. package/src/assembly/factory.ts +4 -0
  481. package/src/assembly/gpu-driven-owner.ts +29 -0
  482. package/src/assembly/host-contract.ts +36 -0
  483. package/src/assembly/material/assembly.ts +38 -0
  484. package/src/assembly/material-shader-policy.ts +71 -28
  485. package/src/assembly/recovery/failure-location.ts +62 -0
  486. package/src/assembly/recovery/renderer-recover.ts +19 -17
  487. package/src/assembly/renderer-facade.ts +29 -0
  488. package/src/assembly/renderer-feature-inspection.ts +13 -0
  489. package/src/assembly/renderer-frame-transaction.ts +63 -0
  490. package/src/assembly/renderer-helpers.ts +26 -0
  491. package/src/assembly/renderer-inspection.ts +6 -0
  492. package/src/assembly/shader-prewarm-policy.ts +32 -0
  493. package/src/assembly/skin-palette-owner.ts +21 -0
  494. package/src/assembly/ssr-shader-prewarm.ts +41 -0
  495. package/src/assembly/webgpu-device-loss.ts +75 -0
  496. package/src/assembly/webgpu-pbr-ready.ts +232 -0
  497. package/src/assembly/webgpu-ready-mipmap.ts +26 -0
  498. package/src/assembly/webgpu-ready.ts +142 -121
  499. package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
  500. package/src/assembly/webgpu-renderer-contract.ts +69 -0
  501. package/src/assembly/webgpu-renderer-guards.ts +32 -0
  502. package/src/assembly/webgpu-renderer-observation.ts +43 -0
  503. package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
  504. package/src/assembly/webgpu-renderer.ts +675 -614
  505. package/src/assembly/webgpu-vertex-layouts.ts +233 -87
  506. package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
  507. package/src/components/camera.ts +287 -7
  508. package/src/components/index.ts +1 -0
  509. package/src/components/instances.ts +45 -18
  510. package/src/components/scene-instance.ts +2 -1
  511. package/src/components/screen-space-reflection.ts +21 -0
  512. package/src/components/sprite-animation.ts +3 -3
  513. package/src/components/sprite-instances.ts +1 -1
  514. package/src/device/gpu-residency.ts +96 -93
  515. package/src/device/mesh-residency-lifetime.ts +73 -0
  516. package/src/dynamic-geometry.ts +736 -0
  517. package/src/environment/background.ts +263 -0
  518. package/src/errors/gpu-driven.ts +39 -5
  519. package/src/errors/render.ts +27 -3
  520. package/src/extract/camera.ts +26 -1
  521. package/src/extract/gpu-driven.ts +185 -10
  522. package/src/features/host.ts +237 -19
  523. package/src/features/noise-texture.ts +91 -0
  524. package/src/features/plan.ts +553 -24
  525. package/src/features/prepared-gpu-work.ts +631 -49
  526. package/src/features/prepared-graphics-store.ts +31 -0
  527. package/src/features/prepared-graphics.ts +5 -0
  528. package/src/features/render-graph-compute.ts +41 -8
  529. package/src/features/render-graph-contribution.ts +141 -3
  530. package/src/features/render-graph-raster.ts +143 -30
  531. package/src/features/types.ts +11 -0
  532. package/src/fullscreen-post-process-pass.ts +3 -0
  533. package/src/gpu-driven/batch-topology.ts +424 -102
  534. package/src/gpu-driven/pbr-program.ts +31 -0
  535. package/src/gpu-driven/prepared-draw.ts +29 -4
  536. package/src/gpu-driven/production-raster.ts +2267 -694
  537. package/src/gpu-driven/shadow-views.ts +539 -0
  538. package/src/gpu-driven/view-gpu.ts +188 -41
  539. package/src/gpu-scene-schema.ts +52 -11
  540. package/src/gpu-scene.ts +186 -99
  541. package/src/gpu-texture-usage.ts +1 -0
  542. package/src/hdrp-buffers.ts +72 -36
  543. package/src/ibl/frame-resources.ts +38 -0
  544. package/src/ibl/skylight-bind-group.ts +5 -4
  545. package/src/index.ts +125 -1
  546. package/src/inspection-types.ts +191 -0
  547. package/src/instances-derived-bounds.ts +258 -34
  548. package/src/instances.ts +459 -150
  549. package/src/internal.ts +22 -0
  550. package/src/lifecycle.ts +2 -0
  551. package/src/material-row.ts +145 -0
  552. package/src/materials.ts +44 -8
  553. package/src/pbr-pipeline.ts +159 -17
  554. package/src/pipeline/standard-forward-lane.ts +52 -24
  555. package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
  556. package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
  557. package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
  558. package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
  559. package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
  560. package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
  561. package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
  562. package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
  563. package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
  564. package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
  565. package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
  566. package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
  567. package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
  568. package/src/pipeline/standard-output/color-transform.ts +124 -0
  569. package/src/pipeline/standard-output/graph.ts +139 -0
  570. package/src/pipeline/standard-output/lut-admission.ts +121 -0
  571. package/src/pipeline/standard-output/lut-gpu.ts +399 -0
  572. package/src/pipeline/standard-output/lut-state.ts +176 -0
  573. package/src/pipeline/standard-output/resources.ts +121 -0
  574. package/src/pipeline/standard-output/types.ts +58 -0
  575. package/src/pipeline/standard-pipeline.ts +192 -59
  576. package/src/pipeline/standard-post.ts +186 -27
  577. package/src/pipeline-builder.ts +16 -6
  578. package/src/pipeline-spec-types.ts +4 -0
  579. package/src/pipeline-spec.ts +37 -29
  580. package/src/points-lines/standard-owner.ts +6 -14
  581. package/src/prepare/prepared-graphics-resolver.ts +9 -2
  582. package/src/record/__tests__/material-slot-plan.unit.test.ts +48 -0
  583. package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
  584. package/src/record/__tests__/recovery-pipeline.unit.test.ts +2 -29
  585. package/src/record/__tests__/sprite-material-abi.unit.test.ts +36 -5
  586. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
  587. package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
  588. package/src/record/dynamic-geometry-consumption.ts +59 -0
  589. package/src/record/frame-lighting.ts +12 -11
  590. package/src/record/frame-snapshot.ts +133 -23
  591. package/src/record/frame-targets.ts +9 -0
  592. package/src/record/frame.ts +727 -133
  593. package/src/record/main-pass-geometry.ts +162 -98
  594. package/src/record/main-pass-material.ts +115 -26
  595. package/src/record/main-pass-sprite-draws.ts +18 -107
  596. package/src/record/main-pass.ts +78 -8
  597. package/src/record/material-uniforms.ts +1 -1
  598. package/src/record/mesh-ssbo.ts +59 -15
  599. package/src/record/prepared-material-bindings.ts +234 -0
  600. package/src/record/recovery-pipeline.ts +59 -136
  601. package/src/record/render-context.ts +92 -22
  602. package/src/record/shadow-pass.ts +1231 -209
  603. package/src/record/skybox-post-pass.ts +14 -3
  604. package/src/record/typed-frame-graph.ts +1006 -53
  605. package/src/record/view-ubo.ts +11 -0
  606. package/src/recovery/render-system-candidate.ts +90 -66
  607. package/src/recovery/render-system-roots.ts +113 -0
  608. package/src/recovery/types.ts +77 -0
  609. package/src/reflection/record-owner.ts +26 -54
  610. package/src/render-contract.ts +219 -25
  611. package/src/render-graph-primitives.ts +6 -2
  612. package/src/render-pipeline.ts +70 -1
  613. package/src/render-system-extract-tail.ts +409 -160
  614. package/src/render-system-extract.ts +376 -102
  615. package/src/render-system-projections.ts +241 -0
  616. package/src/render-system.ts +692 -791
  617. package/src/scene/render-scene-types.ts +13 -4
  618. package/src/scene/render-scene.ts +569 -355
  619. package/src/scene/shadow-visibility.ts +21 -0
  620. package/src/ssr/admission.ts +380 -14
  621. package/src/ssr/compose.ts +144 -0
  622. package/src/ssr/errors.ts +48 -0
  623. package/src/ssr/graph.ts +777 -0
  624. package/src/ssr/history.ts +436 -0
  625. package/src/ssr/hiz.ts +124 -0
  626. package/src/ssr/inspection.ts +124 -0
  627. package/src/ssr/resources.ts +202 -0
  628. package/src/ssr/temporal.ts +164 -0
  629. package/src/systems/skin-palette-allocator.ts +495 -148
  630. package/src/systems/skin-palette-types.ts +17 -0
  631. package/src/systems/transparent-dispatch.ts +90 -0
  632. package/src/targets/material-source.ts +34 -0
  633. package/src/temporal/coverage.ts +1 -1
  634. package/src/temporal/frame-coordinator.ts +23 -2
  635. package/src/temporal/gpu.ts +74 -12
  636. package/src/temporal/history.ts +3 -1
  637. package/src/temporal/inspection.ts +2 -1
  638. package/src/temporal/standard-scene-data.ts +3 -1
  639. package/src/temporal/temporal-view.ts +3 -0
  640. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +204 -139
  641. package/src/typed-render-graph-primitives.ts +266 -74
  642. package/src/typed-shadow-passes.ts +122 -12
  643. package/src/volume/temporal.ts +10 -0
  644. package/dist/chunk-ADHHVYLW.mjs.map +0 -1
  645. package/dist/chunk-FJ6P52EE.mjs.map +0 -1
  646. package/dist/chunk-GE3SDD72.mjs.map +0 -1
  647. package/dist/chunk-GF523LHF.mjs.map +0 -1
  648. package/dist/chunk-HKXTW355.mjs.map +0 -1
  649. package/dist/chunk-JDWARUOI.mjs.map +0 -1
  650. package/dist/chunk-KM2NOX2I.mjs.map +0 -1
  651. package/dist/chunk-TMIASV2N.mjs.map +0 -1
  652. package/dist/chunk-XDP6XE5V.mjs.map +0 -1
  653. package/dist/chunk-ZZ4YQ474.mjs.map +0 -1
  654. package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
  655. package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
@@ -24,8 +24,10 @@ import type {
24
24
  import type { SkinError } from '@forgeax/engine-skinning';
25
25
  import type { ImageError } from '@forgeax/engine-types';
26
26
  import type { RhiBackendInstrumentation } from './assembly/backend-contract';
27
- import type { Antialias, BloomEnabled, Tonemap } from './components/camera';
27
+ import type { Antialias, BloomEnabled, CameraExposure, Tonemap } from './components/camera';
28
+ import type { ScreenSpaceReflectionData } from './components/screen-space-reflection';
28
29
  import type { EnvironmentInspection } from './environment/inspection';
30
+ import type { GpuDrivenPreparationError } from './errors/gpu-driven';
29
31
  import type { RecoveryOutcome, RecoveryPhase } from './errors/recover';
30
32
  import type { RenderError } from './errors/render';
31
33
  import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
@@ -37,12 +39,16 @@ import type {
37
39
  LodOcclusionInspection,
38
40
  MotionBlurInspection,
39
41
  ReflectionProbeInspection,
42
+ RenderFeatureGraphInspection,
43
+ RenderFeatureHostInspection,
40
44
  RenderSceneInspection,
41
45
  SsrDependenciesInspection,
46
+ SsrSpatialInspection,
42
47
  TemporalTargetInspection,
43
48
  TransmissionInspection,
44
49
  } from './inspection-types';
45
- import type { InstanceCollectionInspection } from './instances';
50
+ import type { InstanceCollectionInspection, InstanceCollectionStore } from './instances';
51
+ import type { RenderSceneBounds } from './scene/render-scene-types';
46
52
  import type { SsrAdmissionIdentity } from './ssr/identity';
47
53
  import type {
48
54
  RenderTarget,
@@ -58,11 +64,21 @@ import type { TemporalInspection } from './temporal/inspection';
58
64
  export type { TransmissionInspection } from './inspection-types';
59
65
  export type { PointsLinesInspection } from './points-lines/inspection';
60
66
 
67
+ import type {
68
+ DynamicGeometryCandidate,
69
+ DynamicGeometryError,
70
+ DynamicGeometryInspection,
71
+ DynamicGeometryOrdering,
72
+ DynamicGeometryPrepareInput,
73
+ DynamicGeometryReceipt,
74
+ } from './dynamic-geometry';
61
75
  import type {
62
76
  IblBindingInspection,
63
77
  MeshMaterialBindingObservation,
64
78
  } from './mesh-material-bindings';
65
79
  import type { StandardLightingInspection } from './pipeline/standard-lighting/inspection';
80
+ import type { AutoExposureInspection } from './pipeline/standard-output/auto-exposure/inspection';
81
+ import type { StandardLutInspection } from './pipeline/standard-output/lut-state';
66
82
  import type { StandardProfile } from './pipeline/standard-profile';
67
83
  import type { PointShadowInspection } from './point-shadow-inspection';
68
84
  import type { PostProcessError } from './post-process-errors';
@@ -97,6 +113,15 @@ export type RenderResult<T, E> =
97
113
  /** The only World data boundary accepted by the M6 renderer contract. */
98
114
  export type RenderWorldLease = RenderReadLease;
99
115
 
116
+ /** Camera-owned color/exposure facts projected once at the frame boundary. */
117
+ export interface CameraOutputSnapshot {
118
+ readonly exposure: CameraExposure;
119
+ readonly temperature: number;
120
+ readonly tint: number;
121
+ readonly colorLut: number;
122
+ readonly colorLutStrength: number;
123
+ }
124
+
100
125
  /**
101
126
  * Camera facts shared by extract, record, and scene owners.
102
127
  *
@@ -130,12 +155,16 @@ export interface CameraSnapshot {
130
155
  readonly tonemap: Tonemap;
131
156
  readonly exposure: number;
132
157
  readonly whitePoint: number;
158
+ /** Camera schema output projection consumed by Standard prepare/inspection. */
159
+ readonly output?: CameraOutputSnapshot;
133
160
  readonly antialias: Antialias;
134
161
  readonly bloom: BloomEnabled;
135
162
  readonly bloomThreshold: number;
136
163
  readonly bloomIntensity: number;
137
164
  readonly bloomBlurRadius: number;
138
165
  readonly clearColor: readonly [number, number, number, number];
166
+ /** Optional active-camera SSR authoring fact, copied from the ECS schema. */
167
+ readonly screenSpaceReflection?: ScreenSpaceReflectionData;
139
168
  /** Renderer-owned temporal projection used by Standard's TAA producer. */
140
169
  readonly temporal?: TemporalView;
141
170
  /** Active-camera motion blur parameters, present only when demanded. */
@@ -180,8 +209,43 @@ interface RenderPipelineStateView {
180
209
  * RenderSystemRuntime structurally satisfies this contract, but the public
181
210
  * frame surface does not depend on that assembly owner.
182
211
  */
212
+ interface RenderPipelineObservationCapture {
213
+ readonly domain: 'linear-hdr' | 'linear-ldr' | 'final-srgb';
214
+ readonly format: TextureFormat;
215
+ readonly device: RhiDevice;
216
+ readonly texture: Texture;
217
+ readonly buffer: Buffer;
218
+ readonly frameNumber: number;
219
+ readonly deviceGeneration: number;
220
+ readonly graphGeneration: number;
221
+ readonly backendId: string;
222
+ readonly width: number;
223
+ readonly height: number;
224
+ readonly bytesPerRow: number;
225
+ }
226
+
227
+ interface RenderPipelineObservationCaptureOwner {
228
+ readonly register: (capture: RenderPipelineObservationCapture) => void;
229
+ readonly consume: (frameNumber: number) => readonly RenderPipelineObservationCapture[];
230
+ readonly drain: () => readonly RenderPipelineObservationCapture[];
231
+ }
232
+
183
233
  interface RenderPipelineRuntime {
184
234
  readonly device: RhiDevice;
235
+ /** Current renderer device generation used to fence graph captures. */
236
+ readonly deviceGeneration?: number | undefined;
237
+ /** Public receipt identity reserved for the frame currently being encoded. */
238
+ readonly observationFrameId?: number | undefined;
239
+ /** Renderer-issued graph fence populated by the graph owner during encoding. */
240
+ observationGraphGeneration?: number | undefined;
241
+ /** Per-renderer bridge for receipt-bound graph color captures. */
242
+ readonly observationCaptureOwner?: RenderPipelineObservationCaptureOwner | undefined;
243
+ /**
244
+ * Domains armed for the frame currently being encoded. An absent or empty
245
+ * set is the normal zero-cost path; typed graph capture passes remain
246
+ * declared for topology inspection but do not allocate or copy anything.
247
+ */
248
+ readonly observationCaptureDomains?: readonly FrameObservationDomain[] | undefined;
185
249
  /** Runtime-owned shader module factory used by built-in graph producers. */
186
250
  readonly shaderModuleFactory?: {
187
251
  createShaderModule(input: {
@@ -192,6 +256,16 @@ interface RenderPipelineRuntime {
192
256
  RhiError
193
257
  >;
194
258
  };
259
+ /** Immediate factory used by same-frame built-in producers after runtime warm-up. */
260
+ readonly immediateShaderModuleFactory?: {
261
+ createShaderModule(input: {
262
+ readonly code: string;
263
+ readonly label?: string | undefined;
264
+ }): import('@forgeax/engine-types').Result<
265
+ import('@forgeax/engine-rhi').ShaderModule,
266
+ RhiError
267
+ >;
268
+ };
195
269
  readonly errorRegistry: { fire(error: RendererError): void };
196
270
  readonly debugOverlay?: RenderDebugOverlay | undefined;
197
271
  readonly lookupPostProcess?: (id: string) => PostProcessShaderEntry | undefined;
@@ -199,7 +273,7 @@ interface RenderPipelineRuntime {
199
273
  readonly getPostProcessPipeline?: (
200
274
  id: string,
201
275
  bgl: BindGroupLayout,
202
- colorFormat: GPUTextureFormat,
276
+ colorFormats: readonly GPUTextureFormat[],
203
277
  entry?: PostProcessShaderEntry,
204
278
  ) => RhiRenderPipeline | null;
205
279
  }
@@ -242,6 +316,10 @@ export interface RenderPipelineContext {
242
316
  readonly spotLightProjector?: SpotLightProjectorFrameContext;
243
317
  /** Build-time composed utility sources for the renderer-owned volume passes. */
244
318
  readonly volumetricFogShaders?: VolumetricFogShaderSources;
319
+ /** Build-time composed utility sources for the renderer-owned SSR passes. */
320
+ readonly ssrShaders?: SsrShaderSources;
321
+ /** Build-time composed utility sources for the renderer-owned atmosphere passes. */
322
+ readonly atmosphereShaders?: AtmosphereShaderSources;
245
323
  }
246
324
 
247
325
  /** Stable utility entry-point sources emitted by the shader manifest. */
@@ -252,6 +330,21 @@ export interface VolumetricFogShaderSources {
252
330
  readonly composite: string;
253
331
  }
254
332
 
333
+ /** Stable utility entry-point sources emitted by the shader manifest. */
334
+ export interface SsrShaderSources {
335
+ readonly hiz: string;
336
+ readonly hizReduce: string;
337
+ readonly trace: string;
338
+ readonly temporal: string;
339
+ readonly compose: string;
340
+ }
341
+
342
+ /** Stable analytic-atmosphere entry-point sources emitted by the shader manifest. */
343
+ export interface AtmosphereShaderSources {
344
+ readonly cube: string;
345
+ readonly background: string;
346
+ }
347
+
255
348
  /**
256
349
  * GPU resources for one validated volumetric-fog candidate. The record stage
257
350
  * owns residency and parameter uploads; graph passes consume this narrow view
@@ -296,8 +389,33 @@ export interface SpotLightProjectorFrameContext {
296
389
  */
297
390
  export interface Renderer {
298
391
  /** Renderer-owned authoring and update path for large instance collections. */
392
+ readonly instances: InstanceCollectionStore;
299
393
  attach(world: World): RenderResult<RenderWorldLease, RenderError>;
394
+ /** Prepare a standard MeshAsset for the active device generation. */
395
+ prepareDynamicGeometry(
396
+ input: DynamicGeometryPrepareInput,
397
+ ): Result<DynamicGeometryCandidate, DynamicGeometryError>;
398
+ /** Admit a prepared candidate; publication is tied to the next FrameReceipt. */
399
+ acceptDynamicGeometry(
400
+ candidate: DynamicGeometryCandidate,
401
+ ordering: DynamicGeometryOrdering,
402
+ ): Result<DynamicGeometryCandidate, DynamicGeometryError>;
403
+ dynamicGeometryReceipt(candidate: DynamicGeometryCandidate): DynamicGeometryReceipt | undefined;
404
+ cancelDynamicGeometry(candidate: DynamicGeometryCandidate): Result<void, DynamicGeometryError>;
405
+ retireDynamicGeometry(candidate: DynamicGeometryCandidate): Result<void, DynamicGeometryError>;
300
406
  draw(input: RenderFrameInput): RenderResult<FrameReceipt, RenderError>;
407
+ /**
408
+ * Arm one upcoming submitted frame for explicit color-domain observation.
409
+ * Observation buffers are not created, copied, mapped, or retained until a
410
+ * host calls this method before `draw()`. The demand is consumed only by a
411
+ * successful submit; a failed frame keeps it armed for a retry.
412
+ *
413
+ * This optional extension keeps older injected Renderer test doubles source
414
+ * compatible while concrete Engine renderers always implement it.
415
+ */
416
+ requestObservation?: (
417
+ domains: readonly FrameObservationDomain[],
418
+ ) => RenderResult<void, RenderError>;
301
419
  createRenderTarget(descriptor: RenderTargetDescriptor): RenderResult<RenderTarget, RenderError>;
302
420
  resizeRenderTarget(
303
421
  target: RenderTarget,
@@ -314,6 +432,8 @@ export interface Renderer {
314
432
  destroyRenderTarget(target: RenderTarget): RenderResult<void, RenderError>;
315
433
  setProfile(profile: RenderProfile): RenderResult<void, RenderError>;
316
434
  state(): RendererState;
435
+ /** Detached world bounds for one record in the last extracted World; undefined if unavailable. */
436
+ bounds(world: World, entity: number): RenderSceneBounds | undefined;
317
437
  inspect(): RenderInspection;
318
438
  observe(
319
439
  receipt: FrameReceipt,
@@ -351,6 +471,8 @@ export type RendererEvent =
351
471
  readonly kind: 'frame-submitted';
352
472
  readonly frameId: number;
353
473
  readonly deviceGeneration: number;
474
+ /** The exact receipt returned by the renderer's submit boundary. */
475
+ readonly receipt: FrameReceipt;
354
476
  };
355
477
 
356
478
  /** Package-local listener alias used by the renderer assembly implementation. */
@@ -380,8 +502,17 @@ export interface FrameEnvironment {
380
502
  * only with the matching FrameReceipt after `receipt.completed` and returns a
381
503
  * structured Result error when the generation or frame identity is stale.
382
504
  */
505
+ export type FrameObservationDomain = 'linear-hdr' | 'linear-ldr' | 'final-srgb';
506
+
507
+ export type FrameObservationInclude =
508
+ | 'timings'
509
+ | 'draws'
510
+ | 'bindings'
511
+ | 'target-readbacks'
512
+ | FrameObservationDomain;
513
+
383
514
  export interface FrameObservationRequest {
384
- readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
515
+ readonly include: readonly FrameObservationInclude[];
385
516
  readonly targetReadbacks?: readonly RenderTargetReadbackTicket[];
386
517
  }
387
518
 
@@ -394,6 +525,10 @@ export interface FrameObservationRequest {
394
525
  export interface FrameReceipt {
395
526
  readonly frameId: number;
396
527
  readonly deviceGeneration: number;
528
+ /** Backend identity captured at submit and checked before observation. */
529
+ readonly backendId?: RhiCaps['backendKind'];
530
+ /** Monotonic compiled graph identity used by renderer-issued observations. */
531
+ readonly graphGeneration?: number;
397
532
  readonly completed: Promise<RenderResult<void, RenderError>>;
398
533
  }
399
534
 
@@ -406,6 +541,8 @@ export interface RenderFrameInput {
406
541
  readonly leases: readonly RenderWorldLease[];
407
542
  readonly camera: FrameCamera;
408
543
  readonly environment: FrameEnvironment;
544
+ /** Fixed-step publication consumed by dynamic geometry candidates. */
545
+ readonly fixedStep?: number;
409
546
  /** Optional profiler correlation token owned by App and consumed by Render. */
410
547
  readonly profileFrame?: ProfileFrameToken;
411
548
  }
@@ -414,16 +551,44 @@ export interface RenderFrameInput {
414
551
  export interface FrameReceiptObservation {
415
552
  readonly frameId: number;
416
553
  readonly deviceGeneration: number;
417
- readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
554
+ readonly include: readonly FrameObservationInclude[];
418
555
  /** Receipt-bound Render-owned GPU pass facts; absent when not requested. */
419
556
  readonly timings?: GpuPassTimingObservation | undefined;
420
557
  /** Receipt-bound volume GPU timing facts; absent when not requested. */
421
558
  readonly volumeTimings?: VolumeTimingObservation | undefined;
422
559
  readonly targetReadbacks?: readonly RenderTargetReadbackData[];
560
+ /** Independent raw bytes captured from the requested linear/display domains. */
561
+ readonly observations?: readonly FrameDomainObservation[] | undefined;
562
+ }
563
+
564
+ export interface FrameDomainObservation {
565
+ readonly domain: FrameObservationDomain;
566
+ readonly bytes: Uint8Array;
567
+ readonly metadata: {
568
+ readonly frameId: number;
569
+ readonly deviceGeneration: number;
570
+ readonly backendId?: RhiCaps['backendKind'];
571
+ /** Native texture format of the copied attachment, including BGRA order. */
572
+ readonly format: TextureFormat;
573
+ readonly graphGeneration: number;
574
+ readonly textureIdentity: number;
575
+ readonly readbackIdentity: number;
576
+ readonly width: number;
577
+ readonly height: number;
578
+ readonly bytesPerRow: number;
579
+ readonly footprint: {
580
+ readonly resourceCount: number;
581
+ readonly bindGroupCount: number;
582
+ };
583
+ };
423
584
  }
424
585
 
425
586
  /** Stable backend facts for the Standard output transform projection. */
426
587
  export interface RenderOutputInspection {
588
+ /** Camera-owned auto-exposure facts, detached from GPU state when available. */
589
+ readonly autoExposure?: AutoExposureInspection;
590
+ /** Renderer-owned detached LUT residency and receipt facts. */
591
+ readonly standardLut?: StandardLutInspection;
427
592
  readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
428
593
  readonly displayEncoded: boolean;
429
594
  readonly intermediateFormat?: TextureFormat;
@@ -471,6 +636,15 @@ export interface RenderObservationInspection {
471
636
  /** Exact pass names and target descriptor from the committed graph. */
472
637
  readonly passNames: readonly string[];
473
638
  readonly standardOutputColor?: RenderStandardOutputColorInspection;
639
+ /** Monotonic, renderer-owned observation resource facts; no GPU handles. */
640
+ readonly resourceStats?: {
641
+ readonly allocationCount: number;
642
+ readonly liveCount: number;
643
+ readonly peakLiveCount: number;
644
+ readonly mapCount: number;
645
+ readonly readbackCount: number;
646
+ readonly liveByteLength: number;
647
+ };
474
648
  }
475
649
 
476
650
  /**
@@ -509,14 +683,24 @@ export interface RenderInspection {
509
683
  readonly features: readonly string[];
510
684
  /** Truthful lifecycle facts for every registered declarative feature. */
511
685
  readonly featureDiagnostics: readonly RenderFeatureDiagnostics[];
686
+ /** Detached signature and prepared-resource counters for feature planning. */
687
+ readonly featureHost?: RenderFeatureHostInspection;
688
+ /** Detached typed-graph compile/reuse and candidate lifecycle counters. */
689
+ readonly featureGraph?: RenderFeatureGraphInspection;
690
+ /** Detached material texture-source probe counters from the last extract. */
691
+ readonly materialTextureSources?: import('./inspection-types').MaterialTextureSourceInspection;
512
692
  readonly frustumStats: { readonly culled: number; readonly total: number };
513
693
  readonly visibilityStats: { readonly explicitlyHidden: number };
514
694
  /** Renderer-owned large-instance residency and upload facts. */
515
695
  readonly instanceCollections: readonly InstanceCollectionInspection[];
696
+ /** Standard MeshAsset dynamic-candidate lifecycle facts. */
697
+ readonly dynamicGeometry?: DynamicGeometryInspection;
516
698
  readonly renderScene: RenderSceneInspection;
517
699
  readonly reflectionProbes: ReflectionProbeInspection;
518
700
  /** Renderer-owned SSR dependency seam; consumer facts are projected from live owners. */
519
701
  readonly ssrDependencies: SsrDependenciesInspection;
702
+ /** Renderer-owned SSR spatial status and bounded execution facts. */
703
+ readonly ssr: SsrSpatialInspection;
520
704
  /** Last completed transmission candidate facts, detached from GPU handles. */
521
705
  readonly transmission?: TransmissionInspection;
522
706
  /** Last prepared Standard transport facts, detached from GPU handles. */
@@ -559,16 +743,12 @@ export interface RenderInspection {
559
743
  readonly lastGeneration: number | undefined;
560
744
  };
561
745
  };
562
- /** Output transform facts; never includes fixture metrics or pixel bytes. */
563
- readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
564
- readonly displayEncoded: boolean;
565
- readonly intermediateFormat?: TextureFormat;
566
- readonly surfaceStorage: TextureFormat;
567
- readonly surfaceDisplay: TextureFormat;
568
- readonly endpoint: 'surface.storage.raw';
569
- readonly capability: RenderOutputInspection['capability'];
570
- readonly presentationProof?: RhiCanvasSurfacePresentationProof;
571
- readonly error: RenderOutputInspection['error'];
746
+ /**
747
+ * Output-transform facts from the same committed graph and physical surface.
748
+ * Keep this as one named subtree so AI consumers do not have to guess which
749
+ * detached fields belong to the output contract versus renderer lifecycle.
750
+ */
751
+ readonly output: RenderOutputInspection;
572
752
  readonly observation: RenderObservationInspection;
573
753
  readonly environment: EnvironmentInspection;
574
754
  readonly temporal: TemporalInspection;
@@ -602,6 +782,8 @@ export interface RenderInspection {
602
782
  export type DrawOwnerOptions = {
603
783
  readonly cameraOwner: number;
604
784
  readonly resourceOwner: number;
785
+ /** Optional FrameCamera entity selection; absent preserves ActiveCamera semantics. */
786
+ readonly cameraEntityKey?: number;
605
787
  readonly profileFrame?: ProfileFrameToken;
606
788
  };
607
789
 
@@ -625,17 +807,18 @@ export type RendererLostListener = (info: RendererLostInfo) => void;
625
807
  * exception), NOT the eliminated cross-cluster `RuntimeError` SSOT (D-3).
626
808
  *
627
809
  * Composition = `RhiError | RenderError | AssetRuntimeError | SkinError |
628
- * PostProcessError`. This equals the pre-decomposition
629
- * `RhiError | RuntimeError | PostProcessError` exactly: `RuntimeError` was
630
- * `RenderError | AssetRuntimeError | SkinError` (27 classes). `RecoverError`
631
- * and `EngineEnvironmentError` are intentionally excluded neither is ever
632
- * emitted through the Renderer event stream (`RecoverError` returns from `recover()`,
633
- * `EngineEnvironmentError` throws at construction), matching the original
634
- * `RuntimeError` union which excluded both (OOS-3 behavior equivalence).
810
+ * GpuDrivenPreparationError | PostProcessError`. The GPU preparation arm is
811
+ * the renderer-owned producer contract: its closed `code` and typed `detail`
812
+ * identify the material, geometry, skin, generation, or shadow owner without making
813
+ * RHI errors carry render policy. `RecoverError` and `EngineEnvironmentError`
814
+ * are intentionally excluded neither is ever emitted through the Renderer
815
+ * event stream (`RecoverError` returns from `recover()`,
816
+ * `EngineEnvironmentError` throws at construction).
635
817
  *
636
818
  * AI consumers do `switch (err.code)` over the union: the disjoint
637
819
  * `RhiErrorCode` / `RenderErrorCode` / `AssetRuntimeErrorCode` / `SkinErrorCode`
638
- * / `PostProcessErrorCode` literal sets let TS narrow each arm to the concrete
820
+ * / `GpuDrivenPreparationErrorCode` / `PostProcessErrorCode` literal sets let
821
+ * TS narrow each arm to the concrete
639
822
  * class (charter P3 union discoverability — every fan-out member is reachable
640
823
  * in an exhaustive switch, no untyped escape). Example:
641
824
  *
@@ -646,7 +829,8 @@ export type RendererLostListener = (info: RendererLostInfo) => void;
646
829
  * case 'asset-not-registered': // AssetRuntimeError arm, err narrowed here
647
830
  * return report(err.hint);
648
831
  * // ...one arm per RhiErrorCode | RenderErrorCode | AssetRuntimeErrorCode
649
- * // | SkinErrorCode | PostProcessErrorCode member; no default needed,
832
+ * // | SkinErrorCode | GpuDrivenPreparationErrorCode |
833
+ * // PostProcessErrorCode member; no default needed,
650
834
  * // TS flags every unhandled code at compile time.
651
835
  * }
652
836
  * });
@@ -657,6 +841,7 @@ export type RendererError =
657
841
  | RenderGraphError
658
842
  | ImageError
659
843
  | RenderError
844
+ | GpuDrivenPreparationError
660
845
  | AssetRuntimeError
661
846
  | SkinError
662
847
  | PostProcessError;
@@ -701,6 +886,11 @@ export const RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
701
886
  'record/graph-execute/bloom-blur-h',
702
887
  'record/graph-execute/bloom-blur-v',
703
888
  'record/graph-execute/bloom-composite',
889
+ 'record/graph-execute/ssr-hiz',
890
+ 'record/graph-execute/ssr-trace',
891
+ 'record/graph-execute/ssr-temporal',
892
+ 'record/graph-execute/ssr-reflection-mip',
893
+ 'record/graph-execute/ssr-compose',
704
894
  'record/graph-execute/other',
705
895
  ] as const;
706
896
 
@@ -794,7 +984,11 @@ export interface RendererOptions {
794
984
  readonly rhiInstrumentation?: RhiBackendInstrumentation | undefined;
795
985
  /** Optional bounded GPU pass timing facts; this is not frame latency. */
796
986
  readonly gpuPassTiming?: GpuPassTimingOptions | undefined;
797
- /** Exact source/tree/lock/build identity binding for the renderer-owned SSR seam. */
987
+ /**
988
+ * Exact source/tree/lock/build identity binding for the renderer-owned SSR seam.
989
+ * Opts into one format-capability probe during device-generation initialization;
990
+ * camera ScreenSpaceReflection still controls all per-frame SSR work.
991
+ */
798
992
  readonly ssrIdentity?: SsrAdmissionIdentity | undefined;
799
993
  // feat-20260608-create-app-param-surface-trim / M1 / AC-02: `clearColor`
800
994
  // was deleted as a one-cut breaking change (AGENTS.md Change stance +
@@ -551,6 +551,7 @@ function dispatchFullscreenPass(
551
551
  graphOutputFormat?: GPUTextureFormat,
552
552
  graphDepthView?: TextureView,
553
553
  paramsOverride?: Uint8Array,
554
+ fragmentEntryPoint?: string,
554
555
  ): void {
555
556
  if (shader === 'fxaa') {
556
557
  if (resolveCtx === undefined) {
@@ -559,7 +560,7 @@ function dispatchFullscreenPass(
559
560
  detail: { readsKey: reads[0] ?? 'ldrColor', passName: name },
560
561
  });
561
562
  }
562
- recordFxaaPass(requireRenderGraphRecordContext(ctx), resolveCtx, graphPass);
563
+ recordFxaaPass(requireRenderGraphRecordContext(ctx), resolveCtx, graphPass, paramsOverride);
563
564
  return;
564
565
  }
565
566
  const lookup = ctx.runtime.lookupPostProcess;
@@ -773,7 +774,8 @@ function dispatchFullscreenPass(
773
774
  const lookupPipeline = ctx.runtime.getPostProcessPipeline;
774
775
  if (lookupPipeline === undefined) return;
775
776
  const postColorFormat = writeFormat;
776
- const pipeline = lookupPipeline(shader, built.bindGroupLayout, postColorFormat);
777
+ const pipelineEntry = fragmentEntryPoint === undefined ? entry : { ...entry, fragmentEntryPoint };
778
+ const pipeline = lookupPipeline(shader, built.bindGroupLayout, [postColorFormat], pipelineEntry);
777
779
  if (pipeline === null) return;
778
780
  const handle = built.createHandle(name, pipeline, paramsBuffer);
779
781
 
@@ -814,6 +816,7 @@ export function encodeFullscreenPass(
814
816
  readonly rawSwapchainOutput?: boolean | undefined;
815
817
  readonly depthView?: TextureView | undefined;
816
818
  readonly paramsOverride?: Uint8Array | undefined;
819
+ readonly fragmentEntryPoint?: string | undefined;
817
820
  },
818
821
  ): void {
819
822
  dispatchFullscreenPass(
@@ -829,5 +832,6 @@ export function encodeFullscreenPass(
829
832
  input.outputFormat,
830
833
  input.depthView,
831
834
  input.paramsOverride,
835
+ input.fragmentEntryPoint,
832
836
  );
833
837
  }
@@ -17,6 +17,7 @@
17
17
  import type {
18
18
  ColorValueDomain,
19
19
  GraphAccess,
20
+ GraphBuffer,
20
21
  GraphResourceResolver,
21
22
  GraphTexture,
22
23
  GraphTextureDescriptor,
@@ -28,6 +29,7 @@ import type {
28
29
  } from '@forgeax/engine-render-graph';
29
30
  import type {
30
31
  BindGroup,
32
+ Buffer,
31
33
  RhiCaps,
32
34
  RhiError,
33
35
  RhiRenderPassEncoder,
@@ -38,6 +40,7 @@ import type { Tonemap } from './components/camera';
38
40
  import type { DirectionalShadowFilterLabel } from './components/directional-shadow-filter';
39
41
  import type { RenderError } from './errors/render';
40
42
  import type { RenderFeatureTargetKind } from './features/targets';
43
+ import type { ShadowViewIdentity, ShadowViewProjection } from './gpu-driven/shadow-views';
41
44
  import {
42
45
  GPU_TEXTURE_USAGE_COPY_SRC,
43
46
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
@@ -45,8 +48,9 @@ import {
45
48
  import type { StandardTopologyInputValue } from './pipeline/standard-lighting/topology';
46
49
  import { STANDARD_POST_STAGE_NAMES, type StandardProfile } from './pipeline/standard-profile';
47
50
  import type { SurfaceProfile } from './record/render-context';
48
- import type { RenderPipelineContext } from './render-contract';
51
+ import type { FrameObservationDomain, RenderPipelineContext } from './render-contract';
49
52
  import type { OcclusionFrameProjection } from './scene/visibility/occlusion-runtime';
53
+ import type { SsrSpatialAdmission } from './ssr/admission';
50
54
  import type { TransmissionDemand } from './transmission/projection';
51
55
 
52
56
  export type { RenderPipelineContext } from './render-contract';
@@ -216,6 +220,8 @@ export interface RenderPipelineTopology {
216
220
  * clear directly to the surface.
217
221
  */
218
222
  readonly clearOnly?: boolean | undefined;
223
+ /** Selected atmosphere requires the graph-owned sky producer and background. */
224
+ readonly atmosphere?: boolean | undefined;
219
225
  /** Whether Standard main draws carry the producer-owned fallback MRT. */
220
226
  readonly reflectionFallback?: { readonly enabled: boolean } | undefined;
221
227
  readonly surface: {
@@ -226,6 +232,19 @@ export interface RenderPipelineTopology {
226
232
  readonly profile?: SurfaceProfile | undefined;
227
233
  };
228
234
  readonly camera: Pick<RenderPipelineContext['camera'], 'tonemap' | 'antialias' | 'bloom'>;
235
+ /** Frame-stable Standard output policy; no raw RHI handles enter topology. */
236
+ readonly output?: {
237
+ readonly autoExposure: boolean;
238
+ /** Camera-owned Bradford white balance is part of the same output pass. */
239
+ readonly whiteBalance?: boolean;
240
+ readonly temperature?: number;
241
+ readonly tint?: number;
242
+ readonly colorLut: boolean;
243
+ readonly colorLutStrength: number;
244
+ readonly lutSourceKey?: string;
245
+ };
246
+ /** Detached spatial SSR admission; graph resources remain renderer-owned. */
247
+ readonly ssr?: SsrSpatialAdmission | undefined;
229
248
  readonly temporal?: {
230
249
  readonly taa: boolean;
231
250
  readonly motionBlur: boolean;
@@ -425,11 +444,25 @@ export interface RenderPipelineGpuDrivenProjection {
425
444
  viewBindGroup: BindGroup,
426
445
  pass: RhiRenderPassEncoder,
427
446
  resources: GraphResourceResolver,
447
+ frameResources: GpuDrivenStandardPbrFrameResources,
428
448
  ): void;
429
449
  }
430
450
 
451
+ /** Producer-owned Standard PBR resources resolved during graph execution. */
452
+ export interface GpuDrivenStandardPbrFrameResources {
453
+ readonly materialBindGroups: (BindGroup | undefined)[];
454
+ /** Frame-global material slots keyed by the retained scene entity identity. */
455
+ readonly materialSlotIndicesByEntity: Map<number, readonly number[]>;
456
+ readonly instancesBindGroup: BindGroup;
457
+ readonly materialStride: number;
458
+ /** Exact producer-owned numeric Material table consumed by scene-index PBR. */
459
+ readonly sceneMaterialBuffer: Buffer;
460
+ }
461
+
431
462
  export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame> {
432
463
  readonly graph: RenderGraphBuilder<FrameCtx>;
464
+ /** Explicit receipt-bound color domains requested for this frame. */
465
+ readonly observationCaptureDomains?: readonly FrameObservationDomain[] | undefined;
433
466
  /**
434
467
  * The single prepared Standard lighting projection for this frame. The
435
468
  * Forward and Deferred adapters consume this value; they never inspect raw
@@ -442,6 +475,23 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
442
475
  * inferring rgba16float support from the selected surface format.
443
476
  */
444
477
  readonly capabilities?: Pick<RhiCaps, 'rgba16floatRenderable'>;
478
+ /** Prepared typed graph resources owned by RenderSystem/RenderFrameState. */
479
+ readonly standardOutput?: {
480
+ readonly autoExposure?: {
481
+ readonly histogram: GraphBuffer;
482
+ readonly state: GraphBuffer;
483
+ readonly candidate: GraphBuffer;
484
+ /** Authored camera/time parameters consumed by the GPU adapt stage. */
485
+ readonly parameters: GraphBuffer;
486
+ };
487
+ readonly colorLut?: {
488
+ readonly view: GraphTextureView;
489
+ readonly sampler: import('@forgeax/engine-rhi').Sampler;
490
+ readonly strength: number;
491
+ readonly bindGroupLayout: import('@forgeax/engine-rhi').BindGroupLayout;
492
+ readonly bindGroup: BindGroup;
493
+ };
494
+ };
445
495
  /**
446
496
  * Renderer-owned TAA history targets. The graph sees only imported typed
447
497
  * targets; opaque RHI handles remain inside RenderFrameState.
@@ -451,6 +501,16 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
451
501
  readonly previousColor: RenderPipelineTarget;
452
502
  readonly currentTemporal: RenderPipelineTarget;
453
503
  readonly previousTemporal: RenderPipelineTarget;
504
+ readonly currentStability: RenderPipelineTarget;
505
+ readonly previousStability: RenderPipelineTarget;
506
+ };
507
+ /** Renderer-owned SSR temporal history targets for the admitted spatial chain. */
508
+ readonly ssrHistory?: {
509
+ readonly previous: RenderPipelineTarget;
510
+ readonly output: RenderPipelineTarget;
511
+ readonly previousSurface: RenderPipelineTarget;
512
+ readonly outputSurface: RenderPipelineTarget;
513
+ readonly params: GraphBuffer;
454
514
  };
455
515
  /** Renderer-owned, prewarmed encoder for one graph mip level. */
456
516
  readonly encodeTransmissionMip?: (input: {
@@ -467,11 +527,20 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
467
527
  readonly format: TextureFormat;
468
528
  readonly sampleCount: 1 | 4;
469
529
  }): Result<RenderPipelineGpuDrivenProjection | undefined, RenderPipelineBuildError>;
530
+ projectGpuDrivenShadow?(
531
+ identity: ShadowViewIdentity,
532
+ ): Result<ShadowViewProjection | undefined, RenderGraphError>;
470
533
  contributeFeatures(
471
534
  targets: readonly RenderPipelineFeatureTarget[],
472
535
  semanticTargets?: readonly RenderPipelineTarget[],
473
536
  namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
537
+ standardSurfaceAccesses?: readonly GraphAccess[],
474
538
  ): Result<void, RenderPipelineBuildError>;
539
+ /** Prepare feature-owned shadow draws and their early compute producers once. */
540
+ contributeShadowFeatures?(): Result<
541
+ import('./features/render-graph-raster').RenderFeatureShadowDraws<FrameCtx> | undefined,
542
+ RenderPipelineBuildError
543
+ >;
475
544
  /** Add renderer-owned cube capture work to the active pipeline graph. */
476
545
  contributeCubeCaptures?(): Result<void, RenderPipelineBuildError>;
477
546
  /** Whether a producer-owned feature is installed for this graph build. */