@forgeax/engine-render 0.1.7 → 0.1.19

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 (683) 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 +12 -2
  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-FJ6P52EE.mjs +46 -0
  18. package/dist/chunk-FJ6P52EE.mjs.map +1 -0
  19. package/dist/chunk-IPXCABEP.mjs +73 -0
  20. package/dist/chunk-IPXCABEP.mjs.map +1 -0
  21. package/dist/chunk-JDWARUOI.mjs +44 -0
  22. package/dist/chunk-JDWARUOI.mjs.map +1 -0
  23. package/dist/{chunk-YEJIUW7D.mjs → chunk-LOSO4CTV.mjs} +296 -547
  24. package/dist/chunk-LOSO4CTV.mjs.map +1 -0
  25. package/dist/chunk-PCHBPYML.mjs +385 -0
  26. package/dist/chunk-PCHBPYML.mjs.map +1 -0
  27. package/dist/chunk-RJRUS55L.mjs +9323 -0
  28. package/dist/chunk-RJRUS55L.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-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
  32. package/dist/chunk-VFPLTKCU.mjs.map +1 -0
  33. package/dist/chunk-YTQ5C7YQ.mjs +584 -0
  34. package/dist/chunk-YTQ5C7YQ.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/motion-blur.d.ts +7 -0
  44. package/dist/components/motion-blur.d.ts.map +1 -0
  45. package/dist/construct-renderer.d.ts +2 -2
  46. package/dist/construct-renderer.d.ts.map +1 -1
  47. package/dist/construct-renderer.mjs +10914 -16392
  48. package/dist/construct-renderer.mjs.map +1 -1
  49. package/dist/device/device-scope.d.ts +4 -0
  50. package/dist/device/device-scope.d.ts.map +1 -1
  51. package/dist/environment/frame.d.ts +60 -0
  52. package/dist/environment/frame.d.ts.map +1 -0
  53. package/dist/environment/generation.d.ts +21 -0
  54. package/dist/environment/generation.d.ts.map +1 -0
  55. package/dist/environment/graph.d.ts +4 -0
  56. package/dist/environment/graph.d.ts.map +1 -0
  57. package/dist/environment/inspection.d.ts +48 -0
  58. package/dist/environment/inspection.d.ts.map +1 -0
  59. package/dist/environment/lifecycle.d.ts +39 -0
  60. package/dist/environment/lifecycle.d.ts.map +1 -0
  61. package/dist/environment/signature.d.ts +25 -0
  62. package/dist/environment/signature.d.ts.map +1 -0
  63. package/dist/errors/render.d.ts +136 -1
  64. package/dist/errors/render.d.ts.map +1 -1
  65. package/dist/extract/camera.d.ts +5 -0
  66. package/dist/extract/camera.d.ts.map +1 -0
  67. package/dist/extract/environment.d.ts +74 -0
  68. package/dist/extract/environment.d.ts.map +1 -0
  69. package/dist/extract/visibility.d.ts +1 -1
  70. package/dist/extract/visibility.d.ts.map +1 -1
  71. package/dist/features/host.d.ts +9 -2
  72. package/dist/features/host.d.ts.map +1 -1
  73. package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
  74. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
  75. package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
  76. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
  77. package/dist/features/plan.d.ts +17 -2
  78. package/dist/features/plan.d.ts.map +1 -1
  79. package/dist/features/prepared-gpu-work.d.ts +3 -1
  80. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  81. package/dist/features/prepared-graphics.d.ts +2 -1
  82. package/dist/features/prepared-graphics.d.ts.map +1 -1
  83. package/dist/features/render-graph-raster.d.ts +2 -1
  84. package/dist/features/render-graph-raster.d.ts.map +1 -1
  85. package/dist/features/targets.d.ts +3 -0
  86. package/dist/features/targets.d.ts.map +1 -1
  87. package/dist/features/types.d.ts +12 -0
  88. package/dist/features/types.d.ts.map +1 -1
  89. package/dist/fullscreen-post-process-pass.d.ts +7 -1
  90. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  91. package/dist/gpu-scene.d.ts +2 -0
  92. package/dist/gpu-scene.d.ts.map +1 -1
  93. package/dist/ibl/skylight-bind-group.d.ts +5 -6
  94. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  95. package/dist/index.d.ts +17 -6
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.mjs +6 -4
  98. package/dist/index.mjs.map +1 -1
  99. package/dist/inspection-types.d.ts +43 -1
  100. package/dist/inspection-types.d.ts.map +1 -1
  101. package/dist/internal.d.ts +2 -0
  102. package/dist/internal.d.ts.map +1 -1
  103. package/dist/internal.mjs +2 -0
  104. package/dist/materials.d.ts +22 -0
  105. package/dist/materials.d.ts.map +1 -1
  106. package/dist/pbr-pipeline.d.ts +10 -6
  107. package/dist/pbr-pipeline.d.ts.map +1 -1
  108. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  109. package/dist/pipeline/standard-pipeline.d.ts +3 -0
  110. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  111. package/dist/pipeline/standard-post.d.ts +48 -0
  112. package/dist/pipeline/standard-post.d.ts.map +1 -0
  113. package/dist/pipeline/standard-profile.d.ts +3 -6
  114. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  115. package/dist/pipeline-builder.d.ts +18 -0
  116. package/dist/pipeline-builder.d.ts.map +1 -1
  117. package/dist/pipeline-spec.d.ts.map +1 -1
  118. package/dist/plugin.d.ts.map +1 -1
  119. package/dist/record/frame-snapshot.d.ts +100 -5
  120. package/dist/record/frame-snapshot.d.ts.map +1 -1
  121. package/dist/record/frame-targets.d.ts.map +1 -1
  122. package/dist/record/frame.d.ts +4 -2
  123. package/dist/record/frame.d.ts.map +1 -1
  124. package/dist/record/main-pass-geometry.d.ts +11 -0
  125. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  126. package/dist/record/main-pass-material.d.ts +8 -5
  127. package/dist/record/main-pass-material.d.ts.map +1 -1
  128. package/dist/record/main-pass-sprite-draws.d.ts +8 -1
  129. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  130. package/dist/record/main-pass.d.ts +2 -0
  131. package/dist/record/main-pass.d.ts.map +1 -1
  132. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  133. package/dist/record/render-context.d.ts +76 -18
  134. package/dist/record/render-context.d.ts.map +1 -1
  135. package/dist/record/shadow-pass.d.ts.map +1 -1
  136. package/dist/record/skybox-post-pass.d.ts +1 -11
  137. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  138. package/dist/record/typed-frame-graph.d.ts +26 -2
  139. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  140. package/dist/record/view-ubo.d.ts +4 -1
  141. package/dist/record/view-ubo.d.ts.map +1 -1
  142. package/dist/render-contract.d.ts +92 -8
  143. package/dist/render-contract.d.ts.map +1 -1
  144. package/dist/render-graph-primitives.d.ts.map +1 -1
  145. package/dist/render-pipeline.d.ts +50 -6
  146. package/dist/render-pipeline.d.ts.map +1 -1
  147. package/dist/render-system-extract.d.ts +29 -5
  148. package/dist/render-system-extract.d.ts.map +1 -1
  149. package/dist/render-system.d.ts +23 -4
  150. package/dist/render-system.d.ts.map +1 -1
  151. package/dist/scene/render-scene.d.ts +36 -2
  152. package/dist/scene/render-scene.d.ts.map +1 -1
  153. package/dist/temporal/coverage.d.ts +42 -0
  154. package/dist/temporal/coverage.d.ts.map +1 -0
  155. package/dist/temporal/frame-coordinator.d.ts +99 -0
  156. package/dist/temporal/frame-coordinator.d.ts.map +1 -0
  157. package/dist/temporal/gpu.d.ts +39 -0
  158. package/dist/temporal/gpu.d.ts.map +1 -0
  159. package/dist/temporal/history.d.ts +37 -0
  160. package/dist/temporal/history.d.ts.map +1 -0
  161. package/dist/temporal/index.d.ts +7 -0
  162. package/dist/temporal/index.d.ts.map +1 -0
  163. package/dist/temporal/index.mjs +8 -0
  164. package/dist/temporal/index.mjs.map +1 -0
  165. package/dist/temporal/inspection.d.ts +36 -0
  166. package/dist/temporal/inspection.d.ts.map +1 -0
  167. package/dist/temporal/scene-data-catalog.d.ts +48 -0
  168. package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
  169. package/dist/temporal/scene-data.d.ts +43 -0
  170. package/dist/temporal/scene-data.d.ts.map +1 -0
  171. package/dist/temporal/standard-scene-data.d.ts +61 -0
  172. package/dist/temporal/standard-scene-data.d.ts.map +1 -0
  173. package/dist/temporal/taa-history-resources.d.ts +22 -0
  174. package/dist/temporal/taa-history-resources.d.ts.map +1 -0
  175. package/dist/temporal/taa-history-store.d.ts +27 -0
  176. package/dist/temporal/taa-history-store.d.ts.map +1 -0
  177. package/dist/temporal/taa-resolve.d.ts +15 -0
  178. package/dist/temporal/taa-resolve.d.ts.map +1 -0
  179. package/dist/temporal/temporal-view.d.ts +40 -0
  180. package/dist/temporal/temporal-view.d.ts.map +1 -0
  181. package/dist/temporal/transaction.d.ts +9 -0
  182. package/dist/temporal/transaction.d.ts.map +1 -0
  183. package/dist/temporal/view.d.ts +56 -0
  184. package/dist/temporal/view.d.ts.map +1 -0
  185. package/dist/transmission/backdrop.d.ts +147 -0
  186. package/dist/transmission/backdrop.d.ts.map +1 -0
  187. package/dist/transmission/inspection.d.ts +57 -0
  188. package/dist/transmission/inspection.d.ts.map +1 -0
  189. package/dist/transmission/oracle.d.ts +42 -0
  190. package/dist/transmission/oracle.d.ts.map +1 -0
  191. package/dist/transmission/projection.d.ts +37 -0
  192. package/dist/transmission/projection.d.ts.map +1 -0
  193. package/dist/typed-render-graph-primitives.d.ts +25 -2
  194. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  195. package/package.json +24 -19
  196. package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
  197. package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
  198. package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
  199. package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
  200. package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
  201. package/src/__tests__/detached-inspection.integration.test.ts +177 -0
  202. package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
  203. package/src/__tests__/environment-generation.integration.test.ts +141 -0
  204. package/src/__tests__/environment-selection.unit.test.ts +245 -0
  205. package/src/__tests__/factory-contract.integration.test.ts +1380 -9
  206. package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
  207. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
  208. package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
  209. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
  210. package/src/__tests__/gpu-scene.unit.test.ts +10 -0
  211. package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
  212. package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
  213. package/src/__tests__/material-cooked-projection.unit.test.ts +18 -146
  214. package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
  215. package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
  216. package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
  217. package/src/__tests__/public-surface.test-d.ts +15 -1
  218. package/src/__tests__/render-error-code-owner.test-d.ts +9 -0
  219. package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
  220. package/src/__tests__/render-error-exhaustive.test-d.ts +3 -0
  221. package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
  222. package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
  223. package/src/__tests__/render-feature-plan.test-d.ts +22 -89
  224. package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
  225. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
  226. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
  227. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +395 -1
  228. package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
  229. package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
  230. package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
  231. package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
  232. package/src/__tests__/scene-data-contract.test-d.ts +35 -0
  233. package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
  234. package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
  235. package/src/__tests__/shader-manifest-fixture.ts +111 -0
  236. package/src/__tests__/skinned-shadow-caster.test.ts +102 -0
  237. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
  238. package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
  239. package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
  240. package/src/__tests__/standard-profile-oracle.unit.test.ts +10 -2
  241. package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
  242. package/src/__tests__/surface-configuration.unit.test.ts +211 -12
  243. package/src/__tests__/taa-transaction.integration.test.ts +30 -0
  244. package/src/__tests__/temporal-admission.integration.test.ts +40 -0
  245. package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
  246. package/src/__tests__/temporal-demand.unit.test.ts +44 -0
  247. package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
  248. package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
  249. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
  250. package/src/__tests__/temporal-performance.integration.test.ts +615 -0
  251. package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
  252. package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
  253. package/src/__tests__/temporal-view.unit.test.ts +152 -0
  254. package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
  255. package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
  256. package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
  257. package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
  258. package/src/__tests__/visibility-extract.integration.test.ts +27 -1
  259. package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
  260. package/src/assembly/backend-contract.ts +47 -1
  261. package/src/assembly/factory.ts +1224 -505
  262. package/src/assembly/host-contract.ts +4 -0
  263. package/src/assembly/renderer-frame-transaction.ts +75 -0
  264. package/src/assembly/renderer-inspection.ts +112 -0
  265. package/src/assembly/renderer-lifecycle.ts +6 -0
  266. package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
  267. package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
  268. package/src/components/atmosphere.ts +10 -0
  269. package/src/components/camera.ts +2 -1
  270. package/src/components/fog.ts +9 -0
  271. package/src/components/index.ts +3 -0
  272. package/src/components/motion-blur.ts +8 -0
  273. package/src/construct-renderer.ts +40 -3
  274. package/src/device/device-scope.ts +15 -1
  275. package/src/environment/frame.ts +185 -0
  276. package/src/environment/generation.ts +23 -0
  277. package/src/environment/graph.ts +9 -0
  278. package/src/environment/inspection.ts +87 -0
  279. package/src/environment/lifecycle.ts +250 -0
  280. package/src/environment/signature.ts +55 -0
  281. package/src/errors/render.ts +285 -0
  282. package/src/extract/camera.ts +78 -0
  283. package/src/extract/environment.ts +171 -0
  284. package/src/extract/visibility.ts +38 -19
  285. package/src/features/host.ts +36 -5
  286. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
  287. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
  288. package/src/features/motion-blur/motion-blur-feature.ts +119 -0
  289. package/src/features/motion-blur/motion-blur-params.ts +89 -0
  290. package/src/features/plan.ts +32 -3
  291. package/src/features/prepared-gpu-work.ts +21 -6
  292. package/src/features/prepared-graphics.ts +2 -1
  293. package/src/features/render-graph-raster.ts +2 -1
  294. package/src/features/targets.ts +24 -2
  295. package/src/features/types.ts +13 -0
  296. package/src/fullscreen-post-process-pass.ts +34 -4
  297. package/src/gpu-scene.ts +24 -0
  298. package/src/ibl/skylight-bind-group.ts +30 -38
  299. package/src/index.ts +66 -6
  300. package/src/inspection-types.ts +48 -0
  301. package/src/internal.ts +5 -0
  302. package/src/materials.ts +119 -24
  303. package/src/pbr-pipeline.ts +58 -19
  304. package/src/pipeline/standard-forward-lane.ts +158 -101
  305. package/src/pipeline/standard-pipeline.ts +156 -105
  306. package/src/pipeline/standard-post.ts +373 -0
  307. package/src/pipeline/standard-profile.ts +11 -11
  308. package/src/pipeline-builder.ts +102 -12
  309. package/src/pipeline-spec.ts +9 -0
  310. package/src/plugin.ts +2 -0
  311. package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
  312. package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
  313. package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
  314. package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
  315. package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
  316. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
  317. package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
  318. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
  319. package/src/record/frame-snapshot.ts +129 -5
  320. package/src/record/frame-targets.ts +15 -6
  321. package/src/record/frame.ts +107 -3
  322. package/src/record/main-pass-geometry.ts +86 -40
  323. package/src/record/main-pass-material.ts +114 -66
  324. package/src/record/main-pass-sprite-draws.ts +78 -101
  325. package/src/record/main-pass.ts +77 -4
  326. package/src/record/mesh-ssbo.ts +22 -3
  327. package/src/record/render-context.ts +189 -23
  328. package/src/record/shadow-pass.ts +113 -23
  329. package/src/record/skybox-post-pass.ts +97 -41
  330. package/src/record/typed-frame-graph.ts +565 -26
  331. package/src/record/view-ubo.ts +52 -4
  332. package/src/render-contract.ts +109 -6
  333. package/src/render-graph-primitives.ts +18 -1
  334. package/src/render-pipeline.ts +100 -27
  335. package/src/render-system-extract.ts +193 -69
  336. package/src/render-system.ts +482 -41
  337. package/src/scene/render-scene.ts +250 -7
  338. package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
  339. package/src/temporal/coverage.ts +76 -0
  340. package/src/temporal/frame-coordinator.ts +311 -0
  341. package/src/temporal/gpu.ts +287 -0
  342. package/src/temporal/history.ts +92 -0
  343. package/src/temporal/index.ts +6 -0
  344. package/src/temporal/inspection.ts +97 -0
  345. package/src/temporal/scene-data-catalog.ts +200 -0
  346. package/src/temporal/scene-data.ts +149 -0
  347. package/src/temporal/standard-scene-data.ts +182 -0
  348. package/src/temporal/taa-history-resources.ts +128 -0
  349. package/src/temporal/taa-history-store.ts +79 -0
  350. package/src/temporal/taa-resolve.ts +34 -0
  351. package/src/temporal/temporal-view.ts +169 -0
  352. package/src/temporal/transaction.ts +17 -0
  353. package/src/temporal/view.ts +161 -0
  354. package/src/transmission/__tests__/capability.unit.test.ts +83 -0
  355. package/src/transmission/__tests__/composition.integration.test.ts +161 -0
  356. package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
  357. package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
  358. package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
  359. package/src/transmission/__tests__/projection.unit.test.ts +71 -0
  360. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +438 -0
  361. package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
  362. package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
  363. package/src/transmission/backdrop.ts +572 -0
  364. package/src/transmission/inspection.ts +190 -0
  365. package/src/transmission/oracle.ts +141 -0
  366. package/src/transmission/projection.ts +83 -0
  367. package/src/typed-render-graph-primitives.ts +162 -9
  368. package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
  369. package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
  370. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
  371. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
  372. package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
  373. package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
  374. package/dist/__tests__/cluster-binner.test.d.ts +0 -2
  375. package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
  376. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
  377. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
  378. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
  379. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
  380. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
  381. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
  382. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
  383. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
  384. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
  385. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
  386. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
  387. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
  388. package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
  389. package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
  390. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
  391. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
  392. package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
  393. package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
  394. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
  395. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
  396. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
  397. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
  398. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
  399. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
  400. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
  401. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
  402. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
  403. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
  404. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
  405. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
  406. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
  407. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
  408. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
  409. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
  410. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
  411. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
  412. package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
  413. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
  414. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
  415. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
  416. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
  417. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
  418. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
  419. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
  420. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
  421. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
  422. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
  423. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
  424. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
  425. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
  426. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
  427. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
  428. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
  429. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
  430. package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
  431. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
  432. package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
  433. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
  434. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
  435. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
  436. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
  437. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
  438. package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
  439. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
  440. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
  441. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
  442. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
  443. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
  444. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
  445. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
  446. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
  447. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
  448. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
  449. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
  450. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
  451. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
  452. package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
  453. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
  454. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
  455. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
  456. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
  457. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
  458. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
  459. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
  460. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
  461. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
  462. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
  463. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
  464. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
  465. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
  466. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
  467. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
  468. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
  469. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
  470. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
  471. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
  472. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
  473. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
  474. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
  475. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
  476. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
  477. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
  479. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
  480. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
  481. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
  482. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
  483. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
  484. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
  485. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
  486. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
  487. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
  488. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
  489. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
  490. package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
  491. package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
  492. package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
  493. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
  494. package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
  495. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
  496. package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
  497. package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
  498. package/dist/__tests__/public-surface.test-d.d.ts +0 -2
  499. package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
  500. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
  501. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
  503. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
  504. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
  505. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
  506. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
  507. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  508. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  509. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  510. package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
  511. package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
  512. package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
  513. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
  514. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
  515. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
  517. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
  518. package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
  519. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
  520. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
  521. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
  522. package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
  523. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
  524. package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
  525. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
  526. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
  527. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
  529. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
  530. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  531. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  532. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
  533. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
  534. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
  535. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
  536. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
  537. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
  538. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
  539. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
  540. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
  541. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
  542. package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
  543. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
  544. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
  545. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
  547. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
  549. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
  551. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
  552. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
  553. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
  555. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
  556. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
  557. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
  558. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
  559. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
  560. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
  561. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
  562. package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
  563. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
  564. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
  565. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
  566. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
  567. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
  568. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
  569. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
  570. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
  571. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
  572. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
  573. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
  574. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
  575. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
  576. package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
  577. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
  578. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
  579. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
  580. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  581. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  582. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
  583. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
  584. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
  585. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
  586. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
  587. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
  588. package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
  589. package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
  590. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
  591. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
  592. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
  593. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
  594. package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
  595. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
  596. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
  597. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
  598. package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
  599. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
  600. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
  601. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
  602. package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
  603. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
  604. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
  605. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
  606. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
  607. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
  608. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
  609. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
  610. package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
  611. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
  612. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
  613. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
  614. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
  615. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
  616. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
  617. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
  618. package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
  619. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
  620. package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
  621. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
  622. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
  623. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
  624. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
  625. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
  626. package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
  627. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
  628. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
  629. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
  630. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
  631. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
  632. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
  633. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
  634. package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
  635. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
  636. package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
  637. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
  638. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
  639. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
  640. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
  641. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
  642. package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
  643. package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
  644. package/dist/chunk-CQXZC5XI.mjs.map +0 -1
  645. package/dist/chunk-HCOGPHKS.mjs +0 -93
  646. package/dist/chunk-HCOGPHKS.mjs.map +0 -1
  647. package/dist/chunk-YEJIUW7D.mjs.map +0 -1
  648. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +0 -2
  649. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +0 -1
  650. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +0 -2
  651. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +0 -1
  652. package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
  653. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
  654. package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
  655. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
  656. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
  657. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
  658. package/dist/points-lines/__tests__/bounds.unit.test.d.ts +0 -2
  659. package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +0 -1
  660. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +0 -2
  661. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +0 -1
  662. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +0 -2
  663. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +0 -1
  664. package/dist/points-lines/__tests__/inspection.unit.test.d.ts +0 -2
  665. package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +0 -1
  666. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +0 -2
  667. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +0 -1
  668. package/dist/points-lines/__tests__/points-lines.bench.d.ts +0 -2
  669. package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +0 -1
  670. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +0 -2
  671. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +0 -1
  672. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +0 -2
  673. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +0 -1
  674. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +0 -2
  675. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +0 -1
  676. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
  677. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
  678. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
  679. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
  680. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
  681. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
  682. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
  683. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { encodeMipmapLevel } from '@forgeax/engine-assets-runtime';
1
2
  import {
2
3
  type CompiledRenderGraph,
3
4
  type GraphResourceResolver,
@@ -10,8 +11,11 @@ import type {
10
11
  RhiCommandEncoder,
11
12
  Texture,
12
13
  TextureFormat,
14
+ TextureView,
13
15
  } from '@forgeax/engine-rhi';
16
+ import { RhiError } from '@forgeax/engine-rhi';
14
17
  import { err, ok, type Result } from '@forgeax/engine-types';
18
+ import { executeRendererFrameTransaction } from '../assembly/renderer-frame-transaction';
15
19
  import { type RenderError, RenderFeatureStageFailedError } from '../errors/render';
16
20
  import {
17
21
  getRenderFeaturePlanExecutionProjection,
@@ -24,7 +28,18 @@ import type {
24
28
  RenderFeatureGraphTargetResolver,
25
29
  } from '../features/render-graph-raster';
26
30
  import { isRenderFeatureTargetHandle } from '../features/targets';
31
+ import {
32
+ buildFullscreenPostProcessPass,
33
+ createFullscreenBindGroup,
34
+ isTemporalFullscreenBinding,
35
+ } from '../fullscreen-post-process-pass';
27
36
  import type { PreparedGpuDrivenFrame } from '../gpu-driven/production-raster';
37
+ import {
38
+ GPU_TEXTURE_USAGE_COPY_DST,
39
+ GPU_TEXTURE_USAGE_COPY_SRC,
40
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
41
+ GPU_TEXTURE_USAGE_TEXTURE_BINDING,
42
+ } from '../gpu-texture-usage';
28
43
  import { STANDARD_PIPELINE_ID } from '../pipeline/standard-profile';
29
44
  import type { CameraSnapshot } from '../render-contract';
30
45
  import type {
@@ -33,10 +48,160 @@ import type {
33
48
  RenderPipelineTopology,
34
49
  } from '../render-pipeline';
35
50
  import type { ExtractedLights } from '../render-system-extract';
51
+ import {
52
+ abortTemporalGpuSubmit,
53
+ commitTemporalGpuSubmit,
54
+ getTemporalGpuState,
55
+ hasPendingTemporalGpuSubmit,
56
+ retireTemporalGpuState,
57
+ retireTemporalGpuStateAfterFence,
58
+ temporalReadIndex,
59
+ temporalWriteIndex,
60
+ } from '../temporal/gpu';
61
+ import { isSceneDataTarget } from '../temporal/scene-data';
62
+ import type { TransmissionDemand } from '../transmission/projection';
36
63
  import { buildPerFrameBindGroups } from './frame-lighting';
37
- import type { RenderFrameState } from './frame-snapshot';
64
+ import { getTextureIdentity, type RenderFrameState } from './frame-snapshot';
38
65
  import type { PipelineState, RenderSystemInternals } from './render-context';
39
- import { resolveSurfaceFormatPair } from './render-context';
66
+ import { resolveSurfaceFormatPair, resolveSurfaceProfile } from './render-context';
67
+
68
+ export interface TemporalGraphCapabilities {
69
+ readonly rgba16floatRender: boolean;
70
+ readonly rgba16floatSample: boolean;
71
+ readonly mrt: boolean;
72
+ }
73
+
74
+ export interface TemporalGraphRoster {
75
+ readonly enabled?: boolean;
76
+ readonly targets: readonly string[];
77
+ readonly passes: readonly string[];
78
+ readonly uploads: number;
79
+ }
80
+
81
+ function importTemporalHistoryTarget(
82
+ graph: RenderGraphBuilder<RenderPipelineFrame>,
83
+ label: string,
84
+ kind: 'color' | 'temporal',
85
+ role: 'read' | 'write',
86
+ ): import('../render-pipeline').RenderPipelineTarget {
87
+ const texture = graph.importTexture(
88
+ label,
89
+ {
90
+ format: 'rgba16float',
91
+ size: 'surface',
92
+ usage:
93
+ GPU_TEXTURE_USAGE_COPY_SRC |
94
+ GPU_TEXTURE_USAGE_COPY_DST |
95
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
96
+ GPU_TEXTURE_USAGE_TEXTURE_BINDING,
97
+ },
98
+ (frame) => {
99
+ const internal = frame as import('./render-context')._InternalRenderPipelineContext;
100
+ const state = getTemporalGpuState(
101
+ internal.frameState,
102
+ internal.runtime.device,
103
+ internal.runtime.deviceScope,
104
+ frame.targetW,
105
+ frame.targetH,
106
+ );
107
+ const index = role === 'read' ? temporalReadIndex(state) : temporalWriteIndex(state);
108
+ return (kind === 'color' ? state.color[index] : state.temporal[index]).texture;
109
+ },
110
+ );
111
+ if (!texture.ok) throw texture.error;
112
+ const view = graph.importView(
113
+ texture.value,
114
+ { label: `${label}.view`, dimension: '2d' },
115
+ (frame) => {
116
+ const internal = frame as import('./render-context')._InternalRenderPipelineContext;
117
+ const state = getTemporalGpuState(
118
+ internal.frameState,
119
+ internal.runtime.device,
120
+ internal.runtime.deviceScope,
121
+ frame.targetW,
122
+ frame.targetH,
123
+ );
124
+ const index = role === 'read' ? temporalReadIndex(state) : temporalWriteIndex(state);
125
+ return (kind === 'color' ? state.color[index] : state.temporal[index]).view;
126
+ },
127
+ );
128
+ if (!view.ok) throw view.error;
129
+ return { texture: texture.value, view: view.value, format: 'rgba16float', sampleCount: 1 };
130
+ }
131
+
132
+ function importTemporalHistoryTargets(
133
+ graph: RenderGraphBuilder<RenderPipelineFrame>,
134
+ ): NonNullable<
135
+ import('../render-pipeline').RenderPipelineBuildContext<RenderPipelineFrame>['taaHistory']
136
+ > {
137
+ return {
138
+ currentColor: importTemporalHistoryTarget(graph, 'taa-history-current-color', 'color', 'write'),
139
+ previousColor: importTemporalHistoryTarget(
140
+ graph,
141
+ 'taa-history-previous-color',
142
+ 'color',
143
+ 'read',
144
+ ),
145
+ currentTemporal: importTemporalHistoryTarget(
146
+ graph,
147
+ 'taa-history-current-temporal',
148
+ 'temporal',
149
+ 'write',
150
+ ),
151
+ previousTemporal: importTemporalHistoryTarget(
152
+ graph,
153
+ 'taa-history-previous-temporal',
154
+ 'temporal',
155
+ 'read',
156
+ ),
157
+ };
158
+ }
159
+
160
+ export function shouldUseTemporalFrameTransaction(
161
+ antialias: CameraSnapshot['antialias'],
162
+ temporalDemand = false,
163
+ ): boolean {
164
+ return antialias === 'taa' || temporalDemand;
165
+ }
166
+
167
+ export function isMotionBlurTemporalDemand(
168
+ motionBlur: CameraSnapshot['motionBlur'] | undefined,
169
+ ): boolean {
170
+ return motionBlur?.shutterAngle !== undefined && motionBlur.shutterAngle > 0;
171
+ }
172
+
173
+ /**
174
+ * Derive the TAA topology from camera POD and backend capabilities. Both
175
+ * Standard lanes consume this declaration; the lane only affects lighting
176
+ * work and never creates a second temporal resolve.
177
+ */
178
+ export function createTemporalGraphRoster(input: {
179
+ readonly antialias: 'none' | 'fxaa' | 'taa';
180
+ readonly lane: 'direct' | 'clustered';
181
+ readonly capabilities?: TemporalGraphCapabilities;
182
+ }): TemporalGraphRoster {
183
+ if (input.antialias !== 'taa') return { targets: [], passes: [], uploads: 0 };
184
+ const capabilities = input.capabilities ?? {
185
+ rgba16floatRender: true,
186
+ rgba16floatSample: true,
187
+ mrt: true,
188
+ };
189
+ if (!capabilities.rgba16floatRender || !capabilities.rgba16floatSample || !capabilities.mrt) {
190
+ return { enabled: false, targets: [], passes: [], uploads: 0 };
191
+ }
192
+ return {
193
+ enabled: true,
194
+ targets: [
195
+ 'standard-scene-temporal',
196
+ 'taa-history-current-color',
197
+ 'taa-history-previous-color',
198
+ 'taa-history-current-temporal',
199
+ 'taa-history-previous-temporal',
200
+ ],
201
+ passes: ['main', 'standard-scene-data', 'taa-resolve', 'output-transform'],
202
+ uploads: 1,
203
+ };
204
+ }
40
205
 
41
206
  export interface RenderFeatureGraphRuntimeState {
42
207
  plans: readonly RenderFeaturePlannedFrame[];
@@ -66,6 +231,14 @@ export interface RenderFeatureGraphCandidate {
66
231
 
67
232
  const featureGraphStates = new WeakMap<RenderSystemInternals, RenderFeatureGraphRuntimeState>();
68
233
 
234
+ type CompiledGraphTargetAccess = CompiledRenderGraph<RenderPipelineFrame> & {
235
+ readonly getColorTargetDescriptor: (
236
+ name: string,
237
+ ) => import('@forgeax/engine-render-graph').ResolvedColorTargetDescriptor | undefined;
238
+ readonly getColorTargetView: (name: string) => TextureView | undefined;
239
+ readonly getColorTargetTexture: (name: string) => Texture | undefined;
240
+ };
241
+
69
242
  export function getRenderFeatureGraphState(
70
243
  internals: RenderSystemInternals,
71
244
  ): RenderFeatureGraphRuntimeState {
@@ -148,13 +321,15 @@ function topologyOf(
148
321
  frameState: RenderFrameState,
149
322
  pipelineState: PipelineState,
150
323
  camera: CameraSnapshot,
324
+ clearOnly: boolean,
151
325
  lights: ExtractedLights,
152
326
  width: number,
153
327
  height: number,
154
328
  shadowMapSize: number | undefined,
155
329
  gpuDriven: PreparedGpuDrivenFrame | undefined,
156
330
  featureGraphCandidate: RenderFeatureGraphCandidate | undefined,
157
- ): RenderPipelineTopology {
331
+ transmissionDemand: TransmissionDemand | undefined,
332
+ ): Result<RenderPipelineTopology, RhiError> {
158
333
  const cascadeCount = Math.max(1, Math.min(4, Math.round(lights.cascadeCount ?? 1))) as
159
334
  | 1
160
335
  | 2
@@ -165,6 +340,15 @@ function topologyOf(
165
340
  pipelineState.format as GPUTextureFormat,
166
341
  pipelineState.colorAttachmentFormat as GPUTextureFormat,
167
342
  );
343
+ const internal = internals.device as unknown as { readonly surfaceViewFormats?: boolean };
344
+ const surfaceProfile = resolveSurfaceProfile(surfaceFormats.storage, surfaceFormats.view, {
345
+ surfaceViewFormats:
346
+ internal.surfaceViewFormats ?? internals.device.caps.backendKind !== 'wgpu-webgl2',
347
+ rawAttachment:
348
+ surfaceFormats.storage === 'rgba8unorm' || surfaceFormats.storage === 'bgra8unorm',
349
+ floatRenderAttachment: internals.device.caps.rgba16floatRenderable,
350
+ });
351
+ if (!surfaceProfile.ok) return surfaceProfile;
168
352
  const featurePostEffects = [
169
353
  ...(featureGraphCandidate?.fullscreenEffects ??
170
354
  getRenderFeatureGraphState(internals).fullscreenEffects),
@@ -181,21 +365,27 @@ function topologyOf(
181
365
  ]),
182
366
  ],
183
367
  };
184
- return {
368
+ return ok({
185
369
  pipelineId: STANDARD_PIPELINE_ID,
186
370
  standardProfile: internals.standardProfile,
187
371
  config,
372
+ clearOnly,
188
373
  surface: {
189
374
  width,
190
375
  height,
191
376
  storageFormat: surfaceFormats.storage as TextureFormat,
192
- viewFormat: surfaceFormats.view as TextureFormat,
377
+ viewFormat: surfaceProfile.value.viewFormat as TextureFormat,
378
+ profile: surfaceProfile.value,
193
379
  },
194
380
  camera: {
195
381
  tonemap: camera.tonemap,
196
382
  antialias: camera.antialias,
197
383
  bloom: camera.bloom,
198
384
  },
385
+ temporal: {
386
+ taa: camera.antialias === 'taa',
387
+ motionBlur: isMotionBlurTemporalDemand(camera.motionBlur),
388
+ },
199
389
  shadow: {
200
390
  mapSize: shadowMapSize ?? 1024,
201
391
  cascadeCount,
@@ -222,13 +412,44 @@ function topologyOf(
222
412
  preparedResourceKey: featureGraphCandidate?.preparedResourceKey ?? '',
223
413
  }),
224
414
  gpuDrivenTopologySignature: gpuDriven?.topologySignature ?? '',
225
- };
415
+ transmissionDemand: transmissionDemand ?? {
416
+ activeCount: 0,
417
+ needsRoughMips: false,
418
+ },
419
+ });
226
420
  }
227
421
 
228
422
  function targetResolver(
229
423
  targets: readonly RenderPipelineFeatureTarget[],
424
+ semanticTargets: readonly import('../render-pipeline').RenderPipelineTarget[] = [],
425
+ namedTargets: Readonly<Record<string, import('../render-pipeline').RenderPipelineTarget>> = {},
230
426
  ): RenderFeatureGraphTargetResolver {
231
427
  return (resource) => {
428
+ const namedKey =
429
+ typeof resource === 'string'
430
+ ? resource
431
+ : isRenderFeatureTargetHandle(resource)
432
+ ? resource.name
433
+ : undefined;
434
+ if (namedKey !== undefined) {
435
+ const named = namedTargets[namedKey];
436
+ if (named !== undefined) {
437
+ return {
438
+ texture: named.texture,
439
+ view: named.view,
440
+ ...(named.resolveTarget === undefined ? {} : { resolveTarget: named.resolveTarget }),
441
+ };
442
+ }
443
+ }
444
+ if (isSceneDataTarget(resource)) {
445
+ const semantic = semanticTargets.find(
446
+ (candidate) =>
447
+ candidate.format === resource.format && candidate.sampleCount === resource.sampleCount,
448
+ );
449
+ return semantic === undefined
450
+ ? undefined
451
+ : { texture: semantic.texture, view: semantic.view };
452
+ }
232
453
  if (!isRenderFeatureTargetHandle(resource)) return undefined;
233
454
  const target = targets.find(
234
455
  (candidate) =>
@@ -262,6 +483,55 @@ function resolveTargetBindings(input: {
262
483
  const sceneDepth = descriptor?.values.sceneDepth;
263
484
  const sceneDepthBinding = descriptor?.values.sceneDepthBinding;
264
485
  if (pipeline === undefined) return undefined;
486
+ if (descriptor?.values.fullscreen === true && isTemporalFullscreenBinding(descriptor.values)) {
487
+ const shader = descriptor.values.shader;
488
+ if (typeof shader !== 'string') return undefined;
489
+ const entry = frame.runtime.lookupPostProcess?.(shader);
490
+ if (entry === undefined) return undefined;
491
+ const fullscreen = buildFullscreenPostProcessPass(
492
+ { device: frame.runtime.device, errorRegistry: frame.runtime.errorRegistry },
493
+ entry,
494
+ isRenderFeatureTargetHandle(descriptor.values.depth) &&
495
+ descriptor.values.depth.sampleCount === 4,
496
+ );
497
+ if (fullscreen === null || fullscreen.sampler === null) return undefined;
498
+ const inputTarget = input.resolveTarget(descriptor.values.input as never);
499
+ const temporalTarget = input.resolveTarget(descriptor.values.temporal as never);
500
+ if (inputTarget === undefined || temporalTarget === undefined) return undefined;
501
+ const inputView = input.resources.textureView(inputTarget.view);
502
+ const temporalView = input.resources.textureView(temporalTarget.view);
503
+ if (!inputView.ok || !temporalView.ok) return undefined;
504
+ const layout = pipeline.getBindGroupLayout?.(1);
505
+ if (layout === undefined) return undefined;
506
+ const depth = input.resolveTarget(descriptor.values.depth as never);
507
+ const depthView =
508
+ depth === undefined
509
+ ? undefined
510
+ : (() => {
511
+ const depthTexture = input.resources.texture(depth.texture);
512
+ if (!depthTexture.ok) return undefined;
513
+ const created = frame.runtime.device.createTextureView(depthTexture.value as Texture, {
514
+ aspect: 'depth-only',
515
+ dimension: '2d',
516
+ });
517
+ return created.ok ? created.value : undefined;
518
+ })();
519
+ if (depth !== undefined && (depthView === undefined || fullscreen.depthSampler === null)) {
520
+ return undefined;
521
+ }
522
+ return (
523
+ createFullscreenBindGroup(
524
+ frame.runtime.device,
525
+ layout,
526
+ inputView.value,
527
+ fullscreen.sampler,
528
+ frame.runtime.getPostProcessParamsBuffer?.(shader),
529
+ depthView ?? null,
530
+ fullscreen.depthSampler,
531
+ [{ binding: fullscreen.extraColorBindings[0] ?? 5, view: temporalView.value }],
532
+ ) ?? undefined
533
+ );
534
+ }
265
535
  if (sceneDepthBinding === 1) {
266
536
  const target = sceneDepth === undefined ? undefined : input.resolveTarget(sceneDepth);
267
537
  const depthView =
@@ -351,6 +621,8 @@ export function ensureCompiledFrameGraph(
351
621
  shadowMapSize: number | undefined,
352
622
  gpuDriven?: PreparedGpuDrivenFrame,
353
623
  featureGraphCandidate?: RenderFeatureGraphCandidate,
624
+ clearOnly = false,
625
+ transmissionDemand?: TransmissionDemand,
354
626
  ): CompiledRenderGraph<RenderPipelineFrame> | null {
355
627
  const surfaceWidth = Math.max(1, width);
356
628
  const surfaceHeight = Math.max(1, height);
@@ -361,18 +633,26 @@ export function ensureCompiledFrameGraph(
361
633
  featureGraphCandidate?.onRejected?.();
362
634
  return frameState.compiledFrameGraph;
363
635
  }
364
- const topology = topologyOf(
636
+ const topologyResult = topologyOf(
365
637
  internals,
366
638
  frameState,
367
639
  pipelineState,
368
640
  camera,
641
+ clearOnly,
369
642
  lights,
370
643
  surfaceWidth,
371
644
  surfaceHeight,
372
645
  shadowMapSize,
373
646
  gpuDriven,
374
647
  featureGraphCandidate,
648
+ transmissionDemand,
375
649
  );
650
+ if (!topologyResult.ok) {
651
+ internals.errorRegistry.fire(topologyResult.error);
652
+ featureGraphCandidate?.onRejected?.();
653
+ return frameState.compiledFrameGraph;
654
+ }
655
+ const topology = topologyResult.value;
376
656
  const key = JSON.stringify(topology);
377
657
  if (frameState.compiledFrameGraph !== null && frameState.compiledFrameGraphTopologyKey === key) {
378
658
  if (featureGraphCandidate !== undefined) {
@@ -382,21 +662,30 @@ export function ensureCompiledFrameGraph(
382
662
  }
383
663
 
384
664
  const builder = new RenderGraphBuilder<RenderPipelineFrame>();
665
+ const taaHistory = camera.antialias === 'taa' ? importTemporalHistoryTargets(builder) : undefined;
385
666
  let projectedFeatures = false;
386
667
  let projectedGpuDriven = false;
387
668
  const built = frameState.activePipeline.build(
388
669
  {
389
670
  graph: builder,
671
+ capabilities: { rgba16floatRenderable: internals.device.caps.rgba16floatRenderable },
672
+ ...(taaHistory === undefined ? {} : { taaHistory }),
673
+ encodeTransmissionMip: ({ pass, resources, source }) => {
674
+ const sourceView = resources.textureView(source);
675
+ if (!sourceView.ok) throw sourceView.error;
676
+ const encoded = encodeMipmapLevel(internals.device, pass, sourceView.value, 'rgba16float');
677
+ if (!encoded.ok) throw encoded.error;
678
+ },
390
679
  projectGpuDriven: (target) => {
391
680
  if (projectedGpuDriven || gpuDriven === undefined) return ok(undefined);
392
681
  projectedGpuDriven = true;
393
682
  return gpuDriven.project(builder, target.format, target.sampleCount);
394
683
  },
395
- contributeFeatures: (targets) => {
684
+ contributeFeatures: (targets, semanticTargets = [], namedTargets = {}) => {
396
685
  if (projectedFeatures) return ok(undefined);
397
686
  projectedFeatures = true;
398
687
  if (projectedFeaturePlans.value.length === 0) return ok(undefined);
399
- const resolveTarget = targetResolver(targets);
688
+ const resolveTarget = targetResolver(targets, semanticTargets, namedTargets);
400
689
  const projected = projectPlanExecutions(builder, projectedFeaturePlans.value, {
401
690
  resolveTarget,
402
691
  resolveBindings: resolveTargetBindings,
@@ -404,6 +693,8 @@ export function ensureCompiledFrameGraph(
404
693
  });
405
694
  return projected.ok ? ok(undefined) : projected;
406
695
  },
696
+ hasFeature: (identity) =>
697
+ projectedFeaturePlans.value.some((execution) => execution.featureIdentity === identity),
407
698
  },
408
699
  topology,
409
700
  );
@@ -424,6 +715,14 @@ export function ensureCompiledFrameGraph(
424
715
  const previous = frameState.compiledFrameGraph;
425
716
  frameState.compiledFrameGraph = compiled.value;
426
717
  frameState.compiledFrameGraphTopologyKey = key;
718
+ const compiledTargets = compiled.value as CompiledGraphTargetAccess;
719
+ frameState.graphGeneration += 1;
720
+ frameState.perFrameGraph = {
721
+ getColorTargetDescriptor: (name) => compiledTargets.getColorTargetDescriptor(name),
722
+ getColorTargetView: (name) => compiledTargets.getColorTargetView(name),
723
+ getColorTargetTexture: (name) => compiledTargets.getColorTargetTexture(name),
724
+ graphGeneration: frameState.graphGeneration,
725
+ };
427
726
  gpuDriven?._commitResourceReplacement();
428
727
  if (featureGraphCandidate !== undefined) {
429
728
  commitFeatureCandidate(internals, featureGraphCandidate);
@@ -441,21 +740,261 @@ export function executeCompiledFrameGraph(
441
740
  ): boolean {
442
741
  const graph = frameState.compiledFrameGraph;
443
742
  if (graph === null) return false;
444
- const executed = graph.execute(frame, runPass);
445
- if (!executed.ok) {
446
- internals.errorRegistry.fire(executed.error);
447
- return false;
448
- }
449
- const finished = encoder.finish();
450
- if (!finished.ok) {
451
- internals.errorRegistry.fire(finished.error);
452
- return false;
453
- }
454
- const command: CommandBuffer = finished.value;
455
- const submitted = internals.device.queue.submit([command]);
456
- if (!submitted.ok) {
457
- internals.errorRegistry.fire(submitted.error);
458
- return false;
459
- }
460
- return true;
743
+ type PreparedCommand = { readonly command: CommandBuffer };
744
+ let preparedCommand: PreparedCommand = { command: undefined as never };
745
+ const transaction = executeRendererFrameTransaction<PreparedCommand>({
746
+ build: () => ({ ok: true, value: { command: undefined as never } }),
747
+ execute: () => {
748
+ const executed = graph.execute(frame, runPass);
749
+ if (!executed.ok) {
750
+ internals.errorRegistry.fire(executed.error);
751
+ return { ok: false, stage: 'execute' };
752
+ }
753
+ return { ok: true, value: undefined };
754
+ },
755
+ finish: () => {
756
+ const graphCapture = frameState.graphTargetCapture;
757
+ frameState.graphTargetCapture = undefined;
758
+ if (graphCapture !== undefined) {
759
+ const graphAccess = frameState.perFrameGraph;
760
+ const graphTexture = graphAccess?.getColorTargetTexture(graphCapture.name);
761
+ const descriptor = graphAccess?.getColorTargetDescriptor(graphCapture.name);
762
+ const frameId = frameState.frameNumber - 1;
763
+ const captureFailure = (message: string): void => {
764
+ internals.errorRegistry.fire(
765
+ new RhiError({
766
+ code: 'webgpu-runtime-error',
767
+ expected:
768
+ 'the requested graph target is present in the current graph with a matching copy-readable descriptor',
769
+ hint: 'inspect the target name, graph generation/frame, texture identity, format, extent, and COPY_SRC usage',
770
+ detail: {
771
+ error: {
772
+ code: 'graph-target-capture-failed',
773
+ message,
774
+ },
775
+ },
776
+ }),
777
+ );
778
+ };
779
+ if (
780
+ graphAccess === undefined ||
781
+ graphAccess === null ||
782
+ graphTexture === undefined ||
783
+ descriptor === undefined
784
+ ) {
785
+ captureFailure(
786
+ JSON.stringify({
787
+ target: graphCapture.name,
788
+ graphGeneration: graphAccess?.graphGeneration,
789
+ frameId,
790
+ textureIdentity:
791
+ graphTexture === undefined ? undefined : getTextureIdentity(graphTexture),
792
+ reason: 'target-not-present-in-current-graph',
793
+ }),
794
+ );
795
+ } else if (
796
+ descriptor.size.width !== graphCapture.width ||
797
+ descriptor.size.height !== graphCapture.height
798
+ ) {
799
+ captureFailure(
800
+ JSON.stringify({
801
+ target: graphCapture.name,
802
+ graphGeneration: graphAccess.graphGeneration,
803
+ frameId,
804
+ textureIdentity: getTextureIdentity(graphTexture),
805
+ expectedFormat: graphCapture.expected.format,
806
+ actualFormat: descriptor.format,
807
+ expectedExtent: { width: graphCapture.width, height: graphCapture.height },
808
+ actualExtent: descriptor.size,
809
+ reason: 'extent-mismatch',
810
+ }),
811
+ );
812
+ } else if ((descriptor.usage & GPU_TEXTURE_USAGE_COPY_SRC) === 0) {
813
+ captureFailure(
814
+ JSON.stringify({
815
+ target: graphCapture.name,
816
+ graphGeneration: graphAccess.graphGeneration,
817
+ frameId,
818
+ textureIdentity: getTextureIdentity(graphTexture),
819
+ format: descriptor.format,
820
+ extent: descriptor.size,
821
+ usage: descriptor.usage,
822
+ reason: 'copy-src-usage-missing',
823
+ }),
824
+ );
825
+ } else if (
826
+ descriptor.format !== graphCapture.expected.format ||
827
+ descriptor.size.width !== graphCapture.expected.width ||
828
+ descriptor.size.height !== graphCapture.expected.height ||
829
+ (descriptor.usage & graphCapture.expected.usage) !== graphCapture.expected.usage
830
+ ) {
831
+ captureFailure(
832
+ JSON.stringify({
833
+ target: graphCapture.name,
834
+ graphGeneration: graphAccess.graphGeneration,
835
+ frameId,
836
+ textureIdentity: getTextureIdentity(graphTexture),
837
+ expected: graphCapture.expected,
838
+ actual: {
839
+ format: descriptor.format,
840
+ width: descriptor.size.width,
841
+ height: descriptor.size.height,
842
+ usage: descriptor.usage,
843
+ },
844
+ reason: 'descriptor-mismatch',
845
+ }),
846
+ );
847
+ } else if (
848
+ graphCapture.expected.identity !== undefined &&
849
+ (graphAccess.graphGeneration !== graphCapture.expected.identity.graphGeneration ||
850
+ graphCapture.expected.identity.frameId !== frameId ||
851
+ graphCapture.expected.identity.textureIdentity !== getTextureIdentity(graphTexture))
852
+ ) {
853
+ captureFailure(
854
+ JSON.stringify({
855
+ target: graphCapture.name,
856
+ graphGeneration: graphAccess.graphGeneration,
857
+ frameId,
858
+ textureIdentity: getTextureIdentity(graphTexture),
859
+ expectedIdentity: graphCapture.expected.identity,
860
+ reason: 'identity-mismatch',
861
+ }),
862
+ );
863
+ } else {
864
+ encoder.copyTextureToBuffer(
865
+ { texture: graphTexture as never },
866
+ {
867
+ buffer: graphCapture.buffer as never,
868
+ bytesPerRow: graphCapture.bytesPerRow,
869
+ rowsPerImage: graphCapture.height,
870
+ },
871
+ {
872
+ width: graphCapture.width,
873
+ height: graphCapture.height,
874
+ depthOrArrayLayers: 1,
875
+ },
876
+ );
877
+ }
878
+ }
879
+ const stagedGpuState = frameState.temporalGpuState;
880
+ if (stagedGpuState !== undefined && !hasPendingTemporalGpuSubmit(stagedGpuState)) {
881
+ internals.errorRegistry.fire(
882
+ new RhiError({
883
+ code: 'webgpu-runtime-error',
884
+ expected: 'TAA resolve stages a history write before submit',
885
+ hint: 'retry the frame after the temporal resolve pass has encoded successfully',
886
+ }),
887
+ );
888
+ return { ok: false, stage: 'finish' };
889
+ }
890
+ const finished = encoder.finish();
891
+ if (!finished.ok) {
892
+ internals.errorRegistry.fire(finished.error);
893
+ return { ok: false, stage: 'finish' };
894
+ }
895
+ preparedCommand = { command: finished.value };
896
+ return { ok: true, value: undefined };
897
+ },
898
+ submit: () => {
899
+ const submitted = internals.device.queue.submit([preparedCommand.command]);
900
+ if (!submitted.ok) {
901
+ internals.errorRegistry.fire(submitted.error);
902
+ return { ok: false, stage: 'submit' };
903
+ }
904
+ return { ok: true, value: undefined };
905
+ },
906
+ commit: () => {
907
+ if (frameState.bloomFrameReceipts !== undefined) {
908
+ internals
909
+ .getPipelineState()
910
+ ?.perPassResources.commitBloomFrameReceipts?.(frameState.bloomFrameReceipts);
911
+ frameState.bloomFrameReceipts = undefined;
912
+ }
913
+ const stagedGpuState = frameState.temporalGpuState;
914
+ if (stagedGpuState !== undefined) {
915
+ if (commitTemporalGpuSubmit(stagedGpuState)) {
916
+ const previousGpuState = frameState.activeTemporalGpuState;
917
+ frameState.activeTemporalGpuState = stagedGpuState;
918
+ if (previousGpuState !== undefined && previousGpuState !== stagedGpuState) {
919
+ internals.clearPostProcessPipelineCache?.('forgeax.taa-resolve');
920
+ internals.invalidateShaderModule?.('post-process-forgeax.taa-resolve-module');
921
+ retireTemporalGpuStateAfterFence(
922
+ previousGpuState,
923
+ internals.device.queue,
924
+ frameState.retiringTemporalGpuStates,
925
+ (cause) => {
926
+ internals.errorRegistry.fire(
927
+ new RhiError({
928
+ code: 'webgpu-runtime-error',
929
+ expected: 'submitted temporal resources remain valid until queue completion',
930
+ hint: `temporal resource retirement failed: ${String(cause)}`,
931
+ }),
932
+ );
933
+ },
934
+ );
935
+ }
936
+ frameState.temporalGpuState = undefined;
937
+ }
938
+ }
939
+ const stagedTemporalCommit = frameState.pendingTemporalCommit ?? { kind: 'none' as const };
940
+ if (stagedTemporalCommit.kind !== 'none') {
941
+ frameState.lastSuccessfulTemporalView = stagedTemporalCommit.view;
942
+ }
943
+ if (stagedTemporalCommit.kind === 'taa') {
944
+ frameState.successfulTemporalFrameIndex = stagedTemporalCommit.view.temporalFrameIndex + 1;
945
+ } else if (stagedTemporalCommit.kind === 'off') {
946
+ frameState.successfulTemporalFrameIndex = 0;
947
+ }
948
+ if (stagedTemporalCommit.kind === 'off') {
949
+ internals.clearPostProcessPipelineCache?.('forgeax.taa-resolve');
950
+ internals.invalidateShaderModule?.('post-process-forgeax.taa-resolve-module');
951
+ const activeGpuState = frameState.activeTemporalGpuState;
952
+ if (activeGpuState !== undefined) {
953
+ retireTemporalGpuStateAfterFence(
954
+ activeGpuState,
955
+ internals.device.queue,
956
+ frameState.retiringTemporalGpuStates,
957
+ (cause) => {
958
+ internals.errorRegistry.fire(
959
+ new RhiError({
960
+ code: 'webgpu-runtime-error',
961
+ expected: 'submitted temporal resources remain valid until queue completion',
962
+ hint: `temporal resource retirement failed: ${String(cause)}`,
963
+ }),
964
+ );
965
+ },
966
+ );
967
+ frameState.activeTemporalGpuState = undefined;
968
+ }
969
+ }
970
+ frameState.pendingTemporalCommit = { kind: 'none' };
971
+ if (frameState.environmentGeneration !== undefined) {
972
+ frameState.environmentLifecycle?.publish(frameState.environmentGeneration);
973
+ frameState.environmentGeneration = undefined;
974
+ }
975
+ },
976
+ abort: (failure) => {
977
+ frameState.bloomFrameReceipts = undefined;
978
+ if (frameState.environmentGeneration !== undefined) {
979
+ frameState.environmentLifecycle?.recordStageFailure(
980
+ failure.stage,
981
+ frameState.environmentGeneration,
982
+ );
983
+ }
984
+ if (frameState.temporalGpuState !== undefined) {
985
+ const stagedGpuState = frameState.temporalGpuState;
986
+ abortTemporalGpuSubmit(stagedGpuState);
987
+ if (stagedGpuState !== frameState.activeTemporalGpuState) {
988
+ retireTemporalGpuState(stagedGpuState);
989
+ }
990
+ frameState.temporalGpuState = undefined;
991
+ }
992
+ frameState.pendingTemporalCommit = { kind: 'none' };
993
+ if (frameState.environmentGeneration !== undefined) {
994
+ frameState.environmentLifecycle?.discard(frameState.environmentGeneration);
995
+ frameState.environmentGeneration = undefined;
996
+ }
997
+ },
998
+ });
999
+ return transaction.ok;
461
1000
  }