@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
@@ -0,0 +1,572 @@
1
+ import { numMipLevels } from '@forgeax/engine-assets-runtime';
2
+ import {
3
+ type GraphAccess,
4
+ type GraphResourceResolver,
5
+ type GraphTextureView,
6
+ type RenderGraphBuilder,
7
+ RenderGraphError,
8
+ } from '@forgeax/engine-render-graph';
9
+ import type { RhiDevice, RhiRenderPassEncoder } from '@forgeax/engine-rhi';
10
+ import { err, ok, type Result } from '@forgeax/engine-types';
11
+ import {
12
+ GPU_TEXTURE_USAGE_COPY_SRC,
13
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
14
+ GPU_TEXTURE_USAGE_TEXTURE_BINDING,
15
+ } from '../gpu-texture-usage';
16
+ import type {
17
+ RenderPipelineFrame,
18
+ RenderPipelineTarget,
19
+ RenderPipelineTopology,
20
+ } from '../render-pipeline';
21
+ import { createRenderPipelineTarget } from '../render-pipeline';
22
+ import type { TransmissionDemand } from './projection';
23
+
24
+ export const TRANSMISSION_BACKDROP_PHASES = [
25
+ 'opaque-resolve',
26
+ 'transmission-backdrop-copy',
27
+ 'transmission-backdrop-mip',
28
+ 'transmission-forward',
29
+ 'transparent',
30
+ 'temporal',
31
+ ] as const;
32
+
33
+ export type TransmissionBackdropPhase = (typeof TRANSMISSION_BACKDROP_PHASES)[number];
34
+
35
+ type TransmissionTopologyInput = RenderPipelineTopology & {
36
+ readonly transmissionDemand?: TransmissionDemand | undefined;
37
+ };
38
+
39
+ export function transmissionDemandForTopology(
40
+ topology: RenderPipelineTopology,
41
+ ): TransmissionDemand {
42
+ return (
43
+ (topology as TransmissionTopologyInput).transmissionDemand ?? {
44
+ activeCount: 0,
45
+ needsRoughMips: false,
46
+ }
47
+ );
48
+ }
49
+
50
+ export interface TransmissionBackdropTopologyInput {
51
+ readonly demand: TransmissionDemand;
52
+ readonly sourceSampleCount: 1 | 4;
53
+ }
54
+
55
+ export interface TransmissionBackdropTopology {
56
+ readonly active: boolean;
57
+ readonly sourceSampleCount: 1 | 4;
58
+ readonly copyCount: number;
59
+ readonly mipCount: number;
60
+ readonly submitCount: 1;
61
+ readonly aliasCount: 0;
62
+ readonly phases: readonly TransmissionBackdropPhase[];
63
+ }
64
+
65
+ export function resolveTransmissionBackdropTopology(
66
+ input: TransmissionBackdropTopologyInput,
67
+ ): TransmissionBackdropTopology {
68
+ if (input.demand.activeCount === 0) {
69
+ return {
70
+ active: false,
71
+ sourceSampleCount: input.sourceSampleCount,
72
+ copyCount: 0,
73
+ mipCount: 0,
74
+ submitCount: 1,
75
+ aliasCount: 0,
76
+ phases: [],
77
+ };
78
+ }
79
+ const phases: TransmissionBackdropPhase[] = ['opaque-resolve', 'transmission-backdrop-copy'];
80
+ if (input.demand.needsRoughMips) phases.push('transmission-backdrop-mip');
81
+ phases.push('transmission-forward', 'transparent', 'temporal');
82
+ return {
83
+ active: true,
84
+ sourceSampleCount: input.sourceSampleCount,
85
+ copyCount: 1,
86
+ mipCount: input.demand.needsRoughMips ? 1 : 0,
87
+ submitCount: 1,
88
+ aliasCount: 0,
89
+ phases,
90
+ };
91
+ }
92
+
93
+ export interface TransmissionCapabilityFacts {
94
+ readonly format: string;
95
+ readonly renderAttachment: boolean;
96
+ readonly copySrc: boolean;
97
+ readonly textureBinding: boolean;
98
+ readonly mipView: boolean;
99
+ readonly filteringSampler: boolean;
100
+ readonly bindGroupLayout: boolean;
101
+ readonly msaaResolve: boolean;
102
+ readonly resourceCreation: boolean;
103
+ /** Accepted as diagnostic input only; it never changes the verdict. */
104
+ readonly backendKind?: string | undefined;
105
+ }
106
+
107
+ export type TransmissionCapabilityFact =
108
+ | 'format'
109
+ | 'renderAttachment'
110
+ | 'copySrc'
111
+ | 'textureBinding'
112
+ | 'mipView'
113
+ | 'filteringSampler'
114
+ | 'bindGroupLayout'
115
+ | 'msaaResolve'
116
+ | 'resourceCreation';
117
+
118
+ /** Probe the complete backdrop descriptor once per device generation. */
119
+ export function probeTransmissionCapability(device: RhiDevice): TransmissionCapabilityFacts {
120
+ const formatSupported = device.caps.rgba16floatRenderable;
121
+ const texture = formatSupported
122
+ ? device.createTexture({
123
+ label: 'transmission-capability-probe',
124
+ size: { width: 2, height: 2, depthOrArrayLayers: 1 },
125
+ format: 'rgba16float',
126
+ usage:
127
+ GPU_TEXTURE_USAGE_COPY_SRC |
128
+ GPU_TEXTURE_USAGE_TEXTURE_BINDING |
129
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
130
+ mipLevelCount: 2,
131
+ sampleCount: 1,
132
+ dimension: '2d',
133
+ textureBindingViewDimension: '2d',
134
+ })
135
+ : undefined;
136
+ let resourceCreation = false;
137
+ let renderAttachment = false;
138
+ let copySrc = false;
139
+ let textureBinding = false;
140
+ let mipView = false;
141
+ let filteringSampler = false;
142
+ let bindGroupLayout = false;
143
+ if (texture?.ok === true) {
144
+ resourceCreation = true;
145
+ copySrc = true;
146
+ const view = device.createTextureView(texture.value, { baseMipLevel: 0, mipLevelCount: 1 });
147
+ const mip = device.createTextureView(texture.value, { baseMipLevel: 1, mipLevelCount: 1 });
148
+ renderAttachment = view.ok;
149
+ textureBinding = view.ok;
150
+ mipView = mip.ok;
151
+ const sampler = device.createSampler({
152
+ minFilter: 'linear',
153
+ magFilter: 'linear',
154
+ mipmapFilter: 'linear',
155
+ });
156
+ filteringSampler = sampler.ok;
157
+ const layout = device.createBindGroupLayout({
158
+ label: 'transmission-capability-probe',
159
+ entries: [
160
+ { binding: 0, visibility: 2, texture: { sampleType: 'float', viewDimension: '2d' } },
161
+ { binding: 1, visibility: 2, sampler: { type: 'filtering' } },
162
+ ],
163
+ });
164
+ bindGroupLayout = layout.ok;
165
+ device.destroyTexture(texture.value);
166
+ }
167
+ return {
168
+ format: 'rgba16float',
169
+ renderAttachment: formatSupported && renderAttachment,
170
+ copySrc,
171
+ textureBinding,
172
+ mipView,
173
+ filteringSampler,
174
+ bindGroupLayout,
175
+ msaaResolve: formatSupported && renderAttachment,
176
+ resourceCreation,
177
+ };
178
+ }
179
+
180
+ export type TransmissionCapabilityVerdict =
181
+ | { readonly ok: true; readonly missing: readonly [] }
182
+ | { readonly ok: false; readonly missing: readonly TransmissionCapabilityFact[] };
183
+
184
+ export function evaluateTransmissionCapability(
185
+ facts: TransmissionCapabilityFacts,
186
+ ): TransmissionCapabilityVerdict {
187
+ const missing: TransmissionCapabilityFact[] = [];
188
+ if (facts.format !== 'rgba16float') missing.push('format');
189
+ for (const field of [
190
+ 'renderAttachment',
191
+ 'copySrc',
192
+ 'textureBinding',
193
+ 'mipView',
194
+ 'filteringSampler',
195
+ 'bindGroupLayout',
196
+ 'msaaResolve',
197
+ 'resourceCreation',
198
+ ] as const) {
199
+ if (!facts[field]) missing.push(field);
200
+ }
201
+ return missing.length === 0 ? { ok: true, missing: [] } : { ok: false, missing };
202
+ }
203
+
204
+ export type TransmissionAdmissionResult =
205
+ | {
206
+ readonly ok: true;
207
+ readonly published: true;
208
+ readonly generation: number;
209
+ readonly demand: TransmissionDemand;
210
+ }
211
+ | {
212
+ readonly ok: false;
213
+ readonly published: false;
214
+ readonly generation: number;
215
+ readonly demand: TransmissionDemand;
216
+ readonly missing: readonly TransmissionCapabilityFact[];
217
+ };
218
+
219
+ export interface TransmissionBackdropExtent {
220
+ readonly width: number;
221
+ readonly height: number;
222
+ }
223
+
224
+ /** Detached physical facts committed with a backdrop candidate. */
225
+ export interface TransmissionBackdropResourceFacts {
226
+ readonly extent: TransmissionBackdropExtent;
227
+ readonly format: string;
228
+ /** Total resident mip levels, including level zero. */
229
+ readonly mipCount: number;
230
+ readonly bytes: number;
231
+ readonly deviceGeneration: number;
232
+ }
233
+
234
+ export type TransmissionLifecycleState =
235
+ | 'inactive'
236
+ | 'resident'
237
+ | 'recovering'
238
+ | 'device-lost'
239
+ | 'failed';
240
+
241
+ export type TransmissionRecoveryState =
242
+ | 'idle'
243
+ | 'compatible-lkg'
244
+ | 'rebuild-required'
245
+ | 'recovered'
246
+ | 'failed';
247
+
248
+ export interface TransmissionCandidateAdmissionInspection {
249
+ readonly generation: number;
250
+ readonly demand: TransmissionDemand;
251
+ readonly capability: TransmissionCapabilityVerdict;
252
+ readonly lifecycle: TransmissionLifecycleState;
253
+ readonly lastKnownGood: boolean;
254
+ readonly recovery: TransmissionRecoveryState;
255
+ readonly resource?: TransmissionBackdropResourceFacts;
256
+ }
257
+
258
+ function sameDemand(left: TransmissionDemand, right: TransmissionDemand): boolean {
259
+ return left.activeCount === right.activeCount && left.needsRoughMips === right.needsRoughMips;
260
+ }
261
+
262
+ function cloneResource(
263
+ resource: TransmissionBackdropResourceFacts,
264
+ ): TransmissionBackdropResourceFacts {
265
+ return {
266
+ ...resource,
267
+ extent: { ...resource.extent },
268
+ };
269
+ }
270
+
271
+ function resourceCompatible(
272
+ current: TransmissionBackdropResourceFacts | undefined,
273
+ candidate: TransmissionBackdropResourceFacts | undefined,
274
+ ): boolean {
275
+ if (candidate === undefined) return true;
276
+ if (current === undefined) return false;
277
+ return (
278
+ current.deviceGeneration === candidate.deviceGeneration &&
279
+ current.format === candidate.format &&
280
+ current.mipCount === candidate.mipCount &&
281
+ current.extent.width === candidate.extent.width &&
282
+ current.extent.height === candidate.extent.height
283
+ );
284
+ }
285
+
286
+ /** Candidate/LKG fence for the private backdrop topology. */
287
+ export class TransmissionCandidateAdmission {
288
+ private generation = 0;
289
+ private demand: TransmissionDemand = { activeCount: 0, needsRoughMips: false };
290
+ private capability: TransmissionCapabilityVerdict = { ok: true, missing: [] };
291
+ private lifecycle: TransmissionLifecycleState = 'inactive';
292
+ private lastKnownGood = false;
293
+ private recovery: TransmissionRecoveryState = 'idle';
294
+ private resource: TransmissionBackdropResourceFacts | undefined;
295
+
296
+ admit(
297
+ demand: TransmissionDemand,
298
+ facts: TransmissionCapabilityFacts,
299
+ resource?: TransmissionBackdropResourceFacts,
300
+ ): TransmissionAdmissionResult {
301
+ const verdict = evaluateTransmissionCapability(facts);
302
+ this.capability = verdict;
303
+ if (!verdict.ok) {
304
+ const compatible =
305
+ this.lastKnownGood &&
306
+ sameDemand(this.demand, demand) &&
307
+ resourceCompatible(this.resource, resource);
308
+ if (!compatible && this.lastKnownGood) {
309
+ // A rejected candidate with a different extent, mip shape, format, or
310
+ // device generation cannot safely keep the previous physical target as
311
+ // an LKG. Retire that resource identity immediately; persistent
312
+ // demand remains so the next successful admission can rebuild it.
313
+ this.resource = undefined;
314
+ this.lastKnownGood = false;
315
+ }
316
+ this.lifecycle = compatible ? 'resident' : 'failed';
317
+ this.recovery = compatible ? 'compatible-lkg' : 'rebuild-required';
318
+ return {
319
+ ok: false,
320
+ published: false,
321
+ generation: this.generation,
322
+ demand: this.demand,
323
+ missing: verdict.missing,
324
+ };
325
+ }
326
+ this.generation += 1;
327
+ this.demand = demand;
328
+ this.resource = resource === undefined ? undefined : cloneResource(resource);
329
+ this.lastKnownGood = demand.activeCount > 0 && resource !== undefined;
330
+ this.lifecycle = demand.activeCount > 0 ? 'resident' : 'inactive';
331
+ this.recovery = this.generation === 1 ? 'idle' : 'recovered';
332
+ return { ok: true, published: true, generation: this.generation, demand };
333
+ }
334
+
335
+ inspect(): { readonly generation: number; readonly demand: TransmissionDemand } {
336
+ return { generation: this.generation, demand: this.demand };
337
+ }
338
+
339
+ /**
340
+ * Drop physical resource identity after device loss without dropping the
341
+ * persistent material demand. The next successful admission must publish a
342
+ * replacement resource before it can become the LKG.
343
+ */
344
+ markDeviceLost(): void {
345
+ this.resource = undefined;
346
+ this.lastKnownGood = false;
347
+ this.lifecycle = this.demand.activeCount > 0 ? 'device-lost' : 'inactive';
348
+ this.recovery = this.demand.activeCount > 0 ? 'rebuild-required' : 'idle';
349
+ }
350
+
351
+ markRecoveryStarted(): void {
352
+ this.resource = undefined;
353
+ this.lastKnownGood = false;
354
+ this.lifecycle = this.demand.activeCount > 0 ? 'recovering' : 'inactive';
355
+ this.recovery = this.demand.activeCount > 0 ? 'rebuild-required' : 'idle';
356
+ }
357
+
358
+ inspectLifecycle(): TransmissionCandidateAdmissionInspection {
359
+ return {
360
+ generation: this.generation,
361
+ demand: { ...this.demand },
362
+ capability: this.capability.ok
363
+ ? { ok: true, missing: [] }
364
+ : { ok: false, missing: [...this.capability.missing] },
365
+ lifecycle: this.lifecycle,
366
+ lastKnownGood: this.lastKnownGood,
367
+ recovery: this.recovery,
368
+ ...(this.resource === undefined ? {} : { resource: cloneResource(this.resource) }),
369
+ };
370
+ }
371
+ }
372
+
373
+ export interface TransmissionBackdropGraphInput {
374
+ readonly graph: RenderGraphBuilder<RenderPipelineFrame>;
375
+ /** The resolved single-sample source; MSAA source is never copied directly. */
376
+ readonly source: RenderPipelineTarget;
377
+ readonly demand: TransmissionDemand;
378
+ readonly copySize: { readonly width: number; readonly height: number };
379
+ /**
380
+ * Renderer-owned fullscreen/downsample record path for rough mips. The
381
+ * callback must bind the existing cached sampler/pipeline and draw into the
382
+ * supplied destination view on the graph-owned render pass.
383
+ */
384
+ readonly encodeRoughMip?: TransmissionBackdropMipEncoder | undefined;
385
+ /** Production callers install typed scene consumers after the copy/mip chain. */
386
+ readonly includeConsumerPasses?: boolean;
387
+ }
388
+
389
+ export interface TransmissionBackdropMipEncoderContext {
390
+ readonly pass: RhiRenderPassEncoder;
391
+ readonly frame: RenderPipelineFrame;
392
+ readonly resources: GraphResourceResolver;
393
+ readonly source: GraphTextureView;
394
+ readonly destination: GraphTextureView;
395
+ readonly level: number;
396
+ }
397
+
398
+ /** Existing fullscreen/downsample owner injected by the renderer assembly. */
399
+ export type TransmissionBackdropMipEncoder = (
400
+ context: TransmissionBackdropMipEncoderContext,
401
+ ) => void;
402
+
403
+ function roughMipEncoderMissing(): RenderGraphError {
404
+ return new RenderGraphError({
405
+ code: 'resource-descriptor-invalid',
406
+ expected: 'rough transmission mip generation to use the existing fullscreen/downsample owner',
407
+ hint: 'provide encodeRoughMip from the renderer-owned downsample path before enabling rough transmission',
408
+ detail: {
409
+ resourceLabel: 'transmission-backdrop',
410
+ field: 'roughMipEncoder',
411
+ expected: 'renderer-owned fullscreen/downsample encoder',
412
+ actual: 'missing',
413
+ },
414
+ });
415
+ }
416
+
417
+ export interface TransmissionBackdropGraph {
418
+ readonly topology: TransmissionBackdropTopology;
419
+ readonly backdrop: RenderPipelineTarget | undefined;
420
+ readonly mipViews: readonly GraphTextureView[];
421
+ }
422
+
423
+ /**
424
+ * Adds the private backdrop and its ordered consumers to the caller's graph.
425
+ * The returned target stays inside the Standard pipeline owner; no public
426
+ * render-target or per-object copy is created.
427
+ */
428
+ export function addTransmissionBackdropPasses(
429
+ input: TransmissionBackdropGraphInput,
430
+ ): Result<TransmissionBackdropGraph, RenderGraphError> {
431
+ const topology = resolveTransmissionBackdropTopology({
432
+ demand: input.demand,
433
+ sourceSampleCount: input.source.sampleCount,
434
+ });
435
+ if (!topology.active) {
436
+ return ok({ topology, backdrop: undefined, mipViews: [] });
437
+ }
438
+
439
+ if (topology.mipCount > 0 && input.encodeRoughMip === undefined) {
440
+ return err(roughMipEncoderMissing());
441
+ }
442
+
443
+ const mipLevelCount = topology.mipCount === 0 ? 1 : numMipLevels(input.copySize);
444
+ const backdrop = createRenderPipelineTarget(input.graph, 'transmission-backdrop', {
445
+ format: 'rgba16float',
446
+ size: 'surface',
447
+ sampleCount: 1,
448
+ mipLevelCount,
449
+ });
450
+ if (!backdrop.ok) return backdrop;
451
+ const mip0 = input.graph.view(backdrop.value.texture, {
452
+ label: 'transmission-backdrop.mip-0',
453
+ baseMipLevel: 0,
454
+ mipLevelCount: 1,
455
+ });
456
+ if (!mip0.ok) return mip0;
457
+ const mipViews: GraphTextureView[] = [mip0.value];
458
+ for (let level = 1; level < mipLevelCount; level += 1) {
459
+ const mip = input.graph.view(backdrop.value.texture, {
460
+ label: `transmission-backdrop.mip-${level}`,
461
+ baseMipLevel: level,
462
+ mipLevelCount: 1,
463
+ });
464
+ if (!mip.ok) return mip;
465
+ mipViews.push(mip.value);
466
+ }
467
+
468
+ const copy = input.graph.addCopyPass('transmission-backdrop-copy', {
469
+ accesses: [
470
+ { resource: input.source.view, usage: 'copy-src' },
471
+ { resource: mip0.value, usage: 'copy-dst' },
472
+ ],
473
+ encode: ({ encoder, resources }) => {
474
+ const source = resources.texture(input.source.texture);
475
+ const target = resources.texture(backdrop.value.texture);
476
+ if (!source.ok) throw source.error;
477
+ if (!target.ok) throw target.error;
478
+ encoder.copyTextureToTexture(
479
+ { texture: source.value as never, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } },
480
+ { texture: target.value as never, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } },
481
+ { ...input.copySize, depthOrArrayLayers: 1 },
482
+ );
483
+ },
484
+ });
485
+ if (!copy.ok) return copy;
486
+
487
+ if (topology.mipCount > 0) {
488
+ const encodeRoughMip = input.encodeRoughMip;
489
+ if (encodeRoughMip === undefined) return err(roughMipEncoderMissing());
490
+ for (let level = 1; level < mipViews.length; level += 1) {
491
+ const source = mipViews[level - 1];
492
+ const destination = mipViews[level];
493
+ if (source === undefined || destination === undefined) {
494
+ return err(
495
+ new RenderGraphError({
496
+ code: 'resource-descriptor-invalid',
497
+ expected: 'every rough transmission mip level to have a graph view',
498
+ hint: 'rebuild the backdrop mip chain before adding its raster passes',
499
+ detail: {
500
+ resourceLabel: 'transmission-backdrop',
501
+ field: 'mipViews',
502
+ expected: `mip views for level ${level - 1} and ${level}`,
503
+ actual: 'missing',
504
+ },
505
+ }),
506
+ );
507
+ }
508
+ const mip = input.graph.addRasterPass(
509
+ level === 1 ? 'transmission-backdrop-mip' : `transmission-backdrop-mip-${level}`,
510
+ {
511
+ accesses: [
512
+ { resource: source, usage: 'sampled-read' },
513
+ { resource: destination, usage: 'color-attachment' },
514
+ ] satisfies GraphAccess[],
515
+ colorAttachments: [
516
+ {
517
+ view: destination,
518
+ clearValue: { r: 0, g: 0, b: 0, a: 1 },
519
+ loadOp: 'clear',
520
+ storeOp: 'store',
521
+ },
522
+ ],
523
+ encode: ({ pass, frame, resources }) =>
524
+ encodeRoughMip({
525
+ pass,
526
+ frame,
527
+ resources,
528
+ source,
529
+ destination,
530
+ level,
531
+ }),
532
+ },
533
+ );
534
+ if (!mip.ok) return mip;
535
+ }
536
+ }
537
+
538
+ if (input.includeConsumerPasses !== false) {
539
+ const transmission = input.graph.addRasterPass('transmission-forward', {
540
+ accesses: [
541
+ { resource: mip0.value, usage: 'sampled-read' },
542
+ { resource: input.source.view, usage: 'color-attachment' },
543
+ ],
544
+ colorAttachments: [{ view: input.source.view, loadOp: 'load', storeOp: 'store' }],
545
+ encode: () => undefined,
546
+ });
547
+ if (!transmission.ok) return transmission;
548
+
549
+ for (const name of ['transparent', 'temporal'] as const) {
550
+ const pass = input.graph.addRasterPass(name, {
551
+ accesses: [{ resource: input.source.view, usage: 'color-attachment' }],
552
+ colorAttachments: [{ view: input.source.view, loadOp: 'load', storeOp: 'store' }],
553
+ encode: () => undefined,
554
+ });
555
+ if (!pass.ok) return pass;
556
+ }
557
+ }
558
+
559
+ return ok({ topology, backdrop: backdrop.value, mipViews });
560
+ }
561
+
562
+ /** Adds the final ordering marker after typed transmission and transparent draws. */
563
+ export function addTransmissionBackdropTemporalPass(
564
+ graph: RenderGraphBuilder<RenderPipelineFrame>,
565
+ source: RenderPipelineTarget,
566
+ ): Result<void, RenderGraphError> {
567
+ return graph.addRasterPass('temporal', {
568
+ accesses: [{ resource: source.view, usage: 'color-attachment' }],
569
+ colorAttachments: [{ view: source.view, loadOp: 'load', storeOp: 'store' }],
570
+ encode: () => undefined,
571
+ });
572
+ }