@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
@@ -13,70 +13,37 @@
13
13
  // SpotLight / PointLightShadow component validators (forward cross-directory
14
14
  // import, no cycle -- research Finding C2).
15
15
 
16
+ import type { DeviceResourceKind, DeviceScopeReceipt } from '../device/resource-types';
16
17
  import type {
17
- RenderFeatureCapabilityMissingDetail,
18
- RenderFeatureDrawRecordingFailedDetail,
19
- RenderFeaturePassOrderConflictDetail,
20
- RenderFeaturePreparationFailedDetail,
21
- RenderFeaturePreparedStateMismatchDetail,
18
+ PreparedKind,
19
+ RenderFeatureCapabilityKey,
22
20
  RenderFeatureRecovery,
23
- RenderFeatureRegistrationConflictDetail,
24
21
  RenderFeatureStage,
25
- RenderFeatureStageFailedDetail,
26
- } from '../features/types';
27
- import type { MaterialRenderError } from '../renderer/material/pipeline-projection';
28
-
29
- // -- Scene Fog owner errors --------------------------------------------------
30
-
31
- /** Bounded identity facts for a resource-owner Fog cardinality conflict. */
32
- export interface FogOwnerConflictDetail {
33
- readonly resourceOwner: number;
34
- readonly entities: readonly number[];
35
- readonly omitted: number;
36
- }
37
-
38
- /** The resource owner contains more than one Fog authoring entity. */
39
- export class FogOwnerConflictError extends Error {
40
- readonly code = 'fog-owner-conflict' as const;
41
- readonly expected = 'resourceOwner contains zero or one Fog entity';
42
- readonly hint =
43
- 'remove every Fog entity except one from the resourceOwner World, then retry draw';
44
- readonly detail: FogOwnerConflictDetail;
45
-
46
- constructor(resourceOwner: number, entities: readonly number[], omitted: number) {
47
- super(
48
- `Fog owner conflict in resourceOwner ${resourceOwner}: ${entities.length + omitted} entities`,
49
- );
50
- this.name = 'FogOwnerConflictError';
51
- this.detail = {
52
- resourceOwner,
53
- entities: [...entities],
54
- omitted,
55
- };
56
- }
57
- }
58
-
59
- /** Structured detail for one invalid Fog field. */
60
- export interface FogParametersInvalidDetail {
61
- readonly entity: number;
62
- readonly field: string;
63
- readonly expected: string;
64
- readonly actual: unknown;
22
+ } from '../features/vocabulary';
23
+
24
+ export interface LifecycleConstructionFailureDetail {
25
+ readonly owner: string;
26
+ readonly generation: number;
27
+ readonly operation: 'create' | 'dispose';
28
+ readonly resourceKind: DeviceResourceKind;
29
+ readonly cause: unknown;
30
+ readonly cleanupFailures: readonly {
31
+ readonly resourceKind: DeviceResourceKind;
32
+ readonly cause: unknown;
33
+ }[];
34
+ readonly receipt: DeviceScopeReceipt;
65
35
  }
66
36
 
67
- /** A resource-owner Fog entity contains an invalid authored parameter. */
68
- export class FogParametersInvalidError extends Error {
69
- readonly code = 'fog-parameters-invalid' as const;
70
- readonly expected: string;
71
- readonly hint: string;
72
- readonly detail: FogParametersInvalidDetail;
37
+ export class LifecycleConstructionError extends Error {
38
+ readonly code = 'lifecycle-construction-failed' as const;
39
+ readonly expected = 'all DeviceScope resources establish and terminate in order';
40
+ readonly hint = 'inspect detail and cleanupFailures, then recover or rebuild the DeviceScope';
41
+ readonly detail: LifecycleConstructionFailureDetail;
73
42
 
74
- constructor(entity: number, field: string, expected: string, actual: unknown) {
75
- super(`Fog.${field} is invalid on entity ${entity}`);
76
- this.name = 'FogParametersInvalidError';
77
- this.expected = expected;
78
- this.hint = `set Fog.${field} to ${expected} on entity ${entity}, then retry draw`;
79
- this.detail = { entity, field, expected, actual };
43
+ constructor(detail: LifecycleConstructionFailureDetail) {
44
+ super(`lifecycle-construction-failed: ${detail.resourceKind} lifecycle transaction failed`);
45
+ this.name = 'LifecycleConstructionError';
46
+ this.detail = detail;
80
47
  }
81
48
  }
82
49
 
@@ -217,48 +184,6 @@ export class EquirectProjectionFailedError extends Error {
217
184
  }
218
185
  }
219
186
 
220
- // ── HdrpCapsInsufficientError ──────────────────────────────────────────────
221
-
222
- /**
223
- * Detail for `RuntimeErrorCode 'hdrp-caps-insufficient'`.
224
- *
225
- * Emitted at install time when `device.caps.maxStorageBuffersPerShaderStage < 4`.
226
- */
227
- export interface HdrpCapsInsufficientDetail {
228
- readonly capName: string;
229
- readonly actual: number;
230
- readonly required: number;
231
- }
232
-
233
- /**
234
- * Structured error for HDRP storage-buffer capability gate failure (AC-17/AC-18).
235
- *
236
- * Emitted at `installPipeline(hdrpAsset)` time — synchronous throw.
237
- * - `.code = 'hdrp-caps-insufficient'` (closed RuntimeErrorCode)
238
- * - `.expected` — describes the required capability
239
- * - `.hint` — 'fall back to URP by not calling installPipeline'
240
- * - `.detail = { capName, actual, required }`
241
- */
242
- export class HdrpCapsInsufficientError extends Error {
243
- readonly code = 'hdrp-caps-insufficient' as const;
244
- readonly expected: string;
245
- readonly hint: string;
246
- readonly detail: HdrpCapsInsufficientDetail;
247
-
248
- constructor(capName: string, actual: number, required: number) {
249
- const expected = `${capName} >= ${required}`;
250
- const hint =
251
- `${capName} = ${actual} (need >= ${required}); ` +
252
- 'this device does not have enough storage buffer slots for HDRP cluster-forward rendering. ' +
253
- 'Fall back to URP by not calling installPipeline(hdrpAsset)';
254
- super(`HDRP caps insufficient: ${capName} = ${actual} (need >= ${required})`);
255
- this.name = 'HdrpCapsInsufficientError';
256
- this.expected = expected;
257
- this.hint = hint;
258
- this.detail = { capName, actual, required };
259
- }
260
- }
261
-
262
187
  // ── HdrpLightBudgetExceededError ───────────────────────────────────────────
263
188
 
264
189
  /**
@@ -348,7 +273,7 @@ export class HdrpIndexListOverflowError extends Error {
348
273
  /**
349
274
  * Detail for `RuntimeErrorCode 'hdrp-deferred-caps-insufficient'`.
350
275
  *
351
- * Emitted at `installPipeline(hdrpAsset)` time when `device.caps.maxColorAttachments < 4`,
276
+ * Emitted when the Standard clustered lane has fewer than 4 color attachments,
352
277
  * meaning the deferred path cannot allocate 3 g-buffer color targets + depth.
353
278
  */
354
279
  export interface HdrpDeferredCapsInsufficientDetail {
@@ -359,13 +284,13 @@ export interface HdrpDeferredCapsInsufficientDetail {
359
284
  /**
360
285
  * Structured error for deferred-path capability gate failure.
361
286
  *
362
- * Emitted at `installPipeline(hdrpAsset)` time — synchronous throw.
287
+ * Emitted during Standard clustered lane validation — synchronous throw.
363
288
  * - `.code = 'hdrp-deferred-caps-insufficient'` (closed RuntimeErrorCode)
364
289
  * - `.expected` — 'maxColorAttachments >= 4'
365
290
  * - `.hint` — actionable guidance to upgrade browser or select URP
366
291
  * - `.detail = { actual, expected }`
367
292
  *
368
- * @see plan-strategy D-5 (install-time caps check, no silent fallback)
293
+ * @see plan-strategy D-5 (capability validation, no silent fallback)
369
294
  */
370
295
  export class HdrpDeferredCapsInsufficientError extends Error {
371
296
  readonly code = 'hdrp-deferred-caps-insufficient' as const;
@@ -389,97 +314,6 @@ export class HdrpDeferredCapsInsufficientError extends Error {
389
314
  }
390
315
  }
391
316
 
392
- // ── GbufferRtAllocFailedError ──────────────────────────────────────────────
393
-
394
- /**
395
- * Detail for `RuntimeErrorCode 'gbuffer-rt-alloc-failed'`.
396
- *
397
- * Emitted at runtime when a g-buffer color target pool allocation fails
398
- * (OOM or backend resource limit). The attachmentIndex identifies which
399
- * g-buffer slot failed.
400
- */
401
- export interface GbufferRtAllocFailedDetail {
402
- readonly attachmentIndex: number;
403
- readonly requestedBytes: number;
404
- }
405
-
406
- /**
407
- * Structured error for g-buffer color-target pool allocation failure.
408
- *
409
- * Emitted at runtime during g-buffer pass setup.
410
- * - `.code = 'gbuffer-rt-alloc-failed'` (closed RuntimeErrorCode)
411
- * - `.expected` — 'g-buffer color target allocation succeeded'
412
- * - `.hint` — actionable recovery steps (check GPU memory / reduce resolution)
413
- * - `.detail = { attachmentIndex, requestedBytes }`
414
- *
415
- * @note This error is declared in M1 but only triggered in M2 (g-buffer RT
416
- * allocation path). The union member exists for compile-time narrowing now.
417
- */
418
- export class GbufferRtAllocFailedError extends Error {
419
- readonly code = 'gbuffer-rt-alloc-failed' as const;
420
- readonly expected: string;
421
- readonly hint: string;
422
- readonly detail: GbufferRtAllocFailedDetail;
423
-
424
- constructor(attachmentIndex: number, requestedBytes: number) {
425
- const expected = 'g-buffer color target allocation succeeded';
426
- const hint =
427
- `g-buffer color target (attachment ${attachmentIndex}, ${requestedBytes} bytes) allocation failed. ` +
428
- 'Common causes: (a) GPU memory pressure; (b) framebuffer resolution too large; ' +
429
- '(c) RHI backend limits hit. Check device.limits and reduce frame resolution.';
430
- super(`g-buffer RT alloc failed: attachment[${attachmentIndex}] = ${requestedBytes} bytes`);
431
- this.name = 'GbufferRtAllocFailedError';
432
- this.expected = expected;
433
- this.hint = hint;
434
- this.detail = { attachmentIndex, requestedBytes };
435
- }
436
- }
437
-
438
- // ── GbufferAttachmentCountMismatchError ────────────────────────────────────
439
-
440
- /**
441
- * Detail for `RuntimeErrorCode 'gbuffer-attachment-count-mismatch'`.
442
- *
443
- * Emitted at install-time when the g-buffer attachment count declared
444
- * in the pipeline schema does not equal 3.
445
- */
446
- export interface GbufferAttachmentCountMismatchDetail {
447
- readonly actual: number;
448
- readonly expected: number;
449
- }
450
-
451
- /**
452
- * Structured error for g-buffer attachment count mismatch.
453
- *
454
- * Emitted at `installPipeline(hdrpAsset)` time via topology validation.
455
- * - `.code = 'gbuffer-attachment-count-mismatch'` (closed RuntimeErrorCode)
456
- * - `.expected` — 'exactly 3 g-buffer color attachments'
457
- * - `.hint` — check pipeline internal schema or custom g-buffer override
458
- * - `.detail = { actual, expected }`
459
- *
460
- * @note This error is declared in M1 but only triggered in M2 (g-buffer
461
- * topology validation). The union member exists for compile-time narrowing now.
462
- */
463
- export class GbufferAttachmentCountMismatchError extends Error {
464
- readonly code = 'gbuffer-attachment-count-mismatch' as const;
465
- readonly expected: string;
466
- readonly hint: string;
467
- readonly detail: GbufferAttachmentCountMismatchDetail;
468
-
469
- constructor(actual: number) {
470
- const _expected = 3;
471
- const _expectedStr = `exactly ${_expected} g-buffer color attachments`;
472
- const hint =
473
- `HDRP deferred expects ${_expected} g-buffer color attachments, got ${actual}. ` +
474
- 'Check hdrp-pipeline internal schema or custom g-buffer override.';
475
- super(`g-buffer attachment count mismatch: got ${actual}, expected ${_expected}`);
476
- this.name = 'GbufferAttachmentCountMismatchError';
477
- this.expected = _expectedStr;
478
- this.hint = hint;
479
- this.detail = { actual, expected: _expected };
480
- }
481
- }
482
-
483
317
  // ── PointShadowAtlasUninitializedError ─────────────────────────────────────
484
318
 
485
319
  /**
@@ -618,6 +452,33 @@ export class VertexStorageBufferUnavailableError extends Error {
618
452
  }
619
453
  }
620
454
 
455
+ // ── VertexColorVariantConflictError ───────────────────────────────────────
456
+
457
+ export interface VertexColorVariantConflictDetail {
458
+ readonly authored: true;
459
+ readonly authoredValue: string;
460
+ readonly projected: boolean;
461
+ }
462
+
463
+ /** The authored color axis disagrees with the canonical geometry projection. */
464
+ export class VertexColorVariantConflictError extends Error {
465
+ readonly code = 'vertex-color-variant-conflict' as const;
466
+ readonly expected: string;
467
+ readonly hint: string;
468
+ readonly detail: VertexColorVariantConflictDetail;
469
+
470
+ constructor(authoredValue: string, projected: boolean) {
471
+ const expected = `VERTEX_COLOR_AVAILABLE=${projected ? 'true' : 'false'}`;
472
+ const hint =
473
+ 'derive the shader variant from the mesh VertexLayoutProjection; COLOR_0 presence is a geometry fact';
474
+ super(`authored vertex-color variant ${authoredValue} disagrees with projected ${expected}`);
475
+ this.name = 'VertexColorVariantConflictError';
476
+ this.expected = expected;
477
+ this.hint = hint;
478
+ this.detail = { authored: true, authoredValue, projected };
479
+ }
480
+ }
481
+
621
482
  // ── Skin palette/material validation errors ────────────────────────────────
622
483
 
623
484
  /** Detail for a palette buffer that exceeds the device storage limit. */
@@ -704,6 +565,157 @@ export class MaterialSkinAttrMissingError extends Error {
704
565
 
705
566
  // -- RenderFeature errors ---------------------------------------------------
706
567
 
568
+ export type RenderFeatureErrorCode =
569
+ | 'render-feature-registration-conflict'
570
+ | 'render-feature-stage-failed'
571
+ | 'render-feature-capability-missing'
572
+ | 'render-feature-pass-order-conflict'
573
+ | 'render-feature-preparation-failed'
574
+ | 'render-feature-prepared-state-mismatch'
575
+ | 'render-feature-draw-recording-failed';
576
+
577
+ export interface RenderFeatureRegistrationConflictDetail {
578
+ readonly featureIdentity: string;
579
+ readonly order: number;
580
+ readonly conflictingOrder: number;
581
+ }
582
+
583
+ export interface RenderFeatureCleanupFailure {
584
+ readonly featureIdentity: string;
585
+ readonly order: number;
586
+ readonly code: string;
587
+ }
588
+
589
+ export interface RenderFeatureStageFailedDetail {
590
+ readonly featureIdentity: string;
591
+ readonly order: number;
592
+ readonly stage: RenderFeatureStage;
593
+ readonly recovery: RenderFeatureRecovery;
594
+ readonly cleanupFailures?: readonly RenderFeatureCleanupFailure[];
595
+ }
596
+
597
+ export interface RenderFeatureCapabilityMissingDetail {
598
+ readonly featureIdentity: string;
599
+ readonly order: number;
600
+ readonly capability: RenderFeatureCapabilityKey;
601
+ }
602
+
603
+ export interface RenderFeaturePassOrderConflictDetail {
604
+ readonly featureIdentity: string;
605
+ readonly order: number;
606
+ readonly passIdentity: string;
607
+ readonly dependencyIdentity: string;
608
+ }
609
+
610
+ export interface RenderFeaturePreparationFailedDetail {
611
+ readonly featureIdentity: string;
612
+ readonly order: number;
613
+ readonly stage: 'prepare';
614
+ readonly operation: string;
615
+ readonly resourceKind: PreparedKind;
616
+ readonly resourceName: string;
617
+ readonly reason: string;
618
+ readonly recovery: RenderFeatureRecovery;
619
+ }
620
+
621
+ export type RenderFeaturePreparedStateMismatchDetail =
622
+ | {
623
+ readonly featureIdentity: string;
624
+ readonly order: number;
625
+ readonly stage: 'contribute';
626
+ readonly operation: string;
627
+ readonly resourceKind: PreparedKind;
628
+ readonly reason: 'missing-prepared-state';
629
+ readonly missingResource: string;
630
+ readonly recovery: RenderFeatureRecovery;
631
+ }
632
+ | {
633
+ readonly featureIdentity: string;
634
+ readonly order: number;
635
+ readonly stage: 'contribute';
636
+ readonly operation: string;
637
+ readonly resourceKind: PreparedKind;
638
+ readonly reason: 'foreign-feature';
639
+ readonly expectedFeatureIdentity: string;
640
+ readonly actualFeatureIdentity: string;
641
+ readonly recovery: RenderFeatureRecovery;
642
+ }
643
+ | {
644
+ readonly featureIdentity: string;
645
+ readonly order: number;
646
+ readonly stage: 'contribute';
647
+ readonly operation: string;
648
+ readonly resourceKind: PreparedKind;
649
+ readonly reason: 'foreign-kind';
650
+ readonly expectedKind: PreparedKind;
651
+ readonly actualKind: PreparedKind;
652
+ readonly recovery: RenderFeatureRecovery;
653
+ }
654
+ | {
655
+ readonly featureIdentity: string;
656
+ readonly order: number;
657
+ readonly stage: 'contribute';
658
+ readonly operation: string;
659
+ readonly resourceKind: PreparedKind;
660
+ readonly reason: 'generation-mismatch';
661
+ readonly expectedGeneration: number;
662
+ readonly actualGeneration: number;
663
+ readonly recovery: RenderFeatureRecovery;
664
+ }
665
+ | {
666
+ readonly featureIdentity: string;
667
+ readonly order: number;
668
+ readonly stage: 'contribute';
669
+ readonly operation: string;
670
+ readonly resourceKind: PreparedKind;
671
+ readonly reason: 'layout-mismatch';
672
+ readonly expectedLayout: string;
673
+ readonly actualLayout: string;
674
+ readonly recovery: RenderFeatureRecovery;
675
+ }
676
+ | {
677
+ readonly featureIdentity: string;
678
+ readonly order: number;
679
+ readonly stage: 'contribute';
680
+ readonly operation: string;
681
+ readonly resourceKind: PreparedKind;
682
+ readonly reason: 'format-mismatch';
683
+ readonly expectedFormat: string;
684
+ readonly actualFormat: string;
685
+ readonly recovery: RenderFeatureRecovery;
686
+ };
687
+
688
+ export interface RenderFeatureDrawRecordingFailedDetail {
689
+ readonly featureIdentity: string;
690
+ readonly order: number;
691
+ readonly stage: 'record';
692
+ readonly operation: string;
693
+ readonly resourceKind: PreparedKind;
694
+ readonly reason: string;
695
+ readonly backendReason: string;
696
+ readonly recovery: RenderFeatureRecovery;
697
+ }
698
+
699
+ export type RenderFeatureErrorDetailByCode = {
700
+ 'render-feature-registration-conflict': RenderFeatureRegistrationConflictDetail;
701
+ 'render-feature-stage-failed': RenderFeatureStageFailedDetail;
702
+ 'render-feature-capability-missing': RenderFeatureCapabilityMissingDetail;
703
+ 'render-feature-pass-order-conflict': RenderFeaturePassOrderConflictDetail;
704
+ 'render-feature-preparation-failed': RenderFeaturePreparationFailedDetail;
705
+ 'render-feature-prepared-state-mismatch': RenderFeaturePreparedStateMismatchDetail;
706
+ 'render-feature-draw-recording-failed': RenderFeatureDrawRecordingFailedDetail;
707
+ };
708
+
709
+ /** Machine-readable four-field diagnostic exposed by every feature error. */
710
+ export type RenderFeatureErrorDescriptor = {
711
+ [Code in RenderFeatureErrorCode]: {
712
+ readonly code: Code;
713
+ readonly expected: string;
714
+ readonly hint: string;
715
+ readonly detail: RenderFeatureErrorDetailByCode[Code];
716
+ };
717
+ }[RenderFeatureErrorCode];
718
+
707
719
  const renderFeatureRecoveryHintByRecovery = {
708
720
  'next-frame': (featureIdentity: string, stage: RenderFeatureStage) =>
709
721
  `correct '${featureIdentity}' ${stage} data and retry on the next frame`,
@@ -919,283 +931,176 @@ export class ObservationUnavailableError extends Error {
919
931
  }
920
932
  }
921
933
 
922
- export interface TaaCapsInsufficientDetail {
923
- readonly rgba16floatRenderable: boolean;
924
- readonly maxColorAttachments: number;
925
- readonly recovery: 'enable-temporal-capabilities';
926
- }
927
-
928
- /** The active device cannot support the renderer-owned temporal attachments. */
929
- export class TaaCapsInsufficientError extends Error {
930
- readonly code = 'taa-caps-insufficient' as const;
931
- readonly expected = 'rgba16floatRenderable and maxColorAttachments >= 2';
932
- readonly hint =
933
- 'select a device with rgba16float render targets and at least two color attachments, then rebuild the renderer';
934
- readonly detail: TaaCapsInsufficientDetail;
935
-
936
- constructor(rgba16floatRenderable: boolean, maxColorAttachments: number) {
937
- super(
938
- `TAA capabilities insufficient: rgba16floatRenderable=${rgba16floatRenderable}, maxColorAttachments=${maxColorAttachments}`,
939
- );
940
- this.name = 'TaaCapsInsufficientError';
941
- this.detail = {
942
- rgba16floatRenderable,
943
- maxColorAttachments,
944
- recovery: 'enable-temporal-capabilities',
945
- };
946
- }
947
- }
948
-
949
- export type TemporalUnsupportedReason =
950
- | 'resolve-count'
951
- | 'scene-color-domain'
952
- | 'scene-color-sample-count'
953
- | 'scene-depth-sample-count'
954
- | 'temporal-attachment-missing'
955
- | 'temporal-attachment-format'
956
- | 'temporal-attachment-sample-count'
957
- | 'resolve-resources-missing'
958
- | 'resolve-frame-missing';
959
-
960
- export interface TemporalUnsupportedDetail {
961
- readonly reason: TemporalUnsupportedReason;
962
- readonly actual: string;
963
- readonly recovery: 'fix-temporal-pipeline-topology';
964
- }
965
-
966
- /** A pipeline violated the single renderer-owned temporal resolve seam. */
967
- export class TemporalUnsupportedError extends Error {
968
- readonly code = 'temporal-unsupported' as const;
969
- readonly expected: string;
970
- readonly hint =
971
- 'call resolveTemporal exactly once after temporal raster and pass single-sample rgba16float scene and temporal targets';
972
- readonly detail: TemporalUnsupportedDetail;
973
-
974
- constructor(reason: TemporalUnsupportedReason, expected: string, actual: string) {
975
- super(`temporal pipeline unsupported: ${reason}; expected ${expected}, got ${actual}`);
976
- this.name = 'TemporalUnsupportedError';
977
- this.expected = expected;
978
- this.detail = { reason, actual, recovery: 'fix-temporal-pipeline-topology' };
979
- }
980
- }
981
-
982
- // -- Analytic sky authoring/source errors ----------------------------------
983
-
984
- export type AtmosphereField =
985
- | 'turbidity'
986
- | 'rayleigh'
987
- | 'mieCoefficient'
988
- | 'mieDirectionalG'
989
- | 'sunAngularRadius';
990
-
991
- export interface AtmosphereParameterInvalidDetail {
992
- readonly field: AtmosphereField;
993
- readonly value: number;
994
- readonly min: number;
995
- readonly max: number;
996
- readonly minExclusive: boolean;
934
+ export interface FrameReceiptStaleDetail {
935
+ readonly frameId: number;
936
+ readonly receiptGeneration: number;
937
+ readonly currentGeneration: number;
997
938
  }
998
939
 
999
- /** A finite Atmosphere field is outside its authoring range. */
1000
- export class AtmosphereParameterInvalidError extends Error {
1001
- readonly code = 'atmosphere-parameter-invalid' as const;
1002
- readonly expected: string;
1003
- readonly hint: string;
1004
- readonly detail: AtmosphereParameterInvalidDetail;
1005
-
1006
- constructor(
1007
- field: AtmosphereField,
1008
- value: number,
1009
- min: number,
1010
- max: number,
1011
- minExclusive = false,
1012
- ) {
1013
- const lower = minExclusive ? `>${min}` : `>=${min}`;
1014
- super(`Atmosphere.${field} must be ${lower} and <=${max}; got ${value}`);
1015
- this.name = 'AtmosphereParameterInvalidError';
1016
- this.expected = `${field} ${lower} and <=${max}`;
1017
- this.hint = `set Atmosphere.${field} to a finite value in the accepted range; got ${value}`;
1018
- this.detail = { field, value, min, max, minExclusive };
1019
- }
1020
- }
940
+ /** Receipt-bound observation failed closed at a generation fence. */
941
+ export class FrameReceiptStaleError extends Error {
942
+ readonly code = 'frame-receipt-stale' as const;
943
+ readonly expected = 'the observation receipt belongs to the active device generation';
944
+ readonly hint = 'draw a new frame and call observe with its returned FrameReceipt';
945
+ readonly detail: FrameReceiptStaleDetail;
1021
946
 
1022
- export interface AtmosphereCardinalityInvalidDetail {
1023
- readonly count: number;
1024
- readonly max: 1;
1025
- readonly entities: readonly number[];
1026
- }
1027
-
1028
- /** More than one Atmosphere authoring component exists in one resource World. */
1029
- export class AtmosphereCardinalityInvalidError extends Error {
1030
- readonly code = 'atmosphere-cardinality-invalid' as const;
1031
- readonly expected = 'exactly one Atmosphere component in the resourceOwner World';
1032
- readonly hint = 'remove extra Atmosphere entities and keep one analytic source';
1033
- readonly detail: AtmosphereCardinalityInvalidDetail;
1034
-
1035
- constructor(count: number, entities: readonly number[]) {
1036
- super(`Atmosphere cardinality exceeded: ${count} entities (max 1)`);
1037
- this.name = 'AtmosphereCardinalityInvalidError';
1038
- this.detail = { count, max: 1, entities: [...entities] };
1039
- }
1040
- }
1041
-
1042
- export interface AtmosphereSunMissingDetail {
1043
- readonly atmosphereEntity: number;
1044
- }
1045
-
1046
- /** An Atmosphere entity is not a Sun unless its same entity carries DirectionalLight. */
1047
- export class AtmosphereSunMissingError extends Error {
1048
- readonly code = 'atmosphere-sun-missing' as const;
1049
- readonly expected = 'Atmosphere and DirectionalLight share one entity';
1050
- readonly hint = 'add a valid DirectionalLight to the Atmosphere entity';
1051
- readonly detail: AtmosphereSunMissingDetail;
1052
-
1053
- constructor(atmosphereEntity: number) {
1054
- super(`Atmosphere entity ${atmosphereEntity} has no co-located DirectionalLight`);
1055
- this.name = 'AtmosphereSunMissingError';
1056
- this.detail = { atmosphereEntity };
947
+ constructor(detail: FrameReceiptStaleDetail) {
948
+ super('frame receipt belongs to a retired device generation');
949
+ this.name = 'FrameReceiptStaleError';
950
+ this.detail = detail;
1057
951
  }
1058
952
  }
1059
953
 
1060
- export interface EnvironmentSourceConflictDetail {
1061
- readonly atmosphereEntities: readonly number[];
1062
- readonly imageEntities: readonly number[];
954
+ export interface RendererContractFailureDetail {
955
+ readonly operation: 'construct' | 'attach' | 'draw' | 'observe';
956
+ readonly cause: string;
1063
957
  }
1064
958
 
1065
- /** Image and analytic environment facts cannot silently choose a precedence. */
1066
- export class EnvironmentSourceConflictError extends Error {
1067
- readonly code = 'environment-source-conflict' as const;
1068
- readonly expected = 'exactly one image or atmosphere environment source';
1069
- readonly hint = 'remove either the image environment or the Atmosphere source';
1070
- readonly detail: EnvironmentSourceConflictDetail;
1071
-
1072
- constructor(atmosphereEntities: readonly number[], imageEntities: readonly number[]) {
1073
- super('image and Atmosphere environment sources cannot coexist');
1074
- this.name = 'EnvironmentSourceConflictError';
1075
- this.detail = {
1076
- atmosphereEntities: [...atmosphereEntities],
1077
- imageEntities: [...imageEntities],
1078
- };
959
+ /** Structured boundary failure while adapting an owner contract. */
960
+ export class RendererContractFailureError extends Error {
961
+ readonly code = 'renderer-contract-failed' as const;
962
+ readonly expected = 'renderer owner contracts remain valid at the public boundary';
963
+ readonly hint = 'repair the owner contract and retry the operation';
964
+ readonly detail: RendererContractFailureDetail;
965
+
966
+ constructor(operation: RendererContractFailureDetail['operation'], cause: string) {
967
+ super(`renderer ${operation} contract failed: ${cause}`);
968
+ this.name = 'RendererContractFailureError';
969
+ this.detail = { operation, cause };
1079
970
  }
1080
971
  }
1081
972
 
1082
- export interface AtmosphereCapsInsufficientDetail {
1083
- readonly capability: string;
1084
- readonly actual: boolean | number;
1085
- readonly required: boolean | number;
1086
- }
1087
-
1088
- /** The selected device cannot render the required HDR atmosphere resources. */
1089
- export class AtmosphereCapsInsufficientError extends Error {
1090
- readonly code = 'atmosphere-caps-insufficient' as const;
973
+ export interface RendererOperationCause {
974
+ readonly code: string;
1091
975
  readonly expected: string;
1092
- readonly hint = 'select a backend with the required HDR render and sample capabilities';
1093
- readonly detail: AtmosphereCapsInsufficientDetail;
1094
-
1095
- constructor(capability: string, actual: boolean | number, required: boolean | number) {
1096
- super(`Atmosphere capability ${capability} is insufficient: ${actual}; required ${required}`);
1097
- this.name = 'AtmosphereCapsInsufficientError';
1098
- this.expected = `${capability} >= ${required}`;
1099
- this.detail = { capability, actual, required };
1100
- }
1101
- }
1102
-
1103
- export interface AtmosphereProducerFailedDetail {
1104
- readonly stage: 'build' | 'execute' | 'submit';
1105
- readonly reason: string;
1106
- readonly generation?: number;
1107
- }
1108
-
1109
- /** The candidate atmosphere producer did not complete atomically. */
1110
- export class AtmosphereProducerFailedError extends Error {
1111
- readonly code = 'atmosphere-producer-failed' as const;
1112
- readonly expected = 'candidate atmosphere generation builds, executes, and submits atomically';
1113
- readonly hint =
1114
- 'retain the last-known-good generation, inspect the stage, and retry after repair';
1115
- readonly detail: AtmosphereProducerFailedDetail;
1116
-
1117
- constructor(stage: AtmosphereProducerFailedDetail['stage'], reason: string, generation?: number) {
1118
- super(`Atmosphere producer ${stage} failed: ${reason}`);
1119
- this.name = 'AtmosphereProducerFailedError';
1120
- this.detail = { stage, reason, ...(generation === undefined ? {} : { generation }) };
1121
- }
1122
- }
1123
-
1124
- /**
1125
- * Render-owned projection of a failed material readiness result.
1126
- *
1127
- * The readiness owner supplies the structured fields; render adds only the
1128
- * stable draw dedupe key. This is a diagnostic fact, not a second error or
1129
- * material registry.
1130
- */
1131
- export interface MaterialDrawDiagnostic {
1132
- readonly key: string;
1133
- readonly code: MaterialRenderError['error']['code'];
1134
- readonly materialGuid: string;
1135
- readonly specializationKey: string;
1136
- readonly publicationGeneration?: number;
1137
- readonly expected: string;
1138
- readonly actual?: string;
1139
976
  readonly hint: string;
1140
- readonly retryable: boolean;
1141
- readonly recoveryActions: readonly string[];
977
+ readonly detail?: unknown;
1142
978
  }
1143
979
 
1144
- export function materialDrawDiagnostic(error: MaterialRenderError): MaterialDrawDiagnostic {
1145
- const detail = error.error.detail;
1146
- const generation = detail.publicationGeneration;
1147
- return {
1148
- key: `${detail.guid}::${detail.specializationKey}::${generation ?? 'unknown'}`,
1149
- code: error.error.code,
1150
- materialGuid: detail.guid,
1151
- specializationKey: detail.specializationKey,
1152
- ...(generation === undefined ? {} : { publicationGeneration: generation }),
1153
- expected: error.error.expected,
1154
- ...(detail.actual === undefined ? {} : { actual: detail.actual }),
1155
- hint: error.error.hint,
1156
- retryable: error.error.retryable,
1157
- recoveryActions: error.error.recoveryActions,
980
+ export interface RendererOperationDetailByCode {
981
+ readonly 'world-lease-invalid': {
982
+ readonly operation: 'attach' | 'draw';
983
+ readonly cause: RendererOperationCause;
1158
984
  };
1159
- }
1160
-
1161
- export class MeshSsboCeilingReachedError extends Error {
1162
- readonly code = 'mesh-ssbo-ceiling-reached' as const;
1163
- readonly expected: string;
1164
- readonly hint: string;
1165
- readonly detail: {
1166
- readonly requested: number;
1167
- readonly capacity: number;
1168
- readonly ceiling: number;
985
+ readonly 'frame-input-invalid': {
986
+ readonly operation: 'draw' | 'set-profile';
987
+ readonly cause: RendererOperationCause;
988
+ };
989
+ readonly 'scene-projection-failed': {
990
+ readonly operation: 'draw';
991
+ readonly cause: RendererOperationCause;
992
+ };
993
+ readonly 'asset-binding-failed': {
994
+ readonly operation: 'draw';
995
+ readonly cause: RendererOperationCause;
996
+ };
997
+ readonly 'feature-plan-failed': {
998
+ readonly operation: 'draw';
999
+ readonly cause: RendererOperationCause;
1000
+ };
1001
+ readonly 'graph-build-failed': {
1002
+ readonly operation: 'draw' | 'set-profile';
1003
+ readonly cause: RendererOperationCause;
1004
+ };
1005
+ readonly 'device-operation-failed': {
1006
+ readonly operation: 'draw' | 'complete-frame' | 'renderer-event';
1007
+ readonly frameId?: number;
1008
+ readonly deviceGeneration?: number;
1009
+ readonly cause: RendererOperationCause;
1010
+ };
1011
+ readonly 'surface-unavailable': {
1012
+ readonly operation: 'release-surface' | 'restore-surface';
1013
+ readonly cause: RendererOperationCause;
1014
+ };
1015
+ readonly 'renderer-state-invalid': {
1016
+ readonly operation: 'draw' | 'set-profile' | 'recover' | 'dispose';
1017
+ readonly state: string;
1018
+ readonly cause?: RendererOperationCause;
1019
+ };
1020
+ readonly 'recovery-failed': {
1021
+ readonly operation: 'recover';
1022
+ readonly oldGeneration: number;
1023
+ readonly cause: RendererOperationCause;
1024
+ };
1025
+ readonly 'cleanup-failed': {
1026
+ readonly operation: 'dispose';
1027
+ readonly causes: readonly RendererOperationCause[];
1169
1028
  };
1170
-
1171
- constructor(requested: number, capacity: number, ceiling: number) {
1172
- super(`mesh SSBO request ${requested} exceeds device ceiling ${ceiling}`);
1173
- this.name = 'MeshSsboCeilingReachedError';
1174
- this.expected = `mesh SSBO capacity remains within ${ceiling} bytes`;
1175
- this.hint = 'reduce per-frame renderable count or split the workload across frames';
1176
- this.detail = { requested, capacity, ceiling };
1177
- }
1178
1029
  }
1179
1030
 
1180
- export class MeshSsboCapacityExceededError extends Error {
1181
- readonly code = 'mesh-ssbo-capacity-exceeded' as const;
1031
+ export type RendererOperationErrorCode = keyof RendererOperationDetailByCode;
1032
+
1033
+ const RENDERER_OPERATION_ERROR_POLICY = {
1034
+ 'world-lease-invalid': {
1035
+ expected: 'every render World is represented by a live lease owned by this Renderer',
1036
+ hint: 'attach the World to this Renderer and use the returned lease',
1037
+ },
1038
+ 'frame-input-invalid': {
1039
+ expected: 'the frame input references attached leases and a valid immutable RenderProfile',
1040
+ hint: 'repair the frame input and retry draw or setProfile',
1041
+ },
1042
+ 'scene-projection-failed': {
1043
+ expected: 'the attached World projects into the renderer-owned RenderScene',
1044
+ hint: 'inspect the structured cause, repair the World publication, and retry draw',
1045
+ },
1046
+ 'asset-binding-failed': {
1047
+ expected: 'all frame assets resolve to valid renderer-owned bindings',
1048
+ hint: 'inspect the structured cause, rebuild or cold-cook the asset, and retry draw',
1049
+ },
1050
+ 'feature-plan-failed': {
1051
+ expected: 'every installed RenderFeature produces a valid declarative plan',
1052
+ hint: 'inspect the feature cause, repair its plan, and retry draw',
1053
+ },
1054
+ 'graph-build-failed': {
1055
+ expected: 'the Standard graph builds from the active profile and feature plans',
1056
+ hint: 'inspect the graph cause, repair the profile or plan, and retry',
1057
+ },
1058
+ 'device-operation-failed': {
1059
+ expected: 'the active device generation completes the renderer-owned operation',
1060
+ hint: 'inspect renderer state and the structured cause, then retry or recover',
1061
+ },
1062
+ 'surface-unavailable': {
1063
+ expected: 'the presentation surface accepts the requested lifecycle operation',
1064
+ hint: 'inspect renderer state, then restore the surface or create a new Renderer',
1065
+ },
1066
+ 'renderer-state-invalid': {
1067
+ expected: 'the Renderer is in a state that accepts the requested operation',
1068
+ hint: 'inspect renderer state and choose retry, restoreSurface, recover, or stop',
1069
+ },
1070
+ 'recovery-failed': {
1071
+ expected: 'one recovery attempt publishes a complete replacement device generation',
1072
+ hint: 'inspect the structured cause and retry recover after the host-selected delay',
1073
+ },
1074
+ 'cleanup-failed': {
1075
+ expected: 'Renderer disposal completes every registered cleanup in reverse ownership order',
1076
+ hint: 'inspect the ordered cleanup causes; the Renderer remains disposed and must not be reused',
1077
+ },
1078
+ } as const satisfies Readonly<
1079
+ Record<RendererOperationErrorCode, { readonly expected: string; readonly hint: string }>
1080
+ >;
1081
+
1082
+ /** Public renderer-operation failure with a code-narrowed structured detail. */
1083
+ export class RendererOperationError<Code extends RendererOperationErrorCode> extends Error {
1084
+ readonly code: Code;
1182
1085
  readonly expected: string;
1183
1086
  readonly hint: string;
1184
- readonly detail: {
1185
- readonly requested: number;
1186
- readonly capacity: number;
1187
- readonly ceiling: number;
1188
- };
1189
-
1190
- constructor(requested: number, capacity: number, ceiling: number) {
1191
- super(`mesh SSBO capacity ${capacity} cannot satisfy request ${requested}`);
1192
- this.name = 'MeshSsboCapacityExceededError';
1193
- this.expected = `mesh SSBO capacity >= ${requested} slots`;
1194
- this.hint = 'reduce per-frame renderable count or split the workload across frames';
1195
- this.detail = { requested, capacity, ceiling };
1087
+ readonly detail: RendererOperationDetailByCode[Code];
1088
+
1089
+ constructor(code: Code, detail: RendererOperationDetailByCode[Code]) {
1090
+ const policy = RENDERER_OPERATION_ERROR_POLICY[code];
1091
+ super(`${code}: ${policy.expected}`);
1092
+ this.name = 'RendererOperationError';
1093
+ this.code = code;
1094
+ this.expected = policy.expected;
1095
+ this.hint = policy.hint;
1096
+ this.detail = detail;
1196
1097
  }
1197
1098
  }
1198
1099
 
1100
+ export type RendererExpectedOperationError = {
1101
+ readonly [Code in RendererOperationErrorCode]: RendererOperationError<Code>;
1102
+ }[RendererOperationErrorCode];
1103
+
1199
1104
  // -- RenderErrorCode / RenderError closed unions --------------------------------
1200
1105
 
1201
1106
  /**
@@ -1209,29 +1114,21 @@ export type RenderErrorCode = RenderError['code'];
1209
1114
  * `RenderErrorCode` discriminant on `.code`.
1210
1115
  */
1211
1116
  export type RenderError =
1212
- | FogOwnerConflictError
1213
- | FogParametersInvalidError
1117
+ | LifecycleConstructionError
1118
+ | RendererExpectedOperationError
1119
+ | FrameReceiptStaleError
1120
+ | RendererContractFailureError
1214
1121
  | ObservationUnavailableError
1215
- | TaaCapsInsufficientError
1216
- | TemporalUnsupportedError
1217
- | AtmosphereCardinalityInvalidError
1218
- | AtmosphereSunMissingError
1219
- | EnvironmentSourceConflictError
1220
- | AtmosphereParameterInvalidError
1221
- | AtmosphereCapsInsufficientError
1222
- | AtmosphereProducerFailedError
1223
1122
  | ShadowInvalidConfigError
1224
1123
  | EquirectProjectionFailedError
1225
- | HdrpCapsInsufficientError
1226
1124
  | HdrpLightBudgetExceededError
1227
1125
  | HdrpIndexListOverflowError
1228
1126
  | HdrpDeferredCapsInsufficientError
1229
- | GbufferRtAllocFailedError
1230
- | GbufferAttachmentCountMismatchError
1231
1127
  | PointShadowAtlasUninitializedError
1232
1128
  | PointShadowAtlasBoundsViolationError
1233
1129
  | VideoUploadUnsupportedError
1234
1130
  | VertexStorageBufferUnavailableError
1131
+ | VertexColorVariantConflictError
1235
1132
  | SkinPaletteOverflowError
1236
1133
  | SkinMaterialMismatchError
1237
1134
  | MaterialSkinAttrMissingError