@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
@@ -39,8 +39,57 @@ export type MainPassOptions = {
39
39
  readonly depthView?: TextureView | null;
40
40
  readonly passKind?: PassKind;
41
41
  readonly clearColor?: readonly [number, number, number, number];
42
+ readonly recordMode?: 'opaque' | 'transmission' | 'transparent';
43
+ readonly transmissionBackdropView?: TextureView | null;
42
44
  };
43
45
 
46
+ const TRANSMISSION_VARIANT_SET = 'TRANSMISSION_AVAILABLE=true';
47
+
48
+ function isTransmissionMaterial(material: MaterialSnapshot): boolean {
49
+ return (
50
+ material.materialShaderId === 'forgeax::default-standard-pbr' &&
51
+ typeof material.paramSnapshot?.transmission === 'number' &&
52
+ material.paramSnapshot.transmission > 0
53
+ );
54
+ }
55
+
56
+ function matchesRecordMode(
57
+ material: MaterialSnapshot,
58
+ mode: 'opaque' | 'transmission' | 'transparent',
59
+ ): boolean {
60
+ const transmission = isTransmissionMaterial(material);
61
+ if (mode === 'transmission') return transmission;
62
+ if (mode === 'transparent') return material.transparent === true && !transmission;
63
+ return !transmission && material.transparent !== true;
64
+ }
65
+
66
+ function matchedMaterialsForRecordMode(
67
+ c: _InternalRenderPipelineContext,
68
+ matchedMaterials: ReadonlyMap<number, ReadonlySet<number>> | null,
69
+ mode: 'opaque' | 'transmission' | 'transparent' | undefined,
70
+ ): ReadonlyMap<number, ReadonlySet<number>> | null {
71
+ if (mode === undefined) return matchedMaterials;
72
+ const filtered = new Map<number, ReadonlySet<number>>();
73
+ for (const entry of c.validatedOrdered) {
74
+ const dispatchHandles = matchedMaterials?.get(entry.renderableIndex);
75
+ if (matchedMaterials !== null && dispatchHandles === undefined) continue;
76
+ const candidateHandles =
77
+ dispatchHandles ??
78
+ (mode === 'transmission'
79
+ ? []
80
+ : entry.source.materials.map((material) => material.materialHandle ?? 0));
81
+ const handles = new Set<number>();
82
+ for (const handle of candidateHandles) {
83
+ const material =
84
+ entry.source.materials.find((candidate) => (candidate.materialHandle ?? 0) === handle) ??
85
+ entry.source.material;
86
+ if (matchesRecordMode(material, mode)) handles.add(handle);
87
+ }
88
+ if (handles.size > 0) filtered.set(entry.renderableIndex, handles);
89
+ }
90
+ return filtered;
91
+ }
92
+
44
93
  /**
45
94
  * feat-20260529-rendergraph-pass-abstraction M4 / w13b: main forward
46
95
  * (geometry) pass recording, extracted verbatim from recordFrame. Uses the
@@ -87,9 +136,20 @@ export function recordMainPass(
87
136
  // msaaActive boolean (already on the context).
88
137
  const sampleCount = msaaActive ? 4 : 1;
89
138
  const passKind = options?.passKind ?? 'forward';
139
+ const recordMode = options?.recordMode;
140
+ const transmissionBackdropView = options?.transmissionBackdropView;
141
+ if (recordMode === 'transmission' && transmissionBackdropView == null) {
142
+ throw new RhiError({
143
+ code: 'webgpu-runtime-error',
144
+ expected: 'transmissionBackdropView != null for transmission record mode',
145
+ hint: 'the typed Standard transmission pass must resolve its private backdrop view',
146
+ });
147
+ }
90
148
  const colorViews = options?.colorViews ?? [geometryColorView];
91
149
  const colorFormats = options?.colorFormats ?? [
92
- (c.tonemapActive ? 'rgba16float' : pipelineState.colorAttachmentFormat) as GPUTextureFormat,
150
+ (c.tonemapActive || c.transparentColorFormat === 'rgba16float'
151
+ ? 'rgba16float'
152
+ : pipelineState.colorAttachmentFormat) as GPUTextureFormat,
93
153
  ];
94
154
  const targetDepthView = options?.depthView ?? geometryDepthView;
95
155
  const clearColor = options?.clearColor ?? clear;
@@ -198,8 +258,20 @@ export function recordMainPass(
198
258
  // feat-20260609 M2: filter entities by pass selector.
199
259
  const matchedIndices =
200
260
  selector !== undefined ? buildMatchedRenderableIndices(dispatch, selector) : null;
201
- const matchedMaterials =
261
+ const selectorMatchedMaterials =
202
262
  selector !== undefined ? buildMatchedMaterialHandlesByRenderable(dispatch, selector) : null;
263
+ const matchedMaterials = matchedMaterialsForRecordMode(c, selectorMatchedMaterials, recordMode);
264
+ const recordContext =
265
+ recordMode === undefined
266
+ ? c
267
+ : {
268
+ ...c,
269
+ splitLdrSprite: recordMode === 'transparent' ? false : c.splitLdrSprite,
270
+ validatedOrdered: c.validatedOrdered.map((entry) => ({
271
+ ...entry,
272
+ ...(recordMode === 'transmission' ? { variantSet: TRANSMISSION_VARIANT_SET } : {}),
273
+ })),
274
+ };
203
275
 
204
276
  if (validatedOrdered.length > 0) {
205
277
  // feat-20260518-pbr-direct-lighting-mvp M5 / w22.10 (D-4 + D-9 +
@@ -363,6 +435,7 @@ export function recordMainPass(
363
435
  materialBgShared: frameState.materialBgShared,
364
436
  materialBgAssemblyCache: c.materialBgAssemblyCache,
365
437
  bindGroupCounts,
438
+ ...(transmissionBackdropView === undefined ? {} : { transmissionBackdropView }),
366
439
  };
367
440
  const buildPerSubmeshMaterialBg = (
368
441
  submeshMaterial: MaterialSnapshot,
@@ -551,7 +624,7 @@ export function recordMainPass(
551
624
  // M-3 / w12: vertexBuffer/indexBuffer state locals migrate to GpuBuffer.
552
625
  const recordGeometry = (): void => {
553
626
  recordGeometryDraws(
554
- c,
627
+ recordContext,
555
628
  pass,
556
629
  matchedMaterials,
557
630
  materialSlotIndices,
@@ -581,7 +654,7 @@ export function recordMainPass(
581
654
  // already-encoded geometry pixels. Depth is loaded from the geometry
582
655
  // pass so sprite-vs-mesh occlusion (depthCompare=less-equal) is
583
656
  // preserved (plan-strategy §2 D-2 + §4 R-4).
584
- if (passKind === 'forward') {
657
+ if (passKind === 'forward' && recordMode === undefined) {
585
658
  geometryPassEnded = recordSpritePass(
586
659
  c,
587
660
  pass,
@@ -365,10 +365,11 @@ export function uploadMeshSsboBatch(
365
365
  for (let i = 0; i < slotCount; i++) {
366
366
  const entry = validatedOrdered[i];
367
367
  if (entry === undefined) continue;
368
- // Float32Array view into this entity's 256-byte slot (28 floats used,
369
- // rest remains 0 from the fill above). Byte offset i*256 is always
368
+ // Float32Array view into this entity's 256-byte slot (current world,
369
+ // normal, previous world, and reactive metadata use 45 floats; the
370
+ // remaining padding stays zero). Byte offset i*256 is always
370
371
  // 4-byte aligned since MESH_PER_ENTITY_STRIDE=256 is divisible by 4.
371
- const slot = new Float32Array(_meshSsboScratch.buffer, i * MESH_PER_ENTITY_STRIDE, 28);
372
+ const slot = new Float32Array(_meshSsboScratch.buffer, i * MESH_PER_ENTITY_STRIDE, 48);
372
373
  const isFoldHead = foldDispatchPlan?.headBuckets.has(i) === true;
373
374
  if (isFoldHead) {
374
375
  // identity mat4
@@ -380,6 +381,13 @@ export function uploadMeshSsboBatch(
380
381
  slot[16] = 1;
381
382
  slot[20] = 1;
382
383
  slot[24] = 1;
384
+ // Fold heads use the instance storage path; keep the mesh temporal
385
+ // fields deterministic for shader variants that still read the slot.
386
+ slot[28] = 1;
387
+ slot[33] = 1;
388
+ slot[38] = 1;
389
+ slot[43] = 1;
390
+ slot[44] = 1;
383
391
  } else {
384
392
  const worldFromLocal = entry.source.transform.world;
385
393
  for (let k = 0; k < 16; k++) slot[k] = worldFromLocal[k] ?? 0;
@@ -393,6 +401,17 @@ export function uploadMeshSsboBatch(
393
401
  slot[24] = normal[6] ?? 0;
394
402
  slot[25] = normal[7] ?? 0;
395
403
  slot[26] = normal[8] ?? 0;
404
+ const previousWorld = entry.source.temporal?.previousTransform.world ?? worldFromLocal;
405
+ for (let k = 0; k < 16; k++) slot[28 + k] = previousWorld[k] ?? 0;
406
+ const reactiveMaterial = entry.source.materials.some(
407
+ (material) =>
408
+ material.transparent === true ||
409
+ material.materialShaderId === 'forgeax::sprite' ||
410
+ material.materialShaderId === 'forgeax::sprite-lit' ||
411
+ (material.materialShaderId !== undefined &&
412
+ !material.materialShaderId.startsWith('forgeax::')),
413
+ );
414
+ slot[44] = entry.source.temporal?.reactive === true || reactiveMaterial ? 1 : 0;
396
415
  }
397
416
  }
398
417
  if (neededBytes > 0) {
@@ -2,6 +2,7 @@ import type { AssetRegistry, DynamicTextureStore } from '@forgeax/engine-assets-
2
2
  import type { World } from '@forgeax/engine-ecs';
3
3
  import type { VertexLayoutProjection } from '@forgeax/engine-geometry';
4
4
  import type { Profiler } from '@forgeax/engine-profiler';
5
+ import type { CompiledRenderGraphInfo } from '@forgeax/engine-render-graph';
5
6
  import type {
6
7
  BindGroup,
7
8
  BindGroupLayout,
@@ -11,13 +12,13 @@ import type {
11
12
  Result,
12
13
  RhiCanvasContext,
13
14
  RhiDevice,
14
- RhiError,
15
15
  RenderPipeline as RhiRenderPipeline,
16
16
  Sampler,
17
17
  Texture,
18
18
  TextureFormat,
19
19
  TextureView,
20
20
  } from '@forgeax/engine-rhi';
21
+ import { err, ok, RhiError } from '@forgeax/engine-rhi';
21
22
  import type { MaterialRuntimeArtifact } from '@forgeax/engine-shader';
22
23
  import type {
23
24
  MaterialRenderState,
@@ -31,12 +32,14 @@ import type { DeviceScope } from '../device/device-scope';
31
32
  import type { MeshGpuHandles } from '../device/gpu-residency';
32
33
  import type { EngineMetrics } from '../engine-metrics';
33
34
  import type { RenderFeatureHost } from '../features/host';
35
+ import type { RenderFeatureShaderModuleMode } from '../features/types';
34
36
  import {
35
37
  GPU_TEXTURE_USAGE_COPY_SRC,
36
38
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
37
39
  GPU_TEXTURE_USAGE_TEXTURE_BINDING,
38
40
  } from '../gpu-texture-usage';
39
41
  import type { SkylightFallback } from '../ibl/skylight-bind-group';
42
+ import type { BloomInspection } from '../inspection-types';
40
43
  import type { HealthListenerRegistry, RhiErrorListenerRegistry } from '../lifecycle';
41
44
  import type { StandardProfile } from '../pipeline/standard-profile';
42
45
  import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
@@ -64,6 +67,7 @@ import type {
64
67
  import type { SkinPaletteAllocator } from '../systems/skin-palette-allocator';
65
68
  import type {
66
69
  BindGroupCounts,
70
+ BloomFrameReceipts,
67
71
  DispatchCounts,
68
72
  MaterialBgAssemblyCacheEntry,
69
73
  RenderFrameState,
@@ -94,6 +98,8 @@ export interface RenderSystemRuntime {
94
98
  depthFormatOverride?: GPUTextureFormat | null,
95
99
  vertexLayout?: string,
96
100
  vertexLayoutProjection?: VertexLayoutProjection,
101
+ shaderModuleMode?: RenderFeatureShaderModuleMode,
102
+ layoutKindOverride?: 'pbr' | 'pbr-skin',
97
103
  ) => RhiRenderPipeline | null;
98
104
  readonly getMaterialShaderBindingContract?: (
99
105
  materialShaderId: string,
@@ -110,6 +116,8 @@ export interface RenderSystemRuntime {
110
116
  bgl: BindGroupLayout,
111
117
  colorFormat: GPUTextureFormat,
112
118
  ) => RhiRenderPipeline | null;
119
+ readonly clearPostProcessPipelineCache?: (id: string) => void;
120
+ readonly invalidateShaderModule?: (label: string) => void;
113
121
  readonly dynamicTextureStore?: DynamicTextureStore | undefined;
114
122
  }
115
123
 
@@ -152,18 +160,27 @@ export interface PerPassResources {
152
160
  readonly skyboxBindGroupLayout: BindGroupLayout | null;
153
161
  readonly skyboxSampler: Sampler | null;
154
162
  readonly skyboxRotationBuffer: Buffer | null;
155
- readonly bloomBrightPipeline: RhiRenderPipeline | null;
156
- readonly bloomBlurHPipeline: RhiRenderPipeline | null;
157
- readonly bloomBlurVPipeline: RhiRenderPipeline | null;
158
- readonly bloomCompositePipeline: RhiRenderPipeline | null;
159
- readonly bloomBrightBindGroupLayout: BindGroupLayout | null;
160
- readonly bloomBlurBindGroupLayout: BindGroupLayout | null;
161
- readonly bloomCompositeBindGroupLayout: BindGroupLayout | null;
162
- readonly bloomSampler: Sampler | null;
163
- readonly bloomBrightParamsBuffer: Buffer | null;
164
- readonly bloomBlurHParamsBuffer: Buffer | null;
165
- readonly bloomBlurVParamsBuffer: Buffer | null;
166
- readonly bloomCompositeParamsBuffer: Buffer | null;
163
+ bloomBrightPipeline: RhiRenderPipeline | null;
164
+ bloomBlurHPipeline: RhiRenderPipeline | null;
165
+ bloomBlurVPipeline: RhiRenderPipeline | null;
166
+ bloomCompositePipeline: RhiRenderPipeline | null;
167
+ bloomBrightBindGroupLayout: BindGroupLayout | null;
168
+ bloomBlurBindGroupLayout: BindGroupLayout | null;
169
+ bloomCompositeBindGroupLayout: BindGroupLayout | null;
170
+ bloomSampler: Sampler | null;
171
+ bloomBrightParamsBuffer: Buffer | null;
172
+ bloomBlurHParamsBuffer: Buffer | null;
173
+ bloomBlurVParamsBuffer: Buffer | null;
174
+ bloomCompositeParamsBuffer: Buffer | null;
175
+ ensureBloomResources?: () => void;
176
+ getBloomResources?: () => BloomPersistentBundle | null;
177
+ commitBloomResources?: () => void;
178
+ commitBloomFrameReceipts?: (receipts: BloomFrameReceipts) => void;
179
+ discardBloomResources?: () => void;
180
+ retireBloomResources?: (completion: Promise<unknown>) => void;
181
+ /** Drain candidate, active, and fence-retiring Bloom generations. */
182
+ drainBloomResources?: () => void;
183
+ inspectBloomResources?: (graph?: CompiledRenderGraphInfo) => BloomInspection;
167
184
  bloomBrightTexture: Texture | null;
168
185
  bloomBrightView: TextureView | null;
169
186
  bloomBrightWidth: number;
@@ -194,10 +211,30 @@ export interface PerPassResources {
194
211
  } | null;
195
212
  }
196
213
 
214
+ /** Renderer-private Bloom bundle selected for one record transaction. */
215
+ export interface BloomPersistentBundle {
216
+ readonly scope: DeviceScope;
217
+ readonly generation: number;
218
+ readonly bloomBrightPipeline: RhiRenderPipeline | null;
219
+ readonly bloomBlurHPipeline: RhiRenderPipeline | null;
220
+ readonly bloomBlurVPipeline: RhiRenderPipeline | null;
221
+ readonly bloomCompositePipeline: RhiRenderPipeline | null;
222
+ readonly bloomBrightBindGroupLayout: BindGroupLayout | null;
223
+ readonly bloomBlurBindGroupLayout: BindGroupLayout | null;
224
+ readonly bloomCompositeBindGroupLayout: BindGroupLayout | null;
225
+ readonly bloomSampler: Sampler | null;
226
+ readonly bloomBrightParamsBuffer: Buffer | null;
227
+ readonly bloomBlurHParamsBuffer: Buffer | null;
228
+ readonly bloomBlurVParamsBuffer: Buffer | null;
229
+ readonly bloomCompositeParamsBuffer: Buffer | null;
230
+ }
231
+
197
232
  export interface PipelineState {
198
233
  readonly meshes: ReadonlyMap<number, MeshGpuHandles>;
199
234
  readonly format: TextureFormat;
200
235
  readonly colorAttachmentFormat: TextureFormat;
236
+ /** Surface route committed by configureSurface for inspection provenance. */
237
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
201
238
  readonly viewBindGroupLayout: BindGroupLayout;
202
239
  readonly materialBindGroupLayout: BindGroupLayout;
203
240
  readonly meshBindGroupLayout: BindGroupLayout;
@@ -240,6 +277,8 @@ export interface RenderSystemInternals extends RenderSystemRuntime {
240
277
  readonly standardPipeline: RenderFrameState['activePipeline'];
241
278
  readonly featureHost?: RenderFeatureHost | undefined;
242
279
  readonly shaderModuleFactory?: PipelineBuilderShaderModuleFactory;
280
+ /** Optional handle-first factory for feature-owned generated shader programs. */
281
+ readonly immediateShaderModuleFactory?: PipelineBuilderShaderModuleFactory;
243
282
  readonly profiler?: Profiler | undefined;
244
283
  readonly context: RhiCanvasContext | null;
245
284
  readonly getPipelineState: () => PipelineState | null;
@@ -269,6 +308,7 @@ export interface _StandardForwardSceneView {
269
308
  readonly assets: AssetRegistry;
270
309
  readonly store: import('../device/gpu-residency').GpuResidencyCache;
271
310
  readonly pipelineState: PipelineState;
311
+ readonly bloomResources?: BloomPersistentBundle | null;
272
312
  readonly runtime: RenderSystemRuntime;
273
313
  readonly validated: readonly ValidatedRenderable[];
274
314
  readonly validatedOrdered: readonly ValidatedRenderable[];
@@ -314,7 +354,7 @@ export type _InternalRenderPipelineContext = RenderPipelineContext & _StandardFo
314
354
 
315
355
  export type RecordProfileRunner = <T>(phase: RenderRecordPhase, action: () => T) => T;
316
356
 
317
- export const STANDARD_PBR_UBO_SIZE = 304;
357
+ export const STANDARD_PBR_UBO_SIZE = 384;
318
358
  export const MATERIAL_PER_ENTITY_STRIDE = 512;
319
359
 
320
360
  export type SwapChainFormatPair = {
@@ -323,14 +363,88 @@ export type SwapChainFormatPair = {
323
363
  readonly fallbackReason?: 'preferred-canvas-format-missing';
324
364
  };
325
365
 
366
+ /** Internal closed projection of the concrete surface route. */
367
+ export type SurfaceProfile =
368
+ | {
369
+ readonly kind: 'dual-view';
370
+ readonly storageFormat: GPUTextureFormat;
371
+ readonly viewFormat: GPUTextureFormat;
372
+ readonly viewFormats: readonly [GPUTextureFormat];
373
+ readonly hasDisplayEndpoint: true;
374
+ }
375
+ | {
376
+ readonly kind: 'raw-only';
377
+ readonly storageFormat: GPUTextureFormat;
378
+ readonly viewFormat: GPUTextureFormat;
379
+ readonly viewFormats: readonly [];
380
+ readonly hasDisplayEndpoint: false;
381
+ };
382
+
383
+ export interface SurfaceCapabilityFacts {
384
+ /** Concrete wgpu downlevel `SURFACE_VIEW_FORMATS` flag. */
385
+ readonly surfaceViewFormats: boolean;
386
+ readonly rawAttachment: boolean;
387
+ readonly floatRenderAttachment: boolean;
388
+ }
389
+
390
+ export function resolveSurfaceProfile(
391
+ storageFormat: GPUTextureFormat,
392
+ viewFormat: GPUTextureFormat,
393
+ facts: SurfaceCapabilityFacts,
394
+ ): Result<SurfaceProfile, RhiError> {
395
+ if (facts.surfaceViewFormats) {
396
+ return ok({
397
+ kind: 'dual-view',
398
+ storageFormat,
399
+ viewFormat,
400
+ viewFormats: [viewFormat],
401
+ hasDisplayEndpoint: true,
402
+ });
403
+ }
404
+ if (!facts.rawAttachment || !facts.floatRenderAttachment) {
405
+ return err(
406
+ new RhiError({
407
+ code: 'webgpu-runtime-error',
408
+ expected: 'raw surface attachment and rgba16float render attachment capabilities',
409
+ hint: 'surface profile cannot establish a raw-only linear output route',
410
+ detail: {
411
+ error: {
412
+ code: 'surface-raw-endpoint-failed',
413
+ message: 'raw-only surface capabilities are incomplete',
414
+ },
415
+ },
416
+ }),
417
+ );
418
+ }
419
+ return ok({
420
+ kind: 'raw-only',
421
+ storageFormat,
422
+ viewFormat: storageFormat,
423
+ viewFormats: [],
424
+ hasDisplayEndpoint: false,
425
+ });
426
+ }
427
+
326
428
  export type SurfaceBackendKind = 'webgpu' | 'wgpu-native' | 'wgpu-webgl2' | 'null';
327
429
 
328
430
  export function resolveSurfaceFormatPair(
329
- backendKind: SurfaceBackendKind,
431
+ _backendKind: SurfaceBackendKind,
330
432
  storage: GPUTextureFormat,
331
433
  view: GPUTextureFormat,
332
434
  ): SwapChainFormatPair {
333
- return backendKind === 'wgpu-webgl2' ? { storage: view, view } : { storage, view };
435
+ return { storage, view };
436
+ }
437
+
438
+ function surfaceCapabilityFacts(
439
+ device: RhiDevice,
440
+ storageFormat: GPUTextureFormat,
441
+ ): SurfaceCapabilityFacts {
442
+ const internal = device as unknown as { readonly surfaceViewFormats?: boolean };
443
+ return {
444
+ surfaceViewFormats: internal.surfaceViewFormats ?? device.caps?.backendKind !== 'wgpu-webgl2',
445
+ rawAttachment: storageFormat === 'rgba8unorm' || storageFormat === 'bgra8unorm',
446
+ floatRenderAttachment: device.caps?.rgba16floatRenderable ?? true,
447
+ };
334
448
  }
335
449
 
336
450
  export function configureSurface(
@@ -346,8 +460,20 @@ export function configureSurface(
346
460
  format as GPUTextureFormat,
347
461
  colorAttachmentFormat as GPUTextureFormat,
348
462
  );
349
- const supportsTextureBinding = device.caps?.storageBuffer ?? true;
350
- return context.configure({
463
+ const profile = resolveSurfaceProfile(
464
+ surfaceFormats.storage,
465
+ surfaceFormats.view,
466
+ surfaceCapabilityFacts(device, surfaceFormats.storage),
467
+ );
468
+ if (!profile.ok) return profile;
469
+ // WebGL2 surface pixels are proven by the compositor fixture, so it has no
470
+ // surface consumer for optional TEXTURE_BINDING/COPY_SRC usage. The concrete
471
+ // wgpu surface derives supported usages from SurfaceCapabilities and rejects
472
+ // unsupported requests; this path requests only the guaranteed attachment
473
+ // usage. Raw-only deliberately has no alternate view.
474
+ const supportsTextureBinding =
475
+ backendKind !== 'wgpu-webgl2' && (device.caps?.storageBuffer ?? true);
476
+ const configured = context.configure({
351
477
  device,
352
478
  format: surfaceFormats.storage,
353
479
  alphaMode: isWebGl2 ? 'opaque' : 'premultiplied',
@@ -355,12 +481,49 @@ export function configureSurface(
355
481
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
356
482
  (supportsTextureBinding ? GPU_TEXTURE_USAGE_TEXTURE_BINDING : 0) |
357
483
  (isWebGl2 ? 0 : GPU_TEXTURE_USAGE_COPY_SRC),
358
- ...(!isWebGl2 ? { viewFormats: [surfaceFormats.view] } : {}),
484
+ viewFormats: [...profile.value.viewFormats],
359
485
  });
486
+ if (!configured.ok) return configured;
487
+ if (
488
+ isWebGl2 &&
489
+ (context.presentationProof === undefined ||
490
+ !context.presentationProof.descriptor ||
491
+ !context.presentationProof.acquisition ||
492
+ !context.presentationProof.validation ||
493
+ typeof context.presentationProof.surfaceIdentity !== 'string' ||
494
+ context.presentationProof.surfaceIdentity.length === 0 ||
495
+ context.presentationProof.requested === undefined ||
496
+ context.presentationProof.validated === undefined ||
497
+ JSON.stringify(context.presentationProof.requested) !==
498
+ JSON.stringify(context.presentationProof.validated))
499
+ ) {
500
+ return err(
501
+ new RhiError({
502
+ code: 'webgpu-runtime-error',
503
+ expected: 'WebGL2 surface storage has descriptor, acquisition, and validation proof',
504
+ hint: 'run the concrete presentation probe and retain the last-known-good graph when proof is absent',
505
+ detail: {
506
+ error: {
507
+ code: 'surface-raw-endpoint-failed',
508
+ message: 'surface storage raw endpoint proof is incomplete',
509
+ },
510
+ },
511
+ }),
512
+ );
513
+ }
514
+ return ok(undefined);
360
515
  }
361
516
 
362
- export function selectSwapChainFormat(storageBufferCapable: boolean): SwapChainFormatPair {
363
- if (!storageBufferCapable) return { storage: 'rgba8unorm', view: 'rgba8unorm-srgb' };
517
+ export function selectSwapChainFormat(
518
+ storageBufferCapable: boolean,
519
+ surfaceViewFormats = true,
520
+ ): SwapChainFormatPair {
521
+ if (!storageBufferCapable) {
522
+ return {
523
+ storage: 'rgba8unorm',
524
+ view: surfaceViewFormats ? 'rgba8unorm-srgb' : 'rgba8unorm',
525
+ };
526
+ }
364
527
  const nav = (
365
528
  globalThis as { navigator?: { gpu?: { getPreferredCanvasFormat?: () => GPUTextureFormat } } }
366
529
  ).navigator;
@@ -374,11 +537,14 @@ export function selectSwapChainFormat(storageBufferCapable: boolean): SwapChainF
374
537
  : storage === 'bgra8unorm'
375
538
  ? 'bgra8unorm-srgb'
376
539
  : storage;
377
- return { storage, view };
540
+ return {
541
+ storage,
542
+ view: surfaceViewFormats ? view : storage,
543
+ };
378
544
  }
379
545
  return {
380
546
  storage: 'rgba8unorm',
381
- view: 'rgba8unorm-srgb',
547
+ view: surfaceViewFormats ? 'rgba8unorm-srgb' : 'rgba8unorm',
382
548
  fallbackReason: 'preferred-canvas-format-missing',
383
549
  };
384
550
  }