@forgeax/engine-render 0.1.4 → 0.1.6

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 (918) hide show
  1. package/README.md +130 -641
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
  4. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
  6. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
  8. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
  10. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
  11. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
  12. package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
  13. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
  14. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
  15. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
  16. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
  17. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
  18. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
  20. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
  21. package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
  22. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
  23. package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
  24. package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
  26. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
  27. package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
  28. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
  29. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
  30. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
  31. package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
  32. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
  34. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
  36. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
  37. package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
  38. package/dist/assembly/backend-contract.d.ts.map +1 -0
  39. package/dist/assembly/factory.d.ts +207 -0
  40. package/dist/assembly/factory.d.ts.map +1 -0
  41. package/dist/assembly/host-contract.d.ts +84 -0
  42. package/dist/assembly/host-contract.d.ts.map +1 -0
  43. package/dist/{renderer → assembly}/material/assembly.d.ts +0 -1
  44. package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
  45. package/dist/assembly/material/pipeline-projection.d.ts +30 -0
  46. package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
  47. package/dist/authoring.d.ts +10 -11
  48. package/dist/authoring.d.ts.map +1 -1
  49. package/dist/authoring.mjs +25 -3
  50. package/dist/authoring.mjs.map +1 -1
  51. package/dist/chunk-CQXZC5XI.mjs +182 -0
  52. package/dist/chunk-CQXZC5XI.mjs.map +1 -0
  53. package/dist/chunk-QC4VW3XJ.mjs +79 -0
  54. package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
  55. package/dist/chunk-SCRSAK5B.mjs +480 -0
  56. package/dist/chunk-SCRSAK5B.mjs.map +1 -0
  57. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  59. package/dist/components/glyph-text.d.ts +1 -1
  60. package/dist/components/glyph-text.d.ts.map +1 -1
  61. package/dist/components/index.d.ts +2 -2
  62. package/dist/components/index.d.ts.map +1 -1
  63. package/dist/components/instances.d.ts +1 -1
  64. package/dist/components/instances.d.ts.map +1 -1
  65. package/dist/components/light-helpers.d.ts +1 -1
  66. package/dist/components/light-helpers.d.ts.map +1 -1
  67. package/dist/components/mesh-filter.d.ts +7 -7
  68. package/dist/components/mesh-filter.d.ts.map +1 -1
  69. package/dist/components/scene-instance.d.ts +11 -11
  70. package/dist/components/skybox-background.d.ts +56 -0
  71. package/dist/components/skybox-background.d.ts.map +1 -0
  72. package/dist/components/skylight.d.ts +55 -0
  73. package/dist/components/skylight.d.ts.map +1 -0
  74. package/dist/components/sprite-animation.d.ts +2 -3
  75. package/dist/components/sprite-animation.d.ts.map +1 -1
  76. package/dist/components/sprite-instances.d.ts +1 -1
  77. package/dist/components/sprite-playback-mode.d.ts +6 -1
  78. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  79. package/dist/components/sprite-region-override.d.ts +2 -3
  80. package/dist/components/sprite-region-override.d.ts.map +1 -1
  81. package/dist/components/tile-layer.d.ts +5 -0
  82. package/dist/components/tile-layer.d.ts.map +1 -1
  83. package/dist/construct-renderer.d.ts +18 -1
  84. package/dist/construct-renderer.d.ts.map +1 -1
  85. package/dist/construct-renderer.mjs +27008 -4
  86. package/dist/construct-renderer.mjs.map +1 -1
  87. package/dist/debug-draw-glue.d.ts +2 -53
  88. package/dist/debug-draw-glue.d.ts.map +1 -1
  89. package/dist/device/device-scope.d.ts +83 -0
  90. package/dist/device/device-scope.d.ts.map +1 -0
  91. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  92. package/dist/device/gpu-residency.d.ts.map +1 -0
  93. package/dist/device/resource-types.d.ts +8 -0
  94. package/dist/device/resource-types.d.ts.map +1 -0
  95. package/dist/engine-metrics.d.ts +2 -2
  96. package/dist/engine-metrics.d.ts.map +1 -1
  97. package/dist/errors/recover.d.ts +28 -1
  98. package/dist/errors/recover.d.ts.map +1 -1
  99. package/dist/errors/render.d.ts +249 -258
  100. package/dist/errors/render.d.ts.map +1 -1
  101. package/dist/features/fullscreen.d.ts +19 -0
  102. package/dist/features/fullscreen.d.ts.map +1 -0
  103. package/dist/features/host.d.ts +32 -26
  104. package/dist/features/host.d.ts.map +1 -1
  105. package/dist/features/morph/morph-feature.d.ts +39 -5
  106. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  107. package/dist/features/plan.d.ts +182 -0
  108. package/dist/features/plan.d.ts.map +1 -0
  109. package/dist/features/prepared-gpu-work.d.ts +21 -17
  110. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  111. package/dist/features/prepared-graphics-store.d.ts +2 -1
  112. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  113. package/dist/features/prepared-graphics.d.ts +11 -21
  114. package/dist/features/prepared-graphics.d.ts.map +1 -1
  115. package/dist/features/render-graph-compute.d.ts +2 -2
  116. package/dist/features/render-graph-compute.d.ts.map +1 -1
  117. package/dist/features/render-graph-contribution.d.ts +4 -7
  118. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  119. package/dist/features/render-graph-raster.d.ts +2 -2
  120. package/dist/features/render-graph-raster.d.ts.map +1 -1
  121. package/dist/features/render-graph-resources.d.ts +6 -6
  122. package/dist/features/render-graph-resources.d.ts.map +1 -1
  123. package/dist/features/targets.d.ts +5 -5
  124. package/dist/features/targets.d.ts.map +1 -1
  125. package/dist/features/types.d.ts +11 -190
  126. package/dist/features/types.d.ts.map +1 -1
  127. package/dist/features/vocabulary.d.ts +14 -0
  128. package/dist/features/vocabulary.d.ts.map +1 -0
  129. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  130. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  131. package/dist/glyph-text-layout-system.d.ts +3 -2
  132. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  133. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  134. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  135. package/dist/gpu-driven/production-raster.d.ts +13 -112
  136. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  137. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  138. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  139. package/dist/gpu-resource.d.ts +3 -3
  140. package/dist/gpu-scene-schema.d.ts +1 -94
  141. package/dist/gpu-scene-schema.d.ts.map +1 -1
  142. package/dist/gpu-scene.d.ts +7 -33
  143. package/dist/gpu-scene.d.ts.map +1 -1
  144. package/dist/hdrp-buffers.d.ts +3 -53
  145. package/dist/hdrp-buffers.d.ts.map +1 -1
  146. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  147. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  148. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  149. package/dist/index.d.ts +13 -43
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.mjs +165 -3
  152. package/dist/index.mjs.map +1 -1
  153. package/dist/inspection-types.d.ts +69 -0
  154. package/dist/inspection-types.d.ts.map +1 -0
  155. package/dist/instance-buffer-cache.d.ts +1 -4
  156. package/dist/instance-buffer-cache.d.ts.map +1 -1
  157. package/dist/internal.d.ts +1 -73
  158. package/dist/internal.d.ts.map +1 -1
  159. package/dist/internal.mjs +1 -43
  160. package/dist/internal.mjs.map +1 -1
  161. package/dist/lifecycle.d.ts +36 -2
  162. package/dist/lifecycle.d.ts.map +1 -1
  163. package/dist/materials.d.ts +0 -3
  164. package/dist/materials.d.ts.map +1 -1
  165. package/dist/mesh-material-bindings.d.ts +0 -1
  166. package/dist/mesh-material-bindings.d.ts.map +1 -1
  167. package/dist/pbr-pipeline.d.ts +75 -29
  168. package/dist/pbr-pipeline.d.ts.map +1 -1
  169. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  170. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  171. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  172. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  173. package/dist/pipeline/standard-profile.d.ts +40 -0
  174. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  175. package/dist/pipeline-builder.d.ts +3 -3
  176. package/dist/pipeline-builder.d.ts.map +1 -1
  177. package/dist/pipeline-spec-types.d.ts +24 -0
  178. package/dist/pipeline-spec-types.d.ts.map +1 -0
  179. package/dist/pipeline-spec.d.ts +16 -155
  180. package/dist/pipeline-spec.d.ts.map +1 -1
  181. package/dist/plugin.d.ts +1 -14
  182. package/dist/plugin.d.ts.map +1 -1
  183. package/dist/post-process-errors.d.ts +18 -18
  184. package/dist/post-process-errors.d.ts.map +1 -1
  185. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  186. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  187. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  188. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  189. package/dist/record/frame-lighting.d.ts +7 -73
  190. package/dist/record/frame-lighting.d.ts.map +1 -1
  191. package/dist/record/frame-snapshot.d.ts +44 -44
  192. package/dist/record/frame-snapshot.d.ts.map +1 -1
  193. package/dist/record/frame-targets.d.ts +5 -38
  194. package/dist/record/frame-targets.d.ts.map +1 -1
  195. package/dist/record/frame.d.ts +64 -52
  196. package/dist/record/frame.d.ts.map +1 -1
  197. package/dist/record/helpers.d.ts +3 -2
  198. package/dist/record/helpers.d.ts.map +1 -1
  199. package/dist/record/main-pass-geometry.d.ts +5 -4
  200. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  201. package/dist/record/main-pass-material.d.ts +90 -59
  202. package/dist/record/main-pass-material.d.ts.map +1 -1
  203. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  204. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  205. package/dist/record/main-pass.d.ts +1 -1
  206. package/dist/record/main-pass.d.ts.map +1 -1
  207. package/dist/record/mesh-ssbo.d.ts +276 -3
  208. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  209. package/dist/record/render-context.d.ts +235 -0
  210. package/dist/record/render-context.d.ts.map +1 -0
  211. package/dist/record/shadow-pass.d.ts +15 -88
  212. package/dist/record/shadow-pass.d.ts.map +1 -1
  213. package/dist/record/skybox-post-pass.d.ts +1 -1
  214. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  215. package/dist/record/typed-frame-graph.d.ts +29 -7
  216. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  217. package/dist/record/view-ubo.d.ts +3 -3
  218. package/dist/record/view-ubo.d.ts.map +1 -1
  219. package/dist/render-contract.d.ts +416 -0
  220. package/dist/render-contract.d.ts.map +1 -0
  221. package/dist/render-data.d.ts.map +1 -1
  222. package/dist/render-graph-primitives.d.ts +14 -362
  223. package/dist/render-graph-primitives.d.ts.map +1 -1
  224. package/dist/render-pipeline.d.ts +25 -64
  225. package/dist/render-pipeline.d.ts.map +1 -1
  226. package/dist/render-system-extract.d.ts +107 -338
  227. package/dist/render-system-extract.d.ts.map +1 -1
  228. package/dist/render-system.d.ts +21 -713
  229. package/dist/render-system.d.ts.map +1 -1
  230. package/dist/scene/render-scene-types.d.ts +58 -0
  231. package/dist/scene/render-scene-types.d.ts.map +1 -0
  232. package/dist/scene/render-scene.d.ts +105 -0
  233. package/dist/scene/render-scene.d.ts.map +1 -0
  234. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  235. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  236. package/dist/ssao-buffers.d.ts +22 -3
  237. package/dist/ssao-buffers.d.ts.map +1 -1
  238. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  239. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  240. package/dist/systems/skin-palette-types.d.ts +14 -0
  241. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  242. package/dist/systems/transparent-sort-config.d.ts +23 -2
  243. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  244. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  245. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  246. package/dist/typed-render-graph-primitives.d.ts +2 -4
  247. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  248. package/dist/typed-shadow-passes.d.ts +3 -3
  249. package/dist/typed-shadow-passes.d.ts.map +1 -1
  250. package/package.json +23 -23
  251. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  252. package/src/__tests__/callback-inference.test-d.ts +6 -3
  253. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  254. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  255. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  256. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  257. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  258. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  259. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  260. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  261. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  262. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  263. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  264. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
  265. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  266. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  267. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  268. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  269. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  270. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  271. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  272. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  273. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  274. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  275. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  276. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  277. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  278. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  279. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  280. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  281. package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
  282. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  283. package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
  284. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  285. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  286. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  287. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  288. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  289. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  290. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  291. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  292. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  293. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  294. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  295. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  296. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  297. package/src/__tests__/profiler-default-off.test.ts +1 -1
  298. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  299. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  300. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  301. package/src/__tests__/public-surface.test-d.ts +65 -3
  302. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  303. package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
  304. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  305. package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
  306. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  307. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  308. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  309. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  310. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  311. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  312. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  313. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  314. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  315. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  316. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  317. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  318. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  319. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  320. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  321. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  322. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  323. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  324. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  325. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  326. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  327. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  328. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  329. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +44 -95
  330. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  331. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  332. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  333. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  334. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  335. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  336. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  337. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  338. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  339. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  340. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  341. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  342. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  343. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  344. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  345. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  346. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  347. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  348. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  349. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  350. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  351. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  352. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  353. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  354. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  355. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  356. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  357. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  358. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  359. package/src/assembly/backend-contract.ts +57 -0
  360. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1663 -2690
  361. package/src/assembly/host-contract.ts +101 -0
  362. package/src/{renderer → assembly}/material/assembly.ts +0 -2
  363. package/src/assembly/material/pipeline-projection.ts +63 -0
  364. package/src/authoring.ts +14 -22
  365. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  366. package/src/components/glyph-text.ts +3 -2
  367. package/src/components/index.ts +7 -9
  368. package/src/components/instances.ts +4 -5
  369. package/src/components/light-helpers.ts +1 -1
  370. package/src/components/mesh-filter.ts +11 -10
  371. package/src/components/post-process-params.ts +3 -3
  372. package/src/components/scene-instance.ts +12 -12
  373. package/src/components/skybox-background.ts +103 -0
  374. package/src/components/{environment.ts → skylight.ts} +2 -110
  375. package/src/components/sprite-animation.ts +3 -4
  376. package/src/components/sprite-instances.ts +2 -2
  377. package/src/components/sprite-playback-mode.ts +7 -1
  378. package/src/components/sprite-region-override.ts +2 -3
  379. package/src/components/tile-layer.ts +8 -2
  380. package/src/construct-renderer.ts +67 -4
  381. package/src/debug-draw-glue.ts +8 -129
  382. package/src/device/device-scope.ts +306 -0
  383. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  384. package/src/device/resource-types.ts +20 -0
  385. package/src/engine-metrics.ts +12 -19
  386. package/src/errors/recover.ts +45 -3
  387. package/src/errors/render.ts +357 -460
  388. package/src/features/fullscreen.ts +46 -0
  389. package/src/features/host.ts +575 -309
  390. package/src/features/morph/morph-feature.ts +195 -105
  391. package/src/features/plan.ts +447 -0
  392. package/src/features/prepared-gpu-work.ts +72 -15
  393. package/src/features/prepared-graphics-store.ts +20 -6
  394. package/src/features/prepared-graphics.ts +12 -71
  395. package/src/features/render-graph-compute.ts +14 -5
  396. package/src/features/render-graph-contribution.ts +43 -63
  397. package/src/features/render-graph-raster.ts +11 -6
  398. package/src/features/render-graph-resources.ts +25 -23
  399. package/src/features/targets.ts +8 -21
  400. package/src/features/types.ts +39 -227
  401. package/src/features/vocabulary.ts +24 -0
  402. package/src/fullscreen-post-process-pass.ts +14 -57
  403. package/src/glyph-text-layout-system.ts +70 -96
  404. package/src/gpu-driven/batch-topology.ts +24 -202
  405. package/src/gpu-driven/production-raster.ts +93 -1108
  406. package/src/gpu-driven/view-gpu.ts +46 -192
  407. package/src/gpu-resource.ts +4 -4
  408. package/src/gpu-scene-schema.ts +11 -99
  409. package/src/gpu-scene.ts +231 -364
  410. package/src/hdrp-buffers.ts +12 -221
  411. package/src/ibl/IblPipelineCache.ts +471 -711
  412. package/src/ibl/skylight-bind-group.ts +4 -4
  413. package/src/index.ts +58 -217
  414. package/src/inspection-types.ts +76 -0
  415. package/src/instance-buffer-cache.ts +1 -29
  416. package/src/internal.ts +6 -85
  417. package/src/lifecycle.ts +64 -19
  418. package/src/materials.ts +7 -29
  419. package/src/mesh-material-bindings.ts +0 -1
  420. package/src/pbr-pipeline.ts +434 -53
  421. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  422. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  423. package/src/pipeline/standard-profile.ts +65 -0
  424. package/src/pipeline-builder.ts +60 -64
  425. package/src/pipeline-spec-types.ts +28 -0
  426. package/src/pipeline-spec.ts +72 -609
  427. package/src/plugin.ts +3 -75
  428. package/src/post-process-errors.ts +31 -33
  429. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  430. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  431. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  432. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  433. package/src/record/frame-lighting.ts +74 -195
  434. package/src/record/frame-snapshot.ts +45 -60
  435. package/src/record/frame-targets.ts +8 -243
  436. package/src/record/frame.ts +509 -796
  437. package/src/record/helpers.ts +6 -11
  438. package/src/record/main-pass-geometry.ts +106 -147
  439. package/src/record/main-pass-material.ts +517 -190
  440. package/src/record/main-pass-sprite-draws.ts +198 -117
  441. package/src/record/main-pass.ts +162 -143
  442. package/src/record/mesh-ssbo.ts +517 -38
  443. package/src/record/render-context.ts +364 -0
  444. package/src/record/shadow-pass.ts +138 -1838
  445. package/src/record/skybox-post-pass.ts +12 -14
  446. package/src/record/typed-frame-graph.ts +215 -254
  447. package/src/record/view-ubo.ts +6 -37
  448. package/src/render-contract.ts +571 -0
  449. package/src/render-data.ts +3 -3
  450. package/src/render-graph-primitives.ts +76 -851
  451. package/src/render-pipeline.ts +104 -188
  452. package/src/render-system-extract.ts +1048 -1729
  453. package/src/render-system.ts +330 -1957
  454. package/src/scene/render-scene-types.ts +64 -0
  455. package/src/scene/render-scene.ts +1032 -0
  456. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  457. package/src/ssao-buffers.ts +167 -8
  458. package/src/systems/skin-palette-allocator.ts +21 -64
  459. package/src/systems/skin-palette-types.ts +14 -0
  460. package/src/systems/transparent-sort-config.ts +25 -3
  461. package/src/tilemap-chunk-extract-system.ts +53 -70
  462. package/src/typed-render-graph-primitives.ts +35 -24
  463. package/src/typed-shadow-passes.ts +26 -56
  464. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  465. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  466. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  467. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  468. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  469. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  470. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  471. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  472. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  473. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  474. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  475. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  476. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  477. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  479. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  480. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  481. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  482. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  483. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  484. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  485. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  486. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  487. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  488. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  489. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  490. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  491. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  492. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  493. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  494. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  495. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  496. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  497. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  498. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  499. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  501. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  503. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  504. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  505. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  506. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  507. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  508. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  509. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  510. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  511. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  512. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  513. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  515. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  517. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  518. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  519. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  520. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  521. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  522. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  523. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  524. package/dist/__tests__/plugin.test.d.ts +0 -2
  525. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  526. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  527. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  529. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  531. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  532. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  533. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  534. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  535. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  536. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  537. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  538. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  539. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  540. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  541. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  542. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  543. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  544. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  545. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  547. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  549. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  551. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  552. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  553. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  555. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  556. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  557. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  558. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  559. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  561. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  563. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  564. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  565. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  566. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  567. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  568. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  569. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  570. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  571. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  572. package/dist/chunk-DJIMFYX6.mjs +0 -1439
  573. package/dist/chunk-DJIMFYX6.mjs.map +0 -1
  574. package/dist/chunk-F2SIOCRM.mjs +0 -7423
  575. package/dist/chunk-F2SIOCRM.mjs.map +0 -1
  576. package/dist/chunk-JMSB7AR4.mjs +0 -3
  577. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  578. package/dist/chunk-KHI6K4C6.mjs +0 -659
  579. package/dist/chunk-KHI6K4C6.mjs.map +0 -1
  580. package/dist/chunk-PORZOL2V.mjs +0 -569
  581. package/dist/chunk-PORZOL2V.mjs.map +0 -1
  582. package/dist/chunk-UOJGMDGP.mjs +0 -29913
  583. package/dist/chunk-UOJGMDGP.mjs.map +0 -1
  584. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  585. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  586. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  587. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  588. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  589. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  590. package/dist/components/__tests__/fog.test.d.ts +0 -2
  591. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  592. package/dist/components/atmosphere.d.ts +0 -18
  593. package/dist/components/atmosphere.d.ts.map +0 -1
  594. package/dist/components/environment.d.ts +0 -115
  595. package/dist/components/environment.d.ts.map +0 -1
  596. package/dist/deferred-lighting.d.ts +0 -13
  597. package/dist/deferred-lighting.d.ts.map +0 -1
  598. package/dist/dynamic-texture-store.d.ts +0 -42
  599. package/dist/dynamic-texture-store.d.ts.map +0 -1
  600. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  601. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  602. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  603. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  604. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  605. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  606. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  607. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  608. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  609. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  610. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  611. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  612. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  613. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  614. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  615. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  616. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  617. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  618. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  619. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  620. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  621. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  622. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  623. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  624. package/dist/environment/descriptors.d.ts +0 -2
  625. package/dist/environment/descriptors.d.ts.map +0 -1
  626. package/dist/environment/extracted-environment.d.ts +0 -53
  627. package/dist/environment/extracted-environment.d.ts.map +0 -1
  628. package/dist/environment/generation.d.ts +0 -62
  629. package/dist/environment/generation.d.ts.map +0 -1
  630. package/dist/environment/gpu-bundle.d.ts +0 -23
  631. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  632. package/dist/environment/graph.d.ts +0 -108
  633. package/dist/environment/graph.d.ts.map +0 -1
  634. package/dist/environment/inspection.d.ts +0 -48
  635. package/dist/environment/inspection.d.ts.map +0 -1
  636. package/dist/environment/lifecycle.d.ts +0 -22
  637. package/dist/environment/lifecycle.d.ts.map +0 -1
  638. package/dist/environment/readiness.d.ts +0 -29
  639. package/dist/environment/readiness.d.ts.map +0 -1
  640. package/dist/environment/signature.d.ts +0 -70
  641. package/dist/environment/signature.d.ts.map +0 -1
  642. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  643. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  644. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  645. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  646. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  647. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  648. package/dist/extract/directional-csm.d.ts +0 -129
  649. package/dist/extract/directional-csm.d.ts.map +0 -1
  650. package/dist/extract/index.d.ts +0 -5
  651. package/dist/extract/index.d.ts.map +0 -1
  652. package/dist/extract/material-interface.d.ts +0 -56
  653. package/dist/extract/material-interface.d.ts.map +0 -1
  654. package/dist/extract/schema-readers.d.ts +0 -20
  655. package/dist/extract/schema-readers.d.ts.map +0 -1
  656. package/dist/features/graph-contribution.d.ts +0 -64
  657. package/dist/features/graph-contribution.d.ts.map +0 -1
  658. package/dist/features/index.d.ts +0 -21
  659. package/dist/features/index.d.ts.map +0 -1
  660. package/dist/features/morph/index.d.ts +0 -3
  661. package/dist/features/morph/index.d.ts.map +0 -1
  662. package/dist/features/morph/morph-bounds.d.ts +0 -42
  663. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  664. package/dist/features/scene-temporal.d.ts +0 -45
  665. package/dist/features/scene-temporal.d.ts.map +0 -1
  666. package/dist/features/taa-resolve.d.ts +0 -21
  667. package/dist/features/taa-resolve.d.ts.map +0 -1
  668. package/dist/frame-chain.d.ts +0 -14
  669. package/dist/frame-chain.d.ts.map +0 -1
  670. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  671. package/dist/gpu-resource-store.d.ts.map +0 -1
  672. package/dist/hdrp-cluster-membership.d.ts +0 -2
  673. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  674. package/dist/hdrp-pipeline.d.ts +0 -36
  675. package/dist/hdrp-pipeline.d.ts.map +0 -1
  676. package/dist/ibl/cubemap-projection.d.ts +0 -23
  677. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  678. package/dist/ibl/face-uniforms.d.ts +0 -65
  679. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  680. package/dist/mesh-update-errors.d.ts +0 -71
  681. package/dist/mesh-update-errors.d.ts.map +0 -1
  682. package/dist/mipmap-generator.d.ts +0 -39
  683. package/dist/mipmap-generator.d.ts.map +0 -1
  684. package/dist/param-schema-projection-census.d.ts +0 -18
  685. package/dist/param-schema-projection-census.d.ts.map +0 -1
  686. package/dist/persistent-render-scene.d.ts +0 -158
  687. package/dist/persistent-render-scene.d.ts.map +0 -1
  688. package/dist/pipeline/index.d.ts +0 -11
  689. package/dist/pipeline/index.d.ts.map +0 -1
  690. package/dist/pipeline-errors.d.ts +0 -110
  691. package/dist/pipeline-errors.d.ts.map +0 -1
  692. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  693. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  694. package/dist/prepare/index.d.ts +0 -4
  695. package/dist/prepare/index.d.ts.map +0 -1
  696. package/dist/prepare/schema-readers.d.ts +0 -11
  697. package/dist/prepare/schema-readers.d.ts.map +0 -1
  698. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  699. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  700. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  701. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  702. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  703. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  704. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  705. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  707. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  712. package/dist/record/frame-observation.d.ts +0 -38
  713. package/dist/record/frame-observation.d.ts.map +0 -1
  714. package/dist/record/index.d.ts +0 -15
  715. package/dist/record/index.d.ts.map +0 -1
  716. package/dist/record/main-pass-skin.d.ts +0 -46
  717. package/dist/record/main-pass-skin.d.ts.map +0 -1
  718. package/dist/record/main-pass-sprite.d.ts +0 -69
  719. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  720. package/dist/record/material-payload.d.ts +0 -43
  721. package/dist/record/material-payload.d.ts.map +0 -1
  722. package/dist/record/material-slot-plan.d.ts +0 -26
  723. package/dist/record/material-slot-plan.d.ts.map +0 -1
  724. package/dist/record/membership-timing.d.ts +0 -232
  725. package/dist/record/membership-timing.d.ts.map +0 -1
  726. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  727. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  728. package/dist/record/shadow-submit-mode.d.ts +0 -66
  729. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  730. package/dist/render-dispatch-membership.d.ts +0 -47
  731. package/dist/render-dispatch-membership.d.ts.map +0 -1
  732. package/dist/render-pipeline-context.d.ts +0 -289
  733. package/dist/render-pipeline-context.d.ts.map +0 -1
  734. package/dist/render-pipeline-target.d.ts +0 -16
  735. package/dist/render-pipeline-target.d.ts.map +0 -1
  736. package/dist/render-scene-projection.d.ts +0 -174
  737. package/dist/render-scene-projection.d.ts.map +0 -1
  738. package/dist/render-system-fold.d.ts +0 -266
  739. package/dist/render-system-fold.d.ts.map +0 -1
  740. package/dist/renderer/asset-service.d.ts +0 -10
  741. package/dist/renderer/asset-service.d.ts.map +0 -1
  742. package/dist/renderer/backend-selection.d.ts.map +0 -1
  743. package/dist/renderer/environment-classify.d.ts +0 -6
  744. package/dist/renderer/environment-classify.d.ts.map +0 -1
  745. package/dist/renderer/environment-error.d.ts +0 -13
  746. package/dist/renderer/environment-error.d.ts.map +0 -1
  747. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  748. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  749. package/dist/renderer/renderer-factory.d.ts +0 -289
  750. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  751. package/dist/renderer.d.ts +0 -771
  752. package/dist/renderer.d.ts.map +0 -1
  753. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  754. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  755. package/dist/ssao-data.d.ts +0 -34
  756. package/dist/ssao-data.d.ts.map +0 -1
  757. package/dist/surface-format.d.ts +0 -10
  758. package/dist/surface-format.d.ts.map +0 -1
  759. package/dist/taa-history-store.d.ts +0 -88
  760. package/dist/taa-history-store.d.ts.map +0 -1
  761. package/dist/temporal-coverage.d.ts +0 -35
  762. package/dist/temporal-coverage.d.ts.map +0 -1
  763. package/dist/temporal-frame-transaction.d.ts +0 -92
  764. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  765. package/dist/temporal-inspection.d.ts +0 -57
  766. package/dist/temporal-inspection.d.ts.map +0 -1
  767. package/dist/temporal-view.d.ts +0 -43
  768. package/dist/temporal-view.d.ts.map +0 -1
  769. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  770. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  771. package/dist/urp-pipeline.d.ts +0 -4
  772. package/dist/urp-pipeline.d.ts.map +0 -1
  773. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  774. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  775. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  776. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  777. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  778. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  779. package/src/__tests__/camera-temporal.test.ts +0 -188
  780. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  781. package/src/__tests__/environment-inspection.test.ts +0 -45
  782. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  783. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  784. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  785. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  786. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  787. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  788. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  789. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  790. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  791. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  792. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  793. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  794. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  795. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  796. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  797. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  798. package/src/__tests__/materials.unit.test.ts +0 -25
  799. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  800. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  801. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  802. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  803. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  804. package/src/__tests__/plugin.test.ts +0 -25
  805. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  806. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  807. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  808. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  809. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  810. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  811. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  812. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  813. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  814. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  815. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  816. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  817. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  818. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  819. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  820. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  821. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  822. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  823. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  824. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  825. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  826. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  827. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  828. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  829. package/src/components/__tests__/atmosphere.test.ts +0 -79
  830. package/src/components/__tests__/fog.test-d.ts +0 -49
  831. package/src/components/__tests__/fog.test.ts +0 -60
  832. package/src/components/atmosphere.ts +0 -64
  833. package/src/deferred-lighting.ts +0 -92
  834. package/src/dynamic-texture-store.ts +0 -111
  835. package/src/environment/README.md +0 -76
  836. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  837. package/src/environment/__tests__/generation-red.test.ts +0 -64
  838. package/src/environment/__tests__/generation.test.ts +0 -37
  839. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  840. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  841. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  842. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  843. package/src/environment/__tests__/readiness.test.ts +0 -42
  844. package/src/environment/__tests__/recovery.test.ts +0 -62
  845. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  846. package/src/environment/__tests__/signature-red.test.ts +0 -45
  847. package/src/environment/__tests__/signature.test.ts +0 -60
  848. package/src/environment/descriptors.ts +0 -7
  849. package/src/environment/extracted-environment.ts +0 -239
  850. package/src/environment/generation.ts +0 -158
  851. package/src/environment/gpu-bundle.ts +0 -144
  852. package/src/environment/graph.ts +0 -588
  853. package/src/environment/inspection.ts +0 -107
  854. package/src/environment/lifecycle.ts +0 -124
  855. package/src/environment/readiness.ts +0 -76
  856. package/src/environment/signature.ts +0 -185
  857. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  858. package/src/extract/__tests__/environment-source.test.ts +0 -105
  859. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  860. package/src/extract/directional-csm.ts +0 -959
  861. package/src/extract/index.ts +0 -10
  862. package/src/extract/material-interface.ts +0 -604
  863. package/src/extract/schema-readers.ts +0 -27
  864. package/src/features/graph-contribution.ts +0 -577
  865. package/src/features/index.ts +0 -100
  866. package/src/features/morph/index.ts +0 -24
  867. package/src/features/morph/morph-bounds.ts +0 -123
  868. package/src/features/scene-temporal.ts +0 -274
  869. package/src/features/taa-resolve.ts +0 -244
  870. package/src/frame-chain.ts +0 -21
  871. package/src/hdrp-cluster-membership.ts +0 -70
  872. package/src/ibl/cubemap-projection.ts +0 -60
  873. package/src/ibl/face-uniforms.ts +0 -150
  874. package/src/mesh-update-errors.ts +0 -113
  875. package/src/mipmap-generator.ts +0 -244
  876. package/src/param-schema-projection-census.ts +0 -73
  877. package/src/persistent-render-scene.ts +0 -1752
  878. package/src/pipeline/index.ts +0 -40
  879. package/src/pipeline-errors.ts +0 -172
  880. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  881. package/src/prepare/index.ts +0 -8
  882. package/src/prepare/schema-readers.ts +0 -20
  883. package/src/record/__tests__/environment-record.test.ts +0 -35
  884. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  885. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  886. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  887. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  888. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  889. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  890. package/src/record/frame-observation.ts +0 -122
  891. package/src/record/index.ts +0 -15
  892. package/src/record/main-pass-skin.ts +0 -51
  893. package/src/record/main-pass-sprite.ts +0 -166
  894. package/src/record/material-payload.ts +0 -292
  895. package/src/record/material-slot-plan.ts +0 -68
  896. package/src/record/membership-timing.ts +0 -1012
  897. package/src/record/shadow-caster-uniform.ts +0 -37
  898. package/src/record/shadow-submit-mode.ts +0 -277
  899. package/src/render-dispatch-membership.ts +0 -155
  900. package/src/render-pipeline-context.ts +0 -332
  901. package/src/render-pipeline-target.ts +0 -96
  902. package/src/render-scene-projection.ts +0 -1738
  903. package/src/render-system-fold.ts +0 -531
  904. package/src/renderer/asset-service.ts +0 -32
  905. package/src/renderer/backend-selection.ts +0 -121
  906. package/src/renderer/environment-classify.ts +0 -30
  907. package/src/renderer/environment-error.ts +0 -19
  908. package/src/renderer/material/pipeline-projection.ts +0 -140
  909. package/src/renderer.ts +0 -940
  910. package/src/scene-utils/collect-subtree.ts +0 -40
  911. package/src/ssao-data.ts +0 -106
  912. package/src/surface-format.ts +0 -37
  913. package/src/taa-history-store.ts +0 -429
  914. package/src/temporal-coverage.ts +0 -106
  915. package/src/temporal-frame-transaction.ts +0 -301
  916. package/src/temporal-inspection.ts +0 -194
  917. package/src/temporal-view.ts +0 -174
  918. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
@@ -3,6 +3,7 @@ import { mat4, vec3 } from '@forgeax/engine-math';
3
3
  import { RenderGraphBuilder } from '@forgeax/engine-render-graph';
4
4
  import { createShaderModule, rhi } from '@forgeax/engine-rhi-webgpu';
5
5
  import { ok } from '@forgeax/engine-types';
6
+ import type { MeshGpuHandles } from '../device/gpu-residency';
6
7
  import { BatchTopology } from '../gpu-driven/batch-topology';
7
8
  import { GPU_DRIVEN_RIGID_UNLIT_WGSL, GpuDrivenProduction } from '../gpu-driven/production-raster';
8
9
  import { GPU_DRIVEN_VIEW_WGSL } from '../gpu-driven/view-gpu';
@@ -15,14 +16,10 @@ import {
15
16
  GPU_BUFFER_USAGE_UNIFORM,
16
17
  GPU_BUFFER_USAGE_VERTEX,
17
18
  } from '../gpu-usage';
19
+ import type { CameraSnapshot } from '../render-contract';
18
20
  import type { RenderPipelineFrame } from '../render-pipeline';
19
- import { RenderSceneProjection } from '../render-scene-projection';
20
- import type { MeshGpuHandles } from '../render-system';
21
- import type {
22
- CameraSnapshot,
23
- MaterialSnapshot,
24
- RenderableSnapshot,
25
- } from '../render-system-extract';
21
+ import type { MaterialSnapshot, RenderableSnapshot } from '../render-system-extract';
22
+ import { RenderScene } from '../scene/render-scene';
26
23
 
27
24
  const EMPTY_RESOURCE_CLASS = JSON.stringify({ textures: [], samplers: [], video: [] });
28
25
 
@@ -45,9 +42,6 @@ function snapshot(entityKey: number, assetHandle: number): RenderableSnapshot {
45
42
  entityKey,
46
43
  gpuDrivenDraws: [
47
44
  {
48
- submeshIndex: 0,
49
- passIndex: 0,
50
- queue: 2000,
51
45
  kind: 'indexed',
52
46
  first: 0,
53
47
  count: 3,
@@ -65,8 +59,6 @@ function camera(): CameraSnapshot {
65
59
  const world = mat4.identity(mat4.create());
66
60
  world[14] = 3;
67
61
  return {
68
- worldId: 0,
69
- entityKey: 0,
70
62
  position: vec3.create(0, 0, 3),
71
63
  world: new Float32Array(world),
72
64
  fov: Math.PI / 2,
@@ -82,7 +74,6 @@ function camera(): CameraSnapshot {
82
74
  exposure: 1,
83
75
  whitePoint: 4,
84
76
  antialias: 'none',
85
- historyVersion: 0,
86
77
  bloom: 'off',
87
78
  bloomThreshold: 1,
88
79
  bloomIntensity: 1,
@@ -161,6 +152,8 @@ export async function runGpuDrivenIndirectRasterEvidence(): Promise<GpuDrivenInd
161
152
  iboBytes: 12,
162
153
  indexCount: 6,
163
154
  indexFormat: 'uint16',
155
+ layout: '12F',
156
+ uvSetCount: 1,
164
157
  layoutProjection: deriveVertexLayoutProjection({
165
158
  position: new Float32Array(9),
166
159
  normal: new Float32Array(9),
@@ -202,13 +195,13 @@ export async function runGpuDrivenIndirectRasterEvidence(): Promise<GpuDrivenInd
202
195
  gpuDrivenDraws: [{ ...nonIndexedDraw, kind: 'non-indexed' as const }],
203
196
  },
204
197
  ];
205
- const projection = new RenderSceneProjection();
198
+ const projection = new RenderScene();
206
199
  const delta = projection.apply(
207
200
  renderables.map((renderable) => ({ kind: 'create' as const, snapshot: renderable })),
208
201
  );
209
202
  const availability = GpuScene.create(device, 2).unwrap();
210
203
  if (availability.status !== 'available') throw new Error('GPU Scene unavailable');
211
- availability.scene.sync(projection, delta).unwrap();
204
+ availability.scene.sync(delta).unwrap();
212
205
  const topology = new BatchTopology();
213
206
  topology.rebuild(projection.slotsSnapshot());
214
207
  const production = new GpuDrivenProduction(device, {
@@ -329,7 +322,7 @@ export async function runGpuDrivenIndirectRasterEvidence(): Promise<GpuDrivenInd
329
322
  .unwrap();
330
323
  const compiled = graph.compile({ device, surfaceSize: { width: 1, height: 1 } }).unwrap();
331
324
  const encoder = device.createCommandEncoder({ label: 'gpu-driven-production-frame' }).unwrap();
332
- compiled.execute({ viewBindGroup, encoder } as RenderPipelineFrame).unwrap();
325
+ compiled.execute({ viewBindGroup, encoder } as unknown as RenderPipelineFrame).unwrap();
333
326
  device.queue.submit([encoder.finish().unwrap()]).unwrap();
334
327
  await device.queue.onSubmittedWorkDone();
335
328
  const mapped = (await readbackBuffer.mapAsync(GPU_BUFFER_USAGE_MAP_READ)).unwrap();
@@ -1,13 +1,14 @@
1
+ import { HANDLE_CUBE } from '@forgeax/engine-assets-runtime';
1
2
  import { World } from '@forgeax/engine-ecs';
2
- import { createPrimitiveMesh, deriveVertexLayoutProjection } from '@forgeax/engine-geometry';
3
- import { createProfiler } from '@forgeax/engine-profiler';
3
+ import { deriveVertexLayoutProjection } from '@forgeax/engine-geometry';
4
4
  import { RenderGraphBuilder } from '@forgeax/engine-render-graph';
5
5
  import { type RhiNullDevice, rhi } from '@forgeax/engine-rhi-null';
6
6
  import { Transform } from '@forgeax/engine-scene';
7
7
  import { ok } from '@forgeax/engine-types';
8
8
  import { describe, expect, it } from 'vitest';
9
+ import { createRenderer as constructRenderer } from '../assembly/factory';
9
10
  import { Camera, MeshFilter, MeshRenderer } from '../components';
10
- import { constructRenderer } from '../construct-renderer';
11
+ import type { MeshGpuHandles } from '../device/gpu-residency';
11
12
  import { BatchTopology } from '../gpu-driven/batch-topology';
12
13
  import { GpuDrivenProduction } from '../gpu-driven/production-raster';
13
14
  import { GpuBuffer } from '../gpu-resource';
@@ -18,20 +19,10 @@ import {
18
19
  GPU_BUFFER_USAGE_UNIFORM,
19
20
  GPU_BUFFER_USAGE_VERTEX,
20
21
  } from '../gpu-usage';
21
- import { Materials } from '../materials';
22
- import { makeZeroCameraFallbackSnapshot } from '../record';
23
- import {
24
- buildRenderCandidateDomain,
25
- type RenderCandidateDomain,
26
- } from '../render-dispatch-membership';
22
+ import { makeZeroCameraFallbackSnapshot } from '../record/frame-snapshot';
27
23
  import type { RenderPipelineFrame } from '../render-pipeline';
28
- import { RenderSceneProjection } from '../render-scene-projection';
29
- import type { MeshGpuHandles } from '../render-system';
30
- import type {
31
- ExtractedFrame,
32
- MaterialSnapshot,
33
- RenderableSnapshot,
34
- } from '../render-system-extract';
24
+ import type { MaterialSnapshot, RenderableSnapshot } from '../render-system-extract';
25
+ import { RenderScene } from '../scene/render-scene';
35
26
 
36
27
  const EMPTY_RESOURCE_CLASS = JSON.stringify({ textures: [], samplers: [], video: [] });
37
28
 
@@ -58,9 +49,6 @@ function snapshot(entityKey: number, assetHandle: number): RenderableSnapshot {
58
49
  entityKey,
59
50
  gpuDrivenDraws: [
60
51
  {
61
- submeshIndex: 0,
62
- passIndex: 0,
63
- queue: 2000,
64
52
  kind: 'indexed',
65
53
  first: 0,
66
54
  count: 3,
@@ -96,12 +84,14 @@ function mesh(device: RhiNullDevice, indexed = true): MeshGpuHandles {
96
84
  iboBytes: indexed ? 8 : 0,
97
85
  indexCount: indexed ? 3 : 0,
98
86
  indexFormat: 'uint16',
87
+ layout: '12F',
99
88
  layoutProjection: deriveVertexLayoutProjection({
100
89
  position: new Float32Array(9),
101
90
  normal: new Float32Array(9),
102
91
  uv: new Float32Array(6),
103
92
  tangent: new Float32Array(12),
104
93
  }),
94
+ uvSetCount: 1,
105
95
  vertexCount: 3,
106
96
  indexed,
107
97
  topology: 'triangle-list',
@@ -117,104 +107,7 @@ function mesh(device: RhiNullDevice, indexed = true): MeshGpuHandles {
117
107
  };
118
108
  }
119
109
 
120
- function candidateDomainFrame(domain: RenderCandidateDomain): ExtractedFrame {
121
- return {
122
- cameras: [],
123
- lights: {
124
- directional: undefined,
125
- directionalCount: 0,
126
- point: [],
127
- spot: [],
128
- lightViewProj: undefined,
129
- splitPlanes: undefined,
130
- cascadeCount: undefined,
131
- cascadeBlend: undefined,
132
- shadowMapSize: undefined,
133
- depthBias: undefined,
134
- normalBias: undefined,
135
- pcfKernelSize: undefined,
136
- pointShadow: [],
137
- directionalCsmConfig: undefined,
138
- directionalCsmDirection: undefined,
139
- },
140
- renderables: [...domain.renderables],
141
- dispatch: [...domain.dispatch],
142
- candidateRenderables: domain.renderables,
143
- candidateDispatch: domain.dispatch,
144
- candidateDispatchMembership: domain.membership,
145
- candidateDomain: domain,
146
- environment: { kind: 'none', worldId: 0, skylightCount: 0, skyboxCount: 0 },
147
- frustumStats: { culled: 0, total: 0 },
148
- visibilityStats: { explicitlyHidden: 0 },
149
- postProcessParams: new Map(),
150
- visibilitySnapshots: [],
151
- featureVisibilitySnapshots: [],
152
- hiddenEntityReports: [],
153
- };
154
- }
155
-
156
110
  describe('GPU-driven production projection', () => {
157
- it('joins compact candidate ownership by identity after projection removal', async () => {
158
- const adapter = (await rhi.requestAdapter()).unwrap();
159
- const device = (await adapter.requestDevice()).unwrap() as RhiNullDevice;
160
- const shader = (await rhi.createShaderModule(device, { code: 'synthetic' })).unwrap();
161
- const first = { ...snapshot(1, 3), candidateIndex: 0 };
162
- const second = { ...snapshot(2, 3), candidateIndex: 1 };
163
- const third = { ...snapshot(3, 3), candidateIndex: 2 };
164
- const projection = new RenderSceneProjection();
165
- const initialDelta = projection.apply([
166
- { kind: 'create', snapshot: first },
167
- { kind: 'create', snapshot: second },
168
- { kind: 'create', snapshot: third },
169
- ]);
170
- const availability = GpuScene.create(device, 3).unwrap();
171
- expect(availability.status).toBe('available');
172
- if (availability.status !== 'available') return;
173
- availability.scene.sync(projection, initialDelta).unwrap();
174
- const topology = new BatchTopology();
175
- topology.rebuild(projection.slotsSnapshot());
176
-
177
- const firstRecord = projection.record(0, first.entityKey);
178
- expect(firstRecord).toBeDefined();
179
- const removalDelta = projection.apply([
180
- {
181
- kind: 'remove',
182
- worldId: 0,
183
- entityKey: first.entityKey,
184
- ...(firstRecord === undefined ? {} : { expectedGeneration: firstRecord.generation }),
185
- },
186
- ]);
187
- topology.apply(removalDelta);
188
- availability.scene.sync(projection, removalDelta).unwrap();
189
-
190
- const staleProjectionSnapshots = projection.materialize();
191
- expect(staleProjectionSnapshots.map((candidate) => candidate.candidateIndex)).toEqual([1, 2]);
192
- const compactCandidates = staleProjectionSnapshots.map((candidate, candidateIndex) => ({
193
- ...candidate,
194
- candidateIndex,
195
- }));
196
- const domain = buildRenderCandidateDomain(compactCandidates, []);
197
- const production = new GpuDrivenProduction(device, {
198
- createShaderModule: () => ok(shader),
199
- });
200
- const visibility = production.prepareCpuVisibility({
201
- scene: {
202
- scene: availability.scene,
203
- plan: topology.plan(),
204
- slots: projection.slotsSnapshot(),
205
- projection,
206
- },
207
- frame: candidateDomainFrame(domain),
208
- camera: undefined,
209
- });
210
- const main = visibility?.views.find((view) => view.viewId === 'main');
211
- expect(main?.stableIds).toEqual([1, 2]);
212
- expect(main?.compactVisible.map((item) => item.candidateIndex)).toEqual([0, 1]);
213
-
214
- production.dispose();
215
- availability.scene.dispose();
216
- });
217
-
218
111
  it('projects aligned multi-batch compute work into one indirect raster pass', async () => {
219
112
  const adapter = (await rhi.requestAdapter()).unwrap();
220
113
  const device = (await adapter.requestDevice()).unwrap() as RhiNullDevice;
@@ -247,14 +140,7 @@ describe('GPU-driven production projection', () => {
247
140
  renderState: { cullMode: 'none' as const, depthCompare: 'less-equal' as const },
248
141
  };
249
142
  const renderables = [
250
- {
251
- ...first,
252
- gpuDrivenDraws: [
253
- firstDraw,
254
- { ...firstDraw, first: 3 },
255
- { ...firstDraw, submeshIndex: 1, queue: 4000, first: 6 },
256
- ],
257
- },
143
+ { ...first, gpuDrivenDraws: [firstDraw, { ...firstDraw, first: 3 }] },
258
144
  {
259
145
  ...second,
260
146
  material: preparedMaterial,
@@ -269,25 +155,20 @@ describe('GPU-driven production projection', () => {
269
155
  ],
270
156
  },
271
157
  ];
272
- const projection = new RenderSceneProjection();
158
+ const projection = new RenderScene();
273
159
  const delta = projection.apply(
274
160
  renderables.map((renderable) => ({ kind: 'create' as const, snapshot: renderable })),
275
161
  );
276
162
  const availability = GpuScene.create(device, 2).unwrap();
277
163
  expect(availability.status).toBe('available');
278
164
  if (availability.status !== 'available') return;
279
- availability.scene.sync(projection, delta).unwrap();
165
+ availability.scene.sync(delta).unwrap();
280
166
  const topology = new BatchTopology();
281
167
  topology.rebuild(projection.slotsSnapshot());
282
168
  expect(topology.plan()).toMatchObject({
283
- candidateCount: 4,
284
- visibleCapacity: 193,
285
- batches: [
286
- { visibleBase: 0 },
287
- { visibleBase: 64 },
288
- { visibleBase: 128 },
289
- { visibleBase: 192 },
290
- ],
169
+ candidateCount: 3,
170
+ visibleCapacity: 129,
171
+ batches: [{ visibleBase: 0 }, { visibleBase: 64 }, { visibleBase: 128 }],
291
172
  });
292
173
  const production = new GpuDrivenProduction(device, {
293
174
  createShaderModule: () => ok(shader),
@@ -312,7 +193,7 @@ describe('GPU-driven production projection', () => {
312
193
  .unwrap();
313
194
  expect(prepared).toBeDefined();
314
195
  if (prepared === undefined) return;
315
- expect([...prepared.ownedItemKeys]).toEqual(['0:1:0:0', '0:2:0:0']);
196
+ expect([...prepared.entityKeys]).toEqual([1, 2]);
316
197
  expect(production.inspect()).toMatchObject({
317
198
  gpuOwnedSnapshotsMaterialized: 2,
318
199
  filteredPlanBuilds: 1,
@@ -375,7 +256,7 @@ describe('GPU-driven production projection', () => {
375
256
  dependencies: ['gpu-driven.frustum-compact', 'gpu-driven.finalize-indirect'],
376
257
  });
377
258
  const encoder = device.createCommandEncoder({ label: 'gpu-driven-production' }).unwrap();
378
- compiled.execute({ viewBindGroup, encoder } as RenderPipelineFrame).unwrap();
259
+ compiled.execute({ viewBindGroup, encoder } as unknown as RenderPipelineFrame).unwrap();
379
260
  encoder.finish().unwrap();
380
261
  expect(device.framePassNames).toEqual([
381
262
  'gpu-driven.view-reset',
@@ -389,7 +270,7 @@ describe('GPU-driven production projection', () => {
389
270
  const replacement = GpuScene.create(device, 2).unwrap();
390
271
  expect(replacement.status).toBe('available');
391
272
  if (replacement.status !== 'available') return;
392
- replacement.scene.sync(projection, delta).unwrap();
273
+ replacement.scene.sync(delta).unwrap();
393
274
  const replacementPrepared = production
394
275
  .prepare({
395
276
  scene: {
@@ -411,7 +292,7 @@ describe('GPU-driven production projection', () => {
411
292
  availability.scene.dispose();
412
293
  });
413
294
 
414
- it('keeps an overlay material on the CPU while Geometry stays GPU-driven', async () => {
295
+ it('activates inside the renderer-owned URP graph and removes the CPU forward draw', async () => {
415
296
  const manifest = `data:application/json,${encodeURIComponent(
416
297
  JSON.stringify({
417
298
  schemaVersion: '1.0.0',
@@ -429,16 +310,10 @@ describe('GPU-driven production projection', () => {
429
310
  addEventListener: () => undefined,
430
311
  removeEventListener: () => undefined,
431
312
  } as unknown as HTMLCanvasElement;
432
- const profiler = createProfiler();
433
- const renderer = await constructRenderer(
434
- canvas,
435
- { profiler, rhi },
436
- { shaderManifestUrl: manifest },
437
- );
438
- expect((await renderer.ready).ok).toBe(true);
313
+ const renderer = await constructRenderer(canvas, { rhi }, { shaderManifestUrl: manifest });
314
+ expect((await renderer.initialization).ok).toBe(true);
439
315
  const world = new World();
440
- const cubeHandle = world.internSharedRef('MeshAsset', createPrimitiveMesh('cube').unwrap());
441
- expect(renderer.attachWorld(world).ok).toBe(true);
316
+ expect(renderer.attach(world).ok).toBe(true);
442
317
  world
443
318
  .spawn(
444
319
  { component: Transform, data: { pos: [0, 0, 5] } },
@@ -448,25 +323,10 @@ describe('GPU-driven production projection', () => {
448
323
  world
449
324
  .spawn(
450
325
  { component: Transform, data: {} },
451
- { component: MeshFilter, data: { assetHandle: cubeHandle } },
326
+ { component: MeshFilter, data: { assetHandle: HANDLE_CUBE } },
452
327
  { component: MeshRenderer, data: {} },
453
328
  )
454
329
  .unwrap();
455
- const overlayMaterial = world.allocSharedRef(
456
- 'MaterialAsset',
457
- Materials.unlit([1, 0, 0, 1], {
458
- castShadow: false,
459
- queue: 4000,
460
- renderState: { depthCompare: 'always', depthWriteEnabled: false },
461
- }),
462
- );
463
- world
464
- .spawn(
465
- { component: Transform, data: {} },
466
- { component: MeshFilter, data: { assetHandle: cubeHandle } },
467
- { component: MeshRenderer, data: { materials: [overlayMaterial] } },
468
- )
469
- .unwrap();
470
330
 
471
331
  for (let frame = 0; frame < 4; frame += 1) {
472
332
  world.update(1 / 60).unwrap();
@@ -475,19 +335,8 @@ describe('GPU-driven production projection', () => {
475
335
  }
476
336
  const device = renderer.device as RhiNullDevice;
477
337
  device.totalDrawCount = 0;
478
- const captureResult = profiler.startCapture({
479
- frameLimit: 1,
480
- eventLimit: 128,
481
- detail: 'passes',
482
- });
483
- expect(captureResult.ok).toBe(true);
484
- if (!captureResult.ok) throw new Error(captureResult.error.code);
485
338
  world.update(1 / 60).unwrap();
486
339
  expect(renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 }).ok).toBe(true);
487
- const artifactResult = captureResult.value.finish();
488
- expect(artifactResult.ok).toBe(true);
489
- if (!artifactResult.ok) throw new Error(artifactResult.error.code);
490
- const artifact = artifactResult.value;
491
340
  expect(renderer.perFramePassNames).toEqual(
492
341
  expect.arrayContaining([
493
342
  'gpu-driven.view-reset',
@@ -497,19 +346,10 @@ describe('GPU-driven production projection', () => {
497
346
  ]),
498
347
  );
499
348
  expect(device.totalDrawCount).toBe(2);
500
- expect(artifact.records).not.toEqual(
501
- expect.arrayContaining([
502
- expect.objectContaining({
503
- kind: 'phase',
504
- source: 'render',
505
- phase: 'record/graph-execute/forward/geometry-loop',
506
- }),
507
- ]),
508
- );
509
349
  expect(renderer.renderScene).toMatchObject({
510
350
  worldEntitiesScanned: 0,
511
- projectionRecords: 2,
512
- topology: { batchCount: 2, candidateCount: 2 },
351
+ projectionRecords: 1,
352
+ topology: { batchCount: 1, candidateCount: 1 },
513
353
  gpu: { status: 'resident' },
514
354
  gpuDriven: {
515
355
  gpuOwnedSnapshotsMaterialized: 0,
@@ -519,7 +359,7 @@ describe('GPU-driven production projection', () => {
519
359
  batchBindGroupCreates: 0,
520
360
  viewBindGroupCreates: 0,
521
361
  validatedGpuOwnedRows: 0,
522
- cpuFallbackDrawItems: 1,
362
+ cpuFallbackDrawItems: 0,
523
363
  },
524
364
  });
525
365
  renderer.dispose();
@@ -544,15 +384,11 @@ describe('GPU-driven production projection', () => {
544
384
  removeEventListener: () => undefined,
545
385
  } as unknown as HTMLCanvasElement;
546
386
  const renderer = await constructRenderer(canvas, { rhi }, { shaderManifestUrl: manifest });
547
- expect((await renderer.ready).ok).toBe(true);
387
+ expect((await renderer.initialization).ok).toBe(true);
548
388
  const cameraWorld = new World();
549
389
  const sceneWorld = new World();
550
- const cubeHandle = sceneWorld.internSharedRef(
551
- 'MeshAsset',
552
- createPrimitiveMesh('cube').unwrap(),
553
- );
554
- expect(renderer.attachWorld(cameraWorld).ok).toBe(true);
555
- expect(renderer.attachWorld(sceneWorld).ok).toBe(true);
390
+ expect(renderer.attach(cameraWorld).ok).toBe(true);
391
+ expect(renderer.attach(sceneWorld).ok).toBe(true);
556
392
  cameraWorld
557
393
  .spawn(
558
394
  { component: Transform, data: { pos: [0, 0, 5] } },
@@ -562,7 +398,7 @@ describe('GPU-driven production projection', () => {
562
398
  const rendered = sceneWorld
563
399
  .spawn(
564
400
  { component: Transform, data: {} },
565
- { component: MeshFilter, data: { assetHandle: cubeHandle } },
401
+ { component: MeshFilter, data: { assetHandle: HANDLE_CUBE } },
566
402
  { component: MeshRenderer, data: {} },
567
403
  )
568
404
  .unwrap();
@@ -582,25 +418,16 @@ describe('GPU-driven production projection', () => {
582
418
  gpu: { status: 'resident' },
583
419
  gpuDriven: { cpuFallbackDrawItems: 0, validatedGpuOwnedRows: 0 },
584
420
  });
585
- const sceneWorldId = renderer.meshMaterialBindings[0]?.worldId;
586
- expect(sceneWorldId).toBeDefined();
587
-
588
- cameraWorld.update(1 / 60).unwrap();
589
- sceneWorld.update(1 / 60).unwrap();
590
- expect(renderer.draw([sceneWorld, cameraWorld], { cameraOwner: 1, resourceOwner: 1 }).ok).toBe(
591
- true,
592
- );
593
- expect(renderer.meshMaterialBindings[0]?.worldId).toBe(sceneWorldId);
594
421
 
595
422
  sceneWorld.set(rendered, Transform, { pos: [1, 0, 0] }).unwrap();
596
423
  cameraWorld.update(1 / 60).unwrap();
597
424
  sceneWorld.update(1 / 60).unwrap();
598
- expect(renderer.draw([sceneWorld, cameraWorld], { cameraOwner: 1, resourceOwner: 1 }).ok).toBe(
425
+ expect(renderer.draw([cameraWorld, sceneWorld], { cameraOwner: 0, resourceOwner: 0 }).ok).toBe(
599
426
  true,
600
427
  );
601
428
  expect(renderer.renderScene).toMatchObject({
602
429
  worldEntitiesScanned: 0,
603
- fullRebuilds: 2,
430
+ fullRebuilds: 1,
604
431
  transformUpdates: 1,
605
432
  projectionRecords: 1,
606
433
  });
@@ -1,8 +1,8 @@
1
1
  import { mat4 } from '@forgeax/engine-math';
2
2
  import { beforeAll, describe, expect, it } from 'vitest';
3
3
  import { BatchTopology } from '../gpu-driven/batch-topology';
4
- import { RenderSceneProjection } from '../render-scene-projection';
5
4
  import type { MaterialSnapshot, RenderableSnapshot } from '../render-system-extract';
5
+ import { RenderScene } from '../scene/render-scene';
6
6
 
7
7
  const ENTITY_COUNT = 100_000;
8
8
  const material = {
@@ -24,9 +24,6 @@ function snapshot(entityKey: number): RenderableSnapshot {
24
24
  entityKey,
25
25
  gpuDrivenDraws: [
26
26
  {
27
- submeshIndex: 0,
28
- passIndex: 0,
29
- queue: 2000,
30
27
  kind: 'indexed',
31
28
  first: 0,
32
29
  count: 36,
@@ -41,17 +38,17 @@ function snapshot(entityKey: number): RenderableSnapshot {
41
38
  }
42
39
 
43
40
  describe('GPU-driven scaling contract', () => {
44
- let projection: RenderSceneProjection;
41
+ let projection: RenderScene;
45
42
  let topology: BatchTopology;
46
43
  let materialized: readonly RenderableSnapshot[];
47
44
  let stablePlan: ReturnType<BatchTopology['plan']>;
48
45
  let stableMaterializationReused = false;
49
46
  let stablePlanReused = false;
50
- let delta: ReturnType<RenderSceneProjection['apply']>;
47
+ let delta: ReturnType<RenderScene['apply']>;
51
48
  let topologyChanged = true;
52
49
 
53
50
  beforeAll(() => {
54
- projection = new RenderSceneProjection();
51
+ projection = new RenderScene();
55
52
  projection.reset(Array.from({ length: ENTITY_COUNT }, (_, index) => snapshot(index)));
56
53
  materialized = projection.materialize();
57
54
  topology = new BatchTopology();
@@ -1,14 +1,14 @@
1
1
  import { frustum, mat4 } from '@forgeax/engine-math';
2
- import { RenderGraphBuilder } from '@forgeax/engine-render-graph';
2
+ import { type CompiledRenderGraph, RenderGraphBuilder } from '@forgeax/engine-render-graph';
3
3
  import type { RhiCommandEncoder } from '@forgeax/engine-rhi';
4
- import { rhi } from '@forgeax/engine-rhi-webgpu';
4
+ import { _internal_getRawDevice, rhi } from '@forgeax/engine-rhi-webgpu';
5
5
  import { ok } from '@forgeax/engine-types';
6
6
  import { BatchTopology } from '../gpu-driven/batch-topology';
7
7
  import { GPU_DRIVEN_VIEW_WGSL, GpuDrivenView } from '../gpu-driven/view-gpu';
8
8
  import { GpuScene } from '../gpu-scene';
9
9
  import { GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_MAP_READ } from '../gpu-usage';
10
- import { RenderSceneProjection } from '../render-scene-projection';
11
10
  import type { MaterialSnapshot, RenderableSnapshot } from '../render-system-extract';
11
+ import { RenderScene } from '../scene/render-scene';
12
12
 
13
13
  const GPU_MAP_MODE_READ = 0x0001;
14
14
 
@@ -31,9 +31,6 @@ function snapshot(entityKey: number, x: number): RenderableSnapshot {
31
31
  entityKey,
32
32
  gpuDrivenDraws: [
33
33
  {
34
- submeshIndex: 0,
35
- passIndex: 0,
36
- queue: 2000,
37
34
  kind: 'indexed',
38
35
  first: 3,
39
36
  count: 36,
@@ -58,6 +55,88 @@ export interface GpuDrivenViewGpuEvidence {
58
55
  readonly persistentTranslationX: number;
59
56
  }
60
57
 
58
+ export interface GpuDrivenViewLifecycleEvidence {
59
+ readonly frames: number;
60
+ readonly bufferRebuilds: number;
61
+ readonly candidateCapacity: number;
62
+ }
63
+
64
+ export async function runGpuDrivenViewLifecycleEvidence(): Promise<GpuDrivenViewLifecycleEvidence> {
65
+ const adapter = (await rhi.requestAdapter()).unwrap();
66
+ const device = (await adapter.requestDevice()).unwrap();
67
+ const rawDevice = _internal_getRawDevice(device);
68
+ if (rawDevice === undefined) throw new Error('GPU-driven lifecycle raw device unavailable');
69
+ rawDevice.pushErrorScope('validation');
70
+ const shader = (
71
+ await rhi.createShaderModule(device, {
72
+ code: GPU_DRIVEN_VIEW_WGSL,
73
+ label: 'gpu-driven-view-lifecycle',
74
+ })
75
+ ).unwrap();
76
+ const projection = new RenderScene();
77
+ const sceneAvailability = GpuScene.create(device, 8).unwrap();
78
+ if (sceneAvailability.status !== 'available') throw new Error('GPU Scene unavailable');
79
+ const topology = new BatchTopology();
80
+ const view = GpuDrivenView.create({
81
+ device,
82
+ shaderModuleFactory: { createShaderModule: () => ok(shader) },
83
+ }).unwrap();
84
+ const planes = frustum.fromViewProjection(frustum.create(), mat4.identity(mat4.create()));
85
+ const retirements: Array<Promise<unknown>> = [];
86
+ let activeCount = 0;
87
+ let previous: CompiledRenderGraph<{ readonly encoder: RhiCommandEncoder }> | undefined;
88
+ const frames = 300;
89
+
90
+ for (let frame = 0; frame < frames; frame += 1) {
91
+ const targetCount = frame < 4 ? 2 ** frame : frame % 2 === 0 ? 1 : 8;
92
+ const operations: Array<
93
+ | { readonly kind: 'create'; readonly snapshot: RenderableSnapshot }
94
+ | { readonly kind: 'remove'; readonly worldId: number; readonly entityKey: number }
95
+ > = [];
96
+ while (activeCount < targetCount) {
97
+ activeCount += 1;
98
+ operations.push({ kind: 'create', snapshot: snapshot(activeCount, activeCount * 0.05) });
99
+ }
100
+ while (activeCount > targetCount) {
101
+ operations.push({ kind: 'remove', worldId: 0, entityKey: activeCount });
102
+ activeCount -= 1;
103
+ }
104
+ const delta = projection.apply(operations);
105
+ sceneAvailability.scene.sync(delta).unwrap();
106
+ topology.apply(delta);
107
+ view.update(topology.plan(), sceneAvailability.scene, planes).unwrap();
108
+
109
+ const graph = new RenderGraphBuilder<{ readonly encoder: RhiCommandEncoder }>();
110
+ view.addPasses(graph).unwrap();
111
+ const compiled = graph.compile({ device, surfaceSize: { width: 1, height: 1 } }).unwrap();
112
+ if (previous !== undefined) retirements.push(previous.retire());
113
+ view._commitResourceReplacement();
114
+ const encoder = device
115
+ .createCommandEncoder({ label: `gpu-driven-lifecycle-${frame}` })
116
+ .unwrap();
117
+ compiled.execute({ encoder }).unwrap();
118
+ device.queue.submit([encoder.finish().unwrap()]).unwrap();
119
+ previous = compiled;
120
+ }
121
+
122
+ await device.queue.onSubmittedWorkDone();
123
+ if (previous !== undefined) retirements.push(previous.retire());
124
+ await Promise.all(retirements);
125
+ const validationError = await rawDevice.popErrorScope();
126
+ if (validationError !== null) {
127
+ throw new Error(`GPU-driven lifecycle validation failed: ${validationError.message}`);
128
+ }
129
+ const inspection = view.inspect();
130
+ view.dispose();
131
+ sceneAvailability.scene.dispose();
132
+ await device.queue.onSubmittedWorkDone();
133
+ return {
134
+ frames,
135
+ bufferRebuilds: inspection.bufferRebuilds,
136
+ candidateCapacity: inspection.candidateCapacity,
137
+ };
138
+ }
139
+
61
140
  export async function runGpuDrivenViewGpuEvidence(): Promise<GpuDrivenViewGpuEvidence> {
62
141
  const adapter = (await rhi.requestAdapter()).unwrap();
63
142
  const device = (await adapter.requestDevice()).unwrap();
@@ -67,7 +146,7 @@ export async function runGpuDrivenViewGpuEvidence(): Promise<GpuDrivenViewGpuEvi
67
146
  label: 'gpu-driven-view-evidence',
68
147
  })
69
148
  ).unwrap();
70
- const projection = new RenderSceneProjection();
149
+ const projection = new RenderScene();
71
150
  const visibleInstance = mat4.identity(mat4.create());
72
151
  const culledInstance = mat4.identity(mat4.create());
73
152
  culledInstance[12] = 10;
@@ -89,7 +168,7 @@ export async function runGpuDrivenViewGpuEvidence(): Promise<GpuDrivenViewGpuEvi
89
168
  ]);
90
169
  const sceneAvailability = GpuScene.create(device, 2).unwrap();
91
170
  if (sceneAvailability.status !== 'available') throw new Error('GPU Scene unavailable');
92
- sceneAvailability.scene.sync(projection, delta).unwrap();
171
+ sceneAvailability.scene.sync(delta).unwrap();
93
172
  const topology = new BatchTopology();
94
173
  topology.rebuild(projection.slotsSnapshot());
95
174
  const view = GpuDrivenView.create({