@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
@@ -10,6 +10,7 @@ import type { Handle, PassKind, PassSelector } from '@forgeax/engine-types';
10
10
  import { createHdrpUnifiedBindGroup, getOrCreateHdrpBuffers } from '../hdrp-buffers';
11
11
  import { getOrCreateIblCache } from '../ibl/IblPipelineCache';
12
12
  import { buildBeginRenderPassDescriptor } from '../pipeline-spec';
13
+ import { POINTS_LINES_MATERIAL_SHADER_ID } from '../points-lines/record';
13
14
  import type { RenderRecordPhase } from '../render-contract';
14
15
  import type { MaterialSnapshot } from '../render-system-extract';
15
16
  import { recordGeometryDraws } from './main-pass-geometry';
@@ -38,8 +39,57 @@ export type MainPassOptions = {
38
39
  readonly depthView?: TextureView | null;
39
40
  readonly passKind?: PassKind;
40
41
  readonly clearColor?: readonly [number, number, number, number];
42
+ readonly recordMode?: 'opaque' | 'transmission' | 'transparent';
43
+ readonly transmissionBackdropView?: TextureView | null;
41
44
  };
42
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
+
43
93
  /**
44
94
  * feat-20260529-rendergraph-pass-abstraction M4 / w13b: main forward
45
95
  * (geometry) pass recording, extracted verbatim from recordFrame. Uses the
@@ -86,9 +136,20 @@ export function recordMainPass(
86
136
  // msaaActive boolean (already on the context).
87
137
  const sampleCount = msaaActive ? 4 : 1;
88
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
+ }
89
148
  const colorViews = options?.colorViews ?? [geometryColorView];
90
149
  const colorFormats = options?.colorFormats ?? [
91
- (c.tonemapActive ? 'rgba16float' : pipelineState.colorAttachmentFormat) as GPUTextureFormat,
150
+ (c.tonemapActive || c.transparentColorFormat === 'rgba16float'
151
+ ? 'rgba16float'
152
+ : pipelineState.colorAttachmentFormat) as GPUTextureFormat,
92
153
  ];
93
154
  const targetDepthView = options?.depthView ?? geometryDepthView;
94
155
  const clearColor = options?.clearColor ?? clear;
@@ -197,8 +258,20 @@ export function recordMainPass(
197
258
  // feat-20260609 M2: filter entities by pass selector.
198
259
  const matchedIndices =
199
260
  selector !== undefined ? buildMatchedRenderableIndices(dispatch, selector) : null;
200
- const matchedMaterials =
261
+ const selectorMatchedMaterials =
201
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
+ };
202
275
 
203
276
  if (validatedOrdered.length > 0) {
204
277
  // feat-20260518-pbr-direct-lighting-mvp M5 / w22.10 (D-4 + D-9 +
@@ -362,6 +435,7 @@ export function recordMainPass(
362
435
  materialBgShared: frameState.materialBgShared,
363
436
  materialBgAssemblyCache: c.materialBgAssemblyCache,
364
437
  bindGroupCounts,
438
+ ...(transmissionBackdropView === undefined ? {} : { transmissionBackdropView }),
365
439
  };
366
440
  const buildPerSubmeshMaterialBg = (
367
441
  submeshMaterial: MaterialSnapshot,
@@ -535,10 +609,12 @@ export function recordMainPass(
535
609
  entityKey: number,
536
610
  materialWorld: World = world,
537
611
  ): BindGroup =>
538
- preparedMaterialBindGroups[materialSlot] ??
539
- buildPerSubmeshMaterialBg(material, entityKey, materialWorld);
612
+ material.materialShaderId !== POINTS_LINES_MATERIAL_SHADER_ID
613
+ ? (preparedMaterialBindGroups[materialSlot] ??
614
+ buildPerSubmeshMaterialBg(material, entityKey, materialWorld))
615
+ : buildPerSubmeshMaterialBg(material, entityKey, materialWorld);
540
616
 
541
- pass.setBindGroup(0, viewBindGroup as BindGroup);
617
+ pass.setBindGroup(0, viewBindGroup as BindGroup, [0]);
542
618
 
543
619
  // Track which (mesh-vertex-buffer, mesh-index-buffer, pipeline) combo
544
620
  // was last bound so consecutive entities sharing the same combo skip
@@ -548,7 +624,7 @@ export function recordMainPass(
548
624
  // M-3 / w12: vertexBuffer/indexBuffer state locals migrate to GpuBuffer.
549
625
  const recordGeometry = (): void => {
550
626
  recordGeometryDraws(
551
- c,
627
+ recordContext,
552
628
  pass,
553
629
  matchedMaterials,
554
630
  materialSlotIndices,
@@ -578,7 +654,7 @@ export function recordMainPass(
578
654
  // already-encoded geometry pixels. Depth is loaded from the geometry
579
655
  // pass so sprite-vs-mesh occlusion (depthCompare=less-equal) is
580
656
  // preserved (plan-strategy §2 D-2 + §4 R-4).
581
- if (passKind === 'forward') {
657
+ if (passKind === 'forward' && recordMode === undefined) {
582
658
  geometryPassEnded = recordSpritePass(
583
659
  c,
584
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,15 +32,27 @@ 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';
46
+ import type { PointsLinesInspection } from '../points-lines/inspection';
47
+ import type { PointsLinesRecordPlan } from '../points-lines/record';
48
+
49
+ export interface PointsLinesRecordSubmission {
50
+ readonly plan: PointsLinesRecordPlan;
51
+ readonly vertexBuffer: Buffer;
52
+ readonly indexBuffer: Buffer;
53
+ readonly layoutProjection: VertexLayoutProjection;
54
+ }
55
+
43
56
  import type {
44
57
  RenderDebugOverlay,
45
58
  RenderPipelineContext,
@@ -54,6 +67,7 @@ import type {
54
67
  import type { SkinPaletteAllocator } from '../systems/skin-palette-allocator';
55
68
  import type {
56
69
  BindGroupCounts,
70
+ BloomFrameReceipts,
57
71
  DispatchCounts,
58
72
  MaterialBgAssemblyCacheEntry,
59
73
  RenderFrameState,
@@ -84,6 +98,8 @@ export interface RenderSystemRuntime {
84
98
  depthFormatOverride?: GPUTextureFormat | null,
85
99
  vertexLayout?: string,
86
100
  vertexLayoutProjection?: VertexLayoutProjection,
101
+ shaderModuleMode?: RenderFeatureShaderModuleMode,
102
+ layoutKindOverride?: 'pbr' | 'pbr-skin',
87
103
  ) => RhiRenderPipeline | null;
88
104
  readonly getMaterialShaderBindingContract?: (
89
105
  materialShaderId: string,
@@ -100,9 +116,19 @@ export interface RenderSystemRuntime {
100
116
  bgl: BindGroupLayout,
101
117
  colorFormat: GPUTextureFormat,
102
118
  ) => RhiRenderPipeline | null;
119
+ readonly clearPostProcessPipelineCache?: (id: string) => void;
120
+ readonly invalidateShaderModule?: (label: string) => void;
103
121
  readonly dynamicTextureStore?: DynamicTextureStore | undefined;
104
122
  }
105
123
 
124
+ /** Renderer-owned bridge from retained Points/Lines facts into main geometry. */
125
+ export interface PointsLinesRecordOwner {
126
+ prepare(entry: ValidatedRenderable, clustered: boolean): PointsLinesRecordSubmission | undefined;
127
+ beginFrame(): void;
128
+ resetForDeviceLoss(): void;
129
+ inspections(): readonly PointsLinesInspection[];
130
+ }
131
+
106
132
  export interface PerPassResources {
107
133
  depthTexture: Texture | null;
108
134
  depthTextureView: TextureView | null;
@@ -134,18 +160,27 @@ export interface PerPassResources {
134
160
  readonly skyboxBindGroupLayout: BindGroupLayout | null;
135
161
  readonly skyboxSampler: Sampler | null;
136
162
  readonly skyboxRotationBuffer: Buffer | null;
137
- readonly bloomBrightPipeline: RhiRenderPipeline | null;
138
- readonly bloomBlurHPipeline: RhiRenderPipeline | null;
139
- readonly bloomBlurVPipeline: RhiRenderPipeline | null;
140
- readonly bloomCompositePipeline: RhiRenderPipeline | null;
141
- readonly bloomBrightBindGroupLayout: BindGroupLayout | null;
142
- readonly bloomBlurBindGroupLayout: BindGroupLayout | null;
143
- readonly bloomCompositeBindGroupLayout: BindGroupLayout | null;
144
- readonly bloomSampler: Sampler | null;
145
- readonly bloomBrightParamsBuffer: Buffer | null;
146
- readonly bloomBlurHParamsBuffer: Buffer | null;
147
- readonly bloomBlurVParamsBuffer: Buffer | null;
148
- 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;
149
184
  bloomBrightTexture: Texture | null;
150
185
  bloomBrightView: TextureView | null;
151
186
  bloomBrightWidth: number;
@@ -176,14 +211,35 @@ export interface PerPassResources {
176
211
  } | null;
177
212
  }
178
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
+
179
232
  export interface PipelineState {
180
233
  readonly meshes: ReadonlyMap<number, MeshGpuHandles>;
181
234
  readonly format: TextureFormat;
182
235
  readonly colorAttachmentFormat: TextureFormat;
236
+ /** Surface route committed by configureSurface for inspection provenance. */
237
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
183
238
  readonly viewBindGroupLayout: BindGroupLayout;
184
239
  readonly materialBindGroupLayout: BindGroupLayout;
185
240
  readonly meshBindGroupLayout: BindGroupLayout;
186
241
  readonly viewUniformBuffer: Buffer;
242
+ readonly pointsLinesViewBuffer?: Buffer;
187
243
  readonly shadowCasterCascadeBuffer: Buffer;
188
244
  readonly materialUniformBuffer: { readonly buffer: Buffer; readonly sizeInBytes: number };
189
245
  readonly meshStorageBuffer: { readonly buffer: Buffer; readonly sizeInBytes: number };
@@ -221,6 +277,8 @@ export interface RenderSystemInternals extends RenderSystemRuntime {
221
277
  readonly standardPipeline: RenderFrameState['activePipeline'];
222
278
  readonly featureHost?: RenderFeatureHost | undefined;
223
279
  readonly shaderModuleFactory?: PipelineBuilderShaderModuleFactory;
280
+ /** Optional handle-first factory for feature-owned generated shader programs. */
281
+ readonly immediateShaderModuleFactory?: PipelineBuilderShaderModuleFactory;
224
282
  readonly profiler?: Profiler | undefined;
225
283
  readonly context: RhiCanvasContext | null;
226
284
  readonly getPipelineState: () => PipelineState | null;
@@ -250,6 +308,7 @@ export interface _StandardForwardSceneView {
250
308
  readonly assets: AssetRegistry;
251
309
  readonly store: import('../device/gpu-residency').GpuResidencyCache;
252
310
  readonly pipelineState: PipelineState;
311
+ readonly bloomResources?: BloomPersistentBundle | null;
253
312
  readonly runtime: RenderSystemRuntime;
254
313
  readonly validated: readonly ValidatedRenderable[];
255
314
  readonly validatedOrdered: readonly ValidatedRenderable[];
@@ -281,6 +340,7 @@ export interface _StandardForwardSceneView {
281
340
  readonly materialSlots: readonly MaterialSnapshot[];
282
341
  readonly materialSlotOwners: readonly number[];
283
342
  readonly materialSlotCount: number;
343
+ readonly pointsLines: PointsLinesRecordOwner | undefined;
284
344
  readonly materialBgAssemblyCache: Map<string, MaterialBgAssemblyCacheEntry>;
285
345
  materialUboPayloadCache?: {
286
346
  readonly materialSlots: readonly MaterialSnapshot[];
@@ -294,7 +354,7 @@ export type _InternalRenderPipelineContext = RenderPipelineContext & _StandardFo
294
354
 
295
355
  export type RecordProfileRunner = <T>(phase: RenderRecordPhase, action: () => T) => T;
296
356
 
297
- export const STANDARD_PBR_UBO_SIZE = 304;
357
+ export const STANDARD_PBR_UBO_SIZE = 384;
298
358
  export const MATERIAL_PER_ENTITY_STRIDE = 512;
299
359
 
300
360
  export type SwapChainFormatPair = {
@@ -303,14 +363,88 @@ export type SwapChainFormatPair = {
303
363
  readonly fallbackReason?: 'preferred-canvas-format-missing';
304
364
  };
305
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
+
306
428
  export type SurfaceBackendKind = 'webgpu' | 'wgpu-native' | 'wgpu-webgl2' | 'null';
307
429
 
308
430
  export function resolveSurfaceFormatPair(
309
- backendKind: SurfaceBackendKind,
431
+ _backendKind: SurfaceBackendKind,
310
432
  storage: GPUTextureFormat,
311
433
  view: GPUTextureFormat,
312
434
  ): SwapChainFormatPair {
313
- 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
+ };
314
448
  }
315
449
 
316
450
  export function configureSurface(
@@ -326,8 +460,20 @@ export function configureSurface(
326
460
  format as GPUTextureFormat,
327
461
  colorAttachmentFormat as GPUTextureFormat,
328
462
  );
329
- const supportsTextureBinding = device.caps?.storageBuffer ?? true;
330
- 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({
331
477
  device,
332
478
  format: surfaceFormats.storage,
333
479
  alphaMode: isWebGl2 ? 'opaque' : 'premultiplied',
@@ -335,12 +481,49 @@ export function configureSurface(
335
481
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
336
482
  (supportsTextureBinding ? GPU_TEXTURE_USAGE_TEXTURE_BINDING : 0) |
337
483
  (isWebGl2 ? 0 : GPU_TEXTURE_USAGE_COPY_SRC),
338
- ...(!isWebGl2 ? { viewFormats: [surfaceFormats.view] } : {}),
484
+ viewFormats: [...profile.value.viewFormats],
339
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);
340
515
  }
341
516
 
342
- export function selectSwapChainFormat(storageBufferCapable: boolean): SwapChainFormatPair {
343
- 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
+ }
344
527
  const nav = (
345
528
  globalThis as { navigator?: { gpu?: { getPreferredCanvasFormat?: () => GPUTextureFormat } } }
346
529
  ).navigator;
@@ -354,11 +537,14 @@ export function selectSwapChainFormat(storageBufferCapable: boolean): SwapChainF
354
537
  : storage === 'bgra8unorm'
355
538
  ? 'bgra8unorm-srgb'
356
539
  : storage;
357
- return { storage, view };
540
+ return {
541
+ storage,
542
+ view: surfaceViewFormats ? view : storage,
543
+ };
358
544
  }
359
545
  return {
360
546
  storage: 'rgba8unorm',
361
- view: 'rgba8unorm-srgb',
547
+ view: surfaceViewFormats ? 'rgba8unorm-srgb' : 'rgba8unorm',
362
548
  fallbackReason: 'preferred-canvas-format-missing',
363
549
  };
364
550
  }