@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
@@ -8,6 +8,7 @@
8
8
 
9
9
  import { mat4 } from '@forgeax/engine-math';
10
10
  import type { Buffer, RhiQueue } from '@forgeax/engine-rhi';
11
+ import type { FogFrame } from '../extract/environment';
11
12
  import type { PointsLinesStyle } from '../points-lines/snapshot';
12
13
  import type { CameraSnapshot } from '../render-contract';
13
14
  import type {
@@ -15,6 +16,8 @@ import type {
15
16
  ExtractedLights,
16
17
  SpotLightSnapshot,
17
18
  } from '../render-system-extract';
19
+ import type { TemporalView as LegacyTemporalView } from '../temporal/temporal-view';
20
+ import type { TemporalView } from '../temporal/view';
18
21
  import { clampPcfKernelSize } from './frame-snapshot';
19
22
  import { computeProjectionMatrix, computeViewMatrix } from './helpers';
20
23
 
@@ -110,16 +113,34 @@ export function writeViewUbo(
110
113
  light: DirectionalLightSnapshot,
111
114
  lights: ExtractedLights,
112
115
  spotShadowSnapshots: readonly SpotLightSnapshot[],
116
+ fogOrTemporal?: FogFrame | TemporalView | LegacyTemporalView,
117
+ temporal?: TemporalView,
113
118
  ): void {
119
+ const isTemporal =
120
+ fogOrTemporal !== undefined &&
121
+ ('currentJitterUv' in fogOrTemporal || 'currentUnjitteredViewProjection' in fogOrTemporal);
122
+ const fog = isTemporal ? undefined : fogOrTemporal;
123
+ const resolvedTemporal = temporal ?? (isTemporal ? fogOrTemporal : undefined);
114
124
  // Compose worldViewProj once per frame (view * proj).
115
125
  const projMatrix = computeProjectionMatrix(camera);
116
126
  const viewMatrix = computeViewMatrix(camera);
117
- const worldViewProj = mat4.create();
118
- mat4.multiply(worldViewProj, projMatrix, viewMatrix);
127
+ const unjitteredViewProjection = mat4.create();
128
+ mat4.multiply(unjitteredViewProjection, projMatrix, viewMatrix);
129
+ const jitteredProjection = mat4.create();
130
+ if (resolvedTemporal?.currentJitterUv !== undefined) {
131
+ const jitter = mat4.identity(mat4.create());
132
+ jitter[12] = resolvedTemporal.currentJitterUv[0] * 2;
133
+ jitter[13] = resolvedTemporal.currentJitterUv[1] * -2;
134
+ mat4.multiply(jitteredProjection, jitter, projMatrix);
135
+ } else {
136
+ for (let i = 0; i < 16; i += 1) jitteredProjection[i] = projMatrix[i] ?? 0;
137
+ }
138
+ const mainProjection = mat4.create();
139
+ mat4.multiply(mainProjection, jitteredProjection, viewMatrix);
119
140
 
120
141
  const VIEW_PAYLOAD_FLOATS = 240;
121
142
  const viewPayload = new Float32Array(VIEW_PAYLOAD_FLOATS);
122
- for (let i = 0; i < 16; i++) viewPayload[i] = worldViewProj[i] ?? 0;
143
+ for (let i = 0; i < 16; i++) viewPayload[i] = mainProjection[i] ?? 0;
123
144
  viewPayload[16] = (light.direction[0] ?? 0) * light.intensity;
124
145
  viewPayload[17] = (light.direction[1] ?? -1) * light.intensity;
125
146
  viewPayload[18] = (light.direction[2] ?? 0) * light.intensity;
@@ -137,7 +158,7 @@ export function writeViewUbo(
137
158
  // Host pre-computes mat4.invert so the skybox fragment shader avoids
138
159
  // per-pixel matrix inversion (charter P4 consistent abstraction).
139
160
  const inverseViewProj = mat4.create();
140
- mat4.invert(inverseViewProj, worldViewProj);
161
+ mat4.invert(inverseViewProj, mainProjection);
141
162
  for (let i = 0; i < 16; i++) viewPayload[44 + i] = inverseViewProj[i] ?? 0;
142
163
  // lightViewProj[1..3] at [60..107].
143
164
  if (lights.lightViewProj !== undefined) {
@@ -149,6 +170,21 @@ export function writeViewUbo(
149
170
  }
150
171
  }
151
172
  }
173
+
174
+ // Temporal ABI tail: current and last-successful unjittered projections
175
+ // stay separate from the jittered main projection and never advance on a
176
+ // failed submission. The fixed 240-float payload already reserves these
177
+ // 36 slots at byte offsets 784..920.
178
+ const previous = resolvedTemporal?.previousUnjitteredViewProjection;
179
+ for (let i = 0; i < 16; i += 1) {
180
+ viewPayload[196 + i] = unjitteredViewProjection[i] ?? 0;
181
+ // No previous successful frame exists on first frame/reset. Keep this
182
+ // lane zeroed instead of copying current state into a history slot.
183
+ viewPayload[212 + i] = previous?.[i] ?? 0;
184
+ }
185
+ viewPayload[228] = camera.near;
186
+ viewPayload[229] = camera.far;
187
+ viewPayload[230] = camera.projection === 'orthographic' ? 1 : 0;
152
188
  // splitPlanes at [108], [112], [116], [120] (vec4 stride = 4 floats).
153
189
  if (lights.splitPlanes !== undefined) {
154
190
  for (let s = 0; s < 4; s++) {
@@ -202,6 +238,18 @@ export function writeViewUbo(
202
238
  }
203
239
  }
204
240
 
241
+ // Fog is a resource-owner semantic carried by the shared View ABI. Keep the
242
+ // disabled payload zeroed and write only the selected frame facts so both
243
+ // direct and clustered lanes consume the same owner projection.
244
+ if (fog !== undefined) {
245
+ viewPayload[232] = fog.color[0] ?? 0;
246
+ viewPayload[233] = fog.color[1] ?? 0;
247
+ viewPayload[234] = fog.color[2] ?? 0;
248
+ viewPayload[235] = fog.density;
249
+ viewPayload[236] = fog.heightFalloff;
250
+ viewPayload[237] = fog.maxOpacity;
251
+ }
252
+
205
253
  const viewUploadResult = queue.writeBuffer(viewUniformBuffer, 0, viewPayload);
206
254
  if (!viewUploadResult.ok) throw viewUploadResult.error;
207
255
 
@@ -3,11 +3,12 @@ import type { World } from '@forgeax/engine-ecs';
3
3
  import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
4
4
  import type { Vec3 } from '@forgeax/engine-math';
5
5
  import type { ProfileFrameToken, Profiler } from '@forgeax/engine-profiler';
6
- import type { RenderGraphError } from '@forgeax/engine-render-graph';
6
+ import type { ColorValueDomain, RenderGraphError } from '@forgeax/engine-render-graph';
7
7
  import type {
8
8
  BindGroupLayout,
9
9
  Buffer,
10
10
  Result,
11
+ RhiCanvasSurfacePresentationProof,
11
12
  RhiCaps,
12
13
  RhiCommandEncoder,
13
14
  RhiDevice,
@@ -23,16 +24,26 @@ import type { SkinError } from '@forgeax/engine-skinning';
23
24
  import type { ImageError } from '@forgeax/engine-types';
24
25
  import type { RhiBackendInstrumentation } from './assembly/backend-contract';
25
26
  import type { Antialias, BloomEnabled, Tonemap } from './components/camera';
27
+ import type { EnvironmentInspection } from './environment/inspection';
26
28
  import type { RenderError } from './errors/render';
27
29
  import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
28
30
  import type { PostProcessShaderEntry } from './fullscreen-post-process-pass';
29
- import type { RenderSceneInspection } from './inspection-types';
30
-
31
+ import type {
32
+ BloomInspection,
33
+ MotionBlurInspection,
34
+ RenderSceneInspection,
35
+ TemporalTargetInspection,
36
+ TransmissionInspection,
37
+ } from './inspection-types';
38
+ import type { TemporalInspection } from './temporal/inspection';
39
+
40
+ export type { TransmissionInspection } from './inspection-types';
31
41
  export type { PointsLinesInspection } from './points-lines/inspection';
32
42
 
33
43
  import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
34
44
  import type { StandardProfile } from './pipeline/standard-profile';
35
45
  import type { PostProcessError } from './post-process-errors';
46
+ import type { TemporalView } from './temporal/view';
36
47
 
37
48
  export type RenderResult<T, E> =
38
49
  | { readonly ok: true; readonly value: T }
@@ -51,6 +62,10 @@ export type RenderWorldLease = RenderReadLease;
51
62
  export interface CameraSnapshot {
52
63
  /** Stable ECS identity used by the frame plan's camera authority fact. */
53
64
  readonly entityKey?: number;
65
+ /** World index supplied by the multi-world extract merge. */
66
+ readonly worldId?: number;
67
+ /** Camera-owned history generation forwarded into the frame plan. */
68
+ readonly historyVersion?: number;
54
69
  /** World-space camera translation (mat4.getTranslation of Transform.world). */
55
70
  readonly position: Vec3;
56
71
  /** Resolved world-space camera mat4, copied from Transform.world. */
@@ -74,10 +89,26 @@ export interface CameraSnapshot {
74
89
  readonly bloomIntensity: number;
75
90
  readonly bloomBlurRadius: number;
76
91
  readonly clearColor: readonly [number, number, number, number];
92
+ /** Renderer-owned temporal projection used by Standard's TAA producer. */
93
+ readonly temporal?: TemporalView;
94
+ /** Active-camera motion blur parameters, present only when demanded. */
95
+ readonly motionBlur?: {
96
+ readonly shutterAngle: number;
97
+ readonly maxRadiusPixels: number;
98
+ readonly sampleCount: number;
99
+ };
77
100
  }
78
101
 
79
- /** Stable identity owned by the Standard feature host for built-in tonemap. */
80
- export const STANDARD_TONEMAP_FEATURE_ID = 'forgeax::standard::tonemap';
102
+ /** Stable identity owned by the Standard feature host for output transform. */
103
+ export const STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = 'forgeax::standard::output-transform';
104
+
105
+ export type {
106
+ EnvironmentFrame,
107
+ EnvironmentSource,
108
+ FogFrame,
109
+ FramePlan,
110
+ } from './extract/environment';
111
+ export type { TemporalView } from './temporal/view';
81
112
 
82
113
  /**
83
114
  * Render-graph state exposed to pipeline declarations. Concrete pipeline
@@ -245,6 +276,57 @@ export interface FrameReceiptObservation {
245
276
  readonly include: readonly ('timings' | 'draws' | 'bindings')[];
246
277
  }
247
278
 
279
+ /** Stable backend facts for the Standard output transform projection. */
280
+ export interface RenderOutputInspection {
281
+ readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
282
+ readonly displayEncoded: boolean;
283
+ readonly intermediateFormat?: TextureFormat;
284
+ /** Concrete surface route committed by configureSurface. */
285
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
286
+ /** Pass names from the same committed graph as the output facts. */
287
+ readonly graphPassNames: readonly string[];
288
+ /** Detached descriptor for the graph-owned output target, when present. */
289
+ readonly standardOutputColor?: RenderStandardOutputColorInspection;
290
+ readonly surfaceStorage: TextureFormat;
291
+ readonly surfaceDisplay: TextureFormat;
292
+ readonly endpoint: 'surface.storage.raw';
293
+ readonly capability: 'rgba16float-renderable' | 'surface-raw-endpoint' | 'unavailable';
294
+ readonly presentationProof?: RhiCanvasSurfacePresentationProof;
295
+ readonly error:
296
+ | {
297
+ readonly code: string;
298
+ readonly expected: string;
299
+ readonly hint: string;
300
+ readonly detail?: unknown;
301
+ }
302
+ | undefined;
303
+ }
304
+
305
+ /** Detached descriptor for the graph-owned display-encoded intermediate. */
306
+ export interface RenderStandardOutputColorInspection {
307
+ readonly format: TextureFormat;
308
+ readonly domain?: ColorValueDomain;
309
+ readonly width: number;
310
+ readonly height: number;
311
+ readonly sampleCount: number;
312
+ readonly usage: number;
313
+ }
314
+
315
+ /** Stable identity refs for a renderer-owned frame observation. */
316
+ export interface RenderObservationInspection {
317
+ readonly observationId: string;
318
+ readonly frameId: number;
319
+ /** Camera antialias mode used by the frame carrying this observation. */
320
+ readonly antialias?: Antialias;
321
+ /** Surface route committed for the same frame graph. */
322
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
323
+ /** Capability fact used when resolving a raw-only float target. */
324
+ readonly rgba16floatRenderable?: boolean;
325
+ /** Exact pass names and target descriptor from the committed graph. */
326
+ readonly passNames: readonly string[];
327
+ readonly standardOutputColor?: RenderStandardOutputColorInspection;
328
+ }
329
+
248
330
  /**
249
331
  * Detached renderer facts for host diagnostics and capability selection.
250
332
  *
@@ -266,12 +348,32 @@ export interface RenderInspection {
266
348
  readonly frustumStats: { readonly culled: number; readonly total: number };
267
349
  readonly visibilityStats: { readonly explicitlyHidden: number };
268
350
  readonly renderScene: RenderSceneInspection;
351
+ /** Last completed transmission candidate facts, detached from GPU handles. */
352
+ readonly transmission?: TransmissionInspection;
269
353
  readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
270
354
  readonly perFramePassNames: readonly string[];
271
355
  readonly bindGroupCounts: {
272
356
  readonly createBindGroup: number;
273
357
  readonly keys: readonly string[];
274
358
  };
359
+ /** Output transform facts; never includes fixture metrics or pixel bytes. */
360
+ readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
361
+ readonly displayEncoded: boolean;
362
+ readonly intermediateFormat?: TextureFormat;
363
+ readonly surfaceStorage: TextureFormat;
364
+ readonly surfaceDisplay: TextureFormat;
365
+ readonly endpoint: 'surface.storage.raw';
366
+ readonly capability: RenderOutputInspection['capability'];
367
+ readonly presentationProof?: RhiCanvasSurfacePresentationProof;
368
+ readonly error: RenderOutputInspection['error'];
369
+ readonly observation: RenderObservationInspection;
370
+ readonly environment: EnvironmentInspection;
371
+ readonly temporal: TemporalInspection;
372
+ readonly bloom: BloomInspection;
373
+ /** Semantic Standard temporal target metadata; no graph or RHI handles. */
374
+ readonly temporalTarget?: TemporalTargetInspection;
375
+ /** Renderer-owned Motion Blur facts; absent when no component is active. */
376
+ readonly motionBlur?: MotionBlurInspection;
275
377
  }
276
378
 
277
379
  /** Backend marker — single-element union preserved for future extensibility (D-2). */
@@ -379,7 +481,8 @@ export const RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
379
481
  'record/graph-execute/forward/material-bind-groups',
380
482
  'record/graph-execute/forward/pipeline-selection',
381
483
  'record/graph-execute/forward/draw-submit',
382
- 'record/graph-execute/tonemap',
484
+ 'record/graph-execute/output-transform',
485
+ 'record/graph-execute/present',
383
486
  'record/graph-execute/debug-overlay',
384
487
  'record/graph-execute/shadow',
385
488
  'record/graph-execute/spot-shadow',
@@ -665,7 +665,10 @@ function dispatchFullscreenPass(
665
665
  // the swap-chain path uses the backend-selected surface view format.
666
666
  let writeFormat = ctx.pipelineState?.colorAttachmentFormat ?? 'rgba8unorm-srgb';
667
667
  if (graphPass !== undefined) {
668
- writeView = ctx.view;
668
+ // Typed graph passes must write their declared output target. The frame
669
+ // surface view is only the fallback for legacy passes; using it here
670
+ // leaves a typed output target cleared while the next pass samples it.
671
+ writeView = (resolveCtx?.resolve(color) as TextureView | undefined) ?? ctx.view;
669
672
  writeFormat = graphOutputFormat ?? writeFormat;
670
673
  } else if (rawSwapchainOutput && color === 'swapchain') {
671
674
  const rawViewRes = ctx.runtime.device.createTextureView(ctx.currentTexture, {});
@@ -733,6 +736,20 @@ function dispatchFullscreenPass(
733
736
  paramsBuffer,
734
737
  depthTexView,
735
738
  depthSampler,
739
+ built.extraColorBindings.map((binding, index) => {
740
+ const read = entry.reads?.filter(
741
+ (candidate) => typeof candidate === 'string' || candidate.sampleType !== 'depth',
742
+ )[index + 1];
743
+ const key = typeof read === 'string' ? read : read?.key;
744
+ const view = key === undefined ? undefined : resolveCtx?.resolve(key);
745
+ if (view === undefined) {
746
+ throw new PostProcessError({
747
+ code: 'fullscreen-input-not-found',
748
+ detail: { readsKey: key ?? 'additional-read', passName: name },
749
+ });
750
+ }
751
+ return { binding, view: view as TextureView };
752
+ }),
736
753
  );
737
754
  if (bindGroup === null) return;
738
755
 
@@ -26,7 +26,13 @@ import type {
26
26
  RenderGraphError,
27
27
  RenderGraphFrame,
28
28
  } from '@forgeax/engine-render-graph';
29
- import type { BindGroup, RhiError, RhiRenderPassEncoder, TextureFormat } from '@forgeax/engine-rhi';
29
+ import type {
30
+ BindGroup,
31
+ RhiCaps,
32
+ RhiError,
33
+ RhiRenderPassEncoder,
34
+ TextureFormat,
35
+ } from '@forgeax/engine-rhi';
30
36
  import { ok, type Result } from '@forgeax/engine-types';
31
37
  import type { Tonemap } from './components/camera';
32
38
  import type { RenderError } from './errors/render';
@@ -35,8 +41,10 @@ import {
35
41
  GPU_TEXTURE_USAGE_COPY_SRC,
36
42
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
37
43
  } from './gpu-texture-usage';
38
- import type { StandardProfile } from './pipeline/standard-profile';
44
+ import { STANDARD_POST_STAGE_NAMES, type StandardProfile } from './pipeline/standard-profile';
45
+ import type { SurfaceProfile } from './record/render-context';
39
46
  import type { RenderPipelineContext } from './render-contract';
47
+ import type { TransmissionDemand } from './transmission/projection';
40
48
 
41
49
  export type { RenderPipelineContext } from './render-contract';
42
50
 
@@ -50,7 +58,7 @@ export interface ToneOutputContract {
50
58
  readonly exposureStage: 'linearHdr' | 'none';
51
59
  }
52
60
 
53
- export type RenderPostStageName = 'transparent-blend' | 'bloom' | 'tone' | 'fxaa' | 'output';
61
+ export type RenderPostStageName = (typeof STANDARD_POST_STAGE_NAMES)[number];
54
62
  export type RenderPostDomainStage = readonly [
55
63
  RenderPostStageName,
56
64
  ColorValueDomain,
@@ -60,18 +68,21 @@ export type RenderPostDomainStage = readonly [
60
68
  /**
61
69
  * Single post-stage domain contract shared by the Standard lighting lanes.
62
70
  * The selected scene domain for transparent geometry is explicit; every later
63
- * stage follows the same linear blend, tone, anti-alias, and output sequence.
71
+ * stage follows the same linear blend, output-transform, anti-alias, post-effect, and present sequence.
64
72
  */
65
73
  export function resolvePostColorDomainContract(
66
74
  sceneDomain: 'linear-ldr' | 'linear-hdr',
67
75
  ): readonly RenderPostDomainStage[] {
68
76
  const scene: ColorValueDomain = sceneDomain;
77
+ const [transparentBlend, bloom, outputTransform, fxaa, postEffect, present] =
78
+ STANDARD_POST_STAGE_NAMES;
69
79
  return [
70
- ['transparent-blend', scene, scene],
71
- ['bloom', 'linear-hdr', 'linear-hdr'],
72
- ['tone', 'linear-hdr', 'linear-ldr'],
73
- ['fxaa', 'linear-ldr', 'linear-ldr'],
74
- ['output', 'linear-ldr', 'display-encoded'],
80
+ [transparentBlend, scene, scene],
81
+ [bloom, 'linear-hdr', 'linear-hdr'],
82
+ [outputTransform, scene, 'display-encoded'],
83
+ [fxaa, 'display-encoded', 'display-encoded'],
84
+ [postEffect, 'display-encoded', 'display-encoded'],
85
+ [present, 'display-encoded', 'display-encoded'],
75
86
  ];
76
87
  }
77
88
 
@@ -104,13 +115,25 @@ export interface RenderPipelineTopology {
104
115
  readonly pipelineId: string;
105
116
  readonly standardProfile?: StandardProfile | undefined;
106
117
  readonly config: import('@forgeax/engine-types').RenderPipelineAsset['config'];
118
+ /**
119
+ * The record stage had no Camera and injected the synthetic clear-only
120
+ * snapshot. Keep that fact explicit so a normal no-tone Camera still uses
121
+ * the float Output Transform while the empty-scene contract can write its
122
+ * clear directly to the surface.
123
+ */
124
+ readonly clearOnly?: boolean | undefined;
107
125
  readonly surface: {
108
126
  readonly width: number;
109
127
  readonly height: number;
110
128
  readonly storageFormat: import('@forgeax/engine-rhi').TextureFormat;
111
129
  readonly viewFormat: import('@forgeax/engine-rhi').TextureFormat;
130
+ readonly profile?: SurfaceProfile | undefined;
112
131
  };
113
132
  readonly camera: Pick<RenderPipelineContext['camera'], 'tonemap' | 'antialias' | 'bloom'>;
133
+ readonly temporal?: {
134
+ readonly taa: boolean;
135
+ readonly motionBlur: boolean;
136
+ };
114
137
  readonly shadow: {
115
138
  readonly mapSize: number;
116
139
  readonly cascadeCount: 1 | 2 | 3 | 4;
@@ -126,6 +149,8 @@ export interface RenderPipelineTopology {
126
149
  };
127
150
  readonly featureTopologySignature: string;
128
151
  readonly gpuDrivenTopologySignature: string;
152
+ /** Internal graph fact; renderer callers do not configure transmission demand. */
153
+ readonly transmissionDemand?: TransmissionDemand | undefined;
129
154
  }
130
155
 
131
156
  export interface RenderPipelineFrame extends RenderPipelineContext, RenderGraphFrame {}
@@ -135,6 +160,7 @@ export interface RenderPipelineTarget {
135
160
  readonly view: GraphTextureView;
136
161
  readonly format: TextureFormat;
137
162
  readonly sampleCount: 1 | 4;
163
+ readonly domain?: ColorValueDomain | undefined;
138
164
  readonly resolveTarget?: GraphTextureView | undefined;
139
165
  }
140
166
 
@@ -153,6 +179,7 @@ export function createRenderPipelineTarget(
153
179
  view: view.value,
154
180
  format: viewDescriptor.format ?? descriptor.format,
155
181
  sampleCount: descriptor.sampleCount === 4 ? 4 : 1,
182
+ ...(descriptor.domain === undefined ? {} : { domain: descriptor.domain }),
156
183
  });
157
184
  }
158
185
 
@@ -160,7 +187,7 @@ export function importRenderPipelineSurface(
160
187
  graph: RenderGraphBuilder<RenderPipelineFrame>,
161
188
  topology: RenderPipelineTopology,
162
189
  ): Result<
163
- { readonly display: RenderPipelineTarget; readonly storage: RenderPipelineTarget },
190
+ { readonly display?: RenderPipelineTarget; readonly storage: RenderPipelineTarget },
164
191
  RenderGraphError
165
192
  > {
166
193
  const texture = graph.importTexture(
@@ -168,21 +195,32 @@ export function importRenderPipelineSurface(
168
195
  {
169
196
  format: topology.surface.storageFormat,
170
197
  size: 'surface',
171
- usage: GPU_TEXTURE_USAGE_RENDER_ATTACHMENT | GPU_TEXTURE_USAGE_COPY_SRC,
172
- viewFormats:
173
- topology.surface.storageFormat === topology.surface.viewFormat
174
- ? []
175
- : [topology.surface.viewFormat],
198
+ // The imported surface is the final encoded endpoint. Keeping this
199
+ // semantic fact on the graph resource lets detached inspection project
200
+ // from the compiled graph instead of re-inferring it from format names.
201
+ domain: 'display-encoded',
202
+ usage:
203
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
204
+ (topology.surface.profile?.kind === 'raw-only' ? 0 : GPU_TEXTURE_USAGE_COPY_SRC),
205
+ viewFormats: [
206
+ ...(topology.surface.profile?.viewFormats ??
207
+ (topology.surface.storageFormat === topology.surface.viewFormat
208
+ ? []
209
+ : [topology.surface.viewFormat])),
210
+ ],
176
211
  },
177
212
  (frame) => frame.currentTexture,
178
213
  );
179
214
  if (!texture.ok) return texture;
180
- const display = graph.importView(
181
- texture.value,
182
- { label: 'surface.display', format: topology.surface.viewFormat },
183
- (frame) => frame.view,
184
- );
185
- if (!display.ok) return display;
215
+ const display =
216
+ topology.surface.profile?.hasDisplayEndpoint === false
217
+ ? undefined
218
+ : graph.importView(
219
+ texture.value,
220
+ { label: 'surface.display', format: topology.surface.viewFormat },
221
+ (frame) => frame.view,
222
+ );
223
+ if (display !== undefined && !display.ok) return display;
186
224
  const storage = graph.importView(
187
225
  texture.value,
188
226
  { label: 'surface.storage', format: topology.surface.storageFormat },
@@ -197,17 +235,23 @@ export function importRenderPipelineSurface(
197
235
  );
198
236
  if (!storage.ok) return storage;
199
237
  return ok({
200
- display: {
201
- texture: texture.value,
202
- view: display.value,
203
- format: topology.surface.viewFormat,
204
- sampleCount: 1,
205
- },
238
+ ...(display === undefined
239
+ ? {}
240
+ : {
241
+ display: {
242
+ texture: texture.value,
243
+ view: display.value,
244
+ format: topology.surface.viewFormat,
245
+ sampleCount: 1 as const,
246
+ domain: 'display-encoded' as const,
247
+ },
248
+ }),
206
249
  storage: {
207
250
  texture: texture.value,
208
251
  view: storage.value,
209
252
  format: topology.surface.storageFormat,
210
253
  sampleCount: 1,
254
+ domain: 'display-encoded',
211
255
  },
212
256
  });
213
257
  }
@@ -232,13 +276,42 @@ export interface RenderPipelineGpuDrivenProjection {
232
276
 
233
277
  export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame> {
234
278
  readonly graph: RenderGraphBuilder<FrameCtx>;
279
+ /**
280
+ * Renderer-owned capability facts needed for admission decisions. The
281
+ * Standard temporal producer must use the live device probe rather than
282
+ * inferring rgba16float support from the selected surface format.
283
+ */
284
+ readonly capabilities?: Pick<RhiCaps, 'rgba16floatRenderable'>;
285
+ /**
286
+ * Renderer-owned TAA history targets. The graph sees only imported typed
287
+ * targets; opaque RHI handles remain inside RenderFrameState.
288
+ */
289
+ readonly taaHistory?: {
290
+ readonly currentColor: RenderPipelineTarget;
291
+ readonly previousColor: RenderPipelineTarget;
292
+ readonly currentTemporal: RenderPipelineTarget;
293
+ readonly previousTemporal: RenderPipelineTarget;
294
+ };
295
+ /** Renderer-owned, prewarmed encoder for one graph mip level. */
296
+ readonly encodeTransmissionMip?: (input: {
297
+ readonly pass: RhiRenderPassEncoder;
298
+ readonly frame: FrameCtx;
299
+ readonly resources: GraphResourceResolver;
300
+ readonly source: GraphTextureView;
301
+ readonly destination: GraphTextureView;
302
+ readonly level: number;
303
+ }) => void;
235
304
  projectGpuDriven(target: {
236
305
  readonly format: TextureFormat;
237
306
  readonly sampleCount: 1 | 4;
238
307
  }): Result<RenderPipelineGpuDrivenProjection | undefined, RenderPipelineBuildError>;
239
308
  contributeFeatures(
240
309
  targets: readonly RenderPipelineFeatureTarget[],
310
+ semanticTargets?: readonly RenderPipelineTarget[],
311
+ namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
241
312
  ): Result<void, RenderPipelineBuildError>;
313
+ /** Whether a producer-owned feature is installed for this graph build. */
314
+ hasFeature?(identity: string): boolean;
242
315
  }
243
316
 
244
317
  export type RenderPipelineBuildError = RenderGraphError | RenderError | RhiError;