@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
@@ -0,0 +1,287 @@
1
+ import type {
2
+ BindGroupLayout,
3
+ Buffer,
4
+ RhiDevice,
5
+ RhiQueue,
6
+ Sampler,
7
+ Texture,
8
+ TextureView,
9
+ } from '@forgeax/engine-rhi';
10
+ import type { DeviceScope } from '../device/device-scope';
11
+ import {
12
+ GPU_TEXTURE_USAGE_COPY_SRC,
13
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
14
+ GPU_TEXTURE_USAGE_TEXTURE_BINDING,
15
+ } from '../gpu-texture-usage';
16
+ import { GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_UNIFORM } from '../gpu-usage';
17
+ import type { RenderFrameState } from '../record/frame-snapshot';
18
+
19
+ interface TemporalSurface {
20
+ readonly texture: Texture;
21
+ readonly view: TextureView;
22
+ }
23
+
24
+ export interface TemporalGpuState {
25
+ readonly device: RhiDevice;
26
+ readonly scope: DeviceScope;
27
+ readonly childScope: DeviceScope;
28
+ width: number;
29
+ height: number;
30
+ valid: boolean;
31
+ readIndex: 0 | 1;
32
+ pendingIndex: 0 | 1 | undefined;
33
+ readonly color: [TemporalSurface, TemporalSurface];
34
+ readonly temporal: [TemporalSurface, TemporalSurface];
35
+ bindGroupLayout: BindGroupLayout | undefined;
36
+ sampler: Sampler | undefined;
37
+ paramsBuffer: Buffer | undefined;
38
+ committed: boolean;
39
+ }
40
+
41
+ function createSurface(
42
+ device: RhiDevice,
43
+ childScope: DeviceScope,
44
+ label: string,
45
+ width: number,
46
+ height: number,
47
+ ): TemporalSurface {
48
+ const texture = device.createTexture({
49
+ label,
50
+ size: { width, height, depthOrArrayLayers: 1 },
51
+ format: 'rgba16float',
52
+ textureBindingViewDimension: undefined,
53
+ usage:
54
+ GPU_TEXTURE_USAGE_COPY_SRC |
55
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
56
+ GPU_TEXTURE_USAGE_TEXTURE_BINDING,
57
+ });
58
+ if (!texture.ok) throw texture.error;
59
+ childScope._adopt('texture', texture.value, (value) => {
60
+ device.destroyTexture(value);
61
+ });
62
+ const view = device.createTextureView(texture.value, {
63
+ label: `${label}.view`,
64
+ dimension: '2d',
65
+ baseMipLevel: 0,
66
+ mipLevelCount: 1,
67
+ baseArrayLayer: 0,
68
+ arrayLayerCount: 1,
69
+ });
70
+ if (!view.ok) throw view.error;
71
+ return { texture: texture.value, view: view.value };
72
+ }
73
+
74
+ function createState(
75
+ device: RhiDevice,
76
+ scope: DeviceScope,
77
+ width: number,
78
+ height: number,
79
+ ): TemporalGpuState {
80
+ const childScope = scope.createChild(`${scope.owner}:temporal`);
81
+ try {
82
+ return {
83
+ device,
84
+ scope,
85
+ childScope,
86
+ width,
87
+ height,
88
+ valid: false,
89
+ readIndex: 0,
90
+ pendingIndex: undefined,
91
+ color: [
92
+ createSurface(device, childScope, 'taa-history-color-a', width, height),
93
+ createSurface(device, childScope, 'taa-history-color-b', width, height),
94
+ ],
95
+ temporal: [
96
+ createSurface(device, childScope, 'taa-history-temporal-a', width, height),
97
+ createSurface(device, childScope, 'taa-history-temporal-b', width, height),
98
+ ],
99
+ bindGroupLayout: undefined,
100
+ sampler: undefined,
101
+ paramsBuffer: undefined,
102
+ committed: false,
103
+ };
104
+ } catch (cause) {
105
+ childScope.abandon();
106
+ throw cause;
107
+ }
108
+ }
109
+
110
+ export function getTemporalParamsBuffer(state: TemporalGpuState): Buffer {
111
+ if (state.paramsBuffer !== undefined) return state.paramsBuffer;
112
+ const created = state.device.createBuffer({
113
+ label: 'taa-resolve-params',
114
+ size: 16,
115
+ usage: GPU_BUFFER_USAGE_UNIFORM | GPU_BUFFER_USAGE_COPY_DST,
116
+ mappedAtCreation: false,
117
+ });
118
+ if (!created.ok) {
119
+ if (!state.committed) state.childScope.abandon();
120
+ throw created.error;
121
+ }
122
+ state.childScope._adopt('buffer', created.value, (value) => {
123
+ state.device.destroyBuffer(value);
124
+ });
125
+ const written = state.device.queue.writeBuffer(created.value, 0, new Uint8Array(16));
126
+ if (!written.ok) {
127
+ if (!state.committed) state.childScope.abandon();
128
+ throw written.error;
129
+ }
130
+ state.paramsBuffer = created.value;
131
+ return created.value;
132
+ }
133
+
134
+ export function getTemporalGpuState(
135
+ frameState: RenderFrameState,
136
+ device: RhiDevice,
137
+ scope: DeviceScope,
138
+ width: number,
139
+ height: number,
140
+ ): TemporalGpuState {
141
+ const staged = frameState.temporalGpuState;
142
+ if (
143
+ staged !== undefined &&
144
+ staged.scope === scope &&
145
+ staged.width === width &&
146
+ staged.height === height
147
+ ) {
148
+ return staged;
149
+ }
150
+ const existing = frameState.activeTemporalGpuState;
151
+ if (
152
+ existing !== undefined &&
153
+ existing.scope === scope &&
154
+ existing.width === width &&
155
+ existing.height === height
156
+ ) {
157
+ return existing;
158
+ }
159
+ const next = createState(device, scope, width, height);
160
+ frameState.temporalGpuState = next;
161
+ return next;
162
+ }
163
+
164
+ export function getTemporalBindGroupResources(state: TemporalGpuState): {
165
+ readonly layout: BindGroupLayout;
166
+ readonly sampler: Sampler | null;
167
+ } {
168
+ if (state.bindGroupLayout !== undefined) {
169
+ return {
170
+ layout: state.bindGroupLayout,
171
+ sampler: state.sampler ?? null,
172
+ };
173
+ }
174
+ try {
175
+ const layout = state.device.createBindGroupLayout({
176
+ label: 'taa-resolve-bind-group',
177
+ entries: [
178
+ {
179
+ binding: 0,
180
+ visibility: 2,
181
+ texture: { sampleType: 'unfilterable-float', viewDimension: '2d' },
182
+ },
183
+ { binding: 1, visibility: 2, sampler: { type: 'non-filtering' } },
184
+ {
185
+ binding: 2,
186
+ visibility: 2,
187
+ texture: { sampleType: 'unfilterable-float', viewDimension: '2d' },
188
+ },
189
+ { binding: 3, visibility: 2, sampler: { type: 'non-filtering' } },
190
+ {
191
+ binding: 4,
192
+ visibility: 2,
193
+ texture: { sampleType: 'unfilterable-float', viewDimension: '2d' },
194
+ },
195
+ { binding: 5, visibility: 2, sampler: { type: 'non-filtering' } },
196
+ {
197
+ binding: 6,
198
+ visibility: 2,
199
+ texture: { sampleType: 'unfilterable-float', viewDimension: '2d' },
200
+ },
201
+ { binding: 7, visibility: 2, sampler: { type: 'non-filtering' } },
202
+ { binding: 8, visibility: 2, buffer: { type: 'uniform' } },
203
+ ],
204
+ });
205
+ if (!layout.ok) throw layout.error;
206
+ state.childScope._adopt('binding', layout.value, () => undefined);
207
+ const sampler = state.device.createSampler({
208
+ addressModeU: 'clamp-to-edge',
209
+ addressModeV: 'clamp-to-edge',
210
+ magFilter: 'nearest',
211
+ minFilter: 'nearest',
212
+ });
213
+ if (!sampler.ok) throw sampler.error;
214
+ state.childScope._adopt('binding', sampler.value, () => undefined);
215
+ state.bindGroupLayout = layout.value;
216
+ state.sampler = sampler.value;
217
+ return { layout: layout.value, sampler: sampler.value };
218
+ } catch (cause) {
219
+ if (!state.committed) {
220
+ state.childScope.abandon();
221
+ state.bindGroupLayout = undefined;
222
+ state.sampler = undefined;
223
+ }
224
+ throw cause;
225
+ }
226
+ }
227
+
228
+ export function temporalReadIndex(state: TemporalGpuState): 0 | 1 {
229
+ return state.readIndex;
230
+ }
231
+
232
+ export function temporalWriteIndex(state: TemporalGpuState): 0 | 1 {
233
+ return state.readIndex === 0 ? 1 : 0;
234
+ }
235
+
236
+ export function stageTemporalGpuSubmit(state: TemporalGpuState): void {
237
+ state.pendingIndex = state.readIndex === 0 ? 1 : 0;
238
+ }
239
+
240
+ export function hasPendingTemporalGpuSubmit(state: TemporalGpuState): boolean {
241
+ return state.pendingIndex !== undefined;
242
+ }
243
+
244
+ export function commitTemporalGpuSubmit(state: TemporalGpuState): boolean {
245
+ if (state.pendingIndex === undefined) return false;
246
+ state.readIndex = state.pendingIndex;
247
+ state.pendingIndex = undefined;
248
+ state.valid = true;
249
+ state.committed = true;
250
+ return true;
251
+ }
252
+
253
+ export function abortTemporalGpuSubmit(state: TemporalGpuState): void {
254
+ state.pendingIndex = undefined;
255
+ }
256
+
257
+ export function retireTemporalGpuState(state: TemporalGpuState): void {
258
+ state.pendingIndex = undefined;
259
+ state.childScope.retire();
260
+ state.valid = false;
261
+ state.committed = false;
262
+ state.bindGroupLayout = undefined;
263
+ state.sampler = undefined;
264
+ state.paramsBuffer = undefined;
265
+ }
266
+
267
+ export function retireTemporalGpuStateAfterFence(
268
+ state: TemporalGpuState,
269
+ queue: RhiQueue,
270
+ retiring: Set<TemporalGpuState>,
271
+ onFailure: (cause: unknown) => void,
272
+ ): void {
273
+ if (state.childScope.state === 'retired' || state.childScope.state === 'abandoned') return;
274
+ state.childScope.beginRetire();
275
+ retiring.add(state);
276
+ void queue.onSubmittedWorkDone().then(
277
+ () => {
278
+ retiring.delete(state);
279
+ retireTemporalGpuState(state);
280
+ },
281
+ (cause) => {
282
+ retiring.delete(state);
283
+ onFailure(cause);
284
+ retireTemporalGpuState(state);
285
+ },
286
+ );
287
+ }
@@ -0,0 +1,92 @@
1
+ import type { DeviceScope, ResourceRef } from '../device/device-scope';
2
+ import { createTemporalCoverage, type TemporalCoverage } from './coverage';
3
+ import type { TemporalView } from './view';
4
+
5
+ export type TemporalProducer = 'rigid' | 'instance' | 'skin' | 'morph' | 'transparent' | 'vfx';
6
+ export type TemporalProducerState = Partial<Record<TemporalProducer, string>>;
7
+
8
+ export interface TemporalHistorySnapshot {
9
+ readonly historyValid: boolean;
10
+ readonly frameIndex: number;
11
+ readonly previous: TemporalProducerState;
12
+ readonly coverage: TemporalCoverage;
13
+ readonly resetReason: string | undefined;
14
+ }
15
+
16
+ interface HistoryOptions {
17
+ readonly width: number;
18
+ readonly height: number;
19
+ readonly mode: 'off' | 'taa';
20
+ }
21
+
22
+ export class TemporalHistory {
23
+ readonly childScope: DeviceScope | undefined;
24
+ readonly coverage: TemporalCoverage;
25
+ readonly historyCount: number;
26
+ readonly historyBytes: number;
27
+ private readonly resources: readonly ResourceRef<object>[];
28
+ private current: TemporalProducerState = {};
29
+ private pending: TemporalProducerState | undefined;
30
+ private valid = false;
31
+ private index = 0;
32
+ private resetReason: string | undefined;
33
+
34
+ constructor(scope: DeviceScope, options: HistoryOptions) {
35
+ const taa = options.mode === 'taa';
36
+ this.coverage = taa
37
+ ? createTemporalCoverage(options.width, options.height)
38
+ : Object.freeze({
39
+ width: options.width,
40
+ height: options.height,
41
+ bytes: 0,
42
+ fullScreen: true as const,
43
+ });
44
+ this.historyCount = taa ? 4 : 0;
45
+ this.historyBytes = this.coverage.bytes;
46
+ if (!taa) {
47
+ this.resources = [];
48
+ return;
49
+ }
50
+ const child = scope.createChild(`${scope.owner}:temporal-history`);
51
+ this.childScope = child;
52
+ this.resources = Object.freeze([
53
+ child.ref('texture', Object.freeze({ slot: 'color-a' })),
54
+ child.ref('texture', Object.freeze({ slot: 'color-b' })),
55
+ child.ref('texture', Object.freeze({ slot: 'temporal-a' })),
56
+ child.ref('texture', Object.freeze({ slot: 'temporal-b' })),
57
+ ]);
58
+ }
59
+
60
+ stage(view: TemporalView, producers: TemporalProducerState): void {
61
+ if (view.mode !== 'taa' || this.historyCount === 0) return;
62
+ this.pending = { ...producers };
63
+ this.resetReason = undefined;
64
+ }
65
+
66
+ commit(): void {
67
+ if (this.pending === undefined) return;
68
+ this.current = Object.freeze({ ...this.pending });
69
+ this.pending = undefined;
70
+ this.valid = true;
71
+ this.index += 1;
72
+ }
73
+
74
+ abort(reason: string = 'submit-failure'): void {
75
+ this.pending = undefined;
76
+ this.resetReason = reason;
77
+ }
78
+
79
+ snapshot(): TemporalHistorySnapshot {
80
+ return Object.freeze({
81
+ historyValid: this.valid,
82
+ frameIndex: this.index,
83
+ previous: Object.freeze({ ...this.current }),
84
+ coverage: this.coverage,
85
+ resetReason: this.resetReason,
86
+ });
87
+ }
88
+
89
+ get resourceRefs(): readonly ResourceRef<object>[] {
90
+ return this.resources;
91
+ }
92
+ }
@@ -0,0 +1,6 @@
1
+ export * from './coverage';
2
+ export { TemporalFrameCoordinator } from './frame-coordinator';
3
+ export * from './scene-data';
4
+ export * from './scene-data-catalog';
5
+ export * from './standard-scene-data';
6
+ export * from './temporal-view';
@@ -0,0 +1,97 @@
1
+ import type { TemporalGpuState } from './gpu';
2
+ import type { TemporalHistory } from './history';
3
+ import type { TemporalView } from './view';
4
+
5
+ export interface TemporalResourceInspection {
6
+ readonly active: number;
7
+ readonly candidate: number;
8
+ readonly retiring: number;
9
+ readonly activeBytes: number;
10
+ readonly candidateBytes: number;
11
+ readonly retiringBytes: number;
12
+ }
13
+
14
+ export interface TemporalInspection {
15
+ readonly mode: 'none' | 'fxaa' | 'msaa' | 'taa';
16
+ /** Compatibility projection for temporal carriers; derived from this snapshot. */
17
+ readonly status: 'off' | 'first-frame' | 'stable' | 'reset' | 'aborted';
18
+ readonly historyAttempt: 'none' | 'active' | 'committed' | 'aborted';
19
+ readonly epoch: number;
20
+ readonly viewIdentity: string;
21
+ readonly historyValid: boolean;
22
+ readonly resetReason: string | undefined;
23
+ readonly frameIndex: number;
24
+ readonly historyBytes: number;
25
+ readonly coverage: { readonly width: number; readonly height: number };
26
+ readonly deviceGeneration: number;
27
+ readonly resources: TemporalResourceInspection;
28
+ }
29
+
30
+ function gpuBytes(state: TemporalGpuState | undefined): number {
31
+ return state === undefined ? 0 : state.width * state.height * 32;
32
+ }
33
+
34
+ function gpuResources(state: TemporalGpuState | undefined): number {
35
+ return state?.childScope.resourceDelta() ?? 0;
36
+ }
37
+
38
+ export function inspectTemporal(
39
+ view: TemporalView | undefined,
40
+ history: TemporalHistory | undefined,
41
+ options: {
42
+ readonly active?: TemporalGpuState;
43
+ readonly candidate?: TemporalGpuState;
44
+ readonly retiring?: readonly TemporalGpuState[];
45
+ readonly deviceGeneration?: number;
46
+ } = {},
47
+ ): TemporalInspection {
48
+ const snapshot = history?.snapshot();
49
+ const mode = view?.input.antialias ?? 'none';
50
+ const taa = mode === 'taa';
51
+ const active = taa ? options.active : undefined;
52
+ const candidate = taa ? options.candidate : undefined;
53
+ const retiring = taa ? (options.retiring ?? []) : [];
54
+ const historyBytes = active === undefined ? (snapshot?.coverage.bytes ?? 0) : gpuBytes(active);
55
+ const coverage = snapshot?.coverage ?? {
56
+ width: active?.width ?? candidate?.width ?? 0,
57
+ height: active?.height ?? candidate?.height ?? 0,
58
+ };
59
+ const retiringCount = retiring.reduce((count, state) => count + gpuResources(state), 0);
60
+ const retiringBytes = retiring.reduce((bytes, state) => bytes + gpuBytes(state), 0);
61
+ const status =
62
+ mode !== 'taa'
63
+ ? 'off'
64
+ : view?.resetReason !== undefined && view.resetReason !== 'first-frame'
65
+ ? 'reset'
66
+ : view?.historyValid === true || snapshot?.historyValid === true
67
+ ? 'stable'
68
+ : 'first-frame';
69
+ const historyAttempt =
70
+ mode !== 'taa'
71
+ ? 'none'
72
+ : (active?.valid ?? snapshot?.historyValid ?? false)
73
+ ? 'committed'
74
+ : 'active';
75
+ return Object.freeze({
76
+ mode,
77
+ status,
78
+ historyAttempt,
79
+ epoch: view?.input.frameIndex ?? snapshot?.frameIndex ?? 0,
80
+ viewIdentity: view?.input.viewIdentity ?? 'camera:default',
81
+ historyValid: active?.valid ?? snapshot?.historyValid ?? false,
82
+ resetReason: view?.resetReason ?? snapshot?.resetReason,
83
+ frameIndex: view?.temporalFrameIndex ?? snapshot?.frameIndex ?? 0,
84
+ historyBytes,
85
+ coverage: Object.freeze({ width: coverage.width, height: coverage.height }),
86
+ deviceGeneration:
87
+ options.deviceGeneration ?? active?.scope.generation ?? candidate?.scope.generation ?? 0,
88
+ resources: Object.freeze({
89
+ active: gpuResources(active),
90
+ candidate: gpuResources(candidate),
91
+ retiring: retiringCount,
92
+ activeBytes: gpuBytes(active),
93
+ candidateBytes: gpuBytes(candidate),
94
+ retiringBytes,
95
+ }),
96
+ });
97
+ }
@@ -0,0 +1,200 @@
1
+ import { err, ok, type Result } from '@forgeax/engine-types';
2
+ import type { RenderError } from '../errors/render';
3
+ import { SceneDataUnavailableError } from '../errors/render';
4
+ import {
5
+ registerSceneDataTarget,
6
+ SCENE_DATA_TEMPORAL_V1_DESCRIPTOR,
7
+ SCENE_DATA_TEMPORAL_V1_SCHEMA,
8
+ type SceneDataLane,
9
+ type SceneDataSchemaId,
10
+ type SceneDataTarget,
11
+ sceneDataTargetOwner,
12
+ sceneDataTokenMismatch,
13
+ } from './scene-data';
14
+
15
+ export type SceneDataAvailability =
16
+ | {
17
+ readonly status: 'available';
18
+ readonly completeness: 'exact' | 'exact-with-reactive-fallback';
19
+ }
20
+ | {
21
+ readonly status: 'unavailable';
22
+ readonly reason:
23
+ | 'capability-missing'
24
+ | 'producer-missing'
25
+ | 'coverage-incomplete'
26
+ | 'renderer-recovering';
27
+ };
28
+
29
+ export interface SceneDataInspection {
30
+ readonly schema: SceneDataSchemaId;
31
+ readonly status: SceneDataAvailability['status'];
32
+ readonly generation: number;
33
+ readonly planIdentity: string;
34
+ readonly lane: SceneDataLane;
35
+ readonly completeness?: 'exact' | 'exact-with-reactive-fallback';
36
+ readonly reason?: Exclude<SceneDataAvailability, { status: 'available' }>['reason'];
37
+ readonly missingContributorIds: readonly string[];
38
+ readonly omittedMissingContributorCount: number;
39
+ }
40
+
41
+ export interface SceneDataCatalogOptions {
42
+ readonly featureIdentity: string;
43
+ readonly generation: number;
44
+ readonly planIdentity: string;
45
+ readonly lane?: SceneDataLane;
46
+ readonly rgba16floatRenderable: boolean;
47
+ readonly producerPresent?: boolean;
48
+ readonly coverageComplete?: boolean;
49
+ readonly recovering?: boolean;
50
+ readonly reactiveFallback?: boolean;
51
+ readonly missingContributorIds?: readonly string[];
52
+ }
53
+
54
+ export interface SceneDataCatalog {
55
+ readonly schema: typeof SCENE_DATA_TEMPORAL_V1_SCHEMA;
56
+ readonly generation: number;
57
+ readonly planIdentity: string;
58
+ readonly availability: SceneDataAvailability;
59
+ require<Schema extends SceneDataSchemaId>(schema: Schema): SceneDataTarget<Schema>;
60
+ validate(target: SceneDataTarget, generation?: number): Result<SceneDataTarget, RenderError>;
61
+ inspect(): SceneDataInspection;
62
+ }
63
+
64
+ function availability(options: SceneDataCatalogOptions): SceneDataAvailability {
65
+ if (options.recovering) return { status: 'unavailable', reason: 'renderer-recovering' };
66
+ if (!options.rgba16floatRenderable)
67
+ return { status: 'unavailable', reason: 'capability-missing' };
68
+ if (options.producerPresent === false)
69
+ return { status: 'unavailable', reason: 'producer-missing' };
70
+ if (options.coverageComplete === false)
71
+ return { status: 'unavailable', reason: 'coverage-incomplete' };
72
+ return {
73
+ status: 'available',
74
+ completeness: options.reactiveFallback ? 'exact-with-reactive-fallback' : 'exact',
75
+ };
76
+ }
77
+
78
+ function createTarget(owner: SceneDataCatalogOptions): SceneDataTarget {
79
+ const target = Object.freeze({
80
+ kind: 'scene-data' as const,
81
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
82
+ access: 'sampled-read' as const,
83
+ format: 'rgba16float' as const,
84
+ sampleCount: 1 as const,
85
+ extent: 'render-resolution' as const,
86
+ }) as SceneDataTarget;
87
+ registerSceneDataTarget(target, {
88
+ featureIdentity: owner.featureIdentity,
89
+ planIdentity: owner.planIdentity,
90
+ generation: owner.generation,
91
+ });
92
+ return target;
93
+ }
94
+
95
+ function tokenError(catalog: SceneDataCatalogOptions, operation: string): RenderError {
96
+ return sceneDataTokenMismatch(
97
+ operation,
98
+ 'foreign-kind',
99
+ {
100
+ featureIdentity: catalog.featureIdentity,
101
+ planIdentity: catalog.planIdentity,
102
+ generation: catalog.generation,
103
+ },
104
+ undefined,
105
+ );
106
+ }
107
+
108
+ function unavailableError(
109
+ options: SceneDataCatalogOptions,
110
+ reason: Exclude<SceneDataAvailability, { status: 'available' }>['reason'],
111
+ ): RenderError {
112
+ const recovery =
113
+ reason === 'capability-missing'
114
+ ? 'enable-capability'
115
+ : reason === 'renderer-recovering'
116
+ ? 'renderer-recover'
117
+ : 'next-frame';
118
+ return new SceneDataUnavailableError({
119
+ featureIdentity: options.featureIdentity,
120
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
121
+ lane: options.lane ?? 'direct',
122
+ reason,
123
+ missingContributorIds: options.missingContributorIds ?? [],
124
+ omittedMissingContributorCount: 0,
125
+ recovery,
126
+ });
127
+ }
128
+
129
+ export function createSceneDataCatalog(options: SceneDataCatalogOptions): SceneDataCatalog {
130
+ const state = availability(options);
131
+ const owner = {
132
+ featureIdentity: options.featureIdentity,
133
+ planIdentity: options.planIdentity,
134
+ generation: options.generation,
135
+ };
136
+ const missing = [...(options.missingContributorIds ?? [])];
137
+ const inspectionBase = {
138
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
139
+ generation: options.generation,
140
+ planIdentity: options.planIdentity,
141
+ lane: options.lane ?? 'direct',
142
+ missingContributorIds: Object.freeze(missing.slice(0, 32)),
143
+ omittedMissingContributorCount: Math.max(0, missing.length - 32),
144
+ };
145
+ return {
146
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
147
+ generation: options.generation,
148
+ planIdentity: options.planIdentity,
149
+ availability: state,
150
+ require(schema) {
151
+ if (schema !== SCENE_DATA_TEMPORAL_V1_SCHEMA || state.status !== 'available') {
152
+ if (state.status === 'unavailable') throw unavailableError(options, state.reason);
153
+ throw tokenError(options, 'require scene-data target');
154
+ }
155
+ return createTarget(options) as SceneDataTarget<typeof schema>;
156
+ },
157
+ validate(target, generation = options.generation) {
158
+ const targetOwner = sceneDataTargetOwner(target);
159
+ if (targetOwner === undefined) {
160
+ return err(
161
+ sceneDataTokenMismatch('validate scene-data target', 'foreign-feature', owner, target),
162
+ );
163
+ }
164
+ if (
165
+ targetOwner.planIdentity !== owner.planIdentity ||
166
+ targetOwner.featureIdentity !== owner.featureIdentity
167
+ ) {
168
+ return err(
169
+ sceneDataTokenMismatch('validate scene-data target', 'foreign-feature', owner, target),
170
+ );
171
+ }
172
+ if (generation !== owner.generation || targetOwner.generation !== owner.generation) {
173
+ return err(
174
+ sceneDataTokenMismatch(
175
+ 'validate scene-data target',
176
+ 'generation-mismatch',
177
+ owner,
178
+ target,
179
+ ),
180
+ );
181
+ }
182
+ if (target.access !== 'sampled-read') {
183
+ return err(
184
+ sceneDataTokenMismatch('validate scene-data target', 'layout-mismatch', owner, target),
185
+ );
186
+ }
187
+ return ok(target);
188
+ },
189
+ inspect() {
190
+ return Object.freeze(
191
+ state.status === 'available'
192
+ ? { ...inspectionBase, status: state.status, completeness: state.completeness }
193
+ : { ...inspectionBase, status: state.status, reason: state.reason },
194
+ );
195
+ },
196
+ };
197
+ }
198
+
199
+ export { SCENE_DATA_TEMPORAL_V1_SCHEMA } from './scene-data';
200
+ export { SCENE_DATA_TEMPORAL_V1_DESCRIPTOR };