@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
@@ -9,7 +9,7 @@
9
9
  //
10
10
  // Design axiom: PipelineSpec is business-agnostic — no 'pbr' / 'sprite' / 'skybox'
11
11
  // / 'fullscreen-*' strings appear on the type surface (plan-strategy D-7).
12
- // BGL shape taxonomy lives in ShaderRegistry internal reflection, not in spec.
12
+ // BGL shape taxonomy lives in the ShaderCatalog implementation, not in spec.
13
13
  //
14
14
  // Charter alignment:
15
15
  // F1: single file entrypoint (getOrBuildPipeline) — AI user indexes once
@@ -23,32 +23,22 @@ import {
23
23
  type VertexLayoutProjection,
24
24
  } from '@forgeax/engine-geometry';
25
25
  import {
26
- DEFAULT_STANDARD_PBR_PARAM_SCHEMA,
27
- DEFAULT_UNLIT_PARAM_SCHEMA,
28
- type RegisteredMaterialShaderEntry,
29
- type ShaderRegistry,
30
- } from '@forgeax/engine-shader';
31
- import {
32
- type BindGroupLayoutEntry,
33
- type DerivedMaterialInterface,
34
- derive,
26
+ err,
35
27
  KNOWN_PASS_KINDS,
36
28
  type MaterialRenderState,
37
- type ParamSchemaEntry,
29
+ ok,
38
30
  type PrimitiveTopology,
31
+ type Result,
39
32
  type VertexAttributeMap,
40
33
  } from '@forgeax/engine-types';
41
- import { GPU_SHADER_STAGE_FRAGMENT, GPU_SHADER_STAGE_VERTEX } from './gpu-stage';
42
- import { createHdrpBindGroupLayoutDescriptor } from './hdrp-buffers';
43
- import {
44
- appendInjection,
45
- buildPbrMaterialUserRegionEntries,
46
- buildPbrViewBglEntries,
47
- type PbrCaps,
48
- } from './pbr-pipeline';
34
+ import { VertexColorVariantConflictError } from './errors/render';
49
35
 
50
- const DEFAULT_STANDARD_PBR_PROJECTION = derive(DEFAULT_STANDARD_PBR_PARAM_SCHEMA);
51
- const DEFAULT_UNLIT_PROJECTION = derive(DEFAULT_UNLIT_PARAM_SCHEMA);
36
+ export {
37
+ type BglKind,
38
+ type BindGroupLayoutDescriptorOutput,
39
+ buildBindGroupLayoutDescriptor,
40
+ createHdrpBindGroupLayoutDescriptor,
41
+ } from './pbr-pipeline';
52
42
 
53
43
  // Re-export KNOWN_PASS_KINDS from @forgeax/engine-types for single-file discoverability (charter F1).
54
44
  export { KNOWN_PASS_KINDS };
@@ -68,7 +58,7 @@ export function colorFormatsForPassKind(
68
58
  passKind: string,
69
59
  defaultColorFormat: GPUTextureFormat,
70
60
  ): readonly GPUTextureFormat[] {
71
- if (passKind === 'shadow-caster') return [];
61
+ if (passKindPolicyTable[passKind]?.shape === 'depth-only') return [];
72
62
  if (passKind === 'deferred') return DEFERRED_COLOR_FORMATS;
73
63
  return [defaultColorFormat];
74
64
  }
@@ -88,55 +78,14 @@ export function colorFormatsForPassKind(
88
78
  * - `renderState`: optional per-material render-state overrides (blend/cull/depth/stencil)
89
79
  *
90
80
  * Business-agnostic: no `'pbr'` / `'sprite'` / `'skybox'` strings pollute this
91
- * type. BGL shape taxonomy is derived from `ShaderRegistry` internal reflection
81
+ * type. BGL shape taxonomy is derived from `ShaderCatalog` internal reflection
92
82
  * and never appears on the spec surface (plan-strategy D-7).
93
83
  *
94
84
  * @see plan-strategy §1 (4-axis) · D-7 (business-agnostic) · requirements §3.1
95
85
  */
96
- export interface PipelineSpec {
97
- /** Shader identity + routing axis. */
98
- readonly shader: {
99
- /** Registered shader identifier (e.g. `'forgeax::default-standard-pbr'`). */
100
- readonly id: string;
101
- /** Pass kind for attachment shape selection. Must be in {@link KNOWN_PASS_KINDS} or registered. */
102
- readonly passKind: string;
103
- /** Shader variant set string (e.g. `'SKIN_AVAILABLE=1'`). `undefined` for no variant. */
104
- readonly variantSet: string | undefined;
105
- /** Fragment entry point; omitted means the shader's standard `fs_main`. */
106
- readonly fragmentEntry?: string | undefined;
107
- };
108
- /** Attachment format + sample-count axis. */
109
- readonly attachments: {
110
- /** Colour attachment formats in draw order. Empty for depth-only passes (shadow-caster). */
111
- readonly colorFormats: readonly GPUTextureFormat[];
112
- /** Depth-stencil format, or `undefined` when no depth target is bound. */
113
- readonly depthFormat: GPUTextureFormat | undefined;
114
- /** Sample count: 1 (no MSAA) or 4 (4x MSAA). */
115
- readonly sampleCount: 1 | 4;
116
- };
117
- /** Geometry layout axis. */
118
- readonly geometry: {
119
- /** Primitive topology baked into the PSO. */
120
- readonly topology: PrimitiveTopology;
121
- /** Strip index format (uint16 / uint32), only meaningful for strip topologies. */
122
- readonly stripIndexFormat?: 'uint16' | 'uint32' | undefined;
123
- /** Per-vertex attribute layout (position / normal / uv / tangent / skinIndex / skinWeight). */
124
- readonly vertexLayout: VertexAttributeMap;
125
- /** Canonical geometry-owned projection; derived when omitted for legacy callers. */
126
- readonly vertexLayoutProjection?: VertexLayoutProjection | undefined;
127
- /**
128
- * Number of UV sets declared by the shader (derived from @location reflection).
129
- * Forwarded to deriveVertexBufferLayout for clamp-to-last alias (D-1 / D-4).
130
- * Undefined = fallback to mesh-provided UV count (no clamping).
131
- * feat-20260629-multi-uv-set-support m3-w5: plumbed placeholder.
132
- * TODO(M4/m4-w3): fill from naga reflection JSON when available.
133
- */
134
- readonly shaderUvSetCount?: number | undefined;
135
- };
136
- /** Per-material render-state overrides (optional — engine defaults applied when absent). */
137
- readonly renderState: MaterialRenderState | undefined;
138
- }
86
+ export type { PipelineSpec } from './pipeline-spec-types';
139
87
 
88
+ import type { PipelineSpec } from './pipeline-spec-types';
140
89
  // ══════════════════════════════════════════════════════════════════════════════
141
90
  // PipelineSpecError — closed union (5 + 2 transit codes)
142
91
  // ══════════════════════════════════════════════════════════════════════════════
@@ -153,7 +102,7 @@ export interface PipelineSpec {
153
102
  *
154
103
  * 2 transit codes:
155
104
  * - `'pipeline-build-failed'`: wraps RhiError from device.createRenderPipeline
156
- * - `'shader-not-registered'`: ShaderRegistry.lookup returned undefined
105
+ * - `'shader-not-registered'`: ShaderCatalog lookup returned undefined
157
106
  *
158
107
  * @see requirements §3.4 · AC-10 · charter P3
159
108
  */
@@ -205,55 +154,6 @@ export class PipelineSpecError extends Error {
205
154
  }
206
155
  }
207
156
 
208
- // ══════════════════════════════════════════════════════════════════════════════
209
- // BindGroupLayoutShape — reflection-derived BGL descriptor
210
- // ══════════════════════════════════════════════════════════════════════════════
211
-
212
- /**
213
- * Bind group layout shape derived from ShaderRegistry reflection.
214
- *
215
- * `entries` mirrors `GPUBindGroupLayoutDescriptor.entries` — the binding
216
- * slot layout the shader expects for a given variantSet.
217
- */
218
- export interface BindGroupLayoutShape {
219
- readonly entries: readonly BindGroupLayoutEntry[];
220
- }
221
-
222
- // ══════════════════════════════════════════════════════════════════════════════
223
- // deriveBglShapeFromShader — reflection helper (D-1)
224
- // ══════════════════════════════════════════════════════════════════════════════
225
-
226
- /**
227
- * Derive BGL shape from a registered shader entry's paramSchema.
228
- *
229
- * Pure function: same `entry` always yields the same shape (no variant-set
230
- * dispatch — that role moved into `BglKind` after D-13's closed-union
231
- * dispatch landed; see plan-decisions.md). The `_variantSet` parameter is
232
- * preserved for backward signature compat but ignored — variant routing is
233
- * now explicit at the BglKind level (see `buildBindGroupLayoutDescriptor`
234
- * arms `pbr-skin-mesh-array` vs `hdrp-7-slot` vs `pbr-mesh-array`).
235
- *
236
- * This helper lives in `pipeline-spec.ts` (not ShaderRegistry) per D-1:
237
- * it wraps the existing `derive(paramSchema).bglEntries` from
238
- * `@forgeax/engine-types` so cacheKeyOf can hash BGL shape deterministically
239
- * without expanding the ShaderRegistry public interface.
240
- *
241
- * @param entry - material shader entry from ShaderRegistry.findMaterialArtifact
242
- * @param _variantSet - unused (post D-13); kept for backward signature compat
243
- * @returns the BGL shape for the given entry
244
- * @see plan-decisions.md D-13
245
- */
246
- export function deriveBglShapeFromShader(
247
- entry: RegisteredMaterialShaderEntry,
248
- _variantSet?: string | undefined,
249
- ): BindGroupLayoutShape {
250
- // derive() from @forgeax/engine-types is the actual SSOT; we invoke it
251
- // here so that cacheKeyOf can hash BGL shape deterministically.
252
- return {
253
- entries: entry.paramSchemaProjection.derivedInterface.bglEntries,
254
- };
255
- }
256
-
257
157
  // ══════════════════════════════════════════════════════════════════════════════
258
158
  // renderStateHashSuffix — deterministic hash of MaterialRenderState
259
159
  // ══════════════════════════════════════════════════════════════════════════════
@@ -299,7 +199,7 @@ export function renderStateHash(renderState: MaterialRenderState | undefined): s
299
199
  /**
300
200
  * Compute a deterministic cache key from a PipelineSpec.
301
201
  *
302
- * The key covers all 4 axes + BGL shape hash (derived from ShaderRegistry
202
+ * The key covers all 4 axes + BGL shape hash (derived from ShaderCatalog
303
203
  * reflection via {@link deriveBglShapeFromShader}). Two specs that produce
304
204
  * the same cache key MUST produce byte-identical PSO descriptors.
305
205
  *
@@ -317,8 +217,8 @@ export function cacheKeyOf(spec: PipelineSpec): string {
317
217
  ? `:${geometry.stripIndexFormat}`
318
218
  : '';
319
219
 
320
- // Hash vertexLayout deterministically the digest is identity-cached for
321
- // immutable mesh-asset maps reused across submeshes and frames.
220
+ // The geometry owner publishes one immutable projection. Legacy callers may
221
+ // still provide only the map; derive the same projection at this boundary.
322
222
  const vlDigest =
323
223
  geometry.vertexLayoutProjection?.digest ??
324
224
  deriveVertexLayoutProjection(geometry.vertexLayout).digest;
@@ -335,13 +235,11 @@ export function cacheKeyOf(spec: PipelineSpec): string {
335
235
  // variantSet literal contains it; guarded by
336
236
  // `pipeline-cache-keying.unit.test.ts` sentinel-conflict assertions.
337
237
  const variantSegment = shader.variantSet === undefined ? '~' : shader.variantSet;
338
- const fragmentEntrySegment = shader.fragmentEntry ?? 'fs_main';
339
238
  return (
340
239
  [
341
240
  shader.id,
342
241
  shader.passKind,
343
242
  variantSegment,
344
- fragmentEntrySegment,
345
243
  attachments.colorFormats.join(','),
346
244
  attachments.depthFormat ?? '',
347
245
  String(attachments.sampleCount),
@@ -353,6 +251,42 @@ export function cacheKeyOf(spec: PipelineSpec): string {
353
251
  );
354
252
  }
355
253
 
254
+ /**
255
+ * Reconcile the authored vertex-color shader axis with the geometry-owned
256
+ * projection. COLOR_0 is a geometry fact and cannot be selected independently
257
+ * by a material variant.
258
+ */
259
+ export function variantSetFromVertexLayoutProjection(
260
+ projection: VertexLayoutProjection,
261
+ authoredVariantSet: string | undefined,
262
+ ): Result<string, VertexColorVariantConflictError> {
263
+ const projected = projection.attributes.some((attribute) => attribute.key === 'color');
264
+ const axis = `VERTEX_COLOR_AVAILABLE=${projected ? 'true' : 'false'}`;
265
+ if (authoredVariantSet === undefined) return ok(axis);
266
+ if (projected && authoredVariantSet === '') return ok(authoredVariantSet);
267
+
268
+ const authoredParts = authoredVariantSet.split('+');
269
+ const authoredColorPart = authoredParts.find((part) =>
270
+ part.startsWith('VERTEX_COLOR_AVAILABLE='),
271
+ );
272
+ if (authoredColorPart === undefined) {
273
+ const parts = authoredParts.filter((part) => part.length > 0);
274
+ parts.push(axis);
275
+ return ok(parts.join('+'));
276
+ }
277
+
278
+ const authoredValue = authoredColorPart.slice('VERTEX_COLOR_AVAILABLE='.length);
279
+ const authored = authoredValue === 'true';
280
+ if ((authoredValue !== 'true' && authoredValue !== 'false') || authored !== projected) {
281
+ return err(new VertexColorVariantConflictError(authoredValue, projected));
282
+ }
283
+ const parts = authoredParts.filter(
284
+ (part) => part.length > 0 && !part.startsWith('VERTEX_COLOR_AVAILABLE='),
285
+ );
286
+ parts.push(axis);
287
+ return ok(parts.join('+'));
288
+ }
289
+
356
290
  /**
357
291
  * Build a `GPURenderPipelineDescriptor` from a PipelineSpec + shader modules.
358
292
  *
@@ -390,13 +324,8 @@ export function buildPipelineDescriptor(
390
324
 
391
325
  const { attachments, geometry, renderState } = spec;
392
326
 
393
- const isShadowCaster = spec.shader.passKind === 'shadow-caster';
394
- const isStrip = geometry.topology === 'line-strip' || geometry.topology === 'triangle-strip';
395
-
396
- // A supplied projection is already the geometry owner's immutable GPU
397
- // descriptor. Do not re-derive it from the caller's attribute map: that
398
- // would permit a stale map to disagree with the uploaded interleaved bytes.
399
- // Legacy callers without a projection retain the UV aliasing derivation.
327
+ // A supplied projection is the geometry owner's immutable GPU descriptor.
328
+ // Do not re-derive it from a possibly stale attribute map.
400
329
  const vertexBuffers =
401
330
  geometry.vertexLayoutProjection === undefined
402
331
  ? deriveVertexBufferLayout(geometry.vertexLayout, {
@@ -428,7 +357,7 @@ export function buildPipelineDescriptor(
428
357
  };
429
358
 
430
359
  // Fragment stage: absent for shadow-caster (depth-only), present for forward.
431
- if (!isShadowCaster && attachments.colorFormats.length > 0) {
360
+ if (attachments.colorFormats.length > 0) {
432
361
  descriptor.fragment = {
433
362
  module: modules.fragment,
434
363
  entryPoint: modules.fragmentEntryPoint ?? 'fs_main',
@@ -453,7 +382,7 @@ export function buildPipelineDescriptor(
453
382
  cullMode: renderState?.cullMode ?? 'back',
454
383
  frontFace: renderState?.frontFace ?? 'ccw',
455
384
  };
456
- if (isStrip && geometry.stripIndexFormat !== undefined) {
385
+ if (geometry.topology.endsWith('strip') && geometry.stripIndexFormat !== undefined) {
457
386
  primitive.stripIndexFormat = geometry.stripIndexFormat;
458
387
  }
459
388
  descriptor.primitive = primitive;
@@ -478,7 +407,7 @@ export function buildPipelineDescriptor(
478
407
  descriptor.depthStencil = ds;
479
408
  }
480
409
 
481
- // Multisample: absent for sampleCount=1 (undefined). For any value > 1,
410
+ // Multisample: absent for sampleCount=1 (undefined). For each value > 1,
482
411
  // emit { count: sampleCount } so forward-compat sample counts (2, 8, …)
483
412
  // flow through to the descriptor without requiring a type change.
484
413
  if (attachments.sampleCount > 1) {
@@ -491,407 +420,6 @@ export function buildPipelineDescriptor(
491
420
  return descriptor;
492
421
  }
493
422
 
494
- // ══════════════════════════════════════════════════════════════════════════════
495
- // BglKind dispatch (M3 / D-13) — closed union of BGL shapes the runtime ships
496
- // ══════════════════════════════════════════════════════════════════════════════
497
-
498
- /**
499
- * Closed union of bind-group-layout shapes the runtime constructs.
500
- *
501
- * Each kind names one physically distinct BGL the runtime has historically
502
- * built by hand. {@link buildBindGroupLayoutDescriptor} dispatches on this
503
- * union so every `device.createBindGroupLayout(...)` call site shares one
504
- * SSOT for entries / labels (plan-strategy §3.2; D-13 round-2 decision).
505
- *
506
- * Three groups by derivation source:
507
- * 1. Shader-derived (paramSchema reflection + injection chain):
508
- * - `'pbr-material-merged'` — derived user region + Skylight 7 + lightmap 4
509
- * - `'unlit-material'` — 7 entries: base PBR material only (no inject)
510
- * - `'hdrp-7-slot'` — 7 entries (binding 0 + 3..8): HDRP cluster + SSAO group(2) BGL
511
- * 2. Caps-driven literal shapes (no shader):
512
- * - `'pbr-view'` — 10 entries: view UBO + lights + 6 shadow bindings
513
- * (directional 3/4, point 5/6, cascade 7, spot atlas 8, spot
514
- * lightViewProj matrices 9 — feat-20260625)
515
- * - `'pbr-mesh-array'` — 1 entry: per-entity mesh SSBO (dynamic-offset)
516
- * - `'pbr-instances'` — 1 entry: per-instance SSBO (no dynamic-offset)
517
- * - `'pbr-skin-mesh-array'` — 3 entries: meshes + current/previous skin palettes
518
- * 3. Attachment-driven (fullscreen post-process):
519
- * - `'fullscreen-post'` — 2 entries: input texture + sampler. The texture
520
- * `sampleType` is derived from `spec.attachments` (plan §R3 fix):
521
- * `'depth32float'` → `'depth'`; `'r32float'` → `'unfilterable-float'`;
522
- * else → `'float'`.
523
- * - `'fullscreen-post-with-params'` — 3 entries: the same texture@0 +
524
- * sampler@1 as `'fullscreen-post'`, plus a `buffer@2` uniform for the
525
- * per-frame params UBO (feat-20260621 D-2: `entry.params !== undefined`
526
- * passes route here; the layout stays group(1), q3=B). `'fullscreen-post'`
527
- * stays byte-identical so param-less consumers degrade with no change.
528
- * - `'fullscreen-post-with-scene-depth-msaa'` — the depth-read layout with
529
- * `texture.multisampled=true`, selected for a 4-sample scene depth target.
530
- */
531
- export type BglKind =
532
- | 'pbr-view'
533
- | 'pbr-material-merged'
534
- | 'pbr-mesh-array'
535
- | 'pbr-instances'
536
- | 'pbr-skin-mesh-array'
537
- | 'unlit-material'
538
- | 'hdrp-7-slot'
539
- | 'fullscreen-post'
540
- | 'fullscreen-post-with-params'
541
- | 'fullscreen-post-with-scene-depth'
542
- | 'fullscreen-post-with-scene-depth-msaa'
543
- | 'fullscreen-post-with-gbuffer-depth';
544
-
545
- /**
546
- * Output shape of {@link buildBindGroupLayoutDescriptor}: matches the RHI
547
- * `BindGroupLayoutDescriptor` (label + entries with `ExplicitUndefined`) so
548
- * the result can be passed directly to `device.createBindGroupLayout(...)`.
549
- *
550
- * `entries` is a mutable `Array` to match `GPUBindGroupLayoutDescriptor`
551
- * (WebGPU types declare it mutable). Callers MUST treat the array as
552
- * read-only — the dispatcher freezes neither the array nor its entries
553
- * for hot-path performance.
554
- */
555
- export interface BindGroupLayoutDescriptorOutput {
556
- readonly label: string | undefined;
557
- readonly entries: GPUBindGroupLayoutEntry[];
558
- }
559
-
560
- /**
561
- * Build a `GPUBindGroupLayoutDescriptor` from a PipelineSpec, dispatching on
562
- * `options.kind` to one of 9 closed BGL shapes (D-13 round-2).
563
- *
564
- * Shader-derived kinds (`'pbr-material-merged'` / `'unlit-material'` /
565
- * `'hdrp-7-slot'`) require `options.registry` to look up the shader entry
566
- * and reflect its `paramSchema` via {@link deriveBglShapeFromShader}; they
567
- * compose the per-entry injection chain (Skylight + lightmap for material;
568
- * HDRP variantSet for cluster-forward).
569
- *
570
- * Caps-driven kinds (`'pbr-view'` / `'pbr-mesh-array'` / `'pbr-instances'` /
571
- * `'pbr-skin-mesh-array'`) require `options.caps` for the storage-buffer
572
- * vs uniform-buffer fallback (RhiCaps.storageBuffer; PBR feat-20260526 M3 /
573
- * w9). They are wholly determined by the caps shape.
574
- *
575
- * Attachment-driven kind (`'fullscreen-post'`) reads
576
- * `spec.attachments.depthFormat` and `spec.attachments.colorFormats[0]` to
577
- * pick the texture binding's `sampleType` (R3 fix: `'depth32float'` → `'depth'`,
578
- * `'r32float'` → `'unfilterable-float'`, else → `'float'`).
579
- *
580
- * @param spec - the pipeline spec (axis source for reflection / caps fallback)
581
- * @param options.kind - which BGL shape to build (closed {@link BglKind} union)
582
- * @param options.registry - ShaderRegistry for shader-derived kinds
583
- * @param options.caps - caps shape for caps-driven kinds (storageBuffer)
584
- * @returns a WebGPU bind-group-layout descriptor (entries + label)
585
- * @see plan-strategy §3.2 · plan-decisions D-13 · requirements AC-02
586
- */
587
- /**
588
- * Resolve the material paramSchema for a per-shader user-region BGL derivation.
589
- *
590
- * Priority (D-1): explicit `options.materialParamSchema` > registry lookup of
591
- * `spec.shader.id` > `undefined` (the user-region builder then falls back to
592
- * the built-in standard-PBR 4-texture schema, whose user region is 9 entries).
593
- */
594
- function resolveMaterialProjection(
595
- spec: PipelineSpec,
596
- options: { registry?: ShaderRegistry; materialParamSchema?: readonly ParamSchemaEntry[] },
597
- ): DerivedMaterialInterface | undefined {
598
- if (options.registry !== undefined) {
599
- const lookup = options.registry.findMaterialArtifact(spec.shader.id);
600
- if (lookup.ok) return lookup.value.paramSchemaProjection.derivedInterface;
601
- }
602
- // Compatibility seam for callers that have not reached ShaderRegistry
603
- // admission yet. Runtime registry callers always take the branch above.
604
- if (options.materialParamSchema !== undefined) return derive(options.materialParamSchema);
605
- return undefined;
606
- }
607
-
608
- export function buildBindGroupLayoutDescriptor(
609
- spec: PipelineSpec,
610
- options: {
611
- kind: BglKind;
612
- registry?: ShaderRegistry;
613
- caps?: PbrCaps;
614
- /**
615
- * Material paramSchema for the per-shader user-region derivation
616
- * (`'pbr-material-merged'` / `'unlit-material'`). When supplied it is the
617
- * authoritative source for the user-region BGL shape (D-1); when omitted,
618
- * `buildPbrMaterialUserRegionEntries` falls back to the built-in
619
- * standard-PBR 4-texture schema (user region is 9 entries), so
620
- * the caps-driven `buildPbrPipelineLayouts` seam keeps working unchanged.
621
- * A registry + resolvable shader id takes precedence over this field.
622
- */
623
- materialParamSchema?: readonly ParamSchemaEntry[];
624
- },
625
- ): BindGroupLayoutDescriptorOutput {
626
- switch (options.kind) {
627
- case 'pbr-view': {
628
- const caps = options.caps ?? { storageBuffer: true };
629
- return {
630
- label: 'pbr-view-bgl',
631
- entries: buildPbrViewBglEntries(caps),
632
- };
633
- }
634
- case 'pbr-mesh-array': {
635
- const caps = options.caps ?? { storageBuffer: true };
636
- const meshBufType: GPUBufferBindingType = caps.storageBuffer
637
- ? 'read-only-storage'
638
- : 'uniform';
639
- // sprite-lit's fragment stage does not read the mesh SSBO -- worldPos
640
- // is carried through the VsOut interpolant. Visibility is kept widened
641
- // to VERTEX|FRAGMENT because the BGL JSON is compared byte-identically
642
- // across the sprite / sprite-lit / PBR pipelines that share this
643
- // descriptor; narrowing here would change every sibling pipeline's
644
- // BGL fingerprint. WebGPU rejects createRenderPipeline when a fragment
645
- // stage accesses a binding whose BGL visibility excludes FRAGMENT --
646
- // widening is permissive (validation-only, no perf cost).
647
- return {
648
- label: 'pbr-mesh-array-bgl',
649
- entries: [
650
- {
651
- binding: 0,
652
- visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
653
- buffer: { type: meshBufType, hasDynamicOffset: true },
654
- },
655
- ],
656
- };
657
- }
658
- case 'pbr-instances': {
659
- const caps = options.caps ?? { storageBuffer: true };
660
- const meshBufType: GPUBufferBindingType = caps.storageBuffer
661
- ? 'read-only-storage'
662
- : 'uniform';
663
- return {
664
- label: 'pbr-instances-bgl',
665
- entries: [
666
- {
667
- binding: 0,
668
- visibility: GPU_SHADER_STAGE_VERTEX,
669
- buffer: { type: meshBufType, hasDynamicOffset: false },
670
- },
671
- ],
672
- };
673
- }
674
- case 'pbr-skin-mesh-array': {
675
- const caps = options.caps ?? { storageBuffer: true };
676
- const meshBufType: GPUBufferBindingType = caps.storageBuffer
677
- ? 'read-only-storage'
678
- : 'uniform';
679
- return {
680
- label: 'pbr-skin-mesh-array-bgl',
681
- entries: [
682
- {
683
- binding: 0,
684
- visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
685
- buffer: { type: meshBufType, hasDynamicOffset: true },
686
- },
687
- {
688
- binding: 1,
689
- visibility: GPU_SHADER_STAGE_VERTEX,
690
- buffer: { type: meshBufType, hasDynamicOffset: true },
691
- },
692
- {
693
- binding: 2,
694
- visibility: GPU_SHADER_STAGE_VERTEX,
695
- buffer: { type: meshBufType, hasDynamicOffset: true },
696
- },
697
- ],
698
- };
699
- }
700
- case 'pbr-material-merged': {
701
- // Material BGL: per-shader user-region (derive(paramSchema).bglEntries)
702
- // + IBL injection (7). Emissive and occlusion are material texture
703
- // parameters in the derived user-region; they are not a second
704
- // engine-owned lightmap ledger.
705
- //
706
- // Schema source priority (D-1): explicit materialParamSchema option >
707
- // registry lookup of spec.shader.id > built-in standard-PBR fallback.
708
- const resolvedProjection =
709
- resolveMaterialProjection(spec, options) ?? DEFAULT_STANDARD_PBR_PROJECTION;
710
- const userRegion = buildPbrMaterialUserRegionEntries(resolvedProjection);
711
- const afterIbl = [...userRegion, ...appendInjection(userRegion, 'ibl')];
712
- return {
713
- label: 'pbr-material-skylight-bgl',
714
- entries: afterIbl,
715
- };
716
- }
717
- case 'unlit-material': {
718
- // Unlit material BGL: per-shader user-region only. No IBL/lightmap
719
- // injection (D-5 round-4: unlit demos do not pay for IBL state).
720
- const resolvedProjection =
721
- resolveMaterialProjection(spec, options) ?? DEFAULT_UNLIT_PROJECTION;
722
- return {
723
- label: 'unlit-material-bgl',
724
- entries: buildPbrMaterialUserRegionEntries(resolvedProjection),
725
- };
726
- }
727
- case 'hdrp-7-slot': {
728
- // HDRP unified BGL for group(2): 9 entries (binding 0 + 3..8). The
729
- // shape depends on caps.storageBuffer for the cluster-buffer fallback.
730
- const caps = options.caps ?? { storageBuffer: true };
731
- const desc = createHdrpBindGroupLayoutDescriptor(caps.storageBuffer);
732
- if (options.registry !== undefined) {
733
- const lookup = options.registry.findMaterialArtifact(spec.shader.id);
734
- if (lookup.ok) {
735
- deriveBglShapeFromShader(lookup.value, spec.shader.variantSet);
736
- }
737
- }
738
- return {
739
- label: desc.label ?? 'hdrp-unified-bgl-group2',
740
- entries: desc.entries ?? [],
741
- };
742
- }
743
- case 'fullscreen-post': {
744
- // Fullscreen post-process BGL: 2 entries (input texture + sampler).
745
- // R3 fix: derive sampleType from spec.attachments. Depth attachments
746
- // (depth32float) need `sampleType: 'depth'`; r32float needs
747
- // `'unfilterable-float'`; everything else (rgba8unorm-srgb, rgba16float,
748
- // bgra8unorm, …) is filterable `'float'`.
749
- return {
750
- label: 'fullscreen-post-bgl',
751
- entries: buildFullscreenPostInputEntries(spec),
752
- };
753
- }
754
- case 'fullscreen-post-with-params': {
755
- // feat-20260621 D-2: the same input texture@0 + sampler@1 as
756
- // 'fullscreen-post', plus binding 2 = per-frame params UBO (uniform).
757
- // The first two entries reuse buildFullscreenPostInputEntries so the
758
- // sampleType derivation stays a single SSOT; 'fullscreen-post' is
759
- // untouched (param-less zero-regression, R-A7).
760
- return {
761
- label: 'fullscreen-post-with-params-bgl',
762
- entries: [
763
- ...buildFullscreenPostInputEntries(spec),
764
- {
765
- binding: 2,
766
- visibility: GPU_SHADER_STAGE_FRAGMENT,
767
- buffer: { type: 'uniform' },
768
- },
769
- ],
770
- };
771
- }
772
- case 'fullscreen-post-with-scene-depth': {
773
- // plan-strategy D-3: 5-entry BGL for post-process passes that read the
774
- // camera scene depth. color@0 + sampler@1 reuse buildFullscreenPostInputEntries
775
- // (float+filtering for color). depthTex@3 uses `sampleType: 'depth'` and
776
- // `dimension: '2d'`; depthSampler@4 uses `type: 'non-filtering'` (nearest
777
- // + clamp-to-edge, D-2 — NOT comparison). params@2 is always present
778
- // (uniform) to avoid a 2x2 kind explosion per D-3.
779
- return {
780
- label: 'fullscreen-post-with-scene-depth-bgl',
781
- entries: [
782
- ...buildFullscreenPostInputEntries(spec),
783
- {
784
- binding: 2,
785
- visibility: GPU_SHADER_STAGE_FRAGMENT,
786
- buffer: { type: 'uniform' },
787
- },
788
- {
789
- binding: 3,
790
- visibility: GPU_SHADER_STAGE_FRAGMENT,
791
- texture: { sampleType: 'depth', viewDimension: '2d' },
792
- },
793
- {
794
- binding: 4,
795
- visibility: GPU_SHADER_STAGE_FRAGMENT,
796
- sampler: { type: 'non-filtering' },
797
- },
798
- ],
799
- };
800
- }
801
- case 'fullscreen-post-with-scene-depth-msaa': {
802
- return {
803
- label: 'fullscreen-post-with-scene-depth-msaa-bgl',
804
- entries: [
805
- ...buildFullscreenPostInputEntries(spec),
806
- {
807
- binding: 2,
808
- visibility: GPU_SHADER_STAGE_FRAGMENT,
809
- buffer: { type: 'uniform' },
810
- },
811
- {
812
- binding: 3,
813
- visibility: GPU_SHADER_STAGE_FRAGMENT,
814
- texture: { sampleType: 'depth', viewDimension: '2d', multisampled: true },
815
- },
816
- {
817
- binding: 4,
818
- visibility: GPU_SHADER_STAGE_FRAGMENT,
819
- sampler: { type: 'non-filtering' },
820
- },
821
- ],
822
- };
823
- }
824
- case 'fullscreen-post-with-gbuffer-depth': {
825
- return {
826
- label: 'fullscreen-post-with-gbuffer-depth-bgl',
827
- entries: [
828
- ...buildFullscreenPostInputEntries(spec),
829
- {
830
- binding: 2,
831
- visibility: GPU_SHADER_STAGE_FRAGMENT,
832
- buffer: { type: 'uniform' },
833
- },
834
- {
835
- binding: 3,
836
- visibility: GPU_SHADER_STAGE_FRAGMENT,
837
- texture: { sampleType: 'depth', viewDimension: '2d' },
838
- },
839
- {
840
- binding: 4,
841
- visibility: GPU_SHADER_STAGE_FRAGMENT,
842
- sampler: { type: 'non-filtering' },
843
- },
844
- {
845
- binding: 5,
846
- visibility: GPU_SHADER_STAGE_FRAGMENT,
847
- texture: { sampleType: 'float', viewDimension: '2d' },
848
- },
849
- {
850
- binding: 6,
851
- visibility: GPU_SHADER_STAGE_FRAGMENT,
852
- texture: { sampleType: 'float', viewDimension: '2d' },
853
- },
854
- ],
855
- };
856
- }
857
- }
858
- }
859
-
860
- /**
861
- * The shared texture@0 + sampler@1 entries for fullscreen post-process BGLs.
862
- * sampleType is derived from `spec.attachments` (R3 fix): depth attachments →
863
- * `'depth'` + `'comparison'` sampler; `'r32float'` → `'unfilterable-float'`;
864
- * else → `'float'` + `'filtering'`. Both `'fullscreen-post'` and
865
- * `'fullscreen-post-with-params'` reuse this so the derivation is one SSOT.
866
- */
867
- function buildFullscreenPostInputEntries(spec: PipelineSpec): GPUBindGroupLayoutEntry[] {
868
- const inputFormat: GPUTextureFormat | undefined =
869
- spec.attachments.depthFormat ?? spec.attachments.colorFormats[0];
870
- const sampleType: GPUTextureSampleType =
871
- inputFormat === 'depth32float' ||
872
- inputFormat === 'depth24plus' ||
873
- inputFormat === 'depth24plus-stencil8' ||
874
- inputFormat === 'depth16unorm'
875
- ? 'depth'
876
- : inputFormat === 'r32float'
877
- ? 'unfilterable-float'
878
- : 'float';
879
- return [
880
- {
881
- binding: 0,
882
- visibility: GPU_SHADER_STAGE_FRAGMENT,
883
- texture: { sampleType, viewDimension: '2d' },
884
- },
885
- {
886
- binding: 1,
887
- visibility: GPU_SHADER_STAGE_FRAGMENT,
888
- sampler: {
889
- type: sampleType === 'depth' ? 'comparison' : 'filtering',
890
- },
891
- },
892
- ];
893
- }
894
-
895
423
  // ══════════════════════════════════════════════════════════════════════════════
896
424
  // passKindPolicyTable — closed map: passKind → attachment shape + default ops
897
425
  // ══════════════════════════════════════════════════════════════════════════════
@@ -985,15 +513,6 @@ export const passKindPolicyTable: Readonly<Record<string, PassKindAttachmentPoli
985
513
  },
986
514
  defaultDepthOps: { loadOp: 'clear', storeOp: 'store', clearValue: 1 },
987
515
  },
988
- temporal: {
989
- shape: 'color-and-depth',
990
- defaultColorOps: {
991
- loadOp: 'clear',
992
- storeOp: 'store',
993
- clearValue: { r: 0, g: 0, b: -1, a: 1 },
994
- },
995
- defaultDepthOps: { loadOp: 'clear', storeOp: 'store', clearValue: 1 },
996
- },
997
516
  'shadow-caster': {
998
517
  shape: 'depth-only',
999
518
  defaultColorOps: undefined,
@@ -1083,7 +602,7 @@ export const passKindPolicyTable: Readonly<Record<string, PassKindAttachmentPoli
1083
602
  *
1084
603
  * Stencil-op gate is auto-derived from `specAttachments.depthFormat`:
1085
604
  * - `'depth24plus-stencil8'` → emits `stencilLoadOp:'clear', stencilStoreOp:'discard'`
1086
- * - any other depth format → omits stencil ops entirely
605
+ * - every other depth format → omits stencil ops entirely
1087
606
  *
1088
607
  * This collapses the R3/R5 stencil-op duplicates that previously lived inline
1089
608
  * at every forward-pass beginRenderPass site.
@@ -1192,64 +711,6 @@ export function buildBeginRenderPassDescriptor(
1192
711
  return out;
1193
712
  }
1194
713
 
1195
- /**
1196
- * Dev-mode equality check: two PipelineSpec instances are structurally equal
1197
- * when every axis field is `===` (shallow compare).
1198
- *
1199
- * Not intended for runtime hot paths — use `cacheKeyOf(a) === cacheKeyOf(b)`
1200
- * for cache-hit checks. This function exists for dev-time assertions
1201
- * (`assert(specsEqual(specA, specB))`) and unit-test round-trip verification.
1202
- *
1203
- * @see plan-strategy §3.2 · requirements AC-02
1204
- */
1205
- export function specsEqual(a: PipelineSpec, b: PipelineSpec): boolean {
1206
- if (
1207
- a.shader.id !== b.shader.id ||
1208
- a.shader.passKind !== b.shader.passKind ||
1209
- a.shader.variantSet !== b.shader.variantSet ||
1210
- a.attachments.colorFormats.length !== b.attachments.colorFormats.length ||
1211
- !a.attachments.colorFormats.every((f, i) => f === b.attachments.colorFormats[i]) ||
1212
- a.attachments.depthFormat !== b.attachments.depthFormat ||
1213
- a.attachments.sampleCount !== b.attachments.sampleCount ||
1214
- a.geometry.topology !== b.geometry.topology ||
1215
- a.geometry.stripIndexFormat !== b.geometry.stripIndexFormat
1216
- ) {
1217
- return false;
1218
- }
1219
-
1220
- // VertexLayout: same reference or structurally equal keys + byte lengths
1221
- if (a.geometry.vertexLayout !== b.geometry.vertexLayout) {
1222
- const aKeys = Object.keys(a.geometry.vertexLayout).sort();
1223
- const bKeys = Object.keys(b.geometry.vertexLayout).sort();
1224
- if (aKeys.length !== bKeys.length || !aKeys.every((k, i) => k === bKeys[i])) return false;
1225
- for (const k of aKeys) {
1226
- const aBuf = a.geometry.vertexLayout[k as keyof VertexAttributeMap];
1227
- const bBuf = b.geometry.vertexLayout[k as keyof VertexAttributeMap];
1228
- if (aBuf === bBuf) continue;
1229
- if (aBuf === undefined || bBuf === undefined) return false;
1230
- if ((aBuf as ArrayBuffer).byteLength !== (bBuf as ArrayBuffer).byteLength) return false;
1231
- }
1232
- }
1233
-
1234
- // RenderState: same reference or JSON-equal
1235
- if (a.renderState !== b.renderState) {
1236
- if (a.renderState === undefined || b.renderState === undefined) return false;
1237
- const aSorted = Object.keys(a.renderState).sort();
1238
- const bSorted = Object.keys(b.renderState).sort();
1239
- if (aSorted.length !== bSorted.length || !aSorted.every((k, i) => k === bSorted[i]))
1240
- return false;
1241
- for (const k of aSorted) {
1242
- if (
1243
- a.renderState[k as keyof MaterialRenderState] !==
1244
- b.renderState[k as keyof MaterialRenderState]
1245
- )
1246
- return false;
1247
- }
1248
- }
1249
-
1250
- return true;
1251
- }
1252
-
1253
714
  /**
1254
715
  * Validate a PipelineSpec before attempting to build.
1255
716
  *
@@ -1287,19 +748,21 @@ export function validateSpec(
1287
748
  ok: false,
1288
749
  code: 'unknown-pass-kind',
1289
750
  detail: { expected: KNOWN_PASS_KINDS, actual: spec.shader.passKind },
1290
- hint: `passKind '${spec.shader.passKind}' is not in KNOWN_PASS_KINDS; register custom pass kinds via ShaderRegistry`,
751
+ hint: `passKind '${spec.shader.passKind}' is not in KNOWN_PASS_KINDS; register custom pass kinds via ShaderCatalog`,
1291
752
  };
1292
753
  }
1293
754
 
1294
755
  // Check 3: depth-testing renderState without a depthFormat
1295
- if (spec.attachments.depthFormat === undefined && spec.renderState?.depthCompare !== undefined) {
756
+ const depthOnly = passKindPolicyTable[spec.shader.passKind]?.shape === 'depth-only';
757
+ const depthRequired = !!spec.renderState?.depthCompare || depthOnly;
758
+ if (!spec.attachments.depthFormat && depthRequired) {
1296
759
  return {
1297
760
  ok: false,
1298
761
  code: 'attachment-format-incompatible',
1299
762
  detail: {
1300
- reason: 'depth-compare-without-depth-format',
1301
- expected: 'depthFormat must be set when renderState.depthCompare is defined',
1302
- actual: `depthFormat=${String(spec.attachments.depthFormat)}, depthCompare=${spec.renderState.depthCompare}`,
763
+ reason: 'depth-requirement-without-depth-format',
764
+ expected: 'depthFormat must be set when depth testing or a depth-only pass is requested',
765
+ actual: `depthFormat=${String(spec.attachments.depthFormat)}, depthCompare=${spec.renderState?.depthCompare}`,
1303
766
  },
1304
767
  hint: 'set attachments.depthFormat (e.g. depth24plus-stencil8 or depth32float) when renderState specifies depthCompare',
1305
768
  };
@@ -1417,8 +880,8 @@ const PROCEDURAL_ATTR_LAYOUT: VertexAttributeMap = {
1417
880
  tangent: new Float32Array(0),
1418
881
  };
1419
882
 
1420
- const HDR_FORMAT: GPUTextureFormat = 'rgba16float' as unknown as GPUTextureFormat;
1421
- const DEPTH_DS: GPUTextureFormat = 'depth24plus-stencil8' as unknown as GPUTextureFormat;
883
+ const HDR_FORMAT: GPUTextureFormat = 'rgba16float';
884
+ const DEPTH_DS: GPUTextureFormat = 'depth24plus-stencil8';
1422
885
 
1423
886
  /**
1424
887
  * Default LDR view format used when callers ask for the SPEC_CONST table
@@ -1428,7 +891,7 @@ const DEPTH_DS: GPUTextureFormat = 'depth24plus-stencil8' as unknown as GPUTextu
1428
891
  * format selected by `selectSwapChainFormat` (Channel 2 BGRA / Channel 3
1429
892
  * RGBA / dawn-node RGBA — see bug-20260615 fix-up note in `createRenderer`).
1430
893
  */
1431
- const DEFAULT_LDR_FORMAT: GPUTextureFormat = 'bgra8unorm-srgb' as unknown as GPUTextureFormat;
894
+ const DEFAULT_LDR_FORMAT: GPUTextureFormat = 'bgra8unorm-srgb';
1432
895
 
1433
896
  const TRI_GEOMETRY = {
1434
897
  topology: 'triangle-list' as PrimitiveTopology,
@@ -1485,7 +948,7 @@ const URP_PBR_VARIANT_SET = 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAI
1485
948
  * - sprite goes through `getMaterialShaderPipeline('forgeax::sprite', ...)`
1486
949
  * lazily at first transparent-LDR-split draw — no boot-time pre-warm.
1487
950
  * - HDRP variant (`variantSet=''` or compound `=true` form) is registered
1488
- * lazily on `installPipeline(hdrpAsset)`, not at boot — adding HDRP
951
+ * lazily when the clustered Standard profile activates, not at boot — adding clustered
1489
952
  * prewarm here would build PSOs against the URP layout (the boot-time
1490
953
  * `pbrModule` is the URP variant when `isHdrpActive=false`)
1491
954
  *