@forgeax/engine-render 0.1.6 → 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 (713) hide show
  1. package/README.md +279 -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 +19 -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/material/assembly.d.ts.map +1 -1
  10. package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
  11. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
  12. package/dist/assembly/renderer-inspection.d.ts +22 -0
  13. package/dist/assembly/renderer-inspection.d.ts.map +1 -0
  14. package/dist/assembly/renderer-lifecycle.d.ts +4 -0
  15. package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
  16. package/dist/authoring.d.ts +1 -0
  17. package/dist/authoring.d.ts.map +1 -1
  18. package/dist/authoring.mjs +4 -2
  19. package/dist/authoring.mjs.map +1 -1
  20. package/dist/chunk-FJ6P52EE.mjs +46 -0
  21. package/dist/chunk-FJ6P52EE.mjs.map +1 -0
  22. package/dist/chunk-IPXCABEP.mjs +73 -0
  23. package/dist/chunk-IPXCABEP.mjs.map +1 -0
  24. package/dist/chunk-JDWARUOI.mjs +44 -0
  25. package/dist/chunk-JDWARUOI.mjs.map +1 -0
  26. package/dist/chunk-LOSO4CTV.mjs +901 -0
  27. package/dist/chunk-LOSO4CTV.mjs.map +1 -0
  28. package/dist/chunk-PCHBPYML.mjs +385 -0
  29. package/dist/chunk-PCHBPYML.mjs.map +1 -0
  30. package/dist/chunk-RJRUS55L.mjs +9323 -0
  31. package/dist/chunk-RJRUS55L.mjs.map +1 -0
  32. package/dist/{chunk-QC4VW3XJ.mjs → chunk-RXZ3RGOU.mjs} +4 -30
  33. package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
  34. package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
  35. package/dist/chunk-VFPLTKCU.mjs.map +1 -0
  36. package/dist/{chunk-SCRSAK5B.mjs → chunk-YTQ5C7YQ.mjs} +231 -127
  37. package/dist/chunk-YTQ5C7YQ.mjs.map +1 -0
  38. package/dist/components/atmosphere.d.ts +9 -0
  39. package/dist/components/atmosphere.d.ts.map +1 -0
  40. package/dist/components/camera.d.ts +2 -1
  41. package/dist/components/camera.d.ts.map +1 -1
  42. package/dist/components/fog.d.ts +8 -0
  43. package/dist/components/fog.d.ts.map +1 -0
  44. package/dist/components/index.d.ts +5 -0
  45. package/dist/components/index.d.ts.map +1 -1
  46. package/dist/components/lines.d.ts +5 -0
  47. package/dist/components/lines.d.ts.map +1 -0
  48. package/dist/components/motion-blur.d.ts +7 -0
  49. package/dist/components/motion-blur.d.ts.map +1 -0
  50. package/dist/components/points.d.ts +15 -0
  51. package/dist/components/points.d.ts.map +1 -0
  52. package/dist/construct-renderer.d.ts +2 -2
  53. package/dist/construct-renderer.d.ts.map +1 -1
  54. package/dist/construct-renderer.mjs +11419 -16442
  55. package/dist/construct-renderer.mjs.map +1 -1
  56. package/dist/device/device-scope.d.ts +4 -0
  57. package/dist/device/device-scope.d.ts.map +1 -1
  58. package/dist/environment/frame.d.ts +60 -0
  59. package/dist/environment/frame.d.ts.map +1 -0
  60. package/dist/environment/generation.d.ts +21 -0
  61. package/dist/environment/generation.d.ts.map +1 -0
  62. package/dist/environment/graph.d.ts +4 -0
  63. package/dist/environment/graph.d.ts.map +1 -0
  64. package/dist/environment/inspection.d.ts +48 -0
  65. package/dist/environment/inspection.d.ts.map +1 -0
  66. package/dist/environment/lifecycle.d.ts +39 -0
  67. package/dist/environment/lifecycle.d.ts.map +1 -0
  68. package/dist/environment/signature.d.ts +25 -0
  69. package/dist/environment/signature.d.ts.map +1 -0
  70. package/dist/errors/render.d.ts +217 -1
  71. package/dist/errors/render.d.ts.map +1 -1
  72. package/dist/extract/camera.d.ts +5 -0
  73. package/dist/extract/camera.d.ts.map +1 -0
  74. package/dist/extract/environment.d.ts +74 -0
  75. package/dist/extract/environment.d.ts.map +1 -0
  76. package/dist/extract/visibility.d.ts +1 -1
  77. package/dist/extract/visibility.d.ts.map +1 -1
  78. package/dist/features/host.d.ts +9 -2
  79. package/dist/features/host.d.ts.map +1 -1
  80. package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
  81. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
  82. package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
  83. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
  84. package/dist/features/plan.d.ts +17 -2
  85. package/dist/features/plan.d.ts.map +1 -1
  86. package/dist/features/prepared-gpu-work.d.ts +3 -1
  87. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  88. package/dist/features/prepared-graphics.d.ts +2 -1
  89. package/dist/features/prepared-graphics.d.ts.map +1 -1
  90. package/dist/features/render-graph-raster.d.ts +7 -2
  91. package/dist/features/render-graph-raster.d.ts.map +1 -1
  92. package/dist/features/targets.d.ts +3 -0
  93. package/dist/features/targets.d.ts.map +1 -1
  94. package/dist/features/types.d.ts +12 -0
  95. package/dist/features/types.d.ts.map +1 -1
  96. package/dist/fullscreen-post-process-pass.d.ts +7 -1
  97. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  98. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  99. package/dist/gpu-scene.d.ts +2 -0
  100. package/dist/gpu-scene.d.ts.map +1 -1
  101. package/dist/ibl/skylight-bind-group.d.ts +5 -6
  102. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  103. package/dist/index.d.ts +21 -6
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.mjs +8 -4
  106. package/dist/index.mjs.map +1 -1
  107. package/dist/inspection-types.d.ts +46 -1
  108. package/dist/inspection-types.d.ts.map +1 -1
  109. package/dist/internal.d.ts +2 -0
  110. package/dist/internal.d.ts.map +1 -1
  111. package/dist/internal.mjs +2 -0
  112. package/dist/materials.d.ts +22 -0
  113. package/dist/materials.d.ts.map +1 -1
  114. package/dist/pbr-pipeline.d.ts +12 -6
  115. package/dist/pbr-pipeline.d.ts.map +1 -1
  116. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  117. package/dist/pipeline/standard-pipeline.d.ts +3 -0
  118. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  119. package/dist/pipeline/standard-post.d.ts +48 -0
  120. package/dist/pipeline/standard-post.d.ts.map +1 -0
  121. package/dist/pipeline/standard-profile.d.ts +3 -6
  122. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  123. package/dist/pipeline-builder.d.ts +18 -0
  124. package/dist/pipeline-builder.d.ts.map +1 -1
  125. package/dist/pipeline-spec.d.ts.map +1 -1
  126. package/dist/plugin.d.ts.map +1 -1
  127. package/dist/points-lines/admission.d.ts +36 -0
  128. package/dist/points-lines/admission.d.ts.map +1 -0
  129. package/dist/points-lines/bounds.d.ts +8 -0
  130. package/dist/points-lines/bounds.d.ts.map +1 -0
  131. package/dist/points-lines/expansion-cache.d.ts +28 -0
  132. package/dist/points-lines/expansion-cache.d.ts.map +1 -0
  133. package/dist/points-lines/inspection.d.ts +53 -0
  134. package/dist/points-lines/inspection.d.ts.map +1 -0
  135. package/dist/points-lines/prepare.d.ts +67 -0
  136. package/dist/points-lines/prepare.d.ts.map +1 -0
  137. package/dist/points-lines/record.d.ts +60 -0
  138. package/dist/points-lines/record.d.ts.map +1 -0
  139. package/dist/points-lines/snapshot.d.ts +49 -0
  140. package/dist/points-lines/snapshot.d.ts.map +1 -0
  141. package/dist/record/frame-lighting.d.ts.map +1 -1
  142. package/dist/record/frame-snapshot.d.ts +100 -5
  143. package/dist/record/frame-snapshot.d.ts.map +1 -1
  144. package/dist/record/frame-targets.d.ts.map +1 -1
  145. package/dist/record/frame.d.ts +4 -2
  146. package/dist/record/frame.d.ts.map +1 -1
  147. package/dist/record/main-pass-geometry.d.ts +18 -0
  148. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  149. package/dist/record/main-pass-material.d.ts +8 -5
  150. package/dist/record/main-pass-material.d.ts.map +1 -1
  151. package/dist/record/main-pass-sprite-draws.d.ts +8 -1
  152. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  153. package/dist/record/main-pass.d.ts +2 -0
  154. package/dist/record/main-pass.d.ts.map +1 -1
  155. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  156. package/dist/record/render-context.d.ts +93 -18
  157. package/dist/record/render-context.d.ts.map +1 -1
  158. package/dist/record/shadow-pass.d.ts.map +1 -1
  159. package/dist/record/skybox-post-pass.d.ts +1 -11
  160. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  161. package/dist/record/typed-frame-graph.d.ts +26 -2
  162. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  163. package/dist/record/view-ubo.d.ts +10 -1
  164. package/dist/record/view-ubo.d.ts.map +1 -1
  165. package/dist/render-contract.d.ts +102 -10
  166. package/dist/render-contract.d.ts.map +1 -1
  167. package/dist/render-graph-primitives.d.ts.map +1 -1
  168. package/dist/render-pipeline.d.ts +50 -6
  169. package/dist/render-pipeline.d.ts.map +1 -1
  170. package/dist/render-system-extract.d.ts +32 -5
  171. package/dist/render-system-extract.d.ts.map +1 -1
  172. package/dist/render-system.d.ts +27 -5
  173. package/dist/render-system.d.ts.map +1 -1
  174. package/dist/scene/render-scene-types.d.ts +3 -0
  175. package/dist/scene/render-scene-types.d.ts.map +1 -1
  176. package/dist/scene/render-scene.d.ts +43 -2
  177. package/dist/scene/render-scene.d.ts.map +1 -1
  178. package/dist/temporal/coverage.d.ts +42 -0
  179. package/dist/temporal/coverage.d.ts.map +1 -0
  180. package/dist/temporal/frame-coordinator.d.ts +99 -0
  181. package/dist/temporal/frame-coordinator.d.ts.map +1 -0
  182. package/dist/temporal/gpu.d.ts +39 -0
  183. package/dist/temporal/gpu.d.ts.map +1 -0
  184. package/dist/temporal/history.d.ts +37 -0
  185. package/dist/temporal/history.d.ts.map +1 -0
  186. package/dist/temporal/index.d.ts +7 -0
  187. package/dist/temporal/index.d.ts.map +1 -0
  188. package/dist/temporal/index.mjs +8 -0
  189. package/dist/temporal/index.mjs.map +1 -0
  190. package/dist/temporal/inspection.d.ts +36 -0
  191. package/dist/temporal/inspection.d.ts.map +1 -0
  192. package/dist/temporal/scene-data-catalog.d.ts +48 -0
  193. package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
  194. package/dist/temporal/scene-data.d.ts +43 -0
  195. package/dist/temporal/scene-data.d.ts.map +1 -0
  196. package/dist/temporal/standard-scene-data.d.ts +61 -0
  197. package/dist/temporal/standard-scene-data.d.ts.map +1 -0
  198. package/dist/temporal/taa-history-resources.d.ts +22 -0
  199. package/dist/temporal/taa-history-resources.d.ts.map +1 -0
  200. package/dist/temporal/taa-history-store.d.ts +27 -0
  201. package/dist/temporal/taa-history-store.d.ts.map +1 -0
  202. package/dist/temporal/taa-resolve.d.ts +15 -0
  203. package/dist/temporal/taa-resolve.d.ts.map +1 -0
  204. package/dist/temporal/temporal-view.d.ts +40 -0
  205. package/dist/temporal/temporal-view.d.ts.map +1 -0
  206. package/dist/temporal/transaction.d.ts +9 -0
  207. package/dist/temporal/transaction.d.ts.map +1 -0
  208. package/dist/temporal/view.d.ts +56 -0
  209. package/dist/temporal/view.d.ts.map +1 -0
  210. package/dist/transmission/backdrop.d.ts +147 -0
  211. package/dist/transmission/backdrop.d.ts.map +1 -0
  212. package/dist/transmission/inspection.d.ts +57 -0
  213. package/dist/transmission/inspection.d.ts.map +1 -0
  214. package/dist/transmission/oracle.d.ts +42 -0
  215. package/dist/transmission/oracle.d.ts.map +1 -0
  216. package/dist/transmission/projection.d.ts +37 -0
  217. package/dist/transmission/projection.d.ts.map +1 -0
  218. package/dist/typed-render-graph-primitives.d.ts +25 -2
  219. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  220. package/package.json +24 -19
  221. package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
  222. package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
  223. package/src/__tests__/authoring-path.unit.test.ts +9 -0
  224. package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
  225. package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
  226. package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
  227. package/src/__tests__/detached-inspection.integration.test.ts +177 -0
  228. package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
  229. package/src/__tests__/environment-generation.integration.test.ts +141 -0
  230. package/src/__tests__/environment-selection.unit.test.ts +245 -0
  231. package/src/__tests__/factory-contract.integration.test.ts +1380 -9
  232. package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
  233. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
  234. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +12 -2
  235. package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
  236. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
  237. package/src/__tests__/gpu-scene.unit.test.ts +10 -0
  238. package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
  239. package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
  240. package/src/__tests__/material-cooked-projection.unit.test.ts +18 -124
  241. package/src/__tests__/material-static-dynamic-route.unit.test.ts +28 -28
  242. package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
  243. package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
  244. package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
  245. package/src/__tests__/public-surface.test-d.ts +15 -1
  246. package/src/__tests__/render-error-code-owner.test-d.ts +15 -0
  247. package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
  248. package/src/__tests__/render-error-exhaustive.test-d.ts +22 -0
  249. package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
  250. package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
  251. package/src/__tests__/render-feature-plan.test-d.ts +22 -89
  252. package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
  253. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
  254. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
  255. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +433 -1
  256. package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
  257. package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
  258. package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
  259. package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
  260. package/src/__tests__/scene-data-contract.test-d.ts +35 -0
  261. package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
  262. package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
  263. package/src/__tests__/shader-manifest-fixture.ts +111 -0
  264. package/src/__tests__/skinned-shadow-caster.test.ts +102 -0
  265. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
  266. package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
  267. package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
  268. package/src/__tests__/standard-profile-oracle.unit.test.ts +10 -2
  269. package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
  270. package/src/__tests__/surface-configuration.unit.test.ts +211 -12
  271. package/src/__tests__/taa-transaction.integration.test.ts +30 -0
  272. package/src/__tests__/temporal-admission.integration.test.ts +40 -0
  273. package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
  274. package/src/__tests__/temporal-demand.unit.test.ts +44 -0
  275. package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
  276. package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
  277. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
  278. package/src/__tests__/temporal-performance.integration.test.ts +615 -0
  279. package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
  280. package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
  281. package/src/__tests__/temporal-view.unit.test.ts +152 -0
  282. package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
  283. package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
  284. package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
  285. package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
  286. package/src/__tests__/visibility-extract.integration.test.ts +27 -1
  287. package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
  288. package/src/assembly/backend-contract.ts +47 -1
  289. package/src/assembly/factory.ts +1295 -507
  290. package/src/assembly/host-contract.ts +4 -0
  291. package/src/assembly/material/assembly.ts +2 -5
  292. package/src/assembly/renderer-frame-transaction.ts +75 -0
  293. package/src/assembly/renderer-inspection.ts +112 -0
  294. package/src/assembly/renderer-lifecycle.ts +6 -0
  295. package/src/authoring.ts +1 -0
  296. package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
  297. package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
  298. package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
  299. package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
  300. package/src/components/atmosphere.ts +10 -0
  301. package/src/components/camera.ts +2 -1
  302. package/src/components/fog.ts +9 -0
  303. package/src/components/index.ts +10 -0
  304. package/src/components/lines.ts +18 -0
  305. package/src/components/motion-blur.ts +8 -0
  306. package/src/components/points.ts +40 -0
  307. package/src/construct-renderer.ts +40 -3
  308. package/src/device/device-scope.ts +15 -1
  309. package/src/environment/frame.ts +185 -0
  310. package/src/environment/generation.ts +23 -0
  311. package/src/environment/graph.ts +9 -0
  312. package/src/environment/inspection.ts +87 -0
  313. package/src/environment/lifecycle.ts +250 -0
  314. package/src/environment/signature.ts +55 -0
  315. package/src/errors/render.ts +429 -1
  316. package/src/extract/camera.ts +78 -0
  317. package/src/extract/environment.ts +171 -0
  318. package/src/extract/visibility.ts +38 -19
  319. package/src/features/host.ts +36 -5
  320. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
  321. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
  322. package/src/features/motion-blur/motion-blur-feature.ts +119 -0
  323. package/src/features/motion-blur/motion-blur-params.ts +89 -0
  324. package/src/features/plan.ts +32 -3
  325. package/src/features/prepared-gpu-work.ts +21 -6
  326. package/src/features/prepared-graphics.ts +2 -1
  327. package/src/features/render-graph-raster.ts +24 -4
  328. package/src/features/targets.ts +24 -2
  329. package/src/features/types.ts +13 -0
  330. package/src/fullscreen-post-process-pass.ts +34 -4
  331. package/src/gpu-driven/production-raster.ts +6 -1
  332. package/src/gpu-scene.ts +24 -0
  333. package/src/ibl/skylight-bind-group.ts +30 -38
  334. package/src/index.ts +83 -6
  335. package/src/inspection-types.ts +52 -0
  336. package/src/internal.ts +5 -0
  337. package/src/materials.ts +119 -24
  338. package/src/pbr-pipeline.ts +66 -20
  339. package/src/pipeline/standard-forward-lane.ts +158 -101
  340. package/src/pipeline/standard-pipeline.ts +156 -105
  341. package/src/pipeline/standard-post.ts +373 -0
  342. package/src/pipeline/standard-profile.ts +11 -11
  343. package/src/pipeline-builder.ts +102 -12
  344. package/src/pipeline-spec.ts +9 -0
  345. package/src/plugin.ts +6 -0
  346. package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
  347. package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
  348. package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
  349. package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
  350. package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
  351. package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
  352. package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
  353. package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
  354. package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
  355. package/src/points-lines/admission.ts +238 -0
  356. package/src/points-lines/bounds.ts +23 -0
  357. package/src/points-lines/expansion-cache.ts +215 -0
  358. package/src/points-lines/inspection.ts +97 -0
  359. package/src/points-lines/prepare.ts +177 -0
  360. package/src/points-lines/record.ts +125 -0
  361. package/src/points-lines/snapshot.ts +130 -0
  362. package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
  363. package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
  364. package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
  365. package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
  366. package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
  367. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
  368. package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
  369. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
  370. package/src/record/frame-lighting.ts +14 -2
  371. package/src/record/frame-snapshot.ts +129 -5
  372. package/src/record/frame-targets.ts +15 -6
  373. package/src/record/frame.ts +119 -4
  374. package/src/record/main-pass-geometry.ts +178 -40
  375. package/src/record/main-pass-material.ts +114 -66
  376. package/src/record/main-pass-sprite-draws.ts +79 -102
  377. package/src/record/main-pass.ts +83 -7
  378. package/src/record/mesh-ssbo.ts +22 -3
  379. package/src/record/render-context.ts +209 -23
  380. package/src/record/shadow-pass.ts +129 -28
  381. package/src/record/skybox-post-pass.ts +99 -42
  382. package/src/record/typed-frame-graph.ts +582 -42
  383. package/src/record/view-ubo.ts +99 -4
  384. package/src/render-contract.ts +121 -7
  385. package/src/render-graph-primitives.ts +18 -1
  386. package/src/render-pipeline.ts +100 -27
  387. package/src/render-system-extract.ts +264 -77
  388. package/src/render-system.ts +786 -43
  389. package/src/scene/render-scene-types.ts +3 -0
  390. package/src/scene/render-scene.ts +307 -9
  391. package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
  392. package/src/temporal/coverage.ts +76 -0
  393. package/src/temporal/frame-coordinator.ts +311 -0
  394. package/src/temporal/gpu.ts +287 -0
  395. package/src/temporal/history.ts +92 -0
  396. package/src/temporal/index.ts +6 -0
  397. package/src/temporal/inspection.ts +97 -0
  398. package/src/temporal/scene-data-catalog.ts +200 -0
  399. package/src/temporal/scene-data.ts +149 -0
  400. package/src/temporal/standard-scene-data.ts +182 -0
  401. package/src/temporal/taa-history-resources.ts +128 -0
  402. package/src/temporal/taa-history-store.ts +79 -0
  403. package/src/temporal/taa-resolve.ts +34 -0
  404. package/src/temporal/temporal-view.ts +169 -0
  405. package/src/temporal/transaction.ts +17 -0
  406. package/src/temporal/view.ts +161 -0
  407. package/src/transmission/__tests__/capability.unit.test.ts +83 -0
  408. package/src/transmission/__tests__/composition.integration.test.ts +161 -0
  409. package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
  410. package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
  411. package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
  412. package/src/transmission/__tests__/projection.unit.test.ts +71 -0
  413. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +438 -0
  414. package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
  415. package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
  416. package/src/transmission/backdrop.ts +572 -0
  417. package/src/transmission/inspection.ts +190 -0
  418. package/src/transmission/oracle.ts +141 -0
  419. package/src/transmission/projection.ts +83 -0
  420. package/src/typed-render-graph-primitives.ts +162 -9
  421. package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
  422. package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
  423. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
  424. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
  425. package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
  426. package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
  427. package/dist/__tests__/cluster-binner.test.d.ts +0 -2
  428. package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
  429. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
  430. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
  431. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
  432. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
  433. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
  434. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
  435. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
  436. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
  437. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
  438. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
  439. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
  440. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
  441. package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
  442. package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
  443. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
  444. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
  445. package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
  446. package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
  447. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
  448. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
  449. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
  450. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
  451. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
  452. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
  453. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
  454. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
  455. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
  456. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
  457. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
  458. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
  459. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
  460. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
  461. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
  462. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
  463. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
  464. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
  465. package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
  466. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
  467. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
  468. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
  469. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
  470. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
  471. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
  472. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
  473. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
  474. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
  475. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
  476. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
  477. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
  478. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
  479. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
  480. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
  481. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
  482. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
  483. package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
  484. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
  485. package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
  486. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
  487. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
  488. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
  489. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
  490. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
  491. package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
  492. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
  493. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
  494. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
  495. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
  496. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
  497. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
  498. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
  499. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
  500. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
  501. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
  502. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
  503. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
  504. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
  505. package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
  506. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
  507. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
  508. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
  509. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
  510. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
  511. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
  512. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
  513. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
  514. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
  515. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
  516. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
  517. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
  518. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
  519. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
  520. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
  521. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
  522. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
  523. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
  524. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
  525. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
  526. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
  527. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
  528. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
  529. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
  530. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
  531. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
  532. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
  533. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
  534. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
  535. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
  536. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
  537. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
  538. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
  539. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
  540. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
  541. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
  542. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
  543. package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
  544. package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
  545. package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
  546. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
  547. package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
  548. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
  549. package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
  550. package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
  551. package/dist/__tests__/public-surface.test-d.d.ts +0 -2
  552. package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
  553. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
  554. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
  555. package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
  556. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
  557. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
  558. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
  559. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
  560. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  561. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  562. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  563. package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
  564. package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
  565. package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
  566. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
  567. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
  568. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
  569. package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
  570. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
  571. package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
  572. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
  573. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
  574. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
  575. package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
  576. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
  577. package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
  578. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
  579. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
  580. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
  581. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
  582. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
  583. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  584. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  585. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
  586. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
  587. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
  588. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
  589. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
  590. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
  591. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
  592. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
  593. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
  594. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
  595. package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
  596. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
  597. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
  598. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
  599. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
  600. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
  601. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
  602. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
  603. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
  604. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
  605. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
  606. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
  607. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
  608. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
  609. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
  610. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
  611. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
  612. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
  613. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
  614. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
  615. package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
  616. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
  617. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
  618. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
  619. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
  620. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
  621. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
  622. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
  623. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
  624. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
  625. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
  626. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
  627. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
  628. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
  629. package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
  630. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
  631. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
  632. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
  633. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  634. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  635. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
  636. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
  637. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
  638. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
  639. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
  640. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
  641. package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
  642. package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
  643. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
  644. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
  645. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
  646. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
  647. package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
  648. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
  649. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
  650. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
  651. package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
  652. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
  653. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
  654. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
  655. package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
  656. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
  657. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
  658. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
  659. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
  660. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
  661. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
  662. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
  663. package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
  664. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
  665. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
  666. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
  667. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
  668. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
  669. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
  670. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
  671. package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
  672. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
  673. package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
  674. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
  675. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
  676. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
  677. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
  678. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
  679. package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
  680. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
  681. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
  682. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
  683. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
  684. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
  685. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
  686. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
  687. package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
  688. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
  689. package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
  690. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
  691. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
  692. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
  693. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
  694. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
  695. package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
  696. package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
  697. package/dist/chunk-CQXZC5XI.mjs.map +0 -1
  698. package/dist/chunk-QC4VW3XJ.mjs.map +0 -1
  699. package/dist/chunk-SCRSAK5B.mjs.map +0 -1
  700. package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
  701. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
  702. package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
  703. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
  704. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
  705. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
  707. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
  712. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
  713. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
@@ -0,0 +1,190 @@
1
+ import type {
2
+ TransmissionBackdropExtent,
3
+ TransmissionBackdropTopology,
4
+ TransmissionCandidateAdmissionInspection,
5
+ TransmissionCapabilityFact,
6
+ TransmissionCapabilityVerdict,
7
+ TransmissionLifecycleState,
8
+ TransmissionRecoveryState,
9
+ } from './backdrop';
10
+ import type { TransmissionDemand } from './projection';
11
+
12
+ export type {
13
+ TransmissionBackdropExtent,
14
+ TransmissionCandidateAdmissionInspection,
15
+ TransmissionLifecycleState,
16
+ TransmissionRecoveryState,
17
+ } from './backdrop';
18
+
19
+ export interface TransmissionInspection {
20
+ readonly activeCount: number;
21
+ readonly needsRoughMips: boolean;
22
+ readonly extent: TransmissionBackdropExtent;
23
+ readonly format: string;
24
+ /** Total resident mip levels, including level zero. */
25
+ readonly mipCount: number;
26
+ readonly bytes: number;
27
+ readonly copyCount: number;
28
+ readonly transmissionDrawCount: number;
29
+ readonly fallbackCount: number;
30
+ readonly generation: number;
31
+ readonly singleLayer: true;
32
+ readonly lifecycle: TransmissionLifecycleState;
33
+ readonly lastKnownGood: boolean;
34
+ readonly recovery: TransmissionRecoveryState;
35
+ readonly capability: TransmissionCapabilityVerdict;
36
+ }
37
+
38
+ export interface TransmissionInspectionInput {
39
+ readonly demand: TransmissionDemand;
40
+ readonly topology: Pick<TransmissionBackdropTopology, 'active' | 'copyCount' | 'mipCount'>;
41
+ readonly extent: TransmissionBackdropExtent;
42
+ readonly generation: number;
43
+ readonly lastKnownGood: boolean;
44
+ readonly recovery: TransmissionRecoveryState;
45
+ readonly lifecycle?: TransmissionLifecycleState;
46
+ /** Whether a committed physical backdrop is resident on the active device. */
47
+ readonly resourcePresent?: boolean;
48
+ readonly format?: string;
49
+ /** Override only when the resource receipt reports the actual total. */
50
+ readonly mipCount?: number;
51
+ /** Override only when the resource receipt reports the actual allocation. */
52
+ readonly bytes?: number;
53
+ readonly transmissionDrawCount?: number;
54
+ readonly fallbackCount?: number;
55
+ readonly capability?: TransmissionCapabilityVerdict;
56
+ }
57
+
58
+ export interface TransmissionInspectionFromAdmissionInput {
59
+ readonly admission: TransmissionCandidateAdmissionInspection;
60
+ readonly topology: TransmissionInspectionInput['topology'];
61
+ readonly extent: TransmissionBackdropExtent;
62
+ readonly transmissionDrawCount?: number;
63
+ readonly fallbackCount?: number;
64
+ }
65
+
66
+ const RGBA16FLOAT_BYTES_PER_PIXEL = 8;
67
+
68
+ function assertNonNegativeInteger(name: string, value: number): void {
69
+ if (!Number.isInteger(value) || value < 0) {
70
+ throw new Error(`${name} must be a non-negative integer`);
71
+ }
72
+ }
73
+
74
+ function assertExtent(extent: TransmissionBackdropExtent): void {
75
+ if (!Number.isInteger(extent.width) || extent.width <= 0) {
76
+ throw new Error('transmission inspection extent.width must be a positive integer');
77
+ }
78
+ if (!Number.isInteger(extent.height) || extent.height <= 0) {
79
+ throw new Error('transmission inspection extent.height must be a positive integer');
80
+ }
81
+ }
82
+
83
+ function mipExtent(value: number, level: number): number {
84
+ return Math.max(1, Math.floor(value / 2 ** level));
85
+ }
86
+
87
+ export function estimateTransmissionBackdropBytes(
88
+ extent: TransmissionBackdropExtent,
89
+ mipCount: number,
90
+ format = 'rgba16float',
91
+ ): number {
92
+ assertExtent(extent);
93
+ assertNonNegativeInteger('transmission inspection mipCount', mipCount);
94
+ if (format !== 'rgba16float' || mipCount === 0) return 0;
95
+
96
+ let bytes = 0;
97
+ for (let level = 0; level < mipCount; level += 1) {
98
+ bytes += mipExtent(extent.width, level) * mipExtent(extent.height, level);
99
+ }
100
+ return bytes * RGBA16FLOAT_BYTES_PER_PIXEL;
101
+ }
102
+
103
+ function copyCapability(capability: TransmissionCapabilityVerdict): TransmissionCapabilityVerdict {
104
+ return capability.ok
105
+ ? { ok: true, missing: [] }
106
+ : { ok: false, missing: [...capability.missing] as TransmissionCapabilityFact[] };
107
+ }
108
+
109
+ function defaultLifecycle(active: boolean, lastKnownGood: boolean): TransmissionLifecycleState {
110
+ if (!active) return 'inactive';
111
+ return lastKnownGood ? 'resident' : 'failed';
112
+ }
113
+
114
+ /**
115
+ * Project the last completed backdrop facts into a detached, stable POD.
116
+ * Demand and copy/mip topology are read from their existing owners; this
117
+ * function never accepts a texture, view, encoder, queue, or graph handle.
118
+ */
119
+ export function inspectTransmission(input: TransmissionInspectionInput): TransmissionInspection {
120
+ const active = input.demand.activeCount > 0;
121
+ if (input.topology.active !== active) {
122
+ throw new Error('transmission inspection demand and topology are inconsistent');
123
+ }
124
+ assertNonNegativeInteger('transmission inspection generation', input.generation);
125
+ assertNonNegativeInteger(
126
+ 'transmission inspection transmissionDrawCount',
127
+ input.transmissionDrawCount ?? 0,
128
+ );
129
+ assertNonNegativeInteger('transmission inspection fallbackCount', input.fallbackCount ?? 0);
130
+ assertExtent(input.extent);
131
+
132
+ const format = input.format ?? 'rgba16float';
133
+ const resourcePresent = input.resourcePresent ?? input.lastKnownGood;
134
+ const mipCount = resourcePresent ? (input.mipCount ?? input.topology.mipCount + 1) : 0;
135
+ assertNonNegativeInteger('transmission inspection mipCount', mipCount);
136
+ const bytes = resourcePresent
137
+ ? (input.bytes ?? estimateTransmissionBackdropBytes(input.extent, mipCount, format))
138
+ : 0;
139
+ assertNonNegativeInteger('transmission inspection bytes', bytes);
140
+ const copyCount = resourcePresent ? input.topology.copyCount : 0;
141
+ if (copyCount !== (resourcePresent ? 1 : 0)) {
142
+ throw new Error('transmission inspection copy count does not match backdrop topology');
143
+ }
144
+
145
+ return Object.freeze({
146
+ activeCount: input.demand.activeCount,
147
+ needsRoughMips: active && input.demand.needsRoughMips,
148
+ extent: Object.freeze({ ...input.extent }),
149
+ format,
150
+ mipCount,
151
+ bytes,
152
+ copyCount,
153
+ transmissionDrawCount: input.transmissionDrawCount ?? 0,
154
+ fallbackCount: input.fallbackCount ?? 0,
155
+ generation: input.generation,
156
+ singleLayer: true,
157
+ lifecycle: input.lifecycle ?? defaultLifecycle(active, input.lastKnownGood),
158
+ lastKnownGood: input.lastKnownGood,
159
+ recovery: input.recovery,
160
+ capability: copyCapability(input.capability ?? { ok: true, missing: [] }),
161
+ });
162
+ }
163
+
164
+ export function inspectTransmissionFromAdmission(
165
+ input: TransmissionInspectionFromAdmissionInput,
166
+ ): TransmissionInspection {
167
+ const resource = input.admission.resource;
168
+ return inspectTransmission({
169
+ demand: input.admission.demand,
170
+ topology: input.topology,
171
+ extent: resource?.extent ?? input.extent,
172
+ ...(resource === undefined
173
+ ? {}
174
+ : { format: resource.format, mipCount: resource.mipCount, bytes: resource.bytes }),
175
+ resourcePresent: resource !== undefined,
176
+ generation: input.admission.generation,
177
+ lifecycle: input.admission.lifecycle,
178
+ lastKnownGood: input.admission.lastKnownGood,
179
+ recovery: input.admission.recovery,
180
+ capability: input.admission.capability,
181
+ ...(input.transmissionDrawCount === undefined
182
+ ? {}
183
+ : { transmissionDrawCount: input.transmissionDrawCount }),
184
+ ...(input.fallbackCount === undefined ? {} : { fallbackCount: input.fallbackCount }),
185
+ });
186
+ }
187
+
188
+ export function transmissionInspectionToJson(inspection: TransmissionInspection): string {
189
+ return JSON.stringify(inspection);
190
+ }
@@ -0,0 +1,141 @@
1
+ /** Pure CPU expectations for transmission math; this module has no GPU ownership. */
2
+
3
+ export type Color3 = readonly [number, number, number];
4
+ export type Uv2 = readonly [number, number];
5
+
6
+ export const DEFAULT_IOR = 1.5;
7
+ export const DEFAULT_GUARD_BAND = 0.02;
8
+
9
+ export interface TransmissionEnergy {
10
+ readonly reflection: number;
11
+ readonly transmission: number;
12
+ readonly diffuse: number;
13
+ readonly metallicResidual: number;
14
+ }
15
+
16
+ export interface BackdropResolution {
17
+ readonly source: 'refracted' | 'environment' | 'unrefracted';
18
+ readonly color: Color3;
19
+ }
20
+
21
+ export interface BackdropInputs {
22
+ readonly uv: Uv2;
23
+ readonly refracted?: Color3;
24
+ readonly environment?: Color3;
25
+ readonly unrefracted: Color3;
26
+ readonly guardBand?: number;
27
+ }
28
+
29
+ const clamp01 = (value: number): number => Math.min(Math.max(value, 0), 1);
30
+
31
+ const finiteOr = (value: number, fallback: number): number =>
32
+ Number.isFinite(value) ? value : fallback;
33
+
34
+ const safeIor = (ior: number): number => {
35
+ const candidate = finiteOr(ior, DEFAULT_IOR);
36
+ return candidate >= 1 ? candidate : DEFAULT_IOR;
37
+ };
38
+
39
+ /** Returns dielectric F0 for air to a material with the supplied IOR. */
40
+ export function fresnelF0(ior: number): number {
41
+ const ratio = (safeIor(ior) - 1) / (safeIor(ior) + 1);
42
+ return ratio * ratio;
43
+ }
44
+
45
+ /**
46
+ * Returns unpolarized dielectric reflectance. `eta` is incident IOR divided
47
+ * by transmitted IOR, so values above one can produce total internal
48
+ * reflection. This is a CPU oracle only; it does not sample a GPU resource.
49
+ */
50
+ export function fresnelReflectance(cosTheta: number, eta: number): number {
51
+ if (!Number.isFinite(cosTheta) || !Number.isFinite(eta) || eta <= 0) return 1;
52
+
53
+ const cosIncident = clamp01(cosTheta);
54
+ const sinTransmittedSquared = eta * eta * (1 - cosIncident * cosIncident);
55
+ if (sinTransmittedSquared >= 1) return 1;
56
+
57
+ const cosTransmitted = Math.sqrt(Math.max(0, 1 - sinTransmittedSquared));
58
+ const perpendicularDenominator = cosIncident + eta * cosTransmitted;
59
+ const parallelDenominator = eta * cosIncident + cosTransmitted;
60
+ if (perpendicularDenominator === 0 || parallelDenominator === 0) return 1;
61
+
62
+ const perpendicular = (cosIncident - eta * cosTransmitted) / perpendicularDenominator;
63
+ const parallel = (eta * cosIncident - cosTransmitted) / parallelDenominator;
64
+ return clamp01((perpendicular * perpendicular + parallel * parallel) / 2);
65
+ }
66
+
67
+ export function splitTransmissionEnergy(input: {
68
+ readonly transmission: number;
69
+ readonly metallic: number;
70
+ readonly cosTheta: number;
71
+ readonly ior: number;
72
+ }): TransmissionEnergy {
73
+ const transmission = clamp01(finiteOr(input.transmission, 0));
74
+ const metallic = clamp01(finiteOr(input.metallic, 0));
75
+ const reflectance = fresnelReflectance(input.cosTheta, 1 / safeIor(input.ior));
76
+ const nonMetal = 1 - metallic;
77
+ const refracted = (1 - reflectance) * nonMetal;
78
+
79
+ return {
80
+ reflection: reflectance,
81
+ transmission: refracted * transmission,
82
+ diffuse: refracted * (1 - transmission),
83
+ metallicResidual: (1 - reflectance) * metallic,
84
+ };
85
+ }
86
+
87
+ export function beerLambertAttenuation(
88
+ color: Color3,
89
+ thickness: number,
90
+ distance?: number,
91
+ ): Color3 {
92
+ if (
93
+ !Number.isFinite(thickness) ||
94
+ thickness <= 0 ||
95
+ distance === undefined ||
96
+ !Number.isFinite(distance) ||
97
+ distance <= 0
98
+ ) {
99
+ return [1, 1, 1];
100
+ }
101
+
102
+ const exponent = thickness / distance;
103
+ const attenuate = (component: number): number => {
104
+ const safeComponent = clamp01(finiteOr(component, 0));
105
+ return Math.min(Math.max(safeComponent ** exponent, 0), 1);
106
+ };
107
+ return [attenuate(color[0]), attenuate(color[1]), attenuate(color[2])];
108
+ }
109
+
110
+ export function roughnessToLod(roughness: number, maxLod: number): number {
111
+ const safeRoughness = clamp01(finiteOr(roughness, 0));
112
+ const safeMaxLod = Math.max(finiteOr(maxLod, 0), 0);
113
+ return safeRoughness * safeRoughness * safeMaxLod;
114
+ }
115
+
116
+ export function isWithinGuardBand(uv: Uv2, guardBand = DEFAULT_GUARD_BAND): boolean {
117
+ if (!uv.every(Number.isFinite) || !Number.isFinite(guardBand)) return false;
118
+ const band = clamp01(guardBand);
119
+ return uv.every((coordinate) => coordinate >= band && coordinate <= 1 - band);
120
+ }
121
+
122
+ export function resolveRefractionBackdrop(input: BackdropInputs): BackdropResolution {
123
+ if (
124
+ isWithinGuardBand(input.uv, input.guardBand) &&
125
+ input.refracted !== undefined &&
126
+ isFiniteColor(input.refracted)
127
+ ) {
128
+ return { source: 'refracted', color: input.refracted };
129
+ }
130
+ if (input.environment !== undefined && isFiniteColor(input.environment)) {
131
+ return { source: 'environment', color: input.environment };
132
+ }
133
+ if (isFiniteColor(input.unrefracted)) {
134
+ return { source: 'unrefracted', color: input.unrefracted };
135
+ }
136
+ return { source: 'unrefracted', color: [0, 0, 0] };
137
+ }
138
+
139
+ export function isFiniteColor(color: Color3): boolean {
140
+ return color.length === 3 && color.every(Number.isFinite);
141
+ }
@@ -0,0 +1,83 @@
1
+ /** The two CPU facts that are allowed to influence transmission topology. */
2
+ export interface TransmissionDemand {
3
+ readonly activeCount: number;
4
+ readonly needsRoughMips: boolean;
5
+ }
6
+
7
+ /** Detached material facts supplied by the persistent render-scene owner. */
8
+ export interface TransmissionDemandCandidate {
9
+ readonly attached: boolean;
10
+ readonly ready: boolean;
11
+ readonly transmission: number;
12
+ readonly roughness: number;
13
+ }
14
+
15
+ export type TransmissionDemandOperation =
16
+ | {
17
+ readonly kind: 'upsert';
18
+ readonly key: string;
19
+ readonly candidate: TransmissionDemandCandidate;
20
+ }
21
+ | { readonly kind: 'remove'; readonly key: string };
22
+
23
+ interface CandidateRecord {
24
+ readonly active: boolean;
25
+ readonly rough: boolean;
26
+ }
27
+
28
+ function candidateRecord(candidate: TransmissionDemandCandidate): CandidateRecord {
29
+ const active =
30
+ candidate.attached &&
31
+ candidate.ready &&
32
+ Number.isFinite(candidate.transmission) &&
33
+ candidate.transmission > 0;
34
+ return {
35
+ active,
36
+ rough: active && Number.isFinite(candidate.roughness) && candidate.roughness > 0,
37
+ };
38
+ }
39
+
40
+ /**
41
+ * Incremental CPU projection for transmission topology.
42
+ *
43
+ * The projection stores no material, visibility, camera, or GPU object. Each
44
+ * operation updates the two counters directly; an empty operation list is a
45
+ * no-scan steady-state frame.
46
+ */
47
+ export class PersistentTransmissionDemandProjection {
48
+ private readonly records = new Map<string, CandidateRecord>();
49
+ private activeCount = 0;
50
+ private roughCount = 0;
51
+
52
+ apply(operations: readonly TransmissionDemandOperation[]): TransmissionDemand {
53
+ for (const operation of operations) {
54
+ const previous = this.records.get(operation.key);
55
+ if (previous !== undefined) this.removeCounts(previous);
56
+ if (operation.kind === 'remove') {
57
+ this.records.delete(operation.key);
58
+ continue;
59
+ }
60
+ const next = candidateRecord(operation.candidate);
61
+ this.records.set(operation.key, next);
62
+ this.addCounts(next);
63
+ }
64
+ return this.inspect();
65
+ }
66
+
67
+ inspect(): TransmissionDemand {
68
+ return {
69
+ activeCount: this.activeCount,
70
+ needsRoughMips: this.roughCount > 0,
71
+ };
72
+ }
73
+
74
+ private addCounts(record: CandidateRecord): void {
75
+ if (record.active) this.activeCount += 1;
76
+ if (record.rough) this.roughCount += 1;
77
+ }
78
+
79
+ private removeCounts(record: CandidateRecord): void {
80
+ if (record.active) this.activeCount -= 1;
81
+ if (record.rough) this.roughCount -= 1;
82
+ }
83
+ }
@@ -6,7 +6,7 @@ import type {
6
6
  RenderGraphError,
7
7
  ResolveContext,
8
8
  } from '@forgeax/engine-render-graph';
9
- import type { TextureView } from '@forgeax/engine-rhi';
9
+ import { RhiError, type TextureView } from '@forgeax/engine-rhi';
10
10
  import { ok, type PassKind, type PassSelector, type Result } from '@forgeax/engine-types';
11
11
  import {
12
12
  GPU_TEXTURE_USAGE_COPY_SRC,
@@ -26,7 +26,7 @@ import {
26
26
  recordBloomBrightPass,
27
27
  recordBloomCompositePass,
28
28
  } from './record/skybox-post-pass';
29
- import { STANDARD_TONEMAP_FEATURE_ID } from './render-contract';
29
+ import { STANDARD_OUTPUT_TRANSFORM_FEATURE_ID } from './render-contract';
30
30
  import {
31
31
  encodeFullscreenPass,
32
32
  recordSsaoBlurPass,
@@ -34,6 +34,12 @@ import {
34
34
  } from './render-graph-primitives';
35
35
  import type { RenderPipelineFrame, RenderPipelineGpuDrivenProjection } from './render-pipeline';
36
36
  import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline';
37
+ import {
38
+ getTemporalBindGroupResources,
39
+ getTemporalGpuState,
40
+ getTemporalParamsBuffer,
41
+ stageTemporalGpuSubmit,
42
+ } from './temporal/gpu';
37
43
 
38
44
  function resolvedView(resources: GraphResourceResolver, view: GraphTextureView): TextureView {
39
45
  const result = resources.textureView(view);
@@ -41,6 +47,17 @@ function resolvedView(resources: GraphResourceResolver, view: GraphTextureView):
41
47
  return result.value;
42
48
  }
43
49
 
50
+ function throwTemporalEncodeFailure(expected: string, cause?: unknown): never {
51
+ throw new RhiError({
52
+ code: 'webgpu-runtime-error',
53
+ expected,
54
+ hint:
55
+ cause === undefined
56
+ ? 'retry the temporal frame after repairing its GPU resource'
57
+ : String(cause),
58
+ });
59
+ }
60
+
44
61
  export function typedFrameClearColor(frame: RenderPipelineFrame): GPUColor {
45
62
  return {
46
63
  r: frame.clear[0] ?? 0,
@@ -115,6 +132,8 @@ export interface TypedScenePassOptions {
115
132
  readonly clearColor?: readonly [number, number, number, number] | undefined;
116
133
  readonly colorLoadOp?: GPULoadOp | undefined;
117
134
  readonly depthLoadOp?: GPULoadOp | undefined;
135
+ readonly recordMode?: 'opaque' | 'transmission' | 'transparent' | undefined;
136
+ readonly transmissionBackdrop?: GraphTextureView | undefined;
118
137
  readonly extraAccesses?: readonly GraphAccess[] | undefined;
119
138
  readonly gpuDriven?: RenderPipelineGpuDrivenProjection | undefined;
120
139
  }
@@ -134,6 +153,9 @@ export function addTypedScenePass(
134
153
  resource: target.view,
135
154
  usage: 'sampled-read' as const,
136
155
  })),
156
+ ...(options.transmissionBackdrop === undefined
157
+ ? []
158
+ : [{ resource: options.transmissionBackdrop, usage: 'sampled-read' as const }]),
137
159
  ...(options.extraAccesses ?? []),
138
160
  ...(options.gpuDriven?.accesses ?? []),
139
161
  ];
@@ -181,6 +203,10 @@ export function addTypedScenePass(
181
203
  : resolvedView(resources, options.spotShadow.view);
182
204
  const ssao =
183
205
  options.ssao === undefined ? undefined : resolvedView(resources, options.ssao.view);
206
+ const transmissionBackdrop =
207
+ options.transmissionBackdrop === undefined
208
+ ? null
209
+ : resolvedView(resources, options.transmissionBackdrop);
184
210
  internal.frameState.currentDirectionalShadowView = directionalShadow ?? null;
185
211
  internal.frameState.currentSpotShadowView = spotShadow ?? null;
186
212
  const groups = buildPerFrameBindGroups(
@@ -216,6 +242,10 @@ export function addTypedScenePass(
216
242
  depthView,
217
243
  passKind: options.passKind ?? 'forward',
218
244
  ...(options.clearColor === undefined ? {} : { clearColor: options.clearColor }),
245
+ ...(options.recordMode === undefined ? {} : { recordMode: options.recordMode }),
246
+ ...(options.transmissionBackdrop === undefined
247
+ ? {}
248
+ : { transmissionBackdropView: transmissionBackdrop }),
219
249
  },
220
250
  );
221
251
  },
@@ -261,6 +291,14 @@ export interface TypedBloomTargets {
261
291
  readonly blurV: RenderPipelineTarget;
262
292
  }
263
293
 
294
+ /** The semantic Bloom pass owner; graph inspection consumes these same identities. */
295
+ export const TYPED_BLOOM_PASS_NAMES = {
296
+ bright: 'bloom-bright',
297
+ blurH: 'bloom-blur-h',
298
+ blurV: 'bloom-blur-v',
299
+ composite: 'bloom-composite',
300
+ } as const;
301
+
264
302
  export function addTypedBloomPasses(
265
303
  graph: RenderGraphBuilder<RenderPipelineFrame>,
266
304
  targets: TypedBloomTargets,
@@ -274,25 +312,25 @@ export function addTypedBloomPasses(
274
312
  };
275
313
  const descriptors = [
276
314
  {
277
- name: 'bloom-bright',
315
+ name: TYPED_BLOOM_PASS_NAMES.bright,
278
316
  reads: [targets.scene],
279
317
  write: targets.bright,
280
318
  encode: recordBloomBrightPass,
281
319
  },
282
320
  {
283
- name: 'bloom-blur-h',
321
+ name: TYPED_BLOOM_PASS_NAMES.blurH,
284
322
  reads: [targets.bright],
285
323
  write: targets.blurH,
286
324
  encode: recordBloomBlurHPass,
287
325
  },
288
326
  {
289
- name: 'bloom-blur-v',
327
+ name: TYPED_BLOOM_PASS_NAMES.blurV,
290
328
  reads: [targets.blurH],
291
329
  write: targets.blurV,
292
330
  encode: recordBloomBlurVPass,
293
331
  },
294
332
  {
295
- name: 'bloom-composite',
333
+ name: TYPED_BLOOM_PASS_NAMES.composite,
296
334
  reads: [targets.scene, targets.blurV],
297
335
  write: targets.composited,
298
336
  encode: recordBloomCompositePass,
@@ -419,6 +457,112 @@ export interface TypedFullscreenPassOptions {
419
457
  readonly outputOnly?: boolean | undefined;
420
458
  readonly rawSwapchainOutput?: boolean | undefined;
421
459
  readonly depth?: RenderPipelineTarget | undefined;
460
+ readonly additionalReads?: readonly {
461
+ readonly key: string;
462
+ readonly target: RenderPipelineTarget;
463
+ }[];
464
+ }
465
+
466
+ export interface TypedTemporalResolveTargets {
467
+ readonly scene: RenderPipelineTarget;
468
+ readonly currentTemporal: RenderPipelineTarget;
469
+ readonly depth: RenderPipelineTarget;
470
+ readonly historyColor: RenderPipelineTarget;
471
+ readonly historyTemporal: RenderPipelineTarget;
472
+ readonly writeColor: RenderPipelineTarget;
473
+ readonly writeTemporal: RenderPipelineTarget;
474
+ }
475
+
476
+ export function addTypedTemporalResolvePass(
477
+ graph: RenderGraphBuilder<RenderPipelineFrame>,
478
+ targets: TypedTemporalResolveTargets,
479
+ ): Result<void, RenderGraphError> {
480
+ const added = graph.addRasterPass('taa-resolve', {
481
+ accesses: [
482
+ { resource: targets.scene.view, usage: 'sampled-read' },
483
+ { resource: targets.currentTemporal.view, usage: 'sampled-read' },
484
+ { resource: targets.historyColor.view, usage: 'sampled-read' },
485
+ { resource: targets.historyTemporal.view, usage: 'sampled-read' },
486
+ { resource: targets.writeColor.view, usage: 'color-attachment' },
487
+ { resource: targets.writeTemporal.view, usage: 'color-attachment' },
488
+ ],
489
+ colorAttachments: [
490
+ {
491
+ view: targets.writeColor.view,
492
+ loadOp: 'clear',
493
+ storeOp: 'store',
494
+ clearValue: { r: 0, g: 0, b: 0, a: 1 },
495
+ },
496
+ {
497
+ view: targets.writeTemporal.view,
498
+ loadOp: 'clear',
499
+ storeOp: 'store',
500
+ clearValue: { r: 0, g: 0, b: 0, a: 0 },
501
+ },
502
+ ],
503
+ encode: ({ pass, frame, resources }) => {
504
+ const internal = frame as _InternalRenderPipelineContext;
505
+ const state = getTemporalGpuState(
506
+ internal.frameState,
507
+ frame.runtime.device,
508
+ (frame.runtime as import('./record/render-context').RenderSystemRuntime).deviceScope,
509
+ frame.targetW,
510
+ frame.targetH,
511
+ );
512
+ const built = getTemporalBindGroupResources(state);
513
+ const current = resolvedView(resources, targets.scene.view);
514
+ const currentTemporal = resolvedView(resources, targets.currentTemporal.view);
515
+ const historyColor = resolvedView(resources, targets.historyColor.view);
516
+ const historyTemporal = resolvedView(resources, targets.historyTemporal.view);
517
+ const params = getTemporalParamsBuffer(state);
518
+ if (params === undefined || built.sampler === null) {
519
+ throwTemporalEncodeFailure('TAA resolve has an admitted params buffer and sampler');
520
+ }
521
+ const payload = new ArrayBuffer(16);
522
+ new Float32Array(payload).set([
523
+ frame.camera.temporal?.currentJitterUv?.[0] ?? 0,
524
+ frame.camera.temporal?.currentJitterUv?.[1] ?? 0,
525
+ ]);
526
+ const words = new Uint32Array(payload);
527
+ words[2] = state.valid && (frame.camera.temporal?.historyValid ?? true) ? 1 : 0;
528
+ words[3] = frame.camera.temporal?.temporalFrameIndex ?? 0;
529
+ const written = frame.runtime.device.queue.writeBuffer(params, 0, new Uint8Array(payload));
530
+ if (!written.ok)
531
+ throwTemporalEncodeFailure('TAA resolve params upload succeeds', written.error);
532
+ const bindGroup = frame.runtime.device.createBindGroup({
533
+ label: 'taa-resolve-bind-group',
534
+ layout: built.layout,
535
+ entries: [
536
+ { binding: 0, resource: { kind: 'textureView', value: current } },
537
+ { binding: 1, resource: { kind: 'sampler', value: built.sampler } },
538
+ { binding: 2, resource: { kind: 'textureView', value: historyColor } },
539
+ { binding: 3, resource: { kind: 'sampler', value: built.sampler } },
540
+ { binding: 4, resource: { kind: 'textureView', value: historyTemporal } },
541
+ { binding: 5, resource: { kind: 'sampler', value: built.sampler } },
542
+ { binding: 6, resource: { kind: 'textureView', value: currentTemporal } },
543
+ { binding: 7, resource: { kind: 'sampler', value: built.sampler } },
544
+ { binding: 8, resource: { kind: 'buffer', value: { buffer: params } } },
545
+ ] as never,
546
+ });
547
+ if (!bindGroup.ok) {
548
+ throwTemporalEncodeFailure('TAA resolve bind group creation succeeds', bindGroup.error);
549
+ }
550
+ const pipeline = frame.runtime.getPostProcessPipeline?.(
551
+ 'forgeax.taa-resolve',
552
+ built.layout,
553
+ targets.writeColor.format as GPUTextureFormat,
554
+ );
555
+ if (pipeline === null || pipeline === undefined) {
556
+ throwTemporalEncodeFailure('TAA resolve pipeline is ready before frame encoding');
557
+ }
558
+ pass.setPipeline(pipeline);
559
+ pass.setBindGroup(1, bindGroup.value);
560
+ pass.draw(3, 1, 0, 0);
561
+ stageTemporalGpuSubmit(state);
562
+ internal.frameState.temporalGpuState = state;
563
+ },
564
+ });
565
+ return added;
422
566
  }
423
567
 
424
568
  export function addTypedFullscreenPass(
@@ -432,6 +576,10 @@ export function addTypedFullscreenPass(
432
576
  ...(options.depth === undefined
433
577
  ? []
434
578
  : [{ resource: options.depth.view, usage: 'sampled-read' as const }]),
579
+ ...(options.additionalReads?.map((read) => ({
580
+ resource: read.target.view,
581
+ usage: 'sampled-read' as const,
582
+ })) ?? []),
435
583
  ],
436
584
  colorAttachments: [
437
585
  {
@@ -454,6 +602,11 @@ export function addTypedFullscreenPass(
454
602
  input: options.input,
455
603
  output: options.output,
456
604
  ldrColor: options.input,
605
+ 'scene-color': options.input,
606
+ ...(options.depth === undefined ? {} : { 'scene-depth': options.depth }),
607
+ ...(options.additionalReads === undefined
608
+ ? {}
609
+ : Object.fromEntries(options.additionalReads.map((read) => [read.key, read.target]))),
457
610
  }),
458
611
  outputFormat: options.output.format as GPUTextureFormat,
459
612
  ...(options.depth === undefined
@@ -524,15 +677,15 @@ export function addTypedCompositePostEffects(
524
677
  return ok(undefined);
525
678
  }
526
679
 
527
- export function addTypedTonemapPass(
680
+ export function addTypedOutputTransformPass(
528
681
  graph: RenderGraphBuilder<RenderPipelineFrame>,
529
682
  input: RenderPipelineTarget,
530
683
  output: RenderPipelineTarget,
531
684
  outputOnly = false,
532
685
  ): Result<void, RenderGraphError> {
533
686
  return addTypedFullscreenPass(graph, {
534
- name: outputOnly ? 'output' : 'tonemap',
535
- shader: STANDARD_TONEMAP_FEATURE_ID,
687
+ name: outputOnly ? 'present' : 'output-transform',
688
+ shader: STANDARD_OUTPUT_TRANSFORM_FEATURE_ID,
536
689
  input,
537
690
  output,
538
691
  outputOnly,