@forgeax/engine-render 0.1.4 → 0.1.7

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 (979) hide show
  1. package/README.md +268 -640
  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 +214 -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 +11 -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-HCOGPHKS.mjs +93 -0
  54. package/dist/chunk-HCOGPHKS.mjs.map +1 -0
  55. package/dist/chunk-YEJIUW7D.mjs +1152 -0
  56. package/dist/chunk-YEJIUW7D.mjs.map +1 -0
  57. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +1 -0
  59. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +2 -0
  60. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +1 -0
  61. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  62. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  63. package/dist/components/glyph-text.d.ts +1 -1
  64. package/dist/components/glyph-text.d.ts.map +1 -1
  65. package/dist/components/index.d.ts +4 -2
  66. package/dist/components/index.d.ts.map +1 -1
  67. package/dist/components/instances.d.ts +1 -1
  68. package/dist/components/instances.d.ts.map +1 -1
  69. package/dist/components/light-helpers.d.ts +1 -1
  70. package/dist/components/light-helpers.d.ts.map +1 -1
  71. package/dist/components/lines.d.ts +5 -0
  72. package/dist/components/lines.d.ts.map +1 -0
  73. package/dist/components/mesh-filter.d.ts +7 -7
  74. package/dist/components/mesh-filter.d.ts.map +1 -1
  75. package/dist/components/points.d.ts +15 -0
  76. package/dist/components/points.d.ts.map +1 -0
  77. package/dist/components/scene-instance.d.ts +11 -11
  78. package/dist/components/skybox-background.d.ts +56 -0
  79. package/dist/components/skybox-background.d.ts.map +1 -0
  80. package/dist/components/skylight.d.ts +55 -0
  81. package/dist/components/skylight.d.ts.map +1 -0
  82. package/dist/components/sprite-animation.d.ts +2 -3
  83. package/dist/components/sprite-animation.d.ts.map +1 -1
  84. package/dist/components/sprite-instances.d.ts +1 -1
  85. package/dist/components/sprite-playback-mode.d.ts +6 -1
  86. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  87. package/dist/components/sprite-region-override.d.ts +2 -3
  88. package/dist/components/sprite-region-override.d.ts.map +1 -1
  89. package/dist/components/tile-layer.d.ts +5 -0
  90. package/dist/components/tile-layer.d.ts.map +1 -1
  91. package/dist/construct-renderer.d.ts +18 -1
  92. package/dist/construct-renderer.d.ts.map +1 -1
  93. package/dist/construct-renderer.mjs +27463 -4
  94. package/dist/construct-renderer.mjs.map +1 -1
  95. package/dist/debug-draw-glue.d.ts +2 -53
  96. package/dist/debug-draw-glue.d.ts.map +1 -1
  97. package/dist/device/device-scope.d.ts +83 -0
  98. package/dist/device/device-scope.d.ts.map +1 -0
  99. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  100. package/dist/device/gpu-residency.d.ts.map +1 -0
  101. package/dist/device/resource-types.d.ts +8 -0
  102. package/dist/device/resource-types.d.ts.map +1 -0
  103. package/dist/engine-metrics.d.ts +2 -2
  104. package/dist/engine-metrics.d.ts.map +1 -1
  105. package/dist/errors/recover.d.ts +28 -1
  106. package/dist/errors/recover.d.ts.map +1 -1
  107. package/dist/errors/render.d.ts +320 -248
  108. package/dist/errors/render.d.ts.map +1 -1
  109. package/dist/features/fullscreen.d.ts +19 -0
  110. package/dist/features/fullscreen.d.ts.map +1 -0
  111. package/dist/features/host.d.ts +32 -26
  112. package/dist/features/host.d.ts.map +1 -1
  113. package/dist/features/morph/morph-feature.d.ts +39 -5
  114. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  115. package/dist/features/plan.d.ts +182 -0
  116. package/dist/features/plan.d.ts.map +1 -0
  117. package/dist/features/prepared-gpu-work.d.ts +21 -17
  118. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  119. package/dist/features/prepared-graphics-store.d.ts +2 -1
  120. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  121. package/dist/features/prepared-graphics.d.ts +11 -21
  122. package/dist/features/prepared-graphics.d.ts.map +1 -1
  123. package/dist/features/render-graph-compute.d.ts +2 -2
  124. package/dist/features/render-graph-compute.d.ts.map +1 -1
  125. package/dist/features/render-graph-contribution.d.ts +4 -7
  126. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  127. package/dist/features/render-graph-raster.d.ts +7 -3
  128. package/dist/features/render-graph-raster.d.ts.map +1 -1
  129. package/dist/features/render-graph-resources.d.ts +6 -6
  130. package/dist/features/render-graph-resources.d.ts.map +1 -1
  131. package/dist/features/targets.d.ts +5 -5
  132. package/dist/features/targets.d.ts.map +1 -1
  133. package/dist/features/types.d.ts +11 -190
  134. package/dist/features/types.d.ts.map +1 -1
  135. package/dist/features/vocabulary.d.ts +14 -0
  136. package/dist/features/vocabulary.d.ts.map +1 -0
  137. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  138. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  139. package/dist/glyph-text-layout-system.d.ts +3 -2
  140. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  141. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  142. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  143. package/dist/gpu-driven/production-raster.d.ts +13 -112
  144. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  145. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  146. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  147. package/dist/gpu-resource.d.ts +3 -3
  148. package/dist/gpu-scene-schema.d.ts +1 -94
  149. package/dist/gpu-scene-schema.d.ts.map +1 -1
  150. package/dist/gpu-scene.d.ts +7 -33
  151. package/dist/gpu-scene.d.ts.map +1 -1
  152. package/dist/hdrp-buffers.d.ts +3 -53
  153. package/dist/hdrp-buffers.d.ts.map +1 -1
  154. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  155. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  156. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  157. package/dist/index.d.ts +17 -43
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.mjs +167 -3
  160. package/dist/index.mjs.map +1 -1
  161. package/dist/inspection-types.d.ts +72 -0
  162. package/dist/inspection-types.d.ts.map +1 -0
  163. package/dist/instance-buffer-cache.d.ts +1 -4
  164. package/dist/instance-buffer-cache.d.ts.map +1 -1
  165. package/dist/internal.d.ts +1 -73
  166. package/dist/internal.d.ts.map +1 -1
  167. package/dist/internal.mjs +1 -43
  168. package/dist/internal.mjs.map +1 -1
  169. package/dist/lifecycle.d.ts +36 -2
  170. package/dist/lifecycle.d.ts.map +1 -1
  171. package/dist/materials.d.ts +0 -3
  172. package/dist/materials.d.ts.map +1 -1
  173. package/dist/mesh-material-bindings.d.ts +0 -1
  174. package/dist/mesh-material-bindings.d.ts.map +1 -1
  175. package/dist/pbr-pipeline.d.ts +77 -29
  176. package/dist/pbr-pipeline.d.ts.map +1 -1
  177. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  178. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  179. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  180. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  181. package/dist/pipeline/standard-profile.d.ts +40 -0
  182. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  183. package/dist/pipeline-builder.d.ts +3 -3
  184. package/dist/pipeline-builder.d.ts.map +1 -1
  185. package/dist/pipeline-spec-types.d.ts +24 -0
  186. package/dist/pipeline-spec-types.d.ts.map +1 -0
  187. package/dist/pipeline-spec.d.ts +16 -155
  188. package/dist/pipeline-spec.d.ts.map +1 -1
  189. package/dist/plugin.d.ts +1 -14
  190. package/dist/plugin.d.ts.map +1 -1
  191. package/dist/points-lines/__tests__/bounds.unit.test.d.ts +2 -0
  192. package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +1 -0
  193. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +2 -0
  194. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +1 -0
  195. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +2 -0
  196. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +1 -0
  197. package/dist/points-lines/__tests__/inspection.unit.test.d.ts +2 -0
  198. package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +1 -0
  199. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +2 -0
  200. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +1 -0
  201. package/dist/points-lines/__tests__/points-lines.bench.d.ts +2 -0
  202. package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +1 -0
  203. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +2 -0
  204. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +1 -0
  205. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +2 -0
  206. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +1 -0
  207. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +2 -0
  208. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +1 -0
  209. package/dist/points-lines/admission.d.ts +36 -0
  210. package/dist/points-lines/admission.d.ts.map +1 -0
  211. package/dist/points-lines/bounds.d.ts +8 -0
  212. package/dist/points-lines/bounds.d.ts.map +1 -0
  213. package/dist/points-lines/expansion-cache.d.ts +28 -0
  214. package/dist/points-lines/expansion-cache.d.ts.map +1 -0
  215. package/dist/points-lines/inspection.d.ts +53 -0
  216. package/dist/points-lines/inspection.d.ts.map +1 -0
  217. package/dist/points-lines/prepare.d.ts +67 -0
  218. package/dist/points-lines/prepare.d.ts.map +1 -0
  219. package/dist/points-lines/record.d.ts +60 -0
  220. package/dist/points-lines/record.d.ts.map +1 -0
  221. package/dist/points-lines/snapshot.d.ts +49 -0
  222. package/dist/points-lines/snapshot.d.ts.map +1 -0
  223. package/dist/post-process-errors.d.ts +18 -18
  224. package/dist/post-process-errors.d.ts.map +1 -1
  225. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  226. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  227. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  228. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  229. package/dist/record/frame-lighting.d.ts +7 -73
  230. package/dist/record/frame-lighting.d.ts.map +1 -1
  231. package/dist/record/frame-snapshot.d.ts +44 -44
  232. package/dist/record/frame-snapshot.d.ts.map +1 -1
  233. package/dist/record/frame-targets.d.ts +5 -38
  234. package/dist/record/frame-targets.d.ts.map +1 -1
  235. package/dist/record/frame.d.ts +64 -52
  236. package/dist/record/frame.d.ts.map +1 -1
  237. package/dist/record/helpers.d.ts +3 -2
  238. package/dist/record/helpers.d.ts.map +1 -1
  239. package/dist/record/main-pass-geometry.d.ts +12 -4
  240. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  241. package/dist/record/main-pass-material.d.ts +90 -59
  242. package/dist/record/main-pass-material.d.ts.map +1 -1
  243. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  244. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  245. package/dist/record/main-pass.d.ts +1 -1
  246. package/dist/record/main-pass.d.ts.map +1 -1
  247. package/dist/record/mesh-ssbo.d.ts +276 -3
  248. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  249. package/dist/record/render-context.d.ts +252 -0
  250. package/dist/record/render-context.d.ts.map +1 -0
  251. package/dist/record/shadow-pass.d.ts +15 -88
  252. package/dist/record/shadow-pass.d.ts.map +1 -1
  253. package/dist/record/skybox-post-pass.d.ts +1 -1
  254. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  255. package/dist/record/typed-frame-graph.d.ts +29 -7
  256. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  257. package/dist/record/view-ubo.d.ts +9 -3
  258. package/dist/record/view-ubo.d.ts.map +1 -1
  259. package/dist/render-contract.d.ts +424 -0
  260. package/dist/render-contract.d.ts.map +1 -0
  261. package/dist/render-data.d.ts.map +1 -1
  262. package/dist/render-graph-primitives.d.ts +14 -362
  263. package/dist/render-graph-primitives.d.ts.map +1 -1
  264. package/dist/render-pipeline.d.ts +25 -64
  265. package/dist/render-pipeline.d.ts.map +1 -1
  266. package/dist/render-system-extract.d.ts +110 -338
  267. package/dist/render-system-extract.d.ts.map +1 -1
  268. package/dist/render-system.d.ts +24 -713
  269. package/dist/render-system.d.ts.map +1 -1
  270. package/dist/scene/render-scene-types.d.ts +61 -0
  271. package/dist/scene/render-scene-types.d.ts.map +1 -0
  272. package/dist/scene/render-scene.d.ts +112 -0
  273. package/dist/scene/render-scene.d.ts.map +1 -0
  274. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  275. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  276. package/dist/ssao-buffers.d.ts +22 -3
  277. package/dist/ssao-buffers.d.ts.map +1 -1
  278. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  279. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  280. package/dist/systems/skin-palette-types.d.ts +14 -0
  281. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  282. package/dist/systems/transparent-sort-config.d.ts +23 -2
  283. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  284. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  285. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  286. package/dist/typed-render-graph-primitives.d.ts +2 -4
  287. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  288. package/dist/typed-shadow-passes.d.ts +3 -3
  289. package/dist/typed-shadow-passes.d.ts.map +1 -1
  290. package/package.json +23 -23
  291. package/src/__tests__/authoring-path.unit.test.ts +9 -0
  292. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  293. package/src/__tests__/callback-inference.test-d.ts +6 -3
  294. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  295. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  296. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  297. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  298. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  299. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  300. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  301. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  302. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  303. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  304. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  305. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +21 -18
  306. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  307. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  308. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  309. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  310. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  311. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  312. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  313. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  314. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  315. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  316. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  317. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  318. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  319. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  320. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  321. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  322. package/src/__tests__/material-cooked-projection.unit.test.ts +31 -58
  323. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  324. package/src/__tests__/material-static-dynamic-route.unit.test.ts +31 -50
  325. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  326. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  327. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  328. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  329. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  330. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  331. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  332. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  333. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  334. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  335. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  336. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  337. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  338. package/src/__tests__/profiler-default-off.test.ts +1 -1
  339. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  340. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  341. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  342. package/src/__tests__/public-surface.test-d.ts +65 -3
  343. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  344. package/src/__tests__/render-error-code-owner.test-d.ts +24 -23
  345. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  346. package/src/__tests__/render-error-exhaustive.test-d.ts +27 -1
  347. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  348. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  349. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  350. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  351. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  352. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  353. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  354. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  355. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  356. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  357. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  358. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  359. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  360. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  361. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  362. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  363. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  364. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  365. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  366. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  367. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  368. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  369. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  370. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +82 -95
  371. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  372. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  373. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  374. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  375. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  376. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  377. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  378. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  379. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  380. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  381. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  382. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  383. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  384. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  385. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  386. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  387. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  388. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  389. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  390. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  391. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  392. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  393. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  394. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  395. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  396. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  397. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  398. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  399. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  400. package/src/assembly/backend-contract.ts +57 -0
  401. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1741 -2699
  402. package/src/assembly/host-contract.ts +101 -0
  403. package/src/{renderer → assembly}/material/assembly.ts +2 -7
  404. package/src/assembly/material/pipeline-projection.ts +63 -0
  405. package/src/authoring.ts +15 -22
  406. package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
  407. package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
  408. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  409. package/src/components/glyph-text.ts +3 -2
  410. package/src/components/index.ts +14 -9
  411. package/src/components/instances.ts +4 -5
  412. package/src/components/light-helpers.ts +1 -1
  413. package/src/components/lines.ts +18 -0
  414. package/src/components/mesh-filter.ts +11 -10
  415. package/src/components/points.ts +40 -0
  416. package/src/components/post-process-params.ts +3 -3
  417. package/src/components/scene-instance.ts +12 -12
  418. package/src/components/skybox-background.ts +103 -0
  419. package/src/components/{environment.ts → skylight.ts} +2 -110
  420. package/src/components/sprite-animation.ts +3 -4
  421. package/src/components/sprite-instances.ts +2 -2
  422. package/src/components/sprite-playback-mode.ts +7 -1
  423. package/src/components/sprite-region-override.ts +2 -3
  424. package/src/components/tile-layer.ts +8 -2
  425. package/src/construct-renderer.ts +67 -4
  426. package/src/debug-draw-glue.ts +8 -129
  427. package/src/device/device-scope.ts +306 -0
  428. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  429. package/src/device/resource-types.ts +20 -0
  430. package/src/engine-metrics.ts +12 -19
  431. package/src/errors/recover.ts +45 -3
  432. package/src/errors/render.ts +469 -429
  433. package/src/features/fullscreen.ts +46 -0
  434. package/src/features/host.ts +575 -309
  435. package/src/features/morph/morph-feature.ts +195 -105
  436. package/src/features/plan.ts +447 -0
  437. package/src/features/prepared-gpu-work.ts +72 -15
  438. package/src/features/prepared-graphics-store.ts +20 -6
  439. package/src/features/prepared-graphics.ts +12 -71
  440. package/src/features/render-graph-compute.ts +14 -5
  441. package/src/features/render-graph-contribution.ts +43 -63
  442. package/src/features/render-graph-raster.ts +32 -8
  443. package/src/features/render-graph-resources.ts +25 -23
  444. package/src/features/targets.ts +8 -21
  445. package/src/features/types.ts +39 -227
  446. package/src/features/vocabulary.ts +24 -0
  447. package/src/fullscreen-post-process-pass.ts +14 -57
  448. package/src/glyph-text-layout-system.ts +70 -96
  449. package/src/gpu-driven/batch-topology.ts +24 -202
  450. package/src/gpu-driven/production-raster.ts +99 -1109
  451. package/src/gpu-driven/view-gpu.ts +46 -192
  452. package/src/gpu-resource.ts +4 -4
  453. package/src/gpu-scene-schema.ts +11 -99
  454. package/src/gpu-scene.ts +231 -364
  455. package/src/hdrp-buffers.ts +12 -221
  456. package/src/ibl/IblPipelineCache.ts +471 -711
  457. package/src/ibl/skylight-bind-group.ts +4 -4
  458. package/src/index.ts +75 -217
  459. package/src/inspection-types.ts +80 -0
  460. package/src/instance-buffer-cache.ts +1 -29
  461. package/src/internal.ts +6 -85
  462. package/src/lifecycle.ts +64 -19
  463. package/src/materials.ts +7 -29
  464. package/src/mesh-material-bindings.ts +0 -1
  465. package/src/pbr-pipeline.ts +441 -53
  466. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  467. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  468. package/src/pipeline/standard-profile.ts +65 -0
  469. package/src/pipeline-builder.ts +60 -64
  470. package/src/pipeline-spec-types.ts +28 -0
  471. package/src/pipeline-spec.ts +72 -609
  472. package/src/plugin.ts +7 -75
  473. package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
  474. package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
  475. package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
  476. package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
  477. package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
  478. package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
  479. package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
  480. package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
  481. package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
  482. package/src/points-lines/admission.ts +238 -0
  483. package/src/points-lines/bounds.ts +23 -0
  484. package/src/points-lines/expansion-cache.ts +215 -0
  485. package/src/points-lines/inspection.ts +97 -0
  486. package/src/points-lines/prepare.ts +177 -0
  487. package/src/points-lines/record.ts +125 -0
  488. package/src/points-lines/snapshot.ts +130 -0
  489. package/src/post-process-errors.ts +31 -33
  490. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  491. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  492. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  493. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  494. package/src/record/frame-lighting.ts +88 -197
  495. package/src/record/frame-snapshot.ts +45 -60
  496. package/src/record/frame-targets.ts +8 -243
  497. package/src/record/frame.ts +521 -797
  498. package/src/record/helpers.ts +6 -11
  499. package/src/record/main-pass-geometry.ts +198 -147
  500. package/src/record/main-pass-material.ts +517 -190
  501. package/src/record/main-pass-sprite-draws.ts +199 -118
  502. package/src/record/main-pass.ts +166 -144
  503. package/src/record/mesh-ssbo.ts +517 -38
  504. package/src/record/render-context.ts +384 -0
  505. package/src/record/shadow-pass.ts +154 -1843
  506. package/src/record/skybox-post-pass.ts +14 -15
  507. package/src/record/typed-frame-graph.ts +224 -262
  508. package/src/record/view-ubo.ts +53 -37
  509. package/src/render-contract.ts +582 -0
  510. package/src/render-data.ts +3 -3
  511. package/src/render-graph-primitives.ts +76 -851
  512. package/src/render-pipeline.ts +104 -188
  513. package/src/render-system-extract.ts +1114 -1732
  514. package/src/render-system.ts +614 -1939
  515. package/src/scene/render-scene-types.ts +67 -0
  516. package/src/scene/render-scene.ts +1087 -0
  517. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  518. package/src/ssao-buffers.ts +167 -8
  519. package/src/systems/skin-palette-allocator.ts +21 -64
  520. package/src/systems/skin-palette-types.ts +14 -0
  521. package/src/systems/transparent-sort-config.ts +25 -3
  522. package/src/tilemap-chunk-extract-system.ts +53 -70
  523. package/src/typed-render-graph-primitives.ts +35 -24
  524. package/src/typed-shadow-passes.ts +26 -56
  525. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  526. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  527. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  528. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  529. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  530. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  531. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  532. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  533. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  534. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  535. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  536. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  537. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  538. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  539. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  540. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  541. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  542. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  543. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  544. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  545. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  546. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  547. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  548. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  549. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  550. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  551. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  552. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  553. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  554. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  555. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  556. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  557. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  558. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  559. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  560. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  561. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  562. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  563. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  564. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  565. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  566. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  567. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  568. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  569. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  570. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  571. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  572. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  573. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  574. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  575. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  576. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  577. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  578. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  579. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  580. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  581. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  582. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  583. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  584. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  585. package/dist/__tests__/plugin.test.d.ts +0 -2
  586. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  587. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  588. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  589. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  590. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  591. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  592. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  593. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  594. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  595. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  596. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  597. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  598. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  599. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  600. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  601. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  602. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  603. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  604. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  605. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  606. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  607. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  608. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  609. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  610. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  611. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  612. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  613. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  614. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  615. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  616. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  617. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  618. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  619. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  620. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  621. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  622. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  623. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  624. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  625. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  626. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  627. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  628. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  629. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  630. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  631. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  632. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  633. package/dist/chunk-DJIMFYX6.mjs +0 -1439
  634. package/dist/chunk-DJIMFYX6.mjs.map +0 -1
  635. package/dist/chunk-F2SIOCRM.mjs +0 -7423
  636. package/dist/chunk-F2SIOCRM.mjs.map +0 -1
  637. package/dist/chunk-JMSB7AR4.mjs +0 -3
  638. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  639. package/dist/chunk-KHI6K4C6.mjs +0 -659
  640. package/dist/chunk-KHI6K4C6.mjs.map +0 -1
  641. package/dist/chunk-PORZOL2V.mjs +0 -569
  642. package/dist/chunk-PORZOL2V.mjs.map +0 -1
  643. package/dist/chunk-UOJGMDGP.mjs +0 -29913
  644. package/dist/chunk-UOJGMDGP.mjs.map +0 -1
  645. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  646. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  647. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  648. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  649. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  650. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  651. package/dist/components/__tests__/fog.test.d.ts +0 -2
  652. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  653. package/dist/components/atmosphere.d.ts +0 -18
  654. package/dist/components/atmosphere.d.ts.map +0 -1
  655. package/dist/components/environment.d.ts +0 -115
  656. package/dist/components/environment.d.ts.map +0 -1
  657. package/dist/deferred-lighting.d.ts +0 -13
  658. package/dist/deferred-lighting.d.ts.map +0 -1
  659. package/dist/dynamic-texture-store.d.ts +0 -42
  660. package/dist/dynamic-texture-store.d.ts.map +0 -1
  661. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  662. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  663. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  664. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  665. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  666. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  667. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  668. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  669. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  670. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  671. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  672. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  673. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  674. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  675. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  676. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  677. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  678. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  679. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  680. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  681. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  682. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  683. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  684. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  685. package/dist/environment/descriptors.d.ts +0 -2
  686. package/dist/environment/descriptors.d.ts.map +0 -1
  687. package/dist/environment/extracted-environment.d.ts +0 -53
  688. package/dist/environment/extracted-environment.d.ts.map +0 -1
  689. package/dist/environment/generation.d.ts +0 -62
  690. package/dist/environment/generation.d.ts.map +0 -1
  691. package/dist/environment/gpu-bundle.d.ts +0 -23
  692. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  693. package/dist/environment/graph.d.ts +0 -108
  694. package/dist/environment/graph.d.ts.map +0 -1
  695. package/dist/environment/inspection.d.ts +0 -48
  696. package/dist/environment/inspection.d.ts.map +0 -1
  697. package/dist/environment/lifecycle.d.ts +0 -22
  698. package/dist/environment/lifecycle.d.ts.map +0 -1
  699. package/dist/environment/readiness.d.ts +0 -29
  700. package/dist/environment/readiness.d.ts.map +0 -1
  701. package/dist/environment/signature.d.ts +0 -70
  702. package/dist/environment/signature.d.ts.map +0 -1
  703. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  704. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  705. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  706. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  707. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  708. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  709. package/dist/extract/directional-csm.d.ts +0 -129
  710. package/dist/extract/directional-csm.d.ts.map +0 -1
  711. package/dist/extract/index.d.ts +0 -5
  712. package/dist/extract/index.d.ts.map +0 -1
  713. package/dist/extract/material-interface.d.ts +0 -56
  714. package/dist/extract/material-interface.d.ts.map +0 -1
  715. package/dist/extract/schema-readers.d.ts +0 -20
  716. package/dist/extract/schema-readers.d.ts.map +0 -1
  717. package/dist/features/graph-contribution.d.ts +0 -64
  718. package/dist/features/graph-contribution.d.ts.map +0 -1
  719. package/dist/features/index.d.ts +0 -21
  720. package/dist/features/index.d.ts.map +0 -1
  721. package/dist/features/morph/index.d.ts +0 -3
  722. package/dist/features/morph/index.d.ts.map +0 -1
  723. package/dist/features/morph/morph-bounds.d.ts +0 -42
  724. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  725. package/dist/features/scene-temporal.d.ts +0 -45
  726. package/dist/features/scene-temporal.d.ts.map +0 -1
  727. package/dist/features/taa-resolve.d.ts +0 -21
  728. package/dist/features/taa-resolve.d.ts.map +0 -1
  729. package/dist/frame-chain.d.ts +0 -14
  730. package/dist/frame-chain.d.ts.map +0 -1
  731. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  732. package/dist/gpu-resource-store.d.ts.map +0 -1
  733. package/dist/hdrp-cluster-membership.d.ts +0 -2
  734. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  735. package/dist/hdrp-pipeline.d.ts +0 -36
  736. package/dist/hdrp-pipeline.d.ts.map +0 -1
  737. package/dist/ibl/cubemap-projection.d.ts +0 -23
  738. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  739. package/dist/ibl/face-uniforms.d.ts +0 -65
  740. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  741. package/dist/mesh-update-errors.d.ts +0 -71
  742. package/dist/mesh-update-errors.d.ts.map +0 -1
  743. package/dist/mipmap-generator.d.ts +0 -39
  744. package/dist/mipmap-generator.d.ts.map +0 -1
  745. package/dist/param-schema-projection-census.d.ts +0 -18
  746. package/dist/param-schema-projection-census.d.ts.map +0 -1
  747. package/dist/persistent-render-scene.d.ts +0 -158
  748. package/dist/persistent-render-scene.d.ts.map +0 -1
  749. package/dist/pipeline/index.d.ts +0 -11
  750. package/dist/pipeline/index.d.ts.map +0 -1
  751. package/dist/pipeline-errors.d.ts +0 -110
  752. package/dist/pipeline-errors.d.ts.map +0 -1
  753. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  754. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  755. package/dist/prepare/index.d.ts +0 -4
  756. package/dist/prepare/index.d.ts.map +0 -1
  757. package/dist/prepare/schema-readers.d.ts +0 -11
  758. package/dist/prepare/schema-readers.d.ts.map +0 -1
  759. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  760. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  761. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  762. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  763. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  764. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  765. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  766. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  767. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  768. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  769. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  770. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  771. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  772. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  773. package/dist/record/frame-observation.d.ts +0 -38
  774. package/dist/record/frame-observation.d.ts.map +0 -1
  775. package/dist/record/index.d.ts +0 -15
  776. package/dist/record/index.d.ts.map +0 -1
  777. package/dist/record/main-pass-skin.d.ts +0 -46
  778. package/dist/record/main-pass-skin.d.ts.map +0 -1
  779. package/dist/record/main-pass-sprite.d.ts +0 -69
  780. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  781. package/dist/record/material-payload.d.ts +0 -43
  782. package/dist/record/material-payload.d.ts.map +0 -1
  783. package/dist/record/material-slot-plan.d.ts +0 -26
  784. package/dist/record/material-slot-plan.d.ts.map +0 -1
  785. package/dist/record/membership-timing.d.ts +0 -232
  786. package/dist/record/membership-timing.d.ts.map +0 -1
  787. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  788. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  789. package/dist/record/shadow-submit-mode.d.ts +0 -66
  790. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  791. package/dist/render-dispatch-membership.d.ts +0 -47
  792. package/dist/render-dispatch-membership.d.ts.map +0 -1
  793. package/dist/render-pipeline-context.d.ts +0 -289
  794. package/dist/render-pipeline-context.d.ts.map +0 -1
  795. package/dist/render-pipeline-target.d.ts +0 -16
  796. package/dist/render-pipeline-target.d.ts.map +0 -1
  797. package/dist/render-scene-projection.d.ts +0 -174
  798. package/dist/render-scene-projection.d.ts.map +0 -1
  799. package/dist/render-system-fold.d.ts +0 -266
  800. package/dist/render-system-fold.d.ts.map +0 -1
  801. package/dist/renderer/asset-service.d.ts +0 -10
  802. package/dist/renderer/asset-service.d.ts.map +0 -1
  803. package/dist/renderer/backend-selection.d.ts.map +0 -1
  804. package/dist/renderer/environment-classify.d.ts +0 -6
  805. package/dist/renderer/environment-classify.d.ts.map +0 -1
  806. package/dist/renderer/environment-error.d.ts +0 -13
  807. package/dist/renderer/environment-error.d.ts.map +0 -1
  808. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  809. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  810. package/dist/renderer/renderer-factory.d.ts +0 -289
  811. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  812. package/dist/renderer.d.ts +0 -771
  813. package/dist/renderer.d.ts.map +0 -1
  814. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  815. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  816. package/dist/ssao-data.d.ts +0 -34
  817. package/dist/ssao-data.d.ts.map +0 -1
  818. package/dist/surface-format.d.ts +0 -10
  819. package/dist/surface-format.d.ts.map +0 -1
  820. package/dist/taa-history-store.d.ts +0 -88
  821. package/dist/taa-history-store.d.ts.map +0 -1
  822. package/dist/temporal-coverage.d.ts +0 -35
  823. package/dist/temporal-coverage.d.ts.map +0 -1
  824. package/dist/temporal-frame-transaction.d.ts +0 -92
  825. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  826. package/dist/temporal-inspection.d.ts +0 -57
  827. package/dist/temporal-inspection.d.ts.map +0 -1
  828. package/dist/temporal-view.d.ts +0 -43
  829. package/dist/temporal-view.d.ts.map +0 -1
  830. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  831. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  832. package/dist/urp-pipeline.d.ts +0 -4
  833. package/dist/urp-pipeline.d.ts.map +0 -1
  834. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  835. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  836. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  837. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  838. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  839. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  840. package/src/__tests__/camera-temporal.test.ts +0 -188
  841. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  842. package/src/__tests__/environment-inspection.test.ts +0 -45
  843. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  844. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  845. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  846. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  847. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  848. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  849. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  850. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  851. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  852. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  853. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  854. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  855. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  856. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  857. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  858. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  859. package/src/__tests__/materials.unit.test.ts +0 -25
  860. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  861. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  862. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  863. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  864. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  865. package/src/__tests__/plugin.test.ts +0 -25
  866. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  867. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  868. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  869. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  870. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  871. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  872. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  873. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  874. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  875. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  876. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  877. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  878. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  879. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  880. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  881. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  882. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  883. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  884. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  885. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  886. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  887. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  888. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  889. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  890. package/src/components/__tests__/atmosphere.test.ts +0 -79
  891. package/src/components/__tests__/fog.test-d.ts +0 -49
  892. package/src/components/__tests__/fog.test.ts +0 -60
  893. package/src/components/atmosphere.ts +0 -64
  894. package/src/deferred-lighting.ts +0 -92
  895. package/src/dynamic-texture-store.ts +0 -111
  896. package/src/environment/README.md +0 -76
  897. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  898. package/src/environment/__tests__/generation-red.test.ts +0 -64
  899. package/src/environment/__tests__/generation.test.ts +0 -37
  900. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  901. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  902. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  903. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  904. package/src/environment/__tests__/readiness.test.ts +0 -42
  905. package/src/environment/__tests__/recovery.test.ts +0 -62
  906. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  907. package/src/environment/__tests__/signature-red.test.ts +0 -45
  908. package/src/environment/__tests__/signature.test.ts +0 -60
  909. package/src/environment/descriptors.ts +0 -7
  910. package/src/environment/extracted-environment.ts +0 -239
  911. package/src/environment/generation.ts +0 -158
  912. package/src/environment/gpu-bundle.ts +0 -144
  913. package/src/environment/graph.ts +0 -588
  914. package/src/environment/inspection.ts +0 -107
  915. package/src/environment/lifecycle.ts +0 -124
  916. package/src/environment/readiness.ts +0 -76
  917. package/src/environment/signature.ts +0 -185
  918. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  919. package/src/extract/__tests__/environment-source.test.ts +0 -105
  920. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  921. package/src/extract/directional-csm.ts +0 -959
  922. package/src/extract/index.ts +0 -10
  923. package/src/extract/material-interface.ts +0 -604
  924. package/src/extract/schema-readers.ts +0 -27
  925. package/src/features/graph-contribution.ts +0 -577
  926. package/src/features/index.ts +0 -100
  927. package/src/features/morph/index.ts +0 -24
  928. package/src/features/morph/morph-bounds.ts +0 -123
  929. package/src/features/scene-temporal.ts +0 -274
  930. package/src/features/taa-resolve.ts +0 -244
  931. package/src/frame-chain.ts +0 -21
  932. package/src/hdrp-cluster-membership.ts +0 -70
  933. package/src/ibl/cubemap-projection.ts +0 -60
  934. package/src/ibl/face-uniforms.ts +0 -150
  935. package/src/mesh-update-errors.ts +0 -113
  936. package/src/mipmap-generator.ts +0 -244
  937. package/src/param-schema-projection-census.ts +0 -73
  938. package/src/persistent-render-scene.ts +0 -1752
  939. package/src/pipeline/index.ts +0 -40
  940. package/src/pipeline-errors.ts +0 -172
  941. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  942. package/src/prepare/index.ts +0 -8
  943. package/src/prepare/schema-readers.ts +0 -20
  944. package/src/record/__tests__/environment-record.test.ts +0 -35
  945. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  946. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  947. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  948. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  949. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  950. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  951. package/src/record/frame-observation.ts +0 -122
  952. package/src/record/index.ts +0 -15
  953. package/src/record/main-pass-skin.ts +0 -51
  954. package/src/record/main-pass-sprite.ts +0 -166
  955. package/src/record/material-payload.ts +0 -292
  956. package/src/record/material-slot-plan.ts +0 -68
  957. package/src/record/membership-timing.ts +0 -1012
  958. package/src/record/shadow-caster-uniform.ts +0 -37
  959. package/src/record/shadow-submit-mode.ts +0 -277
  960. package/src/render-dispatch-membership.ts +0 -155
  961. package/src/render-pipeline-context.ts +0 -332
  962. package/src/render-pipeline-target.ts +0 -96
  963. package/src/render-scene-projection.ts +0 -1738
  964. package/src/render-system-fold.ts +0 -531
  965. package/src/renderer/asset-service.ts +0 -32
  966. package/src/renderer/backend-selection.ts +0 -121
  967. package/src/renderer/environment-classify.ts +0 -30
  968. package/src/renderer/environment-error.ts +0 -19
  969. package/src/renderer/material/pipeline-projection.ts +0 -140
  970. package/src/renderer.ts +0 -940
  971. package/src/scene-utils/collect-subtree.ts +0 -40
  972. package/src/ssao-data.ts +0 -106
  973. package/src/surface-format.ts +0 -37
  974. package/src/taa-history-store.ts +0 -429
  975. package/src/temporal-coverage.ts +0 -106
  976. package/src/temporal-frame-transaction.ts +0 -301
  977. package/src/temporal-inspection.ts +0 -194
  978. package/src/temporal-view.ts +0 -174
  979. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
@@ -1,12 +1,6 @@
1
1
  import type { EntityHandle } from '@forgeax/engine-ecs';
2
- import type { RhiCaps } from '@forgeax/engine-rhi';
3
- import {
4
- err,
5
- type MaterialAsset,
6
- type MaterialError,
7
- ok,
8
- type Result,
9
- } from '@forgeax/engine-types';
2
+ import type { RhiCaps, TextureFormat } from '@forgeax/engine-rhi';
3
+ import { err, ok, type Result } from '@forgeax/engine-types';
10
4
  import {
11
5
  type RenderError,
12
6
  RenderFeatureCapabilityMissingError,
@@ -14,25 +8,35 @@ import {
14
8
  RenderFeatureRegistrationConflictError,
15
9
  RenderFeatureStageFailedError,
16
10
  } from '../errors/render';
11
+ import type { PostProcessShaderEntry } from '../fullscreen-post-process-pass';
17
12
  import type {
18
13
  PreparedGraphicsReference,
19
14
  PreparedGraphicsResolvedSnapshot,
20
15
  PreparedGraphicsResolver,
21
16
  PreparedGraphicsResourceLease,
22
17
  } from '../prepare/prepared-graphics-resolver';
18
+ import {
19
+ freezeRenderFeaturePlan,
20
+ type RenderFeatureLogicalTarget,
21
+ type RenderFeaturePassDeclaration,
22
+ type RenderFeaturePlan,
23
+ type RenderFeaturePlannedFrame,
24
+ type RenderFeatureResourceDeclaration,
25
+ renderFeaturePlanSignature,
26
+ } from './plan';
23
27
  import type {
24
- RenderFeatureContributionStaging,
25
- RenderFeatureGpuComputeResolver,
26
- RenderFeatureGraphContribution,
27
- RenderFeatureGraphicsValidator,
28
- } from './graph-contribution';
29
- import { createRenderFeatureContributionStaging } from './graph-contribution';
30
- import type { RenderFeatureGpuWorkResolver } from './prepared-gpu-work';
28
+ RenderFeatureGpuBindingsRef,
29
+ RenderFeatureGpuBufferRef,
30
+ RenderFeatureGpuComputePassDescriptor,
31
+ RenderFeatureGpuPrepareSession,
32
+ RenderFeatureGpuProgramRef,
33
+ RenderFeatureGpuWorkOwner,
34
+ } from './prepared-gpu-work';
31
35
  import {
32
- createRenderFeatureGraphicsPrepare,
33
- type RenderFeatureGraphicsContributionStaging,
36
+ type RenderFeatureGraphicsPassDescriptor,
34
37
  type RenderFeatureGraphicsPrepare,
35
- type RenderFeatureMaterialShaderBindingContract,
38
+ type RenderFeaturePreparedGraphicsState,
39
+ type RenderFeaturePreparedRef,
36
40
  validateRenderFeatureGraphicsPass,
37
41
  } from './prepared-graphics';
38
42
  import {
@@ -48,18 +52,46 @@ import type {
48
52
  RenderFeatureErrorDescriptor,
49
53
  RenderFeatureExtractContext,
50
54
  RenderFeatureHiddenEntityReport,
51
- RenderFeaturePrepareContext,
52
55
  RenderFeatureRecoverInput,
53
- RenderFeatureResourceHandle,
54
56
  RenderFeatureStatus,
55
57
  RenderFeatureTargetHandle,
56
58
  RenderFeatureWorldVisibilitySnapshot,
57
59
  } from './types';
58
60
 
61
+ const planExecutionProjections = new WeakMap<
62
+ RenderFeaturePlannedFrame,
63
+ RenderFeaturePlanExecution
64
+ >();
65
+
66
+ export interface RenderFeaturePlanExecutionPass {
67
+ readonly featureIdentity: string;
68
+ readonly order: number;
69
+ readonly name: string;
70
+ readonly graphics?: RenderFeatureGraphicsPassDescriptor;
71
+ readonly graphicsState?: RenderFeaturePreparedGraphicsState;
72
+ readonly gpuCompute?: RenderFeatureGpuComputePassDescriptor;
73
+ readonly resolvedGraphics?: PreparedGraphicsResolvedSnapshot;
74
+ readonly resolvedGpuCompute?: import('./prepared-gpu-work').RenderFeatureResolvedGpuComputePass;
75
+ }
76
+
77
+ /** Host-owned device projection of one frozen plan; graph access is derived later. */
78
+ export interface RenderFeaturePlanExecution {
79
+ readonly featureIdentity: string;
80
+ readonly order: number;
81
+ readonly passes: readonly RenderFeaturePlanExecutionPass[];
82
+ }
83
+
84
+ /** @internal Typed-graph adapter for the host-owned projection of a validated plan. */
85
+ export function getRenderFeaturePlanExecutionProjection(
86
+ planned: RenderFeaturePlannedFrame,
87
+ ): RenderFeaturePlanExecution | undefined {
88
+ return planExecutionProjections.get(planned);
89
+ }
90
+
59
91
  export interface RenderFeatureStageEvent {
60
92
  readonly featureIdentity: string;
61
93
  readonly order: number;
62
- readonly stage: 'extract' | 'prepare' | 'contribute';
94
+ readonly stage: 'extract' | 'plan';
63
95
  }
64
96
 
65
97
  export interface RenderFeatureFrameInput {
@@ -72,22 +104,11 @@ export interface RenderFeatureFrameInput {
72
104
  readonly targets?: readonly RenderFeatureTargetHandle[];
73
105
  readonly generation?: number;
74
106
  readonly caps: Readonly<RhiCaps>;
75
- readonly createContributionStaging?: (
76
- featureIdentity: string,
77
- order: number,
78
- validateGraphics?: RenderFeatureGraphicsValidator,
79
- resolveGraphics?: import('./graph-contribution').RenderFeatureGraphicsResolver,
80
- resolveGpuCompute?: RenderFeatureGpuComputeResolver,
81
- ) => RenderFeatureContributionStaging & RenderFeatureGraphicsContributionStaging;
82
107
  readonly createPreparedGraphicsResolver?: (
83
108
  input: RenderFeaturePreparedGraphicsResolverInput,
84
109
  ) => PreparedGraphicsResolver;
85
- readonly getMaterialShaderBindingContract?: (
86
- materialShaderId: string,
87
- ) => RenderFeatureMaterialShaderBindingContract;
88
- /** Render-owned cooked material projection used by prepared graphics. */
89
- readonly resolveMaterialAsset?: (material: MaterialAsset) => Result<MaterialAsset, MaterialError>;
90
- readonly getGpuWorkResolver?: (featureIdentity: string) => RenderFeatureGpuWorkResolver;
110
+ /** Single renderer-owned GPU preparation owner for all feature sessions. */
111
+ readonly gpuWork?: RenderFeatureGpuWorkOwner;
91
112
  }
92
113
 
93
114
  export interface RenderFeaturePreparedGraphicsResolverInput {
@@ -95,25 +116,21 @@ export interface RenderFeaturePreparedGraphicsResolverInput {
95
116
  readonly order: number;
96
117
  readonly generation: number;
97
118
  readonly transaction: PreparedGraphicsTransaction;
119
+ readonly fullscreenEffects: ReadonlyMap<string, PostProcessShaderEntry>;
98
120
  readonly lookup: (
99
121
  reference: import('./prepared-graphics').RenderFeaturePreparedRef,
100
122
  ) => import('./prepared-graphics-store').PreparedGraphicsItem | undefined;
101
123
  }
102
124
 
103
125
  export interface RenderFeatureFrameResult {
104
- readonly events: readonly string[];
105
126
  readonly stageEvents: readonly RenderFeatureStageEvent[];
106
127
  readonly errors: readonly RenderError[];
107
- readonly contributions: readonly RenderFeatureGraphContribution[];
128
+ readonly plans: readonly RenderFeaturePlannedFrame[];
129
+ readonly fullscreenEffects: ReadonlyMap<string, PostProcessShaderEntry>;
108
130
  readonly preparedResourceBatches: readonly RenderFeaturePreparedResourceBatch[];
109
131
  readonly hiddenEntityReports: readonly RenderFeatureHiddenEntityReport[];
110
132
  }
111
133
 
112
- export interface RenderFeatureOwnedResource {
113
- readonly handle: RenderFeatureResourceHandle;
114
- readonly release: () => Result<void, RenderError>;
115
- }
116
-
117
134
  export interface RenderFeatureHost {
118
135
  readonly size: number;
119
136
  readonly features: readonly RenderFeature<unknown>[];
@@ -123,10 +140,6 @@ export interface RenderFeatureHost {
123
140
  /** Remove one installed producer and release every resource it owns. */
124
141
  uninstall(feature: RenderFeature<unknown>): Result<void, RenderError>;
125
142
  advancePreparedGeneration(): number;
126
- registerResource(
127
- identity: string,
128
- resource: RenderFeatureOwnedResource,
129
- ): Result<void, RenderError>;
130
143
  setStatus(
131
144
  identity: string,
132
145
  status: RenderFeatureStatus,
@@ -189,7 +202,6 @@ export function settlePreparedGraphicsCompletion(
189
202
  interface FeatureSlot {
190
203
  readonly feature: RenderFeature<unknown>;
191
204
  order: number;
192
- readonly resources: RenderFeatureOwnedResource[];
193
205
  readonly preparedResourceBatches: Set<RenderFeaturePreparedResourceBatch>;
194
206
  readonly preparedStore: PreparedGraphicsStore;
195
207
  status: RenderFeatureStatus;
@@ -245,43 +257,10 @@ function missingCapability(
245
257
  return feature.requiredCapabilities?.find((capability) => caps[capability] !== true);
246
258
  }
247
259
 
248
- function lifecycleContext(input: RenderFeatureRecoverInput): RenderFeaturePrepareContext {
249
- return {
250
- caps: input.caps,
251
- frame: { frameNumber: input.frameNumber },
252
- resources: [],
253
- targets: [],
254
- reportError: { report: () => undefined },
255
- graphics: createRenderFeatureGraphicsPrepare('renderer.lifecycle', -1),
256
- };
257
- }
258
-
259
260
  function createPreparedGraphicsPrepare(
260
261
  transaction: PreparedGraphicsTransaction,
261
- getMaterialShaderBindingContract?: (
262
- materialShaderId: string,
263
- ) => RenderFeatureMaterialShaderBindingContract,
264
- resolveMaterialAsset?: (material: MaterialAsset) => Result<MaterialAsset, MaterialError>,
265
- featureIdentity = 'renderer.lifecycle',
266
- order = -1,
267
262
  ): RenderFeatureGraphicsPrepare {
268
263
  return {
269
- resolveMaterialAsset: (material) => {
270
- const resolved = resolveMaterialAsset?.(material);
271
- if (resolved === undefined || resolved.ok) return resolved ?? ok(material);
272
- return err(
273
- new RenderFeaturePreparationFailedError(
274
- featureIdentity,
275
- order,
276
- 'resolve-material-asset',
277
- 'pipeline',
278
- 'material-asset',
279
- resolved.error.code,
280
- 'next-frame',
281
- ),
282
- );
283
- },
284
- getMaterialShaderBindingContract: getMaterialShaderBindingContract ?? (() => 'render-material'),
285
264
  preparePipeline: (name, descriptor) => transaction.prepare('pipeline', name, descriptor),
286
265
  prepareBindings: (name, descriptor) => transaction.prepare('bindings', name, descriptor),
287
266
  prepareVertexData: (name, descriptor) => transaction.prepare('vertex-data', name, descriptor),
@@ -329,7 +308,10 @@ function graphicsValidator(
329
308
  identity: string,
330
309
  transaction: PreparedGraphicsTransaction,
331
310
  capabilityAvailable: boolean,
332
- ): RenderFeatureGraphicsValidator {
311
+ ): (
312
+ descriptor: RenderFeatureGraphicsPassDescriptor,
313
+ resources: readonly { readonly name: string }[],
314
+ ) => Result<RenderFeaturePreparedGraphicsState, RenderError> {
333
315
  return (descriptor, resources) => {
334
316
  const attachments = [
335
317
  ...descriptor.attachments.colors
@@ -360,74 +342,11 @@ function graphicsValidator(
360
342
  };
361
343
  }
362
344
 
363
- function invokeLifecycle(
364
- slot: FeatureSlot,
365
- stage: 'recover' | 'dispose',
366
- input: RenderFeatureRecoverInput,
367
- ): Result<void, RenderError> {
368
- const callback = slot.feature[stage];
369
- if (callback === undefined) return ok(undefined);
370
- try {
371
- const result = callback(lifecycleContext(input));
372
- return result.ok ? result : err(result.error);
373
- } catch (_failure) {
374
- return err(
375
- new RenderFeatureStageFailedError(
376
- slot.feature.identity,
377
- slot.order,
378
- stage,
379
- 'renderer-recover',
380
- ),
381
- );
382
- }
383
- }
384
-
385
- function releaseResource(
386
- slot: FeatureSlot,
387
- resource: RenderFeatureOwnedResource,
388
- ): Result<void, RenderError> {
389
- try {
390
- return resource.release();
391
- } catch {
392
- return err(unknownFeatureError(slot.feature.identity, 'dispose'));
393
- }
394
- }
395
-
396
- function cleanupErrorDescriptor(
397
- error: RenderError,
398
- slot: FeatureSlot,
399
- ): RenderFeatureCleanupFailure {
400
- return {
401
- featureIdentity: slot.feature.identity,
402
- order: slot.order,
403
- code: error.code,
404
- };
405
- }
406
-
407
- function withCleanupFailures(
408
- error: RenderError,
409
- cleanupFailures: readonly RenderFeatureCleanupFailure[],
410
- ): RenderError {
411
- if (cleanupFailures.length === 0 || error.code !== 'render-feature-stage-failed') return error;
412
- const detail = {
413
- ...error.detail,
414
- cleanupFailures: Object.freeze([...cleanupFailures]),
415
- };
416
- const wrapped = new RenderFeatureStageFailedError(
417
- detail.featureIdentity,
418
- detail.order,
419
- detail.stage,
420
- detail.recovery,
421
- );
422
- Object.defineProperty(wrapped, 'detail', { value: detail });
423
- return wrapped;
424
- }
425
-
426
345
  function asFeatureError(
427
346
  error: unknown,
428
347
  identity: string,
429
348
  order: number,
430
- stage: 'extract' | 'prepare' | 'contribute',
349
+ stage: 'extract' | 'plan',
431
350
  ): RenderError {
432
351
  if (error instanceof Error && typeof (error as Partial<RenderError>).code === 'string') {
433
352
  return error as RenderError;
@@ -449,14 +368,14 @@ function featureErrorForSlot(slot: FeatureSlot, error: RenderError): RenderError
449
368
  : new RenderFeatureStageFailedError(
450
369
  slot.feature.identity,
451
370
  slot.order,
452
- 'contribute',
371
+ 'plan',
453
372
  'next-frame',
454
373
  );
455
374
  default:
456
375
  return new RenderFeatureStageFailedError(
457
376
  slot.feature.identity,
458
377
  slot.order,
459
- 'contribute',
378
+ 'plan',
460
379
  'next-frame',
461
380
  );
462
381
  }
@@ -485,7 +404,7 @@ function errorDescriptor(error: RenderError): RenderFeatureErrorDescriptor {
485
404
  detail: {
486
405
  featureIdentity: 'unknown',
487
406
  order: -1,
488
- stage: 'contribute',
407
+ stage: 'plan',
489
408
  recovery: 'next-frame',
490
409
  },
491
410
  };
@@ -494,7 +413,7 @@ function errorDescriptor(error: RenderError): RenderFeatureErrorDescriptor {
494
413
 
495
414
  function recordFailure(
496
415
  slot: FeatureSlot,
497
- stage: 'extract' | 'prepare' | 'contribute',
416
+ stage: 'extract' | 'plan',
498
417
  failure: unknown,
499
418
  errors: RenderError[],
500
419
  ): void {
@@ -504,16 +423,447 @@ function recordFailure(
504
423
  slot.latestError = errorDescriptor(error);
505
424
  }
506
425
 
426
+ function logicalTargets(
427
+ targets: readonly RenderFeatureTargetHandle[],
428
+ ): readonly RenderFeatureLogicalTarget[] {
429
+ return Object.freeze(
430
+ targets.map((target) => ({
431
+ name: target.kind === 'scene-color' ? 'color' : 'depth',
432
+ kind: target.kind === 'scene-color' ? ('color' as const) : ('depth' as const),
433
+ format: target.format,
434
+ sampleCount: target.sampleCount,
435
+ })),
436
+ );
437
+ }
438
+
439
+ interface PreparedPlanResources {
440
+ readonly computePrograms: ReadonlyMap<string, RenderFeatureGpuProgramRef>;
441
+ readonly graphicsPrograms: ReadonlyMap<string, RenderFeaturePreparedRef<'pipeline'>>;
442
+ readonly buffers: ReadonlyMap<string, RenderFeatureGpuBufferRef>;
443
+ readonly computeBindings: ReadonlyMap<string, RenderFeatureGpuBindingsRef>;
444
+ readonly graphicsBindings: ReadonlyMap<string, RenderFeaturePreparedRef<'bindings'>>;
445
+ readonly vertexData: ReadonlyMap<string, RenderFeaturePreparedRef<'vertex-data'>>;
446
+ readonly indexData: ReadonlyMap<string, RenderFeaturePreparedRef<'index-data'>>;
447
+ }
448
+
449
+ function planFailure(slot: FeatureSlot): RenderFeatureStageFailedError {
450
+ return new RenderFeatureStageFailedError(slot.feature.identity, slot.order, 'plan', 'next-frame');
451
+ }
452
+
453
+ function targetHandle(
454
+ name: string,
455
+ targets: readonly RenderFeatureTargetHandle[],
456
+ ): string | RenderFeatureTargetHandle | undefined {
457
+ if (name === 'swapchain') return 'swapchain';
458
+ return targets.find(
459
+ (target) =>
460
+ (name === 'color' && target.kind === 'scene-color') ||
461
+ (name === 'depth' && target.kind === 'scene-depth'),
462
+ );
463
+ }
464
+
465
+ function targetFormat(
466
+ name: string,
467
+ targets: readonly RenderFeatureLogicalTarget[],
468
+ fallback: string | undefined,
469
+ ): TextureFormat | undefined {
470
+ const target = targets.find((candidate) => candidate.name === name);
471
+ return (target?.format ?? fallback) as TextureFormat | undefined;
472
+ }
473
+
474
+ function preparePlanResources(
475
+ slot: FeatureSlot,
476
+ plan: RenderFeaturePlan,
477
+ graphics: RenderFeatureGraphicsPrepare,
478
+ gpu: RenderFeatureGpuPrepareSession | undefined,
479
+ targets: readonly RenderFeatureTargetHandle[],
480
+ ): Result<PreparedPlanResources, RenderError> {
481
+ const computePrograms = new Map<string, RenderFeatureGpuProgramRef>();
482
+ const graphicsPrograms = new Map<string, RenderFeaturePreparedRef<'pipeline'>>();
483
+ const buffers = new Map<string, RenderFeatureGpuBufferRef>();
484
+ const computeBindings = new Map<string, RenderFeatureGpuBindingsRef>();
485
+ const graphicsBindings = new Map<string, RenderFeaturePreparedRef<'bindings'>>();
486
+ const vertexData = new Map<string, RenderFeaturePreparedRef<'vertex-data'>>();
487
+ const indexData = new Map<string, RenderFeaturePreparedRef<'index-data'>>();
488
+ const byKind = <Kind extends RenderFeatureResourceDeclaration['kind']>(kind: Kind) =>
489
+ plan.resources.filter(
490
+ (resource): resource is Extract<RenderFeatureResourceDeclaration, { readonly kind: Kind }> =>
491
+ resource.kind === kind,
492
+ );
493
+
494
+ if (
495
+ gpu === undefined &&
496
+ plan.resources.some((resource) =>
497
+ ['compute-program', 'buffer', 'compute-bindings'].includes(resource.kind),
498
+ )
499
+ ) {
500
+ return err(planFailure(slot));
501
+ }
502
+ for (const resource of byKind('compute-program')) {
503
+ const prepared = gpu?.prepareProgram(resource.name, resource.program);
504
+ if (prepared === undefined) return err(planFailure(slot));
505
+ if (!prepared.ok) return prepared;
506
+ computePrograms.set(resource.name, prepared.value);
507
+ }
508
+ for (const resource of byKind('graphics-program')) {
509
+ const prepared = graphics.preparePipeline(resource.name, resource.program);
510
+ if (!prepared.ok) return prepared;
511
+ graphicsPrograms.set(resource.name, prepared.value);
512
+ }
513
+ for (const resource of byKind('buffer')) {
514
+ const prepared = gpu?.prepareBuffer(resource.name, {
515
+ size: resource.size,
516
+ usage: resource.usage,
517
+ ...(resource.data === undefined ? {} : { data: resource.data }),
518
+ });
519
+ if (prepared === undefined) return err(planFailure(slot));
520
+ if (!prepared.ok) return prepared;
521
+ buffers.set(resource.name, prepared.value);
522
+ }
523
+ for (const resource of byKind('compute-bindings')) {
524
+ const program = computePrograms.get(resource.program);
525
+ const entries = resource.entries.map((entry) => ({
526
+ binding: entry.binding,
527
+ buffer: buffers.get(entry.resource),
528
+ }));
529
+ if (program === undefined || entries.some((entry) => entry.buffer === undefined)) {
530
+ return err(planFailure(slot));
531
+ }
532
+ const prepared = gpu?.prepareBindings(resource.name, {
533
+ program,
534
+ entries: entries.map((entry) => ({
535
+ binding: entry.binding,
536
+ buffer: entry.buffer as RenderFeatureGpuBufferRef,
537
+ })),
538
+ });
539
+ if (prepared === undefined) return err(planFailure(slot));
540
+ if (!prepared.ok) return prepared;
541
+ computeBindings.set(resource.name, prepared.value);
542
+ }
543
+ for (const resource of byKind('graphics-bindings')) {
544
+ const program = graphicsPrograms.get(resource.program);
545
+ if (program === undefined) return err(planFailure(slot));
546
+ const values: Record<string, unknown> = { ...resource.values };
547
+ for (const [key, targetName] of Object.entries(resource.logicalTargets ?? {})) {
548
+ const target = targetHandle(targetName, targets);
549
+ if (target === undefined || typeof target === 'string') return err(planFailure(slot));
550
+ values[key] = target;
551
+ }
552
+ const prepared = graphics.prepareBindings(resource.name, { pipeline: program, values });
553
+ if (!prepared.ok) return prepared;
554
+ graphicsBindings.set(resource.name, prepared.value);
555
+ }
556
+ for (const resource of byKind('vertex-data')) {
557
+ const descriptor =
558
+ resource.buffer === undefined
559
+ ? { layout: resource.layout, data: resource.data }
560
+ : { layout: resource.layout, buffer: buffers.get(resource.buffer) };
561
+ if ('buffer' in descriptor && descriptor.buffer === undefined) return err(planFailure(slot));
562
+ const prepared = graphics.prepareVertexData(
563
+ resource.name,
564
+ descriptor as import('./prepared-graphics').RenderFeatureVertexDataDescriptor,
565
+ );
566
+ if (!prepared.ok) return prepared;
567
+ vertexData.set(resource.name, prepared.value);
568
+ }
569
+ for (const resource of byKind('index-data')) {
570
+ const descriptor =
571
+ resource.buffer === undefined
572
+ ? { format: resource.format, data: resource.data }
573
+ : { format: resource.format, buffer: buffers.get(resource.buffer) };
574
+ if ('buffer' in descriptor && descriptor.buffer === undefined) return err(planFailure(slot));
575
+ const prepared = graphics.prepareIndexData(
576
+ resource.name,
577
+ descriptor as import('./prepared-graphics').RenderFeatureIndexDataDescriptor,
578
+ );
579
+ if (!prepared.ok) return prepared;
580
+ indexData.set(resource.name, prepared.value);
581
+ }
582
+ return ok({
583
+ computePrograms,
584
+ graphicsPrograms,
585
+ buffers,
586
+ computeBindings,
587
+ graphicsBindings,
588
+ vertexData,
589
+ indexData,
590
+ });
591
+ }
592
+
593
+ function projectDraw(
594
+ slot: FeatureSlot,
595
+ draw: Extract<RenderFeaturePassDeclaration, { readonly kind: 'raster' }>['draws'][number],
596
+ prepared: PreparedPlanResources,
597
+ ): Result<import('./prepared-graphics').RenderFeatureDrawRecord, RenderError> {
598
+ const pipeline = prepared.graphicsPrograms.get(draw.program);
599
+ const bindings = draw.bindings.map((name) => prepared.graphicsBindings.get(name));
600
+ const vertexData = draw.vertexData.map((entry) => ({
601
+ slot: entry.slot,
602
+ resource: prepared.vertexData.get(entry.resource),
603
+ }));
604
+ const indexData =
605
+ draw.indexData === undefined
606
+ ? undefined
607
+ : {
608
+ resource: prepared.indexData.get(draw.indexData.resource),
609
+ format: draw.indexData.format,
610
+ };
611
+ if (
612
+ pipeline === undefined ||
613
+ bindings.some((binding) => binding === undefined) ||
614
+ vertexData.some((vertex) => vertex.resource === undefined) ||
615
+ (indexData !== undefined && indexData.resource === undefined)
616
+ ) {
617
+ return err(planFailure(slot));
618
+ }
619
+ const common = {
620
+ pipeline,
621
+ bindings: bindings as readonly RenderFeaturePreparedRef<'bindings'>[],
622
+ vertexData: vertexData as readonly {
623
+ readonly slot: number;
624
+ readonly resource: RenderFeaturePreparedRef<'vertex-data'>;
625
+ }[],
626
+ ...(draw.vertexLayout === undefined ? {} : { vertexLayout: draw.vertexLayout }),
627
+ };
628
+ switch (draw.draw.kind) {
629
+ case 'draw':
630
+ return ok({
631
+ kind: 'draw',
632
+ ...common,
633
+ ...(indexData === undefined
634
+ ? {}
635
+ : {
636
+ indexData: {
637
+ resource: indexData.resource as RenderFeaturePreparedRef<'index-data'>,
638
+ format: indexData.format,
639
+ },
640
+ }),
641
+ command: {
642
+ vertexCount: draw.draw.vertexCount,
643
+ instanceCount: draw.draw.instanceCount,
644
+ ...(draw.draw.firstVertex === undefined ? {} : { firstVertex: draw.draw.firstVertex }),
645
+ ...(draw.draw.firstInstance === undefined
646
+ ? {}
647
+ : { firstInstance: draw.draw.firstInstance }),
648
+ },
649
+ });
650
+ case 'draw-indexed':
651
+ return ok({
652
+ kind: 'draw-indexed',
653
+ ...common,
654
+ indexData:
655
+ indexData === undefined
656
+ ? undefined
657
+ : {
658
+ resource: indexData.resource as RenderFeaturePreparedRef<'index-data'>,
659
+ format: indexData.format,
660
+ },
661
+ command: {
662
+ indexCount: draw.draw.indexCount,
663
+ instanceCount: draw.draw.instanceCount,
664
+ ...(draw.draw.firstIndex === undefined ? {} : { firstIndex: draw.draw.firstIndex }),
665
+ ...(draw.draw.baseVertex === undefined ? {} : { baseVertex: draw.draw.baseVertex }),
666
+ ...(draw.draw.firstInstance === undefined
667
+ ? {}
668
+ : { firstInstance: draw.draw.firstInstance }),
669
+ },
670
+ });
671
+ case 'draw-indirect':
672
+ case 'draw-indexed-indirect': {
673
+ const buffer = prepared.buffers.get(draw.draw.resource);
674
+ if (buffer === undefined) return err(planFailure(slot));
675
+ const command = {
676
+ buffer,
677
+ ...(draw.draw.offset === undefined ? {} : { offset: draw.draw.offset }),
678
+ };
679
+ if (draw.draw.kind === 'draw-indexed-indirect') {
680
+ return ok({
681
+ kind: 'draw-indexed-indirect',
682
+ ...common,
683
+ indexData:
684
+ indexData === undefined
685
+ ? undefined
686
+ : {
687
+ resource: indexData.resource as RenderFeaturePreparedRef<'index-data'>,
688
+ format: indexData.format,
689
+ },
690
+ command,
691
+ });
692
+ }
693
+ return ok({
694
+ kind: 'draw-indirect',
695
+ ...common,
696
+ ...(indexData === undefined
697
+ ? {}
698
+ : {
699
+ indexData: {
700
+ resource: indexData.resource as RenderFeaturePreparedRef<'index-data'>,
701
+ format: indexData.format,
702
+ },
703
+ }),
704
+ command,
705
+ });
706
+ }
707
+ }
708
+ }
709
+
710
+ function projectPlanPasses(
711
+ slot: FeatureSlot,
712
+ plan: RenderFeaturePlan,
713
+ prepared: PreparedPlanResources,
714
+ gpu: RenderFeatureGpuPrepareSession | undefined,
715
+ targets: readonly RenderFeatureTargetHandle[],
716
+ validateGraphics: (
717
+ descriptor: RenderFeatureGraphicsPassDescriptor,
718
+ resources: readonly { readonly name: string }[],
719
+ ) => Result<RenderFeaturePreparedGraphicsState, RenderError>,
720
+ resolveGraphics?: (
721
+ descriptor: RenderFeatureGraphicsPassDescriptor,
722
+ ) => Result<PreparedGraphicsResolvedSnapshot, RenderError> | undefined,
723
+ ): Result<RenderFeaturePlanExecution, RenderError> {
724
+ const logical = logicalTargets(targets);
725
+ const projected: RenderFeaturePlanExecutionPass[] = [];
726
+ for (const pass of plan.passes) {
727
+ if (pass.kind === 'compute') {
728
+ const program = prepared.computePrograms.get(pass.program);
729
+ const bindings = prepared.computeBindings.get(pass.bindings);
730
+ if (program === undefined || bindings === undefined) return err(planFailure(slot));
731
+ const descriptor: RenderFeatureGpuComputePassDescriptor = {
732
+ program,
733
+ bindings,
734
+ dispatches: pass.dispatches.map((dispatch) =>
735
+ dispatch.kind === 'direct'
736
+ ? {
737
+ entryPoint: dispatch.entryPoint,
738
+ bindings,
739
+ workgroups: dispatch.workgroups,
740
+ }
741
+ : {
742
+ entryPoint: dispatch.entryPoint,
743
+ bindings,
744
+ indirect: {
745
+ buffer: prepared.buffers.get(dispatch.resource) as RenderFeatureGpuBufferRef,
746
+ offset: dispatch.offset,
747
+ },
748
+ },
749
+ ),
750
+ };
751
+ if (
752
+ descriptor.dispatches.some(
753
+ (dispatch) => dispatch.indirect !== undefined && dispatch.indirect.buffer === undefined,
754
+ )
755
+ ) {
756
+ return err(planFailure(slot));
757
+ }
758
+ const resolved = gpu?.resolveComputePass(slot.feature.identity, descriptor);
759
+ if (resolved === undefined) return err(planFailure(slot));
760
+ if (!resolved.ok) return resolved;
761
+ projected.push({
762
+ featureIdentity: slot.feature.identity,
763
+ order: slot.order,
764
+ name: pass.name,
765
+ gpuCompute: descriptor,
766
+ resolvedGpuCompute: resolved.value,
767
+ });
768
+ continue;
769
+ }
770
+
771
+ const draws: import('./prepared-graphics').RenderFeatureDrawRecord[] = [];
772
+ for (const draw of pass.draws) {
773
+ const projected = projectDraw(slot, draw, prepared);
774
+ if (!projected.ok) return projected;
775
+ draws.push(projected.value);
776
+ }
777
+ const fallbackFormat = (() => {
778
+ const firstProgram = prepared.graphicsPrograms.get(pass.draws[0]?.program ?? '');
779
+ const declaration = plan.resources.find(
780
+ (resource) =>
781
+ resource.kind === 'graphics-program' &&
782
+ prepared.graphicsPrograms.get(resource.name) === firstProgram,
783
+ );
784
+ return declaration?.kind === 'graphics-program'
785
+ ? declaration.program.colorFormats[0]
786
+ : undefined;
787
+ })();
788
+ const colors = pass.colorAttachments.map((attachment) => ({
789
+ resource: targetHandle(attachment.target, targets),
790
+ format: targetFormat(attachment.target, logical, fallbackFormat),
791
+ loadOp: attachment.loadOp,
792
+ storeOp: attachment.storeOp,
793
+ }));
794
+ const depth =
795
+ pass.depthStencilAttachment === undefined
796
+ ? undefined
797
+ : {
798
+ resource: targetHandle(pass.depthStencilAttachment.target, targets),
799
+ format: targetFormat(pass.depthStencilAttachment.target, logical, undefined),
800
+ depthLoadOp: pass.depthStencilAttachment.depthLoadOp,
801
+ depthStoreOp: pass.depthStencilAttachment.depthStoreOp,
802
+ };
803
+ const sampledTargets = (pass.sampledTargets ?? []).map((name) => targetHandle(name, targets));
804
+ if (
805
+ colors.some(
806
+ (attachment) => attachment.resource === undefined || attachment.format === undefined,
807
+ ) ||
808
+ (depth !== undefined && (depth.resource === undefined || depth.format === undefined)) ||
809
+ sampledTargets.some((target) => target === undefined || typeof target === 'string')
810
+ ) {
811
+ return err(planFailure(slot));
812
+ }
813
+ const attachments: RenderFeatureGraphicsPassDescriptor['attachments'] =
814
+ depth === undefined
815
+ ? { colors: colors as RenderFeatureGraphicsPassDescriptor['attachments']['colors'] }
816
+ : {
817
+ colors: colors as RenderFeatureGraphicsPassDescriptor['attachments']['colors'],
818
+ depthStencil: depth as NonNullable<
819
+ RenderFeatureGraphicsPassDescriptor['attachments']['depthStencil']
820
+ >,
821
+ };
822
+ const descriptor: RenderFeatureGraphicsPassDescriptor = {
823
+ attachments,
824
+ ...(sampledTargets.length === 0
825
+ ? {}
826
+ : {
827
+ sampledTargets: sampledTargets as readonly RenderFeatureTargetHandle[],
828
+ }),
829
+ draws,
830
+ };
831
+ const graphicsState = validateGraphics(descriptor, []);
832
+ if (!graphicsState.ok) return graphicsState;
833
+ const resolved = resolveGraphics?.(descriptor);
834
+ if (
835
+ resolved !== undefined &&
836
+ !resolved.ok &&
837
+ resolved.error instanceof RenderFeaturePreparationFailedError &&
838
+ resolved.error.detail.reason === 'pipeline-pending'
839
+ ) {
840
+ continue;
841
+ }
842
+ if (resolved !== undefined && !resolved.ok) return resolved;
843
+ projected.push({
844
+ featureIdentity: slot.feature.identity,
845
+ order: slot.order,
846
+ name: pass.name,
847
+ graphics: descriptor,
848
+ graphicsState: graphicsState.value,
849
+ ...(resolved?.ok === true ? { resolvedGraphics: resolved.value } : {}),
850
+ });
851
+ }
852
+ return ok({
853
+ featureIdentity: slot.feature.identity,
854
+ order: slot.order,
855
+ passes: Object.freeze(projected),
856
+ });
857
+ }
858
+
507
859
  function invokeStage<T>(
508
860
  slot: FeatureSlot,
509
861
  stage: RenderFeatureStageEvent['stage'],
510
862
  action: () => Result<T, RenderError>,
511
- events: string[],
512
863
  stageEvents: RenderFeatureStageEvent[],
513
864
  errors: RenderError[],
514
865
  ): Result<T, RenderError> {
515
866
  const identity = slot.feature.identity;
516
- events.push(`${identity}:${stage}`);
517
867
  stageEvents.push({ featureIdentity: identity, order: slot.order, stage });
518
868
  try {
519
869
  const result = action();
@@ -574,7 +924,6 @@ class FeatureHostImpl implements RenderFeatureHost {
574
924
  this.slots.push({
575
925
  feature,
576
926
  order: this.slots.length,
577
- resources: [],
578
927
  preparedResourceBatches: new Set(),
579
928
  preparedStore: createPreparedGraphicsStore(),
580
929
  status: 'active',
@@ -596,17 +945,6 @@ class FeatureHostImpl implements RenderFeatureHost {
596
945
  const result = batch.release();
597
946
  if (!result.ok && firstError === undefined) firstError = result.error;
598
947
  }
599
- for (const resource of slot.resources) {
600
- const result = releaseResource(slot, resource);
601
- if (!result.ok && firstError === undefined) firstError = result.error;
602
- }
603
- const disposed = invokeLifecycle(slot, 'dispose', {
604
- frameNumber: -1,
605
- caps: {} as never,
606
- });
607
- if (!disposed.ok && firstError === undefined) firstError = disposed.error;
608
-
609
- slot.resources.length = 0;
610
948
  slot.status = 'disposed';
611
949
  this.slots.splice(index, 1);
612
950
  for (const [order, remaining] of this.slots.entries()) remaining.order = order;
@@ -624,18 +962,6 @@ class FeatureHostImpl implements RenderFeatureHost {
624
962
  return this.generation;
625
963
  }
626
964
 
627
- registerResource(
628
- identity: string,
629
- resource: RenderFeatureOwnedResource,
630
- ): Result<void, RenderError> {
631
- const slot = findSlot(this.slots, identity);
632
- if (slot === undefined || this.disposed || slot.status === 'disposed') {
633
- return err(unknownFeatureError(identity, 'dispose'));
634
- }
635
- slot.resources.push(resource);
636
- return ok(undefined);
637
- }
638
-
639
965
  setStatus(
640
966
  identity: string,
641
967
  status: RenderFeatureStatus,
@@ -764,14 +1090,6 @@ class FeatureHostImpl implements RenderFeatureHost {
764
1090
  if (firstError === undefined) firstError = error;
765
1091
  continue;
766
1092
  }
767
- const recovered = invokeLifecycle(slot, 'recover', input);
768
- if (!recovered.ok) {
769
- slot.status = 'failed';
770
- slot.latestError = errorDescriptor(recovered.error);
771
- diagnosticsChanged = true;
772
- if (firstError === undefined) firstError = recovered.error;
773
- continue;
774
- }
775
1093
  if (slot.status !== 'active' || slot.latestError !== undefined) {
776
1094
  slot.status = 'active';
777
1095
  slot.latestError = undefined;
@@ -796,51 +1114,26 @@ class FeatureHostImpl implements RenderFeatureHost {
796
1114
  this.disposed = true;
797
1115
 
798
1116
  const retired = this.retirePreparedGraphics();
799
- let firstError: RenderError | undefined = retired.ok ? undefined : retired.error;
800
- const cleanupFailures: RenderFeatureCleanupFailure[] = [];
1117
+ const firstError: RenderError | undefined = retired.ok ? undefined : retired.error;
801
1118
  for (const slot of this.slots) {
802
- for (const resource of slot.resources) {
803
- const result = releaseResource(slot, resource);
804
- if (!result.ok) {
805
- cleanupFailures.push(cleanupErrorDescriptor(result.error, slot));
806
- if (firstError === undefined) firstError = result.error;
807
- }
808
- }
809
- const disposed = invokeLifecycle(slot, 'dispose', {
810
- frameNumber: -1,
811
- caps: {} as never,
812
- });
813
- if (!disposed.ok) {
814
- cleanupFailures.push(cleanupErrorDescriptor(disposed.error, slot));
815
- if (firstError === undefined) firstError = disposed.error;
816
- }
817
- slot.resources.length = 0;
818
1119
  slot.status = 'disposed';
819
1120
  }
820
1121
  this.publishDiagnosticsChanged();
821
1122
  this.diagnosticsListeners.clear();
822
1123
 
823
- return firstError === undefined
824
- ? ok(undefined)
825
- : err(withCleanupFailures(firstError, cleanupFailures));
1124
+ return firstError === undefined ? ok(undefined) : err(firstError);
826
1125
  }
827
1126
  }
828
1127
 
829
- /**
830
- * Run the three typed stages once for every active feature.
831
- *
832
- * The feature value is kept in the slot closure: no heterogeneous FrameData
833
- * ledger or assertion is needed between callbacks. A failure ends only the
834
- * current slot and is retained in the host diagnostics projection.
835
- */
1128
+ /** Build and project the mandatory plan once for every active feature. */
836
1129
  export function runRenderFeatureFrame(
837
1130
  host: RenderFeatureHost,
838
1131
  input: RenderFeatureFrameInput,
839
1132
  ): RenderFeatureFrameResult {
840
- const events: string[] = [];
841
1133
  const stageEvents: RenderFeatureStageEvent[] = [];
842
1134
  const errors: RenderError[] = [];
843
- const contributions: RenderFeatureGraphContribution[] = [];
1135
+ const plans: RenderFeaturePlannedFrame[] = [];
1136
+ const fullscreenEffects = new Map<string, PostProcessShaderEntry>();
844
1137
  const preparedResourceBatches: RenderFeaturePreparedResourceBatch[] = [];
845
1138
  const hiddenEntityReports: RenderFeatureHiddenEntityReport[] = [
846
1139
  ...(input.hiddenEntityReports ?? []),
@@ -864,7 +1157,6 @@ export function runRenderFeatureFrame(
864
1157
  const slot: FeatureSlot = {
865
1158
  feature,
866
1159
  order,
867
- resources: [],
868
1160
  preparedResourceBatches: new Set(),
869
1161
  preparedStore: createPreparedGraphicsStore(),
870
1162
  status: 'active',
@@ -873,21 +1165,11 @@ export function runRenderFeatureFrame(
873
1165
  const identity = slot.feature.identity;
874
1166
  const transaction = host.beginPreparedFrame(identity, input.generation ?? 0);
875
1167
  if (transaction === undefined) continue;
876
- const graphics = createPreparedGraphicsPrepare(
877
- transaction,
878
- input.getMaterialShaderBindingContract,
879
- input.resolveMaterialAsset,
1168
+ const graphics = createPreparedGraphicsPrepare(transaction);
1169
+ const gpu: RenderFeatureGpuPrepareSession | undefined = input.gpuWork?.beginFeature(
880
1170
  identity,
881
- order,
1171
+ input.generation ?? 0,
882
1172
  );
883
- const gpu = input.getGpuWorkResolver?.(identity);
884
- gpu?.beginFrame();
885
- const validateGraphics = graphicsValidator(
886
- identity,
887
- transaction,
888
- missingCapability(feature, input.caps) === undefined,
889
- );
890
- let staging!: RenderFeatureContributionStaging & RenderFeatureGraphicsContributionStaging;
891
1173
  const featureHiddenEntityReports: RenderFeatureHiddenEntityReport[] = [];
892
1174
  const extractContext = {
893
1175
  worlds: input.worlds,
@@ -902,7 +1184,6 @@ export function runRenderFeatureFrame(
902
1184
  slot,
903
1185
  'extract',
904
1186
  () => slot.feature.extract(extractContext),
905
- events,
906
1187
  stageEvents,
907
1188
  errors,
908
1189
  );
@@ -912,34 +1193,61 @@ export function runRenderFeatureFrame(
912
1193
  continue;
913
1194
  }
914
1195
 
915
- const prepared = invokeStage(
1196
+ const targets = logicalTargets(input.targets ?? []);
1197
+ const declared = invokeStage(
916
1198
  slot,
917
- 'prepare',
1199
+ 'plan',
918
1200
  () =>
919
- slot.feature.prepare(extracted.value, {
1201
+ feature.plan(extracted.value, {
920
1202
  caps: input.caps,
921
1203
  frame: { frameNumber: input.frameNumber },
922
- resources: [],
923
- targets: input.targets ?? [],
924
- reportError: { report: (error) => errors.push(error) },
925
- graphics,
926
- ...(gpu === undefined ? {} : { gpu }),
1204
+ generation: transaction.generation,
1205
+ targets,
927
1206
  }),
928
- events,
929
1207
  stageEvents,
930
1208
  errors,
931
1209
  );
1210
+ if (!declared.ok) {
1211
+ transaction.abort();
1212
+ host.setStatus(identity, 'failed', slot.latestError);
1213
+ continue;
1214
+ }
1215
+ const frozen = freezeRenderFeaturePlan(identity, declared.value, targets);
1216
+ if (!frozen.ok) {
1217
+ recordFailure(slot, 'plan', frozen.error, errors);
1218
+ transaction.abort();
1219
+ host.setStatus(identity, 'failed', slot.latestError);
1220
+ continue;
1221
+ }
1222
+ const plannedFrame: RenderFeaturePlannedFrame = Object.freeze({
1223
+ featureIdentity: identity,
1224
+ generation: transaction.generation,
1225
+ signature: renderFeaturePlanSignature(frozen.value),
1226
+ plan: frozen.value,
1227
+ });
1228
+ for (const resource of frozen.value.resources) {
1229
+ if (resource.kind !== 'fullscreen-program') continue;
1230
+ fullscreenEffects.set(identity, {
1231
+ source: resource.source,
1232
+ ...(resource.reads === undefined ? {} : { reads: resource.reads }),
1233
+ ...(resource.params === undefined ? {} : { params: resource.params }),
1234
+ });
1235
+ }
1236
+ const prepared = preparePlanResources(slot, frozen.value, graphics, gpu, input.targets ?? []);
932
1237
  if (!prepared.ok) {
1238
+ recordFailure(slot, 'plan', prepared.error, errors);
933
1239
  transaction.abort();
934
1240
  host.setStatus(identity, 'failed', slot.latestError);
935
1241
  continue;
936
1242
  }
1243
+ const validateGraphics = graphicsValidator(identity, transaction, true);
937
1244
 
938
1245
  const resolverInput: RenderFeaturePreparedGraphicsResolverInput = {
939
1246
  featureIdentity: identity,
940
1247
  order,
941
1248
  generation: transaction.generation,
942
1249
  transaction,
1250
+ fullscreenEffects,
943
1251
  lookup: (reference) =>
944
1252
  [...transaction.overlayItems(), ...transaction.committedItems()].find(
945
1253
  (item) => item.reference === reference,
@@ -957,93 +1265,52 @@ export function runRenderFeatureFrame(
957
1265
  const releaseResolver = (): void => {
958
1266
  if (resolver !== undefined) resolver.release();
959
1267
  };
960
- const resolveGpuCompute =
961
- gpu === undefined
962
- ? undefined
963
- : (descriptor: import('./prepared-gpu-work').RenderFeatureGpuComputePassDescriptor) =>
964
- gpu.resolveComputePass(identity, descriptor);
965
- staging =
966
- input.createContributionStaging?.(
967
- identity,
968
- order,
969
- validateGraphics,
970
- resolveGraphics,
971
- resolveGpuCompute,
972
- ) ??
973
- createRenderFeatureContributionStaging(
974
- identity,
975
- order,
976
- validateGraphics,
977
- resolveGraphics,
978
- resolveGpuCompute,
979
- );
980
-
981
- const contributed = invokeStage(
1268
+ const projected = projectPlanPasses(
982
1269
  slot,
983
- 'contribute',
984
- () =>
985
- slot.feature.contribute(extracted.value, {
986
- caps: input.caps,
987
- frame: { frameNumber: input.frameNumber },
988
- resources: [],
989
- targets: input.targets ?? [],
990
- reportError: { report: (error) => errors.push(error) },
991
- graphics,
992
- ...(gpu === undefined ? {} : { gpu }),
993
- staging,
994
- }),
995
- events,
996
- stageEvents,
997
- errors,
1270
+ frozen.value,
1271
+ prepared.value,
1272
+ gpu,
1273
+ input.targets ?? [],
1274
+ validateGraphics,
1275
+ resolveGraphics,
998
1276
  );
999
- if (!contributed.ok) {
1000
- staging?.abort();
1277
+ if (!projected.ok) {
1278
+ recordFailure(slot, 'plan', projected.error, errors);
1001
1279
  transaction.abort();
1002
1280
  releaseResolver();
1003
1281
  host.setStatus(identity, 'failed', slot.latestError);
1004
1282
  continue;
1005
1283
  }
1006
- if (staging !== undefined) {
1007
- const committed = staging.commit();
1008
- if (!committed.ok) {
1009
- recordFailure(slot, 'contribute', committed.error, errors);
1010
- transaction.abort();
1011
- releaseResolver();
1012
- host.setStatus(identity, 'failed', slot.latestError);
1013
- continue;
1014
- }
1015
- const preparedCommit = transaction.commit();
1016
- if (!preparedCommit.ok) {
1017
- recordFailure(slot, 'contribute', preparedCommit.error, errors);
1018
- releaseResolver();
1019
- host.setStatus(identity, 'failed', slot.latestError);
1020
- continue;
1021
- }
1022
- const leases = [
1023
- ...new Set(committed.value.passes.flatMap((pass) => pass.resolvedGraphics?.leases ?? [])),
1024
- ...(gpu?.retireUntouched() ?? []),
1025
- ];
1026
- const retained = host.retainPreparedGraphics(identity, leases);
1027
- if (!retained.ok) {
1028
- recordFailure(slot, 'contribute', retained.error, errors);
1029
- releaseResolver();
1030
- host.setStatus(identity, 'failed', slot.latestError);
1031
- continue;
1032
- }
1033
- if (leases.length > 0) preparedResourceBatches.push(retained.value);
1034
- if (committed.value.resources.length > 0 || committed.value.passes.length > 0) {
1035
- contributions.push(committed.value);
1036
- }
1284
+ const preparedCommit = transaction.commit();
1285
+ if (!preparedCommit.ok) {
1286
+ recordFailure(slot, 'plan', preparedCommit.error, errors);
1287
+ releaseResolver();
1288
+ host.setStatus(identity, 'failed', slot.latestError);
1289
+ continue;
1290
+ }
1291
+ const leases = [
1292
+ ...new Set(projected.value.passes.flatMap((pass) => pass.resolvedGraphics?.leases ?? [])),
1293
+ ...(gpu?.retireUntouched() ?? []),
1294
+ ];
1295
+ const retained = host.retainPreparedGraphics(identity, leases);
1296
+ if (!retained.ok) {
1297
+ recordFailure(slot, 'plan', retained.error, errors);
1298
+ releaseResolver();
1299
+ host.setStatus(identity, 'failed', slot.latestError);
1300
+ continue;
1037
1301
  }
1302
+ planExecutionProjections.set(plannedFrame, projected.value);
1303
+ plans.push(plannedFrame);
1304
+ if (leases.length > 0) preparedResourceBatches.push(retained.value);
1038
1305
  hiddenEntityReports.push(...featureHiddenEntityReports);
1039
1306
  host.setStatus(identity, 'active');
1040
1307
  }
1041
1308
 
1042
1309
  return {
1043
- events,
1044
1310
  stageEvents,
1045
1311
  errors,
1046
- contributions,
1312
+ plans,
1313
+ fullscreenEffects,
1047
1314
  preparedResourceBatches,
1048
1315
  hiddenEntityReports: mergeHiddenEntityReports(hiddenEntityReports),
1049
1316
  };
@@ -1087,7 +1354,6 @@ export function createRenderFeatureHost(
1087
1354
  const slots: FeatureSlot[] = features.map((feature, order) => ({
1088
1355
  feature,
1089
1356
  order,
1090
- resources: [],
1091
1357
  preparedResourceBatches: new Set(),
1092
1358
  preparedStore: createPreparedGraphicsStore(),
1093
1359
  status: 'active',