@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
@@ -1,1012 +0,0 @@
1
- import type {
2
- Buffer,
3
- CommandBuffer,
4
- ComputePassDescriptor,
5
- QuerySet,
6
- Result,
7
- RhiCommandEncoder,
8
- RhiDevice,
9
- } from '@forgeax/engine-rhi';
10
- import { err, ok } from '@forgeax/engine-types';
11
-
12
- export const MEMBERSHIP_TIMING_REASON_CODES = [
13
- 'invalid-options',
14
- 'timestamp-query-unsupported',
15
- 'timestamp-period-unavailable',
16
- 'timestamp-write-unavailable',
17
- 'capture-capacity-exhausted',
18
- 'capture-already-active',
19
- 'queue-submit-failed',
20
- 'queue-completion-failed',
21
- 'readback-map-failed',
22
- 'capture-timeout',
23
- 'device-lost',
24
- 'stale-device-generation',
25
- 'capture-disposed',
26
- 'timestamp-range-invalid',
27
- 'profile-incomplete',
28
- 'provenance-missing',
29
- 'provenance-mismatch',
30
- 'reference-missing',
31
- 'reference-reused',
32
- 'reference-cross-parent',
33
- 'membership-output-mismatch',
34
- 'pixel-output-mismatch',
35
- 'terminal-record-incomplete',
36
- ] as const;
37
-
38
- export type MembershipTimingReasonCode = (typeof MEMBERSHIP_TIMING_REASON_CODES)[number];
39
-
40
- export const MEMBERSHIP_TIMING_REASON_MAPPING = {
41
- 'invalid-options': { api: 'refused', topLevel: 'incomplete', reference: 'incomplete' },
42
- 'timestamp-query-unsupported': { api: 'refused', topLevel: 'refused', reference: 'refused' },
43
- 'timestamp-period-unavailable': { api: 'refused', topLevel: 'refused', reference: 'refused' },
44
- 'timestamp-write-unavailable': { api: 'terminal', topLevel: 'refused', reference: 'refused' },
45
- 'capture-capacity-exhausted': { api: 'refused', topLevel: 'incomplete', reference: 'incomplete' },
46
- 'capture-already-active': { api: 'refused', topLevel: 'incomplete', reference: 'incomplete' },
47
- 'queue-submit-failed': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
48
- 'queue-completion-failed': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
49
- 'readback-map-failed': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
50
- 'capture-timeout': { api: 'terminal', topLevel: 'timed-out', reference: 'timed-out' },
51
- 'device-lost': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
52
- 'stale-device-generation': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
53
- 'capture-disposed': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
54
- 'timestamp-range-invalid': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
55
- 'profile-incomplete': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
56
- 'provenance-missing': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
57
- 'provenance-mismatch': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
58
- 'reference-missing': { api: 'terminal', topLevel: 'incomplete', reference: 'none' },
59
- 'reference-reused': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
60
- 'reference-cross-parent': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
61
- 'membership-output-mismatch': {
62
- api: 'terminal',
63
- topLevel: 'incomplete',
64
- reference: 'incomplete',
65
- },
66
- 'pixel-output-mismatch': { api: 'terminal', topLevel: 'incomplete', reference: 'incomplete' },
67
- 'terminal-record-incomplete': {
68
- api: 'terminal',
69
- topLevel: 'incomplete',
70
- reference: 'incomplete',
71
- },
72
- } as const satisfies Record<
73
- MembershipTimingReasonCode,
74
- {
75
- readonly api: 'refused' | 'terminal';
76
- readonly topLevel: 'refused' | 'timed-out' | 'incomplete';
77
- readonly reference: 'refused' | 'timed-out' | 'incomplete' | 'none';
78
- }
79
- >;
80
-
81
- export const MEMBERSHIP_TIMING_REASON_SCHEMA = {
82
- $schema: 'https://json-schema.org/draft/2020-12/schema',
83
- $id: 'https://forgeax.dev/schemas/render/membership-timing-reason-code.schema.json',
84
- title: 'ForgeaX Render membership timing reason code',
85
- type: 'string',
86
- enum: MEMBERSHIP_TIMING_REASON_CODES,
87
- } as const;
88
-
89
- /** Canonical membership facts projected by the Render HDRP producer. */
90
- export interface MembershipTimingMembershipOutput {
91
- readonly schemaVersion: 1;
92
- readonly lightCount: number;
93
- readonly grid: { readonly x: number; readonly y: number; readonly z: number };
94
- readonly clusterOffsetsAndCounts: readonly number[];
95
- readonly attemptedTotal: number;
96
- readonly writtenTotal: number;
97
- readonly capacity: number;
98
- readonly overflow: boolean;
99
- readonly lightIndexPrefix: readonly number[];
100
- }
101
-
102
- /** Actual device buffers consumed/written by hdrp-cluster-membership. */
103
- export interface MembershipTimingGpuOutputSource {
104
- readonly clusterGridBuffer: Buffer;
105
- readonly clusterGridBytes: number;
106
- readonly lightIndexListBuffer: Buffer;
107
- readonly lightIndexListBytes: number;
108
- readonly lightCount: number;
109
- readonly grid: { readonly x: number; readonly y: number; readonly z: number };
110
- readonly attemptedTotal: number;
111
- readonly writtenTotal: number;
112
- readonly capacity: number;
113
- readonly overflow: boolean;
114
- }
115
-
116
- export type MembershipTimingOptions =
117
- | { readonly mode: 'gpu'; readonly maxPendingCaptures?: number }
118
- | { readonly mode: 'cpu-control' };
119
-
120
- export type MembershipTimingGpuReport = {
121
- readonly rawUnit: 'ticks';
122
- readonly rawBeginTick: string;
123
- readonly rawEndTick: string;
124
- readonly deltaTicks: string;
125
- readonly timestampPeriodNanoseconds: number;
126
- readonly durationNanoseconds: number;
127
- };
128
-
129
- export interface MembershipTimingInterval {
130
- readonly startNanoseconds: number;
131
- readonly endNanoseconds: number;
132
- readonly durationNanoseconds: number;
133
- }
134
-
135
- export interface MembershipTimingReport {
136
- readonly captureId: string;
137
- readonly submissionToken: string | null;
138
- readonly dispatchId: string | null;
139
- readonly actualProducer: 'gpu' | 'cpu';
140
- readonly backendKind: RhiDevice['caps']['backendKind'];
141
- readonly compute: boolean;
142
- readonly timestampQuery: boolean;
143
- readonly timestampPeriodNanoseconds: number | null;
144
- readonly gpu: MembershipTimingGpuReport | null;
145
- readonly membership: MembershipTimingMembershipOutput | null;
146
- readonly cpu: {
147
- readonly encode: MembershipTimingInterval | null;
148
- readonly submit: MembershipTimingInterval | null;
149
- };
150
- readonly async: {
151
- readonly queueCompletion: MembershipTimingInterval | null;
152
- readonly readback: MembershipTimingInterval | null;
153
- };
154
- }
155
-
156
- export class MembershipTimingError extends Error {
157
- readonly code: MembershipTimingReasonCode;
158
- readonly expected: string;
159
- readonly hint: string;
160
- readonly detail: string;
161
-
162
- constructor(
163
- code: MembershipTimingReasonCode,
164
- expected: string,
165
- hint: string,
166
- detail: string = hint,
167
- ) {
168
- super(hint);
169
- this.name = 'MembershipTimingError';
170
- this.code = code;
171
- this.expected = expected;
172
- this.hint = hint;
173
- this.detail = detail;
174
- }
175
- }
176
-
177
- export interface MembershipTimingController {
178
- readonly mode: MembershipTimingOptions['mode'];
179
- readonly maxPendingCaptures: number;
180
- readonly active: boolean;
181
- readonly shouldTimestampPass: boolean;
182
- usesCpuControl(): boolean;
183
- start(): Result<{ readonly captureId: string }, MembershipTimingError>;
184
- finish(): Promise<Result<MembershipTimingReport, MembershipTimingError>>;
185
- beforeMembership(): ComputePassDescriptor | undefined;
186
- afterMembership(encoder: RhiCommandEncoder): void;
187
- markEncodeFinished(): void;
188
- markEncodeFailed(detail?: string): void;
189
- markTimestampPassFailed(detail?: string): void;
190
- markSubmitStarted(): void;
191
- markSubmitted(command: CommandBuffer): void;
192
- markSubmitFailed(detail?: string): void;
193
- markDeviceLost(detail?: string): void;
194
- bindDevice(device: RhiDevice): void;
195
- recordGpuMembershipSource(source: MembershipTimingGpuOutputSource): void;
196
- recordMembershipOutput(output: MembershipTimingMembershipOutput): void;
197
- dispose(): void;
198
- }
199
-
200
- type Capture = {
201
- readonly captureId: string;
202
- readonly device: RhiDevice;
203
- querySet?: QuerySet;
204
- resolveBuffer?: Buffer;
205
- stagingBuffer?: Buffer;
206
- clusterReadbackBuffer?: Buffer;
207
- indexReadbackBuffer?: Buffer;
208
- gpuSource?: MembershipTimingGpuOutputSource;
209
- begun: boolean;
210
- ended: boolean;
211
- submitted: boolean;
212
- finished: boolean;
213
- asyncStarted: boolean;
214
- settled: boolean;
215
- cleaned: boolean;
216
- membership: MembershipTimingMembershipOutput | null;
217
- submissionToken?: string;
218
- dispatchId?: string;
219
- encodeStartedAt?: number;
220
- encodeFinishedAt?: number;
221
- submitStartedAt?: number;
222
- submitFinishedAt?: number;
223
- queueCompletionStartedAt?: number;
224
- queueCompletionFinishedAt?: number;
225
- readbackStartedAt?: number;
226
- readbackFinishedAt?: number;
227
- resolve: (result: Result<MembershipTimingReport, MembershipTimingError>) => void;
228
- completion: Promise<Result<MembershipTimingReport, MembershipTimingError>>;
229
- };
230
-
231
- const QUERY_RESOLVE = 0x200;
232
- const COPY_SRC = 0x04;
233
- const COPY_DST = 0x08;
234
- const MAP_READ = 0x01;
235
- const READBACK_BYTES = 256;
236
- const DEFAULT_MAX_PENDING = 2;
237
- const CAPTURE_TIMEOUT_MS = 2000;
238
-
239
- function monotonicNanoseconds(): number {
240
- const clock = globalThis.performance;
241
- return typeof clock?.now === 'function' ? clock.now() * 1_000_000 : 0;
242
- }
243
-
244
- function duration(start: number | undefined, end: number | undefined): number | null {
245
- if (start === undefined || end === undefined || end < start) return null;
246
- return end - start;
247
- }
248
-
249
- function interval(
250
- start: number | undefined,
251
- end: number | undefined,
252
- ): MembershipTimingInterval | null {
253
- const elapsed = duration(start, end);
254
- if (elapsed === null || start === undefined || end === undefined) return null;
255
- return { startNanoseconds: start, endNanoseconds: end, durationNanoseconds: elapsed };
256
- }
257
-
258
- function invalidOptions(options: MembershipTimingOptions): MembershipTimingError | undefined {
259
- if (options.mode !== 'gpu') return undefined;
260
- const bound = options.maxPendingCaptures ?? DEFAULT_MAX_PENDING;
261
- if (!Number.isInteger(bound) || bound < 1 || bound > 8) {
262
- return new MembershipTimingError(
263
- 'invalid-options',
264
- 'gpu maxPendingCaptures must be an integer in [1, 8]',
265
- `got maxPendingCaptures=${String(options.maxPendingCaptures)}`,
266
- );
267
- }
268
- return undefined;
269
- }
270
-
271
- function refusedForCaps(device: RhiDevice): MembershipTimingError | undefined {
272
- if (!device.caps.timestampQuery) {
273
- return new MembershipTimingError(
274
- 'timestamp-query-unsupported',
275
- 'device.caps.timestampQuery === true',
276
- `backend ${device.caps.backendKind} cannot produce timestamp ticks`,
277
- );
278
- }
279
- const period = device.caps.timestampPeriodNanoseconds;
280
- if (typeof period !== 'number' || !Number.isFinite(period) || period <= 0) {
281
- return new MembershipTimingError(
282
- 'timestamp-period-unavailable',
283
- 'device.caps.timestampPeriodNanoseconds is finite and positive',
284
- 'the backend did not publish a trustworthy timestamp unit',
285
- );
286
- }
287
- return undefined;
288
- }
289
-
290
- function captureError(
291
- code: MembershipTimingReasonCode,
292
- expected: string,
293
- hint: string,
294
- detail: string = hint,
295
- ): MembershipTimingError {
296
- return new MembershipTimingError(code, expected, hint, detail);
297
- }
298
-
299
- function withTimeout<T>(promise: Promise<T>): Promise<T> {
300
- return new Promise<T>((resolve, reject) => {
301
- const timer = setTimeout(
302
- () =>
303
- reject(
304
- captureError(
305
- 'capture-timeout',
306
- 'GPU queue completion and readback finish before the capture deadline',
307
- `capture exceeded ${CAPTURE_TIMEOUT_MS}ms`,
308
- ),
309
- ),
310
- CAPTURE_TIMEOUT_MS,
311
- );
312
- promise.then(
313
- (value) => {
314
- clearTimeout(timer);
315
- resolve(value);
316
- },
317
- (cause: unknown) => {
318
- clearTimeout(timer);
319
- reject(cause);
320
- },
321
- );
322
- });
323
- }
324
-
325
- export function createMembershipTiming(
326
- initialDevice: RhiDevice,
327
- options: MembershipTimingOptions,
328
- ): MembershipTimingController {
329
- const optionError = invalidOptions(options);
330
- const maxPendingCaptures =
331
- options.mode === 'gpu'
332
- ? (options.maxPendingCaptures ?? DEFAULT_MAX_PENDING)
333
- : DEFAULT_MAX_PENDING;
334
- let device = initialDevice;
335
- let disposed = false;
336
- let serial = 0;
337
- let deviceLost = false;
338
- let current: Capture | undefined;
339
- let detached: Capture | undefined;
340
- const pending = new Set<Capture>();
341
-
342
- function release(capture: Capture): void {
343
- if (capture.cleaned) return;
344
- capture.cleaned = true;
345
- const buffers = [
346
- capture.clusterReadbackBuffer,
347
- capture.indexReadbackBuffer,
348
- capture.stagingBuffer,
349
- capture.resolveBuffer,
350
- ];
351
- for (const buffer of buffers) {
352
- if (buffer === undefined) continue;
353
- try {
354
- deviceDestroyBuffer(capture, buffer);
355
- } catch {
356
- // Cleanup continues so one backend release failure cannot leak the other handles.
357
- }
358
- }
359
- if (capture.querySet !== undefined) {
360
- try {
361
- capture.device.destroyQuerySet(capture.querySet);
362
- } catch {
363
- // The capture is already terminal; the backend owns any failed release diagnostic.
364
- }
365
- }
366
- pending.delete(capture);
367
- }
368
-
369
- function deviceDestroyBuffer(capture: Capture, buffer: Buffer): void {
370
- capture.device.destroyBuffer(buffer);
371
- }
372
-
373
- function settleError(capture: Capture, error: MembershipTimingError): void {
374
- if (capture.settled) return;
375
- capture.settled = true;
376
- capture.resolve(err(error));
377
- }
378
-
379
- function settleSuccess(capture: Capture, report: MembershipTimingReport): void {
380
- if (capture.settled) return;
381
- capture.settled = true;
382
- capture.resolve(ok(report));
383
- }
384
-
385
- function terminalizeIdle(capture: Capture, error: MembershipTimingError): void {
386
- settleError(capture, error);
387
- if (!capture.asyncStarted && !capture.submitted) release(capture);
388
- }
389
-
390
- function createReadback(
391
- capture: Capture,
392
- size: number,
393
- label: string,
394
- ): Result<Buffer, MembershipTimingError> {
395
- const result = capture.device.createBuffer({
396
- label,
397
- size,
398
- usage: COPY_DST | MAP_READ,
399
- mappedAtCreation: false,
400
- });
401
- return result.ok
402
- ? ok(result.value)
403
- : err(
404
- captureError(
405
- 'terminal-record-incomplete',
406
- 'membership readback buffer is created',
407
- result.error.hint,
408
- ),
409
- );
410
- }
411
-
412
- async function readU32(buffer: Buffer, expectedBytes: number): Promise<Uint32Array> {
413
- const mapped = await buffer.mapAsync(MAP_READ, 0, expectedBytes);
414
- if (!mapped.ok)
415
- throw captureError(
416
- 'readback-map-failed',
417
- 'membership readback maps successfully',
418
- mapped.error.hint,
419
- );
420
- try {
421
- const range = mapped.value.getMappedRange(0, expectedBytes);
422
- if (!range.ok)
423
- throw captureError(
424
- 'readback-map-failed',
425
- 'membership readback range is readable',
426
- range.error.hint,
427
- );
428
- return new Uint32Array(range.value.slice(0));
429
- } finally {
430
- mapped.value.unmap();
431
- }
432
- }
433
-
434
- async function completeGpu(capture: Capture): Promise<void> {
435
- try {
436
- capture.queueCompletionStartedAt = monotonicNanoseconds();
437
- try {
438
- await capture.device.queue.onSubmittedWorkDone();
439
- } catch (cause) {
440
- throw captureError(
441
- 'queue-completion-failed',
442
- 'the submitted render work completes successfully',
443
- String(cause),
444
- );
445
- }
446
- capture.queueCompletionFinishedAt = monotonicNanoseconds();
447
- if (capture.settled) return;
448
- if (!capture.ended || capture.stagingBuffer === undefined) {
449
- throw captureError(
450
- 'terminal-record-incomplete',
451
- 'the membership pass emitted both timestamp writes',
452
- 'start must surround the real hdrp-cluster-membership pass',
453
- );
454
- }
455
- capture.readbackStartedAt = monotonicNanoseconds();
456
- const mapped = await capture.stagingBuffer.mapAsync(MAP_READ, 0, READBACK_BYTES);
457
- if (!mapped.ok)
458
- throw captureError(
459
- 'readback-map-failed',
460
- 'timestamp readback maps successfully',
461
- mapped.error.hint,
462
- );
463
- let begin: bigint;
464
- let end: bigint;
465
- try {
466
- const bytes = mapped.value.getMappedRange(0, READBACK_BYTES);
467
- if (!bytes.ok)
468
- throw captureError(
469
- 'readback-map-failed',
470
- 'timestamp readback range is readable',
471
- bytes.error.hint,
472
- );
473
- const ticks = new BigUint64Array(bytes.value);
474
- begin = ticks[0] ?? 0n;
475
- end = ticks[1] ?? 0n;
476
- } finally {
477
- mapped.value.unmap();
478
- }
479
- if (end <= begin)
480
- throw captureError(
481
- 'timestamp-range-invalid',
482
- 'timestamp end tick is greater than begin tick',
483
- 'discard the zero or reversed GPU interval',
484
- );
485
- const period = capture.device.caps.timestampPeriodNanoseconds;
486
- if (typeof period !== 'number' || !Number.isFinite(period) || period <= 0)
487
- throw captureError(
488
- 'timestamp-period-unavailable',
489
- 'timestamp period remains valid at readback',
490
- 'discard the sample',
491
- );
492
- const deltaTicks = end - begin;
493
- const durationNanoseconds = Number(deltaTicks) * period;
494
- if (!Number.isFinite(durationNanoseconds) || durationNanoseconds <= 0)
495
- throw captureError(
496
- 'timestamp-range-invalid',
497
- 'derived GPU duration is finite and positive',
498
- 'discard the GPU interval whose tick delta cannot be represented as a duration',
499
- );
500
- const source = capture.gpuSource;
501
- if (
502
- source === undefined ||
503
- capture.clusterReadbackBuffer === undefined ||
504
- capture.indexReadbackBuffer === undefined
505
- ) {
506
- throw captureError(
507
- 'membership-output-mismatch',
508
- 'the real hdrp-cluster-membership output buffers are attached to the capture',
509
- 'the GPU timing sample has no canonical membership output',
510
- );
511
- }
512
- const clusterValues = await readU32(capture.clusterReadbackBuffer, source.clusterGridBytes);
513
- const indexValues = await readU32(capture.indexReadbackBuffer, source.lightIndexListBytes);
514
- capture.readbackFinishedAt = monotonicNanoseconds();
515
- const report: MembershipTimingReport = {
516
- captureId: capture.captureId,
517
- submissionToken: capture.submissionToken ?? null,
518
- dispatchId: capture.dispatchId ?? null,
519
- actualProducer: 'gpu',
520
- backendKind: capture.device.caps.backendKind,
521
- compute: capture.device.caps.compute,
522
- timestampQuery: capture.device.caps.timestampQuery,
523
- timestampPeriodNanoseconds: period,
524
- gpu: {
525
- rawUnit: 'ticks',
526
- rawBeginTick: begin.toString(10),
527
- rawEndTick: end.toString(10),
528
- deltaTicks: deltaTicks.toString(10),
529
- timestampPeriodNanoseconds: period,
530
- durationNanoseconds,
531
- },
532
- membership: {
533
- schemaVersion: 1,
534
- lightCount: source.lightCount,
535
- grid: source.grid,
536
- clusterOffsetsAndCounts: Array.from(clusterValues),
537
- attemptedTotal: source.attemptedTotal,
538
- writtenTotal: source.writtenTotal,
539
- capacity: source.capacity,
540
- overflow: source.overflow,
541
- lightIndexPrefix: Array.from(indexValues.subarray(0, source.writtenTotal)),
542
- },
543
- cpu: {
544
- encode: interval(capture.encodeStartedAt, capture.encodeFinishedAt),
545
- submit: interval(capture.submitStartedAt, capture.submitFinishedAt),
546
- },
547
- async: {
548
- queueCompletion: interval(
549
- capture.queueCompletionStartedAt,
550
- capture.queueCompletionFinishedAt,
551
- ),
552
- readback: interval(capture.readbackStartedAt, capture.readbackFinishedAt),
553
- },
554
- };
555
- settleSuccess(capture, report);
556
- } catch (cause) {
557
- settleError(
558
- capture,
559
- cause instanceof MembershipTimingError
560
- ? cause
561
- : captureError(
562
- 'readback-map-failed',
563
- 'timestamp and membership readback completes',
564
- String(cause),
565
- ),
566
- );
567
- } finally {
568
- release(capture);
569
- }
570
- }
571
-
572
- const controller: MembershipTimingController = {
573
- mode: options.mode,
574
- maxPendingCaptures,
575
- get active() {
576
- return current !== undefined;
577
- },
578
- get shouldTimestampPass() {
579
- return (
580
- options.mode === 'gpu' &&
581
- current?.begun !== true &&
582
- current?.ended !== true &&
583
- current?.settled !== true
584
- );
585
- },
586
- usesCpuControl() {
587
- return options.mode === 'cpu-control';
588
- },
589
- start() {
590
- if (optionError !== undefined) return err(optionError);
591
- if (disposed)
592
- return err(
593
- captureError('capture-disposed', 'renderer is alive', 'dispose ended membership timing'),
594
- );
595
- if (deviceLost)
596
- return err(
597
- captureError(
598
- 'device-lost',
599
- 'the current renderer device remains available',
600
- 'device.lost terminalized membership timing before recovery',
601
- ),
602
- );
603
- if (options.mode === 'gpu') {
604
- const capabilityError = refusedForCaps(device);
605
- if (capabilityError !== undefined) return err(capabilityError);
606
- }
607
- if (current !== undefined)
608
- return err(
609
- captureError(
610
- 'capture-already-active',
611
- 'only one capture is active',
612
- 'finish the active capture first',
613
- ),
614
- );
615
- if (pending.size >= maxPendingCaptures)
616
- return err(
617
- captureError(
618
- 'capture-capacity-exhausted',
619
- 'pending captures stay within the configured bound',
620
- 'await a prior capture before starting another',
621
- ),
622
- );
623
- const captureId = `membership-${++serial}`;
624
- let resolve!: (result: Result<MembershipTimingReport, MembershipTimingError>) => void;
625
- const completion = new Promise<Result<MembershipTimingReport, MembershipTimingError>>(
626
- (res) => {
627
- resolve = res;
628
- },
629
- );
630
- const capture: Capture = {
631
- captureId,
632
- device,
633
- begun: false,
634
- ended: false,
635
- submitted: false,
636
- finished: false,
637
- asyncStarted: false,
638
- settled: false,
639
- cleaned: false,
640
- membership: null,
641
- encodeStartedAt: monotonicNanoseconds(),
642
- resolve,
643
- completion,
644
- };
645
- if (options.mode === 'gpu') {
646
- const query = device.createQuerySet({
647
- label: 'membership-timing',
648
- type: 'timestamp',
649
- count: 2,
650
- });
651
- if (!query.ok) {
652
- terminalizeIdle(
653
- capture,
654
- captureError(
655
- 'timestamp-query-unsupported',
656
- 'timestamp QuerySet creation succeeds',
657
- query.error.hint,
658
- ),
659
- );
660
- return err(
661
- captureError(
662
- 'timestamp-query-unsupported',
663
- 'timestamp QuerySet creation succeeds',
664
- query.error.hint,
665
- ),
666
- );
667
- }
668
- capture.querySet = query.value;
669
- const resolveBuffer = device.createBuffer({
670
- label: 'membership-timing-resolve',
671
- size: READBACK_BYTES,
672
- usage: QUERY_RESOLVE | COPY_SRC,
673
- });
674
- if (!resolveBuffer.ok) {
675
- terminalizeIdle(
676
- capture,
677
- captureError(
678
- 'terminal-record-incomplete',
679
- 'timestamp resolve buffer is created',
680
- resolveBuffer.error.hint,
681
- ),
682
- );
683
- return err(
684
- captureError(
685
- 'terminal-record-incomplete',
686
- 'timestamp resolve buffer is created',
687
- resolveBuffer.error.hint,
688
- ),
689
- );
690
- }
691
- capture.resolveBuffer = resolveBuffer.value;
692
- const stagingBuffer = device.createBuffer({
693
- label: 'membership-timing-readback',
694
- size: READBACK_BYTES,
695
- usage: COPY_DST | MAP_READ,
696
- });
697
- if (!stagingBuffer.ok) {
698
- terminalizeIdle(
699
- capture,
700
- captureError(
701
- 'terminal-record-incomplete',
702
- 'timestamp readback buffer is created',
703
- stagingBuffer.error.hint,
704
- ),
705
- );
706
- return err(
707
- captureError(
708
- 'terminal-record-incomplete',
709
- 'timestamp readback buffer is created',
710
- stagingBuffer.error.hint,
711
- ),
712
- );
713
- }
714
- capture.stagingBuffer = stagingBuffer.value;
715
- }
716
- current = capture;
717
- pending.add(capture);
718
- return ok({ captureId });
719
- },
720
- async finish() {
721
- const capture = current ?? detached;
722
- detached = undefined;
723
- if (capture === undefined)
724
- return err(
725
- captureError('capture-disposed', 'an active capture exists', 'call start before finish'),
726
- );
727
- if (capture.finished)
728
- return err(
729
- captureError(
730
- 'terminal-record-incomplete',
731
- 'a capture terminalizes once',
732
- 'finish was called twice',
733
- ),
734
- );
735
- capture.finished = true;
736
- if (current === capture) current = undefined;
737
- if (capture.settled) {
738
- const result = await capture.completion;
739
- if (!capture.asyncStarted && !capture.submitted) release(capture);
740
- return result;
741
- }
742
- try {
743
- return await withTimeout(capture.completion);
744
- } catch (cause) {
745
- const timeoutError =
746
- cause instanceof MembershipTimingError && cause.code === 'capture-timeout'
747
- ? cause
748
- : captureError(
749
- 'terminal-record-incomplete',
750
- 'capture completion resolves',
751
- String(cause),
752
- );
753
- settleError(capture, timeoutError);
754
- if (!capture.asyncStarted && !capture.submitted) release(capture);
755
- return err(timeoutError);
756
- }
757
- },
758
- beforeMembership() {
759
- const capture = current;
760
- if (
761
- capture === undefined ||
762
- options.mode !== 'gpu' ||
763
- capture.begun ||
764
- capture.ended ||
765
- capture.settled
766
- )
767
- return undefined;
768
- if (capture.querySet === undefined) return;
769
- capture.dispatchId = `${capture.captureId}:hdrp-cluster-membership`;
770
- capture.begun = true;
771
- return {
772
- timestampWrites: {
773
- querySet: capture.querySet,
774
- beginningOfPassWriteIndex: 0,
775
- endOfPassWriteIndex: 1,
776
- },
777
- };
778
- },
779
- afterMembership(encoder) {
780
- const capture = current;
781
- if (capture === undefined || options.mode !== 'gpu' || !capture.begun || capture.ended)
782
- return;
783
- try {
784
- if (
785
- capture.querySet === undefined ||
786
- capture.resolveBuffer === undefined ||
787
- capture.stagingBuffer === undefined
788
- )
789
- throw captureError(
790
- 'terminal-record-incomplete',
791
- 'timestamp resources remain available',
792
- 'capture resources are incomplete',
793
- );
794
- capture.ended = true;
795
- const resolved = encoder.resolveQuerySet(capture.querySet, 0, 2, capture.resolveBuffer, 0);
796
- if (!resolved.ok)
797
- throw captureError(
798
- 'terminal-record-incomplete',
799
- 'timestamp queries resolve',
800
- resolved.error.hint,
801
- );
802
- encoder.copyBufferToBuffer(
803
- capture.resolveBuffer,
804
- 0,
805
- capture.stagingBuffer,
806
- 0,
807
- READBACK_BYTES,
808
- );
809
- const source = capture.gpuSource;
810
- if (
811
- source === undefined ||
812
- capture.clusterReadbackBuffer === undefined ||
813
- capture.indexReadbackBuffer === undefined
814
- ) {
815
- settleError(
816
- capture,
817
- captureError(
818
- 'membership-output-mismatch',
819
- 'the real membership output source is attached before dispatch',
820
- 'capture cannot be accepted without producer output',
821
- ),
822
- );
823
- } else {
824
- encoder.copyBufferToBuffer(
825
- source.clusterGridBuffer,
826
- 0,
827
- capture.clusterReadbackBuffer,
828
- 0,
829
- source.clusterGridBytes,
830
- );
831
- encoder.copyBufferToBuffer(
832
- source.lightIndexListBuffer,
833
- 0,
834
- capture.indexReadbackBuffer,
835
- 0,
836
- source.lightIndexListBytes,
837
- );
838
- }
839
- } catch (cause) {
840
- settleError(
841
- capture,
842
- cause instanceof MembershipTimingError
843
- ? cause
844
- : captureError(
845
- 'terminal-record-incomplete',
846
- 'timestamp encoder operations finish',
847
- String(cause),
848
- ),
849
- );
850
- }
851
- },
852
- markEncodeFinished() {
853
- const capture = current;
854
- if (capture === undefined || capture.encodeFinishedAt !== undefined) return;
855
- capture.encodeFinishedAt = monotonicNanoseconds();
856
- },
857
- markEncodeFailed(detail) {
858
- const capture = current;
859
- if (capture === undefined) return;
860
- terminalizeIdle(
861
- capture,
862
- captureError(
863
- 'terminal-record-incomplete',
864
- 'the frame encoder finishes successfully',
865
- detail ?? 'encoder.finish failed',
866
- ),
867
- );
868
- },
869
- markTimestampPassFailed(detail) {
870
- const capture = current;
871
- if (capture === undefined) return;
872
- terminalizeIdle(
873
- capture,
874
- captureError(
875
- 'timestamp-write-unavailable',
876
- 'the real compute pass accepts timestampWrites on the timestamp-capable encoder',
877
- detail ?? 'compute-pass timestampWrites failed',
878
- ),
879
- );
880
- },
881
- markSubmitStarted() {
882
- const capture = current;
883
- if (capture === undefined || capture.submitStartedAt !== undefined) return;
884
- capture.submitStartedAt = monotonicNanoseconds();
885
- },
886
- markSubmitted(_command) {
887
- const capture = current;
888
- if (capture === undefined || capture.submitted) return;
889
- capture.submitted = true;
890
- capture.submitFinishedAt = monotonicNanoseconds();
891
- capture.submissionToken = `${capture.captureId}:submission`;
892
- if (options.mode === 'cpu-control') {
893
- settleSuccess(capture, {
894
- captureId: capture.captureId,
895
- submissionToken: capture.submissionToken,
896
- dispatchId: null,
897
- actualProducer: 'cpu',
898
- backendKind: capture.device.caps.backendKind,
899
- compute: capture.device.caps.compute,
900
- timestampQuery: capture.device.caps.timestampQuery,
901
- timestampPeriodNanoseconds: capture.device.caps.timestampPeriodNanoseconds,
902
- gpu: null,
903
- membership: capture.membership,
904
- cpu: {
905
- encode: interval(capture.encodeStartedAt, capture.encodeFinishedAt),
906
- submit: interval(capture.submitStartedAt, capture.submitFinishedAt),
907
- },
908
- async: { queueCompletion: null, readback: null },
909
- });
910
- release(capture);
911
- return;
912
- }
913
- capture.asyncStarted = true;
914
- void completeGpu(capture);
915
- },
916
- markSubmitFailed(detail) {
917
- const capture = current;
918
- if (capture === undefined) return;
919
- terminalizeIdle(
920
- capture,
921
- captureError(
922
- 'queue-submit-failed',
923
- 'the render command buffer submits successfully',
924
- detail ?? 'inspect the RHI queue submission failure',
925
- ),
926
- );
927
- },
928
- markDeviceLost(detail) {
929
- deviceLost = true;
930
- const error = captureError(
931
- 'device-lost',
932
- 'the device.lost transition terminalizes active membership captures',
933
- detail ?? 'the renderer device was lost',
934
- );
935
- for (const capture of [...pending]) {
936
- settleError(capture, error);
937
- if (!capture.asyncStarted && !capture.submitted) release(capture);
938
- }
939
- },
940
- bindDevice(nextDevice) {
941
- const previous = current;
942
- if (previous !== undefined) {
943
- current = undefined;
944
- detached = previous;
945
- }
946
- for (const capture of pending) {
947
- settleError(
948
- capture,
949
- captureError(
950
- 'stale-device-generation',
951
- 'capture resources belong to the current device generation',
952
- 'device recovery invalidated the pending capture',
953
- ),
954
- );
955
- if (!capture.asyncStarted && !capture.submitted) release(capture);
956
- }
957
- device = nextDevice;
958
- deviceLost = false;
959
- },
960
- recordGpuMembershipSource(source) {
961
- const capture = current;
962
- if (capture === undefined || options.mode !== 'gpu' || capture.gpuSource !== undefined)
963
- return;
964
- capture.gpuSource = source;
965
- const cluster = createReadback(
966
- capture,
967
- source.clusterGridBytes,
968
- 'membership-cluster-grid-readback',
969
- );
970
- if (cluster.ok) capture.clusterReadbackBuffer = cluster.value;
971
- const index = createReadback(
972
- capture,
973
- source.lightIndexListBytes,
974
- 'membership-index-list-readback',
975
- );
976
- if (!cluster.ok) {
977
- terminalizeIdle(capture, cluster.error);
978
- return;
979
- }
980
- if (!index.ok) {
981
- terminalizeIdle(capture, index.error);
982
- return;
983
- }
984
- capture.indexReadbackBuffer = index.value;
985
- },
986
- recordMembershipOutput(output) {
987
- const capture = current;
988
- if (capture === undefined || options.mode !== 'cpu-control') return;
989
- capture.membership = output;
990
- },
991
- dispose() {
992
- disposed = true;
993
- const previous = current;
994
- if (previous !== undefined) {
995
- current = undefined;
996
- detached = previous;
997
- }
998
- for (const capture of pending) {
999
- settleError(
1000
- capture,
1001
- captureError(
1002
- 'capture-disposed',
1003
- 'active captures terminalize during disposal',
1004
- 'renderer was disposed',
1005
- ),
1006
- );
1007
- if (!capture.asyncStarted && !capture.submitted) release(capture);
1008
- }
1009
- },
1010
- };
1011
- return controller;
1012
- }