@forgeax/engine-render 0.1.7 → 0.1.20

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 (777) hide show
  1. package/README.md +140 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/assembly/backend-contract.d.ts +12 -0
  4. package/dist/assembly/backend-contract.d.ts.map +1 -1
  5. package/dist/assembly/factory.d.ts +26 -5
  6. package/dist/assembly/factory.d.ts.map +1 -1
  7. package/dist/assembly/host-contract.d.ts +4 -0
  8. package/dist/assembly/host-contract.d.ts.map +1 -1
  9. package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
  10. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
  11. package/dist/assembly/renderer-inspection.d.ts +22 -0
  12. package/dist/assembly/renderer-inspection.d.ts.map +1 -0
  13. package/dist/assembly/renderer-lifecycle.d.ts +4 -0
  14. package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
  15. package/dist/authoring.mjs +4 -2
  16. package/dist/authoring.mjs.map +1 -1
  17. package/dist/chunk-4XINDLAY.mjs +9404 -0
  18. package/dist/chunk-4XINDLAY.mjs.map +1 -0
  19. package/dist/chunk-CDTWTHZR.mjs +752 -0
  20. package/dist/chunk-CDTWTHZR.mjs.map +1 -0
  21. package/dist/chunk-FJ6P52EE.mjs +46 -0
  22. package/dist/chunk-FJ6P52EE.mjs.map +1 -0
  23. package/dist/chunk-JDWARUOI.mjs +44 -0
  24. package/dist/chunk-JDWARUOI.mjs.map +1 -0
  25. package/dist/chunk-M2MP4ZOU.mjs +73 -0
  26. package/dist/chunk-M2MP4ZOU.mjs.map +1 -0
  27. package/dist/chunk-PCHBPYML.mjs +385 -0
  28. package/dist/chunk-PCHBPYML.mjs.map +1 -0
  29. package/dist/chunk-RXZ3RGOU.mjs +53 -0
  30. package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
  31. package/dist/{chunk-YEJIUW7D.mjs → chunk-TBQJOK2L.mjs} +356 -543
  32. package/dist/chunk-TBQJOK2L.mjs.map +1 -0
  33. package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
  34. package/dist/chunk-VFPLTKCU.mjs.map +1 -0
  35. package/dist/components/atmosphere.d.ts +9 -0
  36. package/dist/components/atmosphere.d.ts.map +1 -0
  37. package/dist/components/camera.d.ts +2 -1
  38. package/dist/components/camera.d.ts.map +1 -1
  39. package/dist/components/fog.d.ts +8 -0
  40. package/dist/components/fog.d.ts.map +1 -0
  41. package/dist/components/index.d.ts +3 -0
  42. package/dist/components/index.d.ts.map +1 -1
  43. package/dist/components/light-helpers.d.ts.map +1 -1
  44. package/dist/components/motion-blur.d.ts +7 -0
  45. package/dist/components/motion-blur.d.ts.map +1 -0
  46. package/dist/components/spot-light.d.ts +12 -0
  47. package/dist/components/spot-light.d.ts.map +1 -1
  48. package/dist/construct-renderer.d.ts +2 -2
  49. package/dist/construct-renderer.d.ts.map +1 -1
  50. package/dist/construct-renderer.mjs +11146 -14507
  51. package/dist/construct-renderer.mjs.map +1 -1
  52. package/dist/device/device-scope.d.ts +4 -0
  53. package/dist/device/device-scope.d.ts.map +1 -1
  54. package/dist/device/gpu-residency.d.ts +19 -2
  55. package/dist/device/gpu-residency.d.ts.map +1 -1
  56. package/dist/environment/frame.d.ts +60 -0
  57. package/dist/environment/frame.d.ts.map +1 -0
  58. package/dist/environment/generation.d.ts +21 -0
  59. package/dist/environment/generation.d.ts.map +1 -0
  60. package/dist/environment/graph.d.ts +4 -0
  61. package/dist/environment/graph.d.ts.map +1 -0
  62. package/dist/environment/inspection.d.ts +48 -0
  63. package/dist/environment/inspection.d.ts.map +1 -0
  64. package/dist/environment/lifecycle.d.ts +39 -0
  65. package/dist/environment/lifecycle.d.ts.map +1 -0
  66. package/dist/environment/signature.d.ts +25 -0
  67. package/dist/environment/signature.d.ts.map +1 -0
  68. package/dist/errors/render.d.ts +204 -1
  69. package/dist/errors/render.d.ts.map +1 -1
  70. package/dist/extract/camera.d.ts +5 -0
  71. package/dist/extract/camera.d.ts.map +1 -0
  72. package/dist/extract/environment.d.ts +74 -0
  73. package/dist/extract/environment.d.ts.map +1 -0
  74. package/dist/extract/visibility.d.ts +1 -1
  75. package/dist/extract/visibility.d.ts.map +1 -1
  76. package/dist/features/host.d.ts +9 -2
  77. package/dist/features/host.d.ts.map +1 -1
  78. package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
  79. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
  80. package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
  81. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
  82. package/dist/features/plan.d.ts +17 -2
  83. package/dist/features/plan.d.ts.map +1 -1
  84. package/dist/features/prepared-gpu-work.d.ts +3 -1
  85. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  86. package/dist/features/prepared-graphics.d.ts +2 -1
  87. package/dist/features/prepared-graphics.d.ts.map +1 -1
  88. package/dist/features/render-graph-raster.d.ts +2 -1
  89. package/dist/features/render-graph-raster.d.ts.map +1 -1
  90. package/dist/features/targets.d.ts +3 -0
  91. package/dist/features/targets.d.ts.map +1 -1
  92. package/dist/features/types.d.ts +12 -0
  93. package/dist/features/types.d.ts.map +1 -1
  94. package/dist/fullscreen-post-process-pass.d.ts +7 -1
  95. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  96. package/dist/gpu-scene.d.ts +2 -0
  97. package/dist/gpu-scene.d.ts.map +1 -1
  98. package/dist/gpu-usage.d.ts +2 -0
  99. package/dist/gpu-usage.d.ts.map +1 -1
  100. package/dist/ibl/skylight-bind-group.d.ts +5 -6
  101. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  102. package/dist/index.d.ts +24 -7
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.mjs +6 -4
  105. package/dist/index.mjs.map +1 -1
  106. package/dist/inspection-types.d.ts +43 -1
  107. package/dist/inspection-types.d.ts.map +1 -1
  108. package/dist/internal.d.ts +2 -0
  109. package/dist/internal.d.ts.map +1 -1
  110. package/dist/internal.mjs +2 -0
  111. package/dist/light-buffer-layout.d.ts +20 -12
  112. package/dist/light-buffer-layout.d.ts.map +1 -1
  113. package/dist/materials.d.ts +22 -0
  114. package/dist/materials.d.ts.map +1 -1
  115. package/dist/pbr-pipeline.d.ts +16 -9
  116. package/dist/pbr-pipeline.d.ts.map +1 -1
  117. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  118. package/dist/pipeline/standard-pipeline.d.ts +3 -0
  119. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  120. package/dist/pipeline/standard-post.d.ts +48 -0
  121. package/dist/pipeline/standard-post.d.ts.map +1 -0
  122. package/dist/pipeline/standard-profile.d.ts +12 -2
  123. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  124. package/dist/pipeline-builder.d.ts +18 -0
  125. package/dist/pipeline-builder.d.ts.map +1 -1
  126. package/dist/pipeline-spec.d.ts.map +1 -1
  127. package/dist/plugin.d.ts.map +1 -1
  128. package/dist/record/frame-lighting.d.ts +2 -0
  129. package/dist/record/frame-lighting.d.ts.map +1 -1
  130. package/dist/record/frame-snapshot.d.ts +137 -6
  131. package/dist/record/frame-snapshot.d.ts.map +1 -1
  132. package/dist/record/frame-targets.d.ts.map +1 -1
  133. package/dist/record/frame.d.ts +6 -3
  134. package/dist/record/frame.d.ts.map +1 -1
  135. package/dist/record/gpu-timing.d.ts +32 -0
  136. package/dist/record/gpu-timing.d.ts.map +1 -0
  137. package/dist/record/main-pass-geometry.d.ts +11 -0
  138. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  139. package/dist/record/main-pass-material.d.ts +9 -6
  140. package/dist/record/main-pass-material.d.ts.map +1 -1
  141. package/dist/record/main-pass-sprite-draws.d.ts +8 -1
  142. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  143. package/dist/record/main-pass.d.ts +2 -0
  144. package/dist/record/main-pass.d.ts.map +1 -1
  145. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  146. package/dist/record/render-context.d.ts +81 -19
  147. package/dist/record/render-context.d.ts.map +1 -1
  148. package/dist/record/shadow-pass.d.ts.map +1 -1
  149. package/dist/record/skybox-post-pass.d.ts +1 -11
  150. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  151. package/dist/record/typed-frame-graph.d.ts +36 -4
  152. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  153. package/dist/record/view-ubo.d.ts +4 -1
  154. package/dist/record/view-ubo.d.ts.map +1 -1
  155. package/dist/render-contract.d.ts +157 -8
  156. package/dist/render-contract.d.ts.map +1 -1
  157. package/dist/render-data.d.ts +10 -6
  158. package/dist/render-data.d.ts.map +1 -1
  159. package/dist/render-graph-primitives.d.ts.map +1 -1
  160. package/dist/render-pipeline.d.ts +86 -6
  161. package/dist/render-pipeline.d.ts.map +1 -1
  162. package/dist/render-system-extract.d.ts +84 -8
  163. package/dist/render-system-extract.d.ts.map +1 -1
  164. package/dist/render-system.d.ts +30 -5
  165. package/dist/render-system.d.ts.map +1 -1
  166. package/dist/renderer-inspect.d.ts +29 -0
  167. package/dist/renderer-inspect.d.ts.map +1 -0
  168. package/dist/scene/render-scene.d.ts +36 -2
  169. package/dist/scene/render-scene.d.ts.map +1 -1
  170. package/dist/temporal/coverage.d.ts +42 -0
  171. package/dist/temporal/coverage.d.ts.map +1 -0
  172. package/dist/temporal/frame-coordinator.d.ts +99 -0
  173. package/dist/temporal/frame-coordinator.d.ts.map +1 -0
  174. package/dist/temporal/frame.d.ts +44 -0
  175. package/dist/temporal/frame.d.ts.map +1 -0
  176. package/dist/temporal/gpu.d.ts +39 -0
  177. package/dist/temporal/gpu.d.ts.map +1 -0
  178. package/dist/temporal/history.d.ts +37 -0
  179. package/dist/temporal/history.d.ts.map +1 -0
  180. package/dist/temporal/index.d.ts +7 -0
  181. package/dist/temporal/index.d.ts.map +1 -0
  182. package/dist/temporal/index.mjs +8 -0
  183. package/dist/temporal/index.mjs.map +1 -0
  184. package/dist/temporal/inspection.d.ts +36 -0
  185. package/dist/temporal/inspection.d.ts.map +1 -0
  186. package/dist/temporal/scene-data-catalog.d.ts +48 -0
  187. package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
  188. package/dist/temporal/scene-data.d.ts +43 -0
  189. package/dist/temporal/scene-data.d.ts.map +1 -0
  190. package/dist/temporal/standard-scene-data.d.ts +61 -0
  191. package/dist/temporal/standard-scene-data.d.ts.map +1 -0
  192. package/dist/temporal/taa-history-resources.d.ts +22 -0
  193. package/dist/temporal/taa-history-resources.d.ts.map +1 -0
  194. package/dist/temporal/taa-history-store.d.ts +27 -0
  195. package/dist/temporal/taa-history-store.d.ts.map +1 -0
  196. package/dist/temporal/taa-resolve.d.ts +15 -0
  197. package/dist/temporal/taa-resolve.d.ts.map +1 -0
  198. package/dist/temporal/temporal-view.d.ts +40 -0
  199. package/dist/temporal/temporal-view.d.ts.map +1 -0
  200. package/dist/temporal/transaction.d.ts +9 -0
  201. package/dist/temporal/transaction.d.ts.map +1 -0
  202. package/dist/temporal/view.d.ts +56 -0
  203. package/dist/temporal/view.d.ts.map +1 -0
  204. package/dist/transmission/backdrop.d.ts +147 -0
  205. package/dist/transmission/backdrop.d.ts.map +1 -0
  206. package/dist/transmission/inspection.d.ts +57 -0
  207. package/dist/transmission/inspection.d.ts.map +1 -0
  208. package/dist/transmission/oracle.d.ts +42 -0
  209. package/dist/transmission/oracle.d.ts.map +1 -0
  210. package/dist/transmission/projection.d.ts +37 -0
  211. package/dist/transmission/projection.d.ts.map +1 -0
  212. package/dist/typed-render-graph-primitives.d.ts +30 -2
  213. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  214. package/dist/typed-shadow-atlas.d.ts +10 -0
  215. package/dist/typed-shadow-atlas.d.ts.map +1 -0
  216. package/dist/typed-shadow-passes.d.ts.map +1 -1
  217. package/dist/volume/capability.d.ts +57 -0
  218. package/dist/volume/capability.d.ts.map +1 -0
  219. package/dist/volume/component.d.ts +61 -0
  220. package/dist/volume/component.d.ts.map +1 -0
  221. package/dist/volume/extract.d.ts +11 -0
  222. package/dist/volume/extract.d.ts.map +1 -0
  223. package/dist/volume/inspection.d.ts +38 -0
  224. package/dist/volume/inspection.d.ts.map +1 -0
  225. package/dist/volume/passes.d.ts +38 -0
  226. package/dist/volume/passes.d.ts.map +1 -0
  227. package/dist/volume/recovery.d.ts +38 -0
  228. package/dist/volume/recovery.d.ts.map +1 -0
  229. package/dist/volume/resources.d.ts +57 -0
  230. package/dist/volume/resources.d.ts.map +1 -0
  231. package/dist/volume/temporal.d.ts +35 -0
  232. package/dist/volume/temporal.d.ts.map +1 -0
  233. package/package.json +24 -19
  234. package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
  235. package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
  236. package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
  237. package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
  238. package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
  239. package/src/__tests__/detached-inspection.integration.test.ts +177 -0
  240. package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
  241. package/src/__tests__/environment-generation.integration.test.ts +141 -0
  242. package/src/__tests__/environment-selection.unit.test.ts +245 -0
  243. package/src/__tests__/factory-contract.integration.test.ts +1380 -9
  244. package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
  245. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
  246. package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
  247. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
  248. package/src/__tests__/gpu-scene.unit.test.ts +10 -0
  249. package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
  250. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -14
  251. package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
  252. package/src/__tests__/material-cooked-projection.unit.test.ts +18 -146
  253. package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
  254. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +1 -1
  255. package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
  256. package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
  257. package/src/__tests__/public-surface.test-d.ts +15 -1
  258. package/src/__tests__/render-error-code-owner.test-d.ts +14 -0
  259. package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
  260. package/src/__tests__/render-error-exhaustive.test-d.ts +3 -0
  261. package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
  262. package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
  263. package/src/__tests__/render-feature-plan.test-d.ts +22 -89
  264. package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
  265. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
  266. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
  267. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +423 -1
  268. package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
  269. package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
  270. package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
  271. package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
  272. package/src/__tests__/scene-data-contract.test-d.ts +35 -0
  273. package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
  274. package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
  275. package/src/__tests__/shader-manifest-fixture.ts +111 -0
  276. package/src/__tests__/skinned-shadow-caster.test.ts +123 -0
  277. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
  278. package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
  279. package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
  280. package/src/__tests__/standard-profile-oracle.unit.test.ts +12 -2
  281. package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
  282. package/src/__tests__/surface-configuration.unit.test.ts +211 -12
  283. package/src/__tests__/taa-transaction.integration.test.ts +30 -0
  284. package/src/__tests__/temporal-admission.integration.test.ts +40 -0
  285. package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
  286. package/src/__tests__/temporal-demand.unit.test.ts +44 -0
  287. package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
  288. package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
  289. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
  290. package/src/__tests__/temporal-performance.integration.test.ts +615 -0
  291. package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
  292. package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
  293. package/src/__tests__/temporal-view.unit.test.ts +152 -0
  294. package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
  295. package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
  296. package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
  297. package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
  298. package/src/__tests__/visibility-extract.integration.test.ts +27 -1
  299. package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
  300. package/src/__tests__/volume-optics-oracle.unit.test.ts +85 -0
  301. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +655 -0
  302. package/src/__tests__/volumetric-fog-component.unit.test.ts +71 -0
  303. package/src/__tests__/volumetric-fog-composite-stage-readback.dawn.test.ts +376 -0
  304. package/src/__tests__/volumetric-fog-errors.unit.test.ts +51 -0
  305. package/src/__tests__/volumetric-fog-inspection.unit.test.ts +77 -0
  306. package/src/__tests__/volumetric-fog-light-capability.unit.test.ts +19 -0
  307. package/src/__tests__/volumetric-fog-light-consumers.integration.test.ts +18 -0
  308. package/src/__tests__/volumetric-fog-light-errors.unit.test.ts +17 -0
  309. package/src/__tests__/volumetric-fog-light-topology.unit.test.ts +21 -0
  310. package/src/__tests__/volumetric-fog-light-transaction.integration.test.ts +53 -0
  311. package/src/__tests__/volumetric-fog-m9-watcher.integration.test.ts +27 -0
  312. package/src/__tests__/volumetric-fog-point-light-owner.integration.test.ts +44 -0
  313. package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +49 -0
  314. package/src/__tests__/volumetric-fog-point-spot-contract.unit.test.ts +28 -0
  315. package/src/__tests__/volumetric-fog-point-spot-lkg.integration.test.ts +65 -0
  316. package/src/__tests__/volumetric-fog-point-spot-selection.integration.test.ts +49 -0
  317. package/src/__tests__/volumetric-fog-point-spot-temporal.unit.test.ts +55 -0
  318. package/src/__tests__/volumetric-fog-projector-contract.unit.test.ts +22 -0
  319. package/src/__tests__/volumetric-fog-projector-inspection.unit.test.ts +12 -0
  320. package/src/__tests__/volumetric-fog-projector-surface-volume.integration.test.ts +11 -0
  321. package/src/__tests__/volumetric-fog-projector-transaction.integration.test.ts +26 -0
  322. package/src/__tests__/volumetric-fog-recovery.integration.test.ts +47 -0
  323. package/src/__tests__/volumetric-fog-selected-light-resolution.integration.test.ts +63 -0
  324. package/src/__tests__/volumetric-fog-spot-closure.integration.test.ts +26 -0
  325. package/src/__tests__/volumetric-fog-spot-contract.test-d.ts +21 -0
  326. package/src/__tests__/volumetric-fog-spot-contract.unit.test.ts +27 -0
  327. package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +14 -0
  328. package/src/__tests__/volumetric-fog-spot-optics.integration.test.ts +29 -0
  329. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +550 -0
  330. package/src/__tests__/volumetric-fog-temporal-selected-light.unit.test.ts +33 -0
  331. package/src/__tests__/volumetric-fog-temporal.unit.test.ts +45 -0
  332. package/src/__tests__/volumetric-fog-topology.unit.test.ts +237 -0
  333. package/src/__tests__/volumetric-fog-transparent.integration.test.ts +27 -0
  334. package/src/assembly/backend-contract.ts +47 -1
  335. package/src/assembly/factory.ts +1480 -505
  336. package/src/assembly/host-contract.ts +4 -0
  337. package/src/assembly/renderer-frame-transaction.ts +75 -0
  338. package/src/assembly/renderer-inspection.ts +112 -0
  339. package/src/assembly/renderer-lifecycle.ts +6 -0
  340. package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
  341. package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
  342. package/src/components/atmosphere.ts +10 -0
  343. package/src/components/camera.ts +2 -1
  344. package/src/components/fog.ts +9 -0
  345. package/src/components/index.ts +3 -0
  346. package/src/components/light-helpers.ts +4 -0
  347. package/src/components/motion-blur.ts +8 -0
  348. package/src/components/spot-light.ts +22 -3
  349. package/src/construct-renderer.ts +40 -3
  350. package/src/device/device-scope.ts +15 -1
  351. package/src/device/gpu-residency.ts +168 -58
  352. package/src/environment/frame.ts +185 -0
  353. package/src/environment/generation.ts +23 -0
  354. package/src/environment/graph.ts +9 -0
  355. package/src/environment/inspection.ts +87 -0
  356. package/src/environment/lifecycle.ts +250 -0
  357. package/src/environment/signature.ts +55 -0
  358. package/src/errors/render.ts +404 -1
  359. package/src/extract/camera.ts +78 -0
  360. package/src/extract/environment.ts +171 -0
  361. package/src/extract/visibility.ts +38 -19
  362. package/src/features/host.ts +36 -5
  363. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
  364. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
  365. package/src/features/motion-blur/motion-blur-feature.ts +119 -0
  366. package/src/features/motion-blur/motion-blur-params.ts +89 -0
  367. package/src/features/plan.ts +32 -3
  368. package/src/features/prepared-gpu-work.ts +21 -6
  369. package/src/features/prepared-graphics.ts +2 -1
  370. package/src/features/render-graph-raster.ts +2 -1
  371. package/src/features/targets.ts +24 -2
  372. package/src/features/types.ts +13 -0
  373. package/src/fullscreen-post-process-pass.ts +34 -4
  374. package/src/gpu-scene.ts +24 -0
  375. package/src/gpu-usage.ts +2 -0
  376. package/src/ibl/skylight-bind-group.ts +30 -38
  377. package/src/index.ts +104 -7
  378. package/src/inspection-types.ts +48 -0
  379. package/src/internal.ts +5 -0
  380. package/src/light-buffer-layout.ts +59 -26
  381. package/src/materials.ts +119 -24
  382. package/src/pbr-pipeline.ts +91 -29
  383. package/src/pipeline/standard-forward-lane.ts +178 -101
  384. package/src/pipeline/standard-pipeline.ts +176 -105
  385. package/src/pipeline/standard-post.ts +373 -0
  386. package/src/pipeline/standard-profile.ts +26 -3
  387. package/src/pipeline-builder.ts +102 -12
  388. package/src/pipeline-spec.ts +9 -0
  389. package/src/plugin.ts +2 -0
  390. package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
  391. package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
  392. package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
  393. package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
  394. package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
  395. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
  396. package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
  397. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
  398. package/src/record/frame-lighting.ts +103 -89
  399. package/src/record/frame-snapshot.ts +170 -6
  400. package/src/record/frame-targets.ts +21 -8
  401. package/src/record/frame.ts +1014 -7
  402. package/src/record/gpu-timing.ts +224 -0
  403. package/src/record/main-pass-geometry.ts +86 -40
  404. package/src/record/main-pass-material.ts +120 -68
  405. package/src/record/main-pass-sprite-draws.ts +78 -101
  406. package/src/record/main-pass.ts +77 -4
  407. package/src/record/mesh-ssbo.ts +22 -3
  408. package/src/record/render-context.ts +194 -23
  409. package/src/record/shadow-pass.ts +197 -58
  410. package/src/record/skybox-post-pass.ts +97 -41
  411. package/src/record/typed-frame-graph.ts +704 -30
  412. package/src/record/view-ubo.ts +52 -4
  413. package/src/render-contract.ts +181 -6
  414. package/src/render-data.ts +50 -22
  415. package/src/render-graph-primitives.ts +18 -1
  416. package/src/render-pipeline.ts +144 -27
  417. package/src/render-system-extract.ts +522 -72
  418. package/src/render-system.ts +561 -41
  419. package/src/renderer-inspect.ts +66 -0
  420. package/src/scene/render-scene.ts +252 -7
  421. package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
  422. package/src/temporal/coverage.ts +76 -0
  423. package/src/temporal/frame-coordinator.ts +311 -0
  424. package/src/temporal/frame.ts +128 -0
  425. package/src/temporal/gpu.ts +287 -0
  426. package/src/temporal/history.ts +92 -0
  427. package/src/temporal/index.ts +6 -0
  428. package/src/temporal/inspection.ts +97 -0
  429. package/src/temporal/scene-data-catalog.ts +200 -0
  430. package/src/temporal/scene-data.ts +149 -0
  431. package/src/temporal/standard-scene-data.ts +182 -0
  432. package/src/temporal/taa-history-resources.ts +128 -0
  433. package/src/temporal/taa-history-store.ts +79 -0
  434. package/src/temporal/taa-resolve.ts +34 -0
  435. package/src/temporal/temporal-view.ts +169 -0
  436. package/src/temporal/transaction.ts +17 -0
  437. package/src/temporal/view.ts +161 -0
  438. package/src/transmission/__tests__/capability.unit.test.ts +83 -0
  439. package/src/transmission/__tests__/composition.integration.test.ts +161 -0
  440. package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
  441. package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
  442. package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
  443. package/src/transmission/__tests__/projection.unit.test.ts +71 -0
  444. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +437 -0
  445. package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
  446. package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
  447. package/src/transmission/backdrop.ts +572 -0
  448. package/src/transmission/inspection.ts +190 -0
  449. package/src/transmission/oracle.ts +141 -0
  450. package/src/transmission/projection.ts +83 -0
  451. package/src/typed-render-graph-primitives.ts +194 -11
  452. package/src/typed-shadow-atlas.ts +17 -0
  453. package/src/typed-shadow-passes.ts +6 -5
  454. package/src/volume/capability.ts +173 -0
  455. package/src/volume/component.ts +110 -0
  456. package/src/volume/extract.ts +21 -0
  457. package/src/volume/inspection.ts +78 -0
  458. package/src/volume/passes.ts +680 -0
  459. package/src/volume/recovery.ts +86 -0
  460. package/src/volume/resources.ts +236 -0
  461. package/src/volume/temporal.ts +89 -0
  462. package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
  463. package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
  464. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
  465. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
  466. package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
  467. package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
  468. package/dist/__tests__/cluster-binner.test.d.ts +0 -2
  469. package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
  470. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
  471. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
  472. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
  473. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
  474. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
  475. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
  476. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
  477. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
  479. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
  480. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
  481. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
  482. package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
  483. package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
  484. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
  485. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
  486. package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
  487. package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
  488. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
  489. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
  490. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
  491. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
  492. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
  493. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
  494. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
  495. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
  496. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
  497. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
  498. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
  499. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
  501. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
  503. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
  504. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
  505. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
  506. package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
  507. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
  508. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
  509. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
  510. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
  511. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
  512. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
  513. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
  515. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
  517. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
  518. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
  519. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
  520. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
  521. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
  522. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
  523. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
  524. package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
  525. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
  526. package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
  527. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
  529. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
  531. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
  532. package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
  533. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
  534. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
  535. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
  536. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
  537. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
  538. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
  539. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
  540. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
  541. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
  542. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
  543. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
  544. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
  545. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
  547. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
  549. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
  551. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
  552. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
  553. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
  555. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
  556. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
  557. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
  558. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
  559. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
  561. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
  563. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
  564. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
  565. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
  566. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
  567. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
  568. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
  569. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
  570. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
  571. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
  572. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
  573. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
  574. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
  575. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
  576. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
  577. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
  578. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
  579. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
  580. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
  581. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
  582. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
  583. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
  584. package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
  585. package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
  586. package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
  587. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
  588. package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
  589. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
  590. package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
  591. package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
  592. package/dist/__tests__/public-surface.test-d.d.ts +0 -2
  593. package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
  594. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
  595. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
  596. package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
  597. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
  598. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
  599. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
  600. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
  601. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  602. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  603. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  604. package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
  605. package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
  606. package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
  607. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
  608. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
  609. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
  610. package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
  611. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
  612. package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
  613. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
  614. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
  615. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
  616. package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
  617. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
  618. package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
  619. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
  620. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
  621. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
  622. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
  623. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
  624. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  625. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  626. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
  627. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
  628. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
  629. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
  630. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
  631. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
  632. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
  633. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
  634. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
  635. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
  636. package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
  637. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
  638. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
  639. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
  640. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
  641. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
  642. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
  643. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
  644. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
  645. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
  646. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
  647. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
  648. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
  649. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
  650. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
  651. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
  652. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
  653. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
  654. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
  655. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
  656. package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
  657. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
  658. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
  659. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
  660. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
  661. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
  662. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
  663. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
  664. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
  665. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
  666. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
  667. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
  668. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
  669. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
  670. package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
  671. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
  672. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
  673. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
  674. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  675. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  676. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
  677. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
  678. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
  679. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
  680. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
  681. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
  682. package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
  683. package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
  684. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
  685. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
  686. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
  687. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
  688. package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
  689. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
  690. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
  691. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
  692. package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
  693. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
  694. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
  695. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
  696. package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
  697. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
  698. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
  699. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
  700. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
  701. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
  702. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
  703. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
  704. package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
  705. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
  706. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
  707. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
  708. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
  709. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
  710. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
  711. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
  712. package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
  713. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
  714. package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
  715. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
  716. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
  717. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
  718. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
  719. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
  720. package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
  721. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
  722. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
  723. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
  724. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
  725. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
  726. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
  727. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
  728. package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
  729. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
  730. package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
  731. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
  732. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
  733. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
  734. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
  735. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
  736. package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
  737. package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
  738. package/dist/chunk-CQXZC5XI.mjs.map +0 -1
  739. package/dist/chunk-HCOGPHKS.mjs +0 -93
  740. package/dist/chunk-HCOGPHKS.mjs.map +0 -1
  741. package/dist/chunk-YEJIUW7D.mjs.map +0 -1
  742. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +0 -2
  743. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +0 -1
  744. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +0 -2
  745. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +0 -1
  746. package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
  747. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
  748. package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
  749. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
  750. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
  751. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
  752. package/dist/points-lines/__tests__/bounds.unit.test.d.ts +0 -2
  753. package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +0 -1
  754. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +0 -2
  755. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +0 -1
  756. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +0 -2
  757. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +0 -1
  758. package/dist/points-lines/__tests__/inspection.unit.test.d.ts +0 -2
  759. package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +0 -1
  760. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +0 -2
  761. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +0 -1
  762. package/dist/points-lines/__tests__/points-lines.bench.d.ts +0 -2
  763. package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +0 -1
  764. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +0 -2
  765. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +0 -1
  766. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +0 -2
  767. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +0 -1
  768. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +0 -2
  769. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +0 -1
  770. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
  771. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
  772. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
  773. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
  774. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
  775. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
  776. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
  777. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
@@ -8,6 +8,7 @@
8
8
 
9
9
  import { mat4 } from '@forgeax/engine-math';
10
10
  import type { Buffer, RhiQueue } from '@forgeax/engine-rhi';
11
+ import type { FogFrame } from '../extract/environment';
11
12
  import type { PointsLinesStyle } from '../points-lines/snapshot';
12
13
  import type { CameraSnapshot } from '../render-contract';
13
14
  import type {
@@ -15,6 +16,8 @@ import type {
15
16
  ExtractedLights,
16
17
  SpotLightSnapshot,
17
18
  } from '../render-system-extract';
19
+ import type { TemporalView as LegacyTemporalView } from '../temporal/temporal-view';
20
+ import type { TemporalView } from '../temporal/view';
18
21
  import { clampPcfKernelSize } from './frame-snapshot';
19
22
  import { computeProjectionMatrix, computeViewMatrix } from './helpers';
20
23
 
@@ -110,16 +113,34 @@ export function writeViewUbo(
110
113
  light: DirectionalLightSnapshot,
111
114
  lights: ExtractedLights,
112
115
  spotShadowSnapshots: readonly SpotLightSnapshot[],
116
+ fogOrTemporal?: FogFrame | TemporalView | LegacyTemporalView,
117
+ temporal?: TemporalView,
113
118
  ): void {
119
+ const isTemporal =
120
+ fogOrTemporal !== undefined &&
121
+ ('currentJitterUv' in fogOrTemporal || 'currentUnjitteredViewProjection' in fogOrTemporal);
122
+ const fog = isTemporal ? undefined : fogOrTemporal;
123
+ const resolvedTemporal = temporal ?? (isTemporal ? fogOrTemporal : undefined);
114
124
  // Compose worldViewProj once per frame (view * proj).
115
125
  const projMatrix = computeProjectionMatrix(camera);
116
126
  const viewMatrix = computeViewMatrix(camera);
117
- const worldViewProj = mat4.create();
118
- mat4.multiply(worldViewProj, projMatrix, viewMatrix);
127
+ const unjitteredViewProjection = mat4.create();
128
+ mat4.multiply(unjitteredViewProjection, projMatrix, viewMatrix);
129
+ const jitteredProjection = mat4.create();
130
+ if (resolvedTemporal?.currentJitterUv !== undefined) {
131
+ const jitter = mat4.identity(mat4.create());
132
+ jitter[12] = resolvedTemporal.currentJitterUv[0] * 2;
133
+ jitter[13] = resolvedTemporal.currentJitterUv[1] * -2;
134
+ mat4.multiply(jitteredProjection, jitter, projMatrix);
135
+ } else {
136
+ for (let i = 0; i < 16; i += 1) jitteredProjection[i] = projMatrix[i] ?? 0;
137
+ }
138
+ const mainProjection = mat4.create();
139
+ mat4.multiply(mainProjection, jitteredProjection, viewMatrix);
119
140
 
120
141
  const VIEW_PAYLOAD_FLOATS = 240;
121
142
  const viewPayload = new Float32Array(VIEW_PAYLOAD_FLOATS);
122
- for (let i = 0; i < 16; i++) viewPayload[i] = worldViewProj[i] ?? 0;
143
+ for (let i = 0; i < 16; i++) viewPayload[i] = mainProjection[i] ?? 0;
123
144
  viewPayload[16] = (light.direction[0] ?? 0) * light.intensity;
124
145
  viewPayload[17] = (light.direction[1] ?? -1) * light.intensity;
125
146
  viewPayload[18] = (light.direction[2] ?? 0) * light.intensity;
@@ -137,7 +158,7 @@ export function writeViewUbo(
137
158
  // Host pre-computes mat4.invert so the skybox fragment shader avoids
138
159
  // per-pixel matrix inversion (charter P4 consistent abstraction).
139
160
  const inverseViewProj = mat4.create();
140
- mat4.invert(inverseViewProj, worldViewProj);
161
+ mat4.invert(inverseViewProj, mainProjection);
141
162
  for (let i = 0; i < 16; i++) viewPayload[44 + i] = inverseViewProj[i] ?? 0;
142
163
  // lightViewProj[1..3] at [60..107].
143
164
  if (lights.lightViewProj !== undefined) {
@@ -149,6 +170,21 @@ export function writeViewUbo(
149
170
  }
150
171
  }
151
172
  }
173
+
174
+ // Temporal ABI tail: current and last-successful unjittered projections
175
+ // stay separate from the jittered main projection and never advance on a
176
+ // failed submission. The fixed 240-float payload already reserves these
177
+ // 36 slots at byte offsets 784..920.
178
+ const previous = resolvedTemporal?.previousUnjitteredViewProjection;
179
+ for (let i = 0; i < 16; i += 1) {
180
+ viewPayload[196 + i] = unjitteredViewProjection[i] ?? 0;
181
+ // No previous successful frame exists on first frame/reset. Keep this
182
+ // lane zeroed instead of copying current state into a history slot.
183
+ viewPayload[212 + i] = previous?.[i] ?? 0;
184
+ }
185
+ viewPayload[228] = camera.near;
186
+ viewPayload[229] = camera.far;
187
+ viewPayload[230] = camera.projection === 'orthographic' ? 1 : 0;
152
188
  // splitPlanes at [108], [112], [116], [120] (vec4 stride = 4 floats).
153
189
  if (lights.splitPlanes !== undefined) {
154
190
  for (let s = 0; s < 4; s++) {
@@ -202,6 +238,18 @@ export function writeViewUbo(
202
238
  }
203
239
  }
204
240
 
241
+ // Fog is a resource-owner semantic carried by the shared View ABI. Keep the
242
+ // disabled payload zeroed and write only the selected frame facts so both
243
+ // direct and clustered lanes consume the same owner projection.
244
+ if (fog !== undefined) {
245
+ viewPayload[232] = fog.color[0] ?? 0;
246
+ viewPayload[233] = fog.color[1] ?? 0;
247
+ viewPayload[234] = fog.color[2] ?? 0;
248
+ viewPayload[235] = fog.density;
249
+ viewPayload[236] = fog.heightFalloff;
250
+ viewPayload[237] = fog.maxOpacity;
251
+ }
252
+
205
253
  const viewUploadResult = queue.writeBuffer(viewUniformBuffer, 0, viewPayload);
206
254
  if (!viewUploadResult.ok) throw viewUploadResult.error;
207
255
 
@@ -3,11 +3,12 @@ import type { World } from '@forgeax/engine-ecs';
3
3
  import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
4
4
  import type { Vec3 } from '@forgeax/engine-math';
5
5
  import type { ProfileFrameToken, Profiler } from '@forgeax/engine-profiler';
6
- import type { RenderGraphError } from '@forgeax/engine-render-graph';
6
+ import type { ColorValueDomain, RenderGraphError } from '@forgeax/engine-render-graph';
7
7
  import type {
8
8
  BindGroupLayout,
9
9
  Buffer,
10
10
  Result,
11
+ RhiCanvasSurfacePresentationProof,
11
12
  RhiCaps,
12
13
  RhiCommandEncoder,
13
14
  RhiDevice,
@@ -15,6 +16,7 @@ import type {
15
16
  RhiInstance,
16
17
  RhiRenderPassEncoder,
17
18
  RenderPipeline as RhiRenderPipeline,
19
+ Sampler,
18
20
  Texture,
19
21
  TextureFormat,
20
22
  TextureView,
@@ -23,16 +25,28 @@ import type { SkinError } from '@forgeax/engine-skinning';
23
25
  import type { ImageError } from '@forgeax/engine-types';
24
26
  import type { RhiBackendInstrumentation } from './assembly/backend-contract';
25
27
  import type { Antialias, BloomEnabled, Tonemap } from './components/camera';
28
+ import type { EnvironmentInspection } from './environment/inspection';
26
29
  import type { RenderError } from './errors/render';
27
30
  import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
28
31
  import type { PostProcessShaderEntry } from './fullscreen-post-process-pass';
29
- import type { RenderSceneInspection } from './inspection-types';
30
-
32
+ import type {
33
+ BloomInspection,
34
+ MotionBlurInspection,
35
+ RenderSceneInspection,
36
+ TemporalTargetInspection,
37
+ TransmissionInspection,
38
+ } from './inspection-types';
39
+ import type { TemporalInspection } from './temporal/inspection';
40
+
41
+ export type { TransmissionInspection } from './inspection-types';
31
42
  export type { PointsLinesInspection } from './points-lines/inspection';
32
43
 
33
44
  import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
34
45
  import type { StandardProfile } from './pipeline/standard-profile';
35
46
  import type { PostProcessError } from './post-process-errors';
47
+ import type { VolumeTimingObservation } from './record/gpu-timing';
48
+ import type { TemporalView } from './temporal/view';
49
+ import type { VolumetricFogInspection } from './volume/inspection';
36
50
 
37
51
  export type RenderResult<T, E> =
38
52
  | { readonly ok: true; readonly value: T }
@@ -51,6 +65,10 @@ export type RenderWorldLease = RenderReadLease;
51
65
  export interface CameraSnapshot {
52
66
  /** Stable ECS identity used by the frame plan's camera authority fact. */
53
67
  readonly entityKey?: number;
68
+ /** World index supplied by the multi-world extract merge. */
69
+ readonly worldId?: number;
70
+ /** Camera-owned history generation forwarded into the frame plan. */
71
+ readonly historyVersion?: number;
54
72
  /** World-space camera translation (mat4.getTranslation of Transform.world). */
55
73
  readonly position: Vec3;
56
74
  /** Resolved world-space camera mat4, copied from Transform.world. */
@@ -74,10 +92,26 @@ export interface CameraSnapshot {
74
92
  readonly bloomIntensity: number;
75
93
  readonly bloomBlurRadius: number;
76
94
  readonly clearColor: readonly [number, number, number, number];
95
+ /** Renderer-owned temporal projection used by Standard's TAA producer. */
96
+ readonly temporal?: TemporalView;
97
+ /** Active-camera motion blur parameters, present only when demanded. */
98
+ readonly motionBlur?: {
99
+ readonly shutterAngle: number;
100
+ readonly maxRadiusPixels: number;
101
+ readonly sampleCount: number;
102
+ };
77
103
  }
78
104
 
79
- /** Stable identity owned by the Standard feature host for built-in tonemap. */
80
- export const STANDARD_TONEMAP_FEATURE_ID = 'forgeax::standard::tonemap';
105
+ /** Stable identity owned by the Standard feature host for output transform. */
106
+ export const STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = 'forgeax::standard::output-transform';
107
+
108
+ export type {
109
+ EnvironmentFrame,
110
+ EnvironmentSource,
111
+ FogFrame,
112
+ FramePlan,
113
+ } from './extract/environment';
114
+ export type { TemporalView } from './temporal/view';
81
115
 
82
116
  /**
83
117
  * Render-graph state exposed to pipeline declarations. Concrete pipeline
@@ -87,6 +121,14 @@ export const STANDARD_TONEMAP_FEATURE_ID = 'forgeax::standard::tonemap';
87
121
  interface RenderPipelineStateView {
88
122
  readonly format: TextureFormat;
89
123
  readonly colorAttachmentFormat: TextureFormat;
124
+ /** Renderer-owned View UBO shared by Standard lighting, shadows, and fog. */
125
+ readonly viewUniformBuffer: Buffer;
126
+ /** Renderer-owned SpotLight std430 buffer shared by Standard and volume. */
127
+ readonly pointLightsBuffer: Buffer;
128
+ readonly spotLightsBuffer: Buffer;
129
+ /** Fallback resources keep the shared view layout valid when no projector is authored. */
130
+ readonly defaultWhiteTextureView: TextureView;
131
+ readonly defaultSampler: Sampler;
90
132
  }
91
133
 
92
134
  /**
@@ -96,6 +138,16 @@ interface RenderPipelineStateView {
96
138
  */
97
139
  interface RenderPipelineRuntime {
98
140
  readonly device: RhiDevice;
141
+ /** Runtime-owned shader module factory used by built-in graph producers. */
142
+ readonly shaderModuleFactory?: {
143
+ createShaderModule(input: {
144
+ readonly code: string;
145
+ readonly label?: string | undefined;
146
+ }): import('@forgeax/engine-types').Result<
147
+ import('@forgeax/engine-rhi').ShaderModule,
148
+ RhiError
149
+ >;
150
+ };
99
151
  readonly errorRegistry: { fire(error: RendererError): void };
100
152
  readonly debugOverlay?: RenderDebugOverlay | undefined;
101
153
  readonly lookupPostProcess?: (id: string) => PostProcessShaderEntry | undefined;
@@ -139,6 +191,52 @@ export interface RenderPipelineContext {
139
191
  readonly msaaActive: boolean;
140
192
  readonly geometryColorResolveView: TextureView | null;
141
193
  readonly ldrSpriteColorView: TextureView | null;
194
+ /** Renderer-owned volume resources prepared from the authored ECS snapshot. */
195
+ readonly volumetricFog?: VolumetricFogFrameContext;
196
+ /** Renderer-owned SpotLight projector resources, independent of fog. */
197
+ readonly spotLightProjector?: SpotLightProjectorFrameContext;
198
+ /** Build-time composed utility sources for the renderer-owned volume passes. */
199
+ readonly volumetricFogShaders?: VolumetricFogShaderSources;
200
+ }
201
+
202
+ /** Stable utility entry-point sources emitted by the shader manifest. */
203
+ export interface VolumetricFogShaderSources {
204
+ readonly inject: string;
205
+ readonly temporal: string;
206
+ readonly integrate: string;
207
+ readonly composite: string;
208
+ }
209
+
210
+ /**
211
+ * GPU resources for one validated volumetric-fog candidate. The record stage
212
+ * owns residency and parameter uploads; graph passes consume this narrow view
213
+ * and never reach into AssetRegistry or World.
214
+ */
215
+ export interface VolumetricFogFrameContext {
216
+ readonly densityTexture: Texture;
217
+ readonly densityView: TextureView;
218
+ readonly paramsBuffer: Buffer;
219
+ readonly densityGeneration: number;
220
+ /** Accepted graph-owned history slot; null means first frame/reset. */
221
+ readonly historyReadSlot: 0 | 1 | null;
222
+ /** Pending graph-owned history slot; promoted only after queue.submit succeeds. */
223
+ readonly historyWriteSlot: 0 | 1;
224
+ readonly historyValid: boolean;
225
+ /** Accepted SpotLight projector resources resolved by the GPU residency owner. */
226
+ readonly projectorTexture?: Texture;
227
+ readonly projectorView?: TextureView;
228
+ readonly projectorSampler?: Sampler;
229
+ }
230
+
231
+ /**
232
+ * GPU resources for the single surface SpotLight projector binding. The
233
+ * projector is a SpotLight-owned cookie and therefore remains available when
234
+ * volumetric fog is disabled; volume integration may reuse the same tuple.
235
+ */
236
+ export interface SpotLightProjectorFrameContext {
237
+ readonly texture: Texture;
238
+ readonly view: TextureView;
239
+ readonly sampler: Sampler;
142
240
  }
143
241
 
144
242
  /**
@@ -243,6 +341,58 @@ export interface FrameReceiptObservation {
243
341
  readonly frameId: number;
244
342
  readonly deviceGeneration: number;
245
343
  readonly include: readonly ('timings' | 'draws' | 'bindings')[];
344
+ readonly timings?: VolumeTimingObservation;
345
+ }
346
+
347
+ /** Stable backend facts for the Standard output transform projection. */
348
+ export interface RenderOutputInspection {
349
+ readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
350
+ readonly displayEncoded: boolean;
351
+ readonly intermediateFormat?: TextureFormat;
352
+ /** Concrete surface route committed by configureSurface. */
353
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
354
+ /** Pass names from the same committed graph as the output facts. */
355
+ readonly graphPassNames: readonly string[];
356
+ /** Detached descriptor for the graph-owned output target, when present. */
357
+ readonly standardOutputColor?: RenderStandardOutputColorInspection;
358
+ readonly surfaceStorage: TextureFormat;
359
+ readonly surfaceDisplay: TextureFormat;
360
+ readonly endpoint: 'surface.storage.raw';
361
+ readonly capability: 'rgba16float-renderable' | 'surface-raw-endpoint' | 'unavailable';
362
+ readonly presentationProof?: RhiCanvasSurfacePresentationProof;
363
+ readonly error:
364
+ | {
365
+ readonly code: string;
366
+ readonly expected: string;
367
+ readonly hint: string;
368
+ readonly detail?: unknown;
369
+ }
370
+ | undefined;
371
+ }
372
+
373
+ /** Detached descriptor for the graph-owned display-encoded intermediate. */
374
+ export interface RenderStandardOutputColorInspection {
375
+ readonly format: TextureFormat;
376
+ readonly domain?: ColorValueDomain;
377
+ readonly width: number;
378
+ readonly height: number;
379
+ readonly sampleCount: number;
380
+ readonly usage: number;
381
+ }
382
+
383
+ /** Stable identity refs for a renderer-owned frame observation. */
384
+ export interface RenderObservationInspection {
385
+ readonly observationId: string;
386
+ readonly frameId: number;
387
+ /** Camera antialias mode used by the frame carrying this observation. */
388
+ readonly antialias?: Antialias;
389
+ /** Surface route committed for the same frame graph. */
390
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
391
+ /** Capability fact used when resolving a raw-only float target. */
392
+ readonly rgba16floatRenderable?: boolean;
393
+ /** Exact pass names and target descriptor from the committed graph. */
394
+ readonly passNames: readonly string[];
395
+ readonly standardOutputColor?: RenderStandardOutputColorInspection;
246
396
  }
247
397
 
248
398
  /**
@@ -260,18 +410,40 @@ export interface RenderInspection {
260
410
  readonly frameId: number;
261
411
  readonly deviceGeneration: number;
262
412
  };
413
+ /** Renderer-owned authored volume projection and submit/LKG state. */
414
+ readonly volumetricFog?: VolumetricFogInspection;
263
415
  readonly features: readonly string[];
264
416
  /** Truthful lifecycle facts for every registered declarative feature. */
265
417
  readonly featureDiagnostics: readonly RenderFeatureDiagnostics[];
266
418
  readonly frustumStats: { readonly culled: number; readonly total: number };
267
419
  readonly visibilityStats: { readonly explicitlyHidden: number };
268
420
  readonly renderScene: RenderSceneInspection;
421
+ /** Last completed transmission candidate facts, detached from GPU handles. */
422
+ readonly transmission?: TransmissionInspection;
269
423
  readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
270
424
  readonly perFramePassNames: readonly string[];
271
425
  readonly bindGroupCounts: {
272
426
  readonly createBindGroup: number;
273
427
  readonly keys: readonly string[];
274
428
  };
429
+ /** Output transform facts; never includes fixture metrics or pixel bytes. */
430
+ readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
431
+ readonly displayEncoded: boolean;
432
+ readonly intermediateFormat?: TextureFormat;
433
+ readonly surfaceStorage: TextureFormat;
434
+ readonly surfaceDisplay: TextureFormat;
435
+ readonly endpoint: 'surface.storage.raw';
436
+ readonly capability: RenderOutputInspection['capability'];
437
+ readonly presentationProof?: RhiCanvasSurfacePresentationProof;
438
+ readonly error: RenderOutputInspection['error'];
439
+ readonly observation: RenderObservationInspection;
440
+ readonly environment: EnvironmentInspection;
441
+ readonly temporal: TemporalInspection;
442
+ readonly bloom: BloomInspection;
443
+ /** Semantic Standard temporal target metadata; no graph or RHI handles. */
444
+ readonly temporalTarget?: TemporalTargetInspection;
445
+ /** Renderer-owned Motion Blur facts; absent when no component is active. */
446
+ readonly motionBlur?: MotionBlurInspection;
275
447
  }
276
448
 
277
449
  /** Backend marker — single-element union preserved for future extensibility (D-2). */
@@ -379,7 +551,8 @@ export const RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
379
551
  'record/graph-execute/forward/material-bind-groups',
380
552
  'record/graph-execute/forward/pipeline-selection',
381
553
  'record/graph-execute/forward/draw-submit',
382
- 'record/graph-execute/tonemap',
554
+ 'record/graph-execute/output-transform',
555
+ 'record/graph-execute/present',
383
556
  'record/graph-execute/debug-overlay',
384
557
  'record/graph-execute/shadow',
385
558
  'record/graph-execute/spot-shadow',
@@ -474,6 +647,8 @@ export interface RendererOptions {
474
647
  readonly standardProfile?: RenderProfile | undefined;
475
648
  /** Explicit profiler capability shared by App and Render. */
476
649
  readonly profiler?: Profiler | undefined;
650
+ /** Explicitly request timestamp-query for receipt-bound GPU profiling. */
651
+ readonly captureGpuTimings?: boolean | undefined;
477
652
  /** Optional host-owned RHI lifecycle instrumentation, such as recording. */
478
653
  readonly rhiInstrumentation?: RhiBackendInstrumentation | undefined;
479
654
  // feat-20260608-create-app-param-surface-trim / M1 / AC-02: `clearColor`
@@ -15,7 +15,6 @@
15
15
  // GPU-resource kind would surface as a `tsc -b` exhaustiveness error at the
16
16
  // switch rather than a silent fallthrough (AC-06).
17
17
 
18
- import { numMipLevels } from '@forgeax/engine-assets-runtime';
19
18
  import {
20
19
  bytesPerRow as blockBytesPerRow,
21
20
  blockParamsForFormat,
@@ -29,9 +28,11 @@ import { err, ok, type Result } from '@forgeax/engine-rhi';
29
28
  import {
30
29
  ASSET_ERROR_HINTS,
31
30
  type AssetError,
31
+ deriveTextureLayout,
32
32
  type MeshAsset,
33
33
  type Submesh,
34
34
  type TextureAsset,
35
+ type TextureShape,
35
36
  } from '@forgeax/engine-types';
36
37
  import {
37
38
  GPU_TEXTURE_USAGE_COPY_DST,
@@ -88,12 +89,16 @@ export interface MeshRenderData {
88
89
  readonly submeshes: readonly Submesh[];
89
90
  }
90
91
 
91
- /** Descriptor for a 2D texture's GPU resource (projected from POD). */
92
+ /** Descriptor for a sampled texture's GPU resource (projected from POD). */
92
93
  export interface TextureRenderData {
93
94
  /** Logical width retained for existing projection consumers. */
94
95
  readonly width: number;
95
96
  /** Logical height retained for existing projection consumers. */
96
97
  readonly height: number;
98
+ /** Authored shape; the residency layer must preserve this view dimension. */
99
+ readonly shape: TextureShape;
100
+ /** Array layers for `2d-array`, depth slices for `3d`, otherwise one. */
101
+ readonly depthOrArrayLayers: number;
97
102
  /** Authored content extent; TextureAsset remains the logical asset SSOT. */
98
103
  readonly logicalExtent: TextureExtent;
99
104
  /** GPU allocation extent, derived from format + logicalExtent. */
@@ -105,10 +110,10 @@ export interface TextureRenderData {
105
110
  readonly usage: number;
106
111
  /**
107
112
  * Row pitch for the BASE mip (level 0) the store passes to `writeTexture`.
108
- * Uncompressed: `width * 4` (RGBA8). Block-compressed: the block-padded
109
- * `ceil(width / blockW) * bytesPerBlock` (feat-20260707 M5 / w35, AC-08).
110
- * The per-mip layout for a multi-level compressed upload comes from
111
- * {@link deriveMipUploadLayout}.
113
+ * Derived from the canonical texture layout, so format-specific uncompressed
114
+ * widths (for example R8 density) and block-compressed widths stay aligned
115
+ * with the upload contract. The per-mip layout for a multi-level compressed
116
+ * upload comes from {@link deriveMipUploadLayout}.
112
117
  */
113
118
  readonly bytesPerRow: number;
114
119
  /** True iff `format` is a block-compressed format (drives the store's upload arm). */
@@ -262,6 +267,8 @@ export function deriveRenderDataMesh(mesh: MeshAsset): Result<MeshRenderData, As
262
267
  * inconsistent (a `-srgb` format requires an `srgb` colorSpace and vice versa).
263
268
  */
264
269
  export function deriveRenderDataTexture(tex: TextureAsset): Result<TextureRenderData, AssetError> {
270
+ const width = tex.shape.extent.width;
271
+ const height = tex.shape.extent.height;
265
272
  const isSrgbFormat = tex.format.endsWith('-srgb');
266
273
  const expectedColorSpace: 'srgb' | 'linear' = isSrgbFormat ? 'srgb' : 'linear';
267
274
  if (tex.colorSpace !== expectedColorSpace) {
@@ -275,14 +282,23 @@ export function deriveRenderDataTexture(tex: TextureAsset): Result<TextureRender
275
282
  }
276
283
 
277
284
  const compressed = isCompressedFormat(tex.format);
285
+ const layout = deriveTextureLayout({ shape: tex.shape, format: tex.format, mips: tex.mips });
286
+ if (!layout.ok) {
287
+ return err(
288
+ projectionError({
289
+ code: 'invalid-source-format',
290
+ expected: layout.error.expected,
291
+ hint: layout.error.hint,
292
+ }),
293
+ );
294
+ }
278
295
  // feat-20260707 M5 / w35 (AC-09, D-9): a block-compressed texture cannot have
279
296
  // its mips GPU-generated (F-7). An OFFLINE chain baked into `data`
280
297
  // (mipLevelCount > 1, e.g. a KTX2 level chain) is the normal compressed path
281
298
  // and passes; requesting RUNTIME mip generation (`mipmap:true` with no offline
282
299
  // chain) fails fast with a self-recovery hint (fail-fast at the projection
283
300
  // layer -- producer self-validate).
284
- const hasOfflineMipChain = (tex.mipLevelCount ?? 1) > 1;
285
- if (compressed && tex.mipmap === true && !hasOfflineMipChain) {
301
+ if (compressed && tex.mips.kind === 'generate') {
286
302
  return err(
287
303
  projectionError({
288
304
  code: 'mipgen-unsupported-compressed-format',
@@ -296,15 +312,19 @@ export function deriveRenderDataTexture(tex: TextureAsset): Result<TextureRender
296
312
  // Uncompressed: runtime mip-gen count from the pixel size. Compressed: the
297
313
  // level count is authored (offline chain) -- honour the POD's mipLevelCount,
298
314
  // never re-derive it from the size (a compressed chain may stop early).
299
- const mipLevelCount = compressed
300
- ? Math.max(1, tex.mipLevelCount ?? 1)
301
- : tex.mipmap
302
- ? numMipLevels(tex)
303
- : 1;
315
+ const mipLevelCount = layout.value.levels.length;
304
316
 
305
- const uncompressedBytesPerTexel =
306
- tex.format === 'rgba32float' ? 16 : tex.format === 'rgba16float' ? 8 : 4;
307
- if (!compressed && tex.data.byteLength < tex.width * tex.height * uncompressedBytesPerTexel) {
317
+ const baseLevel = layout.value.levels[0];
318
+ if (baseLevel === undefined) {
319
+ return err(
320
+ projectionError({
321
+ code: 'invalid-source-format',
322
+ expected: 'texture layout contains a base mip level',
323
+ hint: ASSET_ERROR_HINTS['invalid-source-format'],
324
+ }),
325
+ );
326
+ }
327
+ if (!compressed && tex.data.byteLength < baseLevel.byteLength) {
308
328
  return err(
309
329
  projectionError({
310
330
  code: 'invalid-source-format',
@@ -318,8 +338,8 @@ export function deriveRenderDataTexture(tex: TextureAsset): Result<TextureRender
318
338
  // from the format, not aggregate payload length: imported images may retain
319
339
  // trailing decoder bytes and offline mip chains contain more than the base mip.
320
340
  const bytesPerRow = compressed
321
- ? (blockBytesPerRow(tex.format, tex.width) ?? tex.width * 4)
322
- : tex.width * uncompressedBytesPerTexel;
341
+ ? (blockBytesPerRow(tex.format, width) ?? baseLevel.bytesPerRow)
342
+ : baseLevel.bytesPerRow;
323
343
 
324
344
  // Compressed formats are not renderable -- RENDER_ATTACHMENT would fail
325
345
  // createTexture validation, and the runtime mipmap blit (which needs it) never
@@ -333,9 +353,16 @@ export function deriveRenderDataTexture(tex: TextureAsset): Result<TextureRender
333
353
  GPU_TEXTURE_USAGE_COPY_SRC;
334
354
 
335
355
  return ok({
336
- width: tex.width,
337
- height: tex.height,
338
- ...deriveTextureExtent(tex.format, tex.width, tex.height),
356
+ width,
357
+ height,
358
+ shape: tex.shape,
359
+ depthOrArrayLayers:
360
+ tex.shape.viewDimension === '2d'
361
+ ? 1
362
+ : tex.shape.viewDimension === '2d-array'
363
+ ? tex.shape.extent.layers
364
+ : tex.shape.extent.depth,
365
+ ...deriveTextureExtent(tex.format, width, height),
339
366
  format: tex.format,
340
367
  mipLevelCount,
341
368
  usage,
@@ -373,8 +400,9 @@ export function deriveRenderDataCubemap(source: TextureAsset): Result<CubeRender
373
400
  }),
374
401
  );
375
402
  }
403
+ const sourceHeight = source.shape.viewDimension === '2d' ? source.shape.extent.height : 0;
376
404
  return ok({
377
- cubeFaceSize: source.height,
405
+ cubeFaceSize: sourceHeight,
378
406
  outputFormat: 'rgba16float',
379
407
  needsHalfConversion: source.format === 'rgba32float',
380
408
  cubeUsage:
@@ -665,7 +665,10 @@ function dispatchFullscreenPass(
665
665
  // the swap-chain path uses the backend-selected surface view format.
666
666
  let writeFormat = ctx.pipelineState?.colorAttachmentFormat ?? 'rgba8unorm-srgb';
667
667
  if (graphPass !== undefined) {
668
- writeView = ctx.view;
668
+ // Typed graph passes must write their declared output target. The frame
669
+ // surface view is only the fallback for legacy passes; using it here
670
+ // leaves a typed output target cleared while the next pass samples it.
671
+ writeView = (resolveCtx?.resolve(color) as TextureView | undefined) ?? ctx.view;
669
672
  writeFormat = graphOutputFormat ?? writeFormat;
670
673
  } else if (rawSwapchainOutput && color === 'swapchain') {
671
674
  const rawViewRes = ctx.runtime.device.createTextureView(ctx.currentTexture, {});
@@ -733,6 +736,20 @@ function dispatchFullscreenPass(
733
736
  paramsBuffer,
734
737
  depthTexView,
735
738
  depthSampler,
739
+ built.extraColorBindings.map((binding, index) => {
740
+ const read = entry.reads?.filter(
741
+ (candidate) => typeof candidate === 'string' || candidate.sampleType !== 'depth',
742
+ )[index + 1];
743
+ const key = typeof read === 'string' ? read : read?.key;
744
+ const view = key === undefined ? undefined : resolveCtx?.resolve(key);
745
+ if (view === undefined) {
746
+ throw new PostProcessError({
747
+ code: 'fullscreen-input-not-found',
748
+ detail: { readsKey: key ?? 'additional-read', passName: name },
749
+ });
750
+ }
751
+ return { binding, view: view as TextureView };
752
+ }),
736
753
  );
737
754
  if (bindGroup === null) return;
738
755