@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
package/src/materials.ts CHANGED
@@ -4,7 +4,6 @@ import type {
4
4
  MaterialParameter,
5
5
  MaterialPass,
6
6
  MaterialRenderState,
7
- MaterialTextureValue,
8
7
  MaterialValue,
9
8
  } from '@forgeax/engine-types';
10
9
 
@@ -17,21 +16,6 @@ const STANDARD_MODULE = 'forgeax_material::standard';
17
16
  const UNLIT_MODULE = 'forgeax_material::unlit';
18
17
  const SPRITE_MODULE = 'forgeax_material::sprite';
19
18
 
20
- export function materialTextureValue(value: MaterialValue): MaterialValue;
21
- export function materialTextureValue(value: string): MaterialValue;
22
- export function materialTextureValue(value: undefined): undefined;
23
- export function materialTextureValue(
24
- value: MaterialValue | string | undefined,
25
- ): MaterialValue | undefined {
26
- if (value === undefined) return undefined;
27
- if (typeof value === 'string') return value;
28
- if (typeof value === 'number') {
29
- return { texture: value as unknown as MaterialTextureValue['texture'] };
30
- }
31
- if (typeof value !== 'object' || value === null || Array.isArray(value)) return value;
32
- return value;
33
- }
34
-
35
19
  function authoredColorParameter(
36
20
  name: string,
37
21
  type: 'color' | 'vec3',
@@ -119,9 +103,7 @@ function unlit(rgba: readonly [number, number, number, number], opts?: UnlitOpts
119
103
  throw new Error(`Materials.unlit: alphaCutoff must be in [0, 1], got ${opts.alphaCutoff}`);
120
104
  }
121
105
  const values: Record<string, MaterialValue> = { baseColor: rgba };
122
- if (opts?.baseColorTexture !== undefined) {
123
- values.baseColorTexture = materialTextureValue(opts.baseColorTexture);
124
- }
106
+ if (opts?.baseColorTexture !== undefined) values.baseColorTexture = opts.baseColorTexture;
125
107
  if (opts?.alphaCutoff !== undefined) values.alphaCutoff = opts.alphaCutoff;
126
108
  const passes: [MaterialPass, ...MaterialPass[]] = [
127
109
  pass('forward', UNLIT_MODULE, opts?.renderState, undefined, opts?.queue),
@@ -200,19 +182,15 @@ function standard(opts: StandardOpts): MaterialAsset {
200
182
  if (opts.clearcoatRoughness !== undefined) values.clearcoatRoughness = opts.clearcoatRoughness;
201
183
  if (opts.emissive !== undefined) values.emissive = opts.emissive;
202
184
  if (opts.emissiveIntensity !== undefined) values.emissiveIntensity = opts.emissiveIntensity;
203
- if (opts.emissiveTexture !== undefined)
204
- values.emissiveTexture = materialTextureValue(opts.emissiveTexture);
205
- if (opts.baseColorTexture !== undefined)
206
- values.baseColorTexture = materialTextureValue(opts.baseColorTexture);
185
+ if (opts.emissiveTexture !== undefined) values.emissiveTexture = opts.emissiveTexture;
186
+ if (opts.baseColorTexture !== undefined) values.baseColorTexture = opts.baseColorTexture;
207
187
  if (opts.metallicRoughnessTexture !== undefined) {
208
- values.metallicRoughnessTexture = materialTextureValue(opts.metallicRoughnessTexture);
188
+ values.metallicRoughnessTexture = opts.metallicRoughnessTexture;
209
189
  }
210
- if (opts.normalTexture !== undefined)
211
- values.normalTexture = materialTextureValue(opts.normalTexture);
212
- if (opts.occlusionTexture !== undefined)
213
- values.occlusionTexture = materialTextureValue(opts.occlusionTexture);
190
+ if (opts.normalTexture !== undefined) values.normalTexture = opts.normalTexture;
191
+ if (opts.occlusionTexture !== undefined) values.occlusionTexture = opts.occlusionTexture;
214
192
  if (opts.specularTintTexture !== undefined) {
215
- values.specularTintTexture = materialTextureValue(opts.specularTintTexture);
193
+ values.specularTintTexture = opts.specularTintTexture;
216
194
  }
217
195
  if (opts.alphaCutoff !== undefined) values.alphaCutoff = opts.alphaCutoff;
218
196
  const passes: [MaterialPass, ...MaterialPass[]] = [
@@ -19,7 +19,6 @@ export interface ResolvedMeshMaterialBinding {
19
19
 
20
20
  /** Public read-only observation of the bindings used by the last frame. */
21
21
  export interface MeshMaterialBindingObservation {
22
- /** Renderer-local identity for one attached World generation; never a draw-array index. */
23
22
  readonly worldId: number;
24
23
  readonly entityKey: number;
25
24
  readonly bindings: readonly ResolvedMeshMaterialBinding[];
@@ -25,19 +25,17 @@ import type {
25
25
  BindGroup,
26
26
  BindGroupEntry,
27
27
  BindGroupLayout,
28
+ BindGroupLayoutDescriptor,
28
29
  Buffer,
29
30
  PipelineLayout,
30
- Result,
31
- RhiError,
31
+ RhiDevice,
32
32
  Sampler,
33
33
  TextureView,
34
34
  } from '@forgeax/engine-rhi';
35
- import { DEFAULT_STANDARD_PBR_PARAM_SCHEMA } from '@forgeax/engine-shader';
36
- import { type DerivedMaterialInterface, derive } from '@forgeax/engine-types';
35
+ import { DEFAULT_STANDARD_PBR_PARAM_SCHEMA, type ShaderCatalog } from '@forgeax/engine-shader';
36
+ import { derive, type ParamSchemaEntry } from '@forgeax/engine-types';
37
37
  import { GPU_SHADER_STAGE_FRAGMENT, GPU_SHADER_STAGE_VERTEX } from './gpu-stage';
38
- import { buildBindGroupLayoutDescriptor, type PipelineSpec } from './pipeline-spec';
39
-
40
- const DEFAULT_STANDARD_PBR_DERIVED_INTERFACE = derive(DEFAULT_STANDARD_PBR_PARAM_SCHEMA);
38
+ import type { PipelineSpec } from './pipeline-spec-types';
41
39
 
42
40
  // Stub PipelineSpec used by the BGL-only call sites. The dispatcher only reads
43
41
  // `spec.shader` when a registry is supplied for reflection; for caps-driven
@@ -53,24 +51,10 @@ const BGL_ONLY_SPEC_STUB: PipelineSpec = Object.freeze({
53
51
  renderState: undefined,
54
52
  }) as PipelineSpec;
55
53
 
56
- // ─── Device shim ────────────────────────────────────────────────────────────
57
- //
58
- // We accept the narrow structural subset of RhiDevice that the factory
59
- // touches. Production callers pass the real RhiDevice; tests pass a
60
- // vi.fn-based capture. The unwrap pattern matches createRenderer's
61
- // `runShimSyncStep` -- the factory throws on Result.ok === false so the
62
- // caller does not need to handle Result at every line.
63
-
64
- export interface PbrPipelineDevice {
65
- createBindGroupLayout(desc: {
66
- label: string | undefined;
67
- entries: readonly GPUBindGroupLayoutEntry[];
68
- }): Result<BindGroupLayout, RhiError>;
69
- createPipelineLayout(desc: {
70
- label?: string;
71
- bindGroupLayouts: readonly BindGroupLayout[];
72
- }): Result<PipelineLayout, RhiError>;
73
- }
54
+ // ─── Device owner ───────────────────────────────────────────────────────────
55
+
56
+ /** The PBR layout builder consumes only the two creation methods it owns. */
57
+ export type PbrPipelineDevice = Pick<RhiDevice, 'createBindGroupLayout' | 'createPipelineLayout'>;
74
58
 
75
59
  // ─── Result shape ───────────────────────────────────────────────────────────
76
60
 
@@ -136,14 +120,22 @@ export interface PbrPipelineLayoutBundle {
136
120
  * built-in standard-PBR shape when omitted, for the caps-driven seam).
137
121
  */
138
122
  export function buildPbrMaterialUserRegionEntries(
139
- derived: DerivedMaterialInterface = DEFAULT_STANDARD_PBR_DERIVED_INTERFACE,
123
+ paramSchema: readonly ParamSchemaEntry[] = DEFAULT_STANDARD_PBR_PARAM_SCHEMA,
140
124
  ): GPUBindGroupLayoutEntry[] {
141
- // derive() returns the engine BindGroupLayoutEntry (exactOptionalPropertyTypes
142
- // makes its optional fields `T | undefined`, structurally distinct from the
143
- // DOM GPUBindGroupLayoutEntry surface). The two-step `as unknown as` is the
144
- // sanctioned known-unsafe opt-in (AC-08 gate (j) allows it; single-step
145
- // `as GPU...` is the forbidden shim-leak pattern).
146
- const entries = derived.bglEntries.map((e) => ({ ...e })) as unknown as GPUBindGroupLayoutEntry[];
125
+ const derived = derive(paramSchema);
126
+ // Project the engine-owned entry shape into the DOM WebGPU descriptor. Omit
127
+ // absent optional members so exactOptionalPropertyTypes remains true at the
128
+ // boundary instead of leaking an `undefined` property into the descriptor.
129
+ const entries = derived.bglEntries.map(
130
+ (entry): GPUBindGroupLayoutEntry => ({
131
+ binding: entry.binding,
132
+ visibility: entry.visibility,
133
+ ...(entry.buffer === undefined ? {} : { buffer: entry.buffer }),
134
+ ...(entry.sampler === undefined ? {} : { sampler: entry.sampler }),
135
+ ...(entry.texture === undefined ? {} : { texture: entry.texture }),
136
+ ...(entry.storageTexture === undefined ? {} : { storageTexture: entry.storageTexture }),
137
+ }),
138
+ );
147
139
  // Patch binding 0 (the material UBO) to the dynamic-offset, vertex-visible
148
140
  // material-UBO contract. derive() emits binding 0 as the first numeric run's
149
141
  // merged UBO; an empty schema has no binding-0 UBO and needs no patch.
@@ -175,7 +167,7 @@ export function buildPbrMaterialUserRegionEntries(
175
167
  // (sampler_comparison + texture_depth_2d, 2 entries).
176
168
  // The active shadow bindings live in the view BGL today
177
169
  // (group(0) bindings 3..7); this kind is the seam for
178
- // any per-material shadow override surface a future feat
170
+ // each per-material shadow override surface a future feat
179
171
  // wires onto group(1).
180
172
  // - 'ibl' the 7 IBL / Skylight entries (irradiance / prefilter
181
173
  // cube + brdfLut 2d + 3 samplers + intensity uniform).
@@ -196,7 +188,7 @@ const SHADOW_INJECTION_LENGTH = 2;
196
188
  * Append the engine-injection BGL entries for the given `kind` after the
197
189
  * user-region BGL entries, with binding numbers starting at `bgl.length`.
198
190
  *
199
- * The function reads `bgl.length` (NOT a hardcoded constant) so any
191
+ * The function reads `bgl.length` (NOT a hardcoded constant) so each
200
192
  * user-region size — derived from `derive(schema).userRegionBindingEnd` or
201
193
  * computed manually — flows through to the injection start binding without
202
194
  * a coupled edit.
@@ -355,6 +347,8 @@ export interface PbrCaps {
355
347
  * (always-on bindings 5/6 paired with the unconditional `POINT_SHADOW_AVAILABLE`
356
348
  * define registered in vite-plugin-shader) +
357
349
  * feat-20260613-csm-cascaded-shadow-maps M5 / w28 (binding 7 cascade UBO).
350
+ * binding 10 (Points/Lines viewport UBO; always bound for the shared view
351
+ * layout and consumed only by the dedicated points-lines shader).
358
352
  * Isolated here so M4 round-4 tests can recreate the layout.
359
353
  *
360
354
  * feat-20260526-pbr-uniform-fallback-no-storage-buffer M3 / w9:
@@ -456,6 +450,11 @@ export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[]
456
450
  visibility: GPU_SHADER_STAGE_FRAGMENT,
457
451
  texture: { sampleType: 'depth', viewDimension: '2d' },
458
452
  },
453
+ {
454
+ binding: 10,
455
+ visibility: GPU_SHADER_STAGE_VERTEX,
456
+ buffer: { type: 'uniform', hasDynamicOffset: true },
457
+ },
459
458
  ];
460
459
  }
461
460
 
@@ -469,7 +468,7 @@ export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[]
469
468
  * `caps.storageBuffer===false` switches every storage-buffer BGL entry
470
469
  * (view bindings 1+2, mesh-array, instances) to `uniform`.
471
470
  *
472
- * Throws on any `createBindGroupLayout` / `createPipelineLayout` Result
471
+ * Throws on each `createBindGroupLayout` / `createPipelineLayout` Result
473
472
  * failure -- the engine bootstrap path (createRenderer) wraps the call in
474
473
  * `runShimSyncStep` to fold the throw into the structured error pipe.
475
474
  */
@@ -557,9 +556,9 @@ export function isStandardPbrMaterialShader(shaderId: string | undefined): boole
557
556
  //
558
557
  // The skin material shader (`forgeax::pbr-skin`, registered by
559
558
  // `register-default-standard-pbr-skin.ts`) needs the same 4-slot layout shape
560
- // as standard PBR EXCEPT for slot 2: its mesh-array BGL declares **3**
561
- // dynamic-offset entries (binding 0 = meshes, bindings 1/2 = current/previous
562
- // palettes) versus standard PBR's single binding 0. Without a dedicated pipeline layout the
559
+ // as standard PBR EXCEPT for slot 2: its mesh-array BGL declares **2**
560
+ // dynamic-offset entries (binding 0 = meshes, binding 1 = palette) versus
561
+ // standard PBR's single binding 0. Without a dedicated pipeline layout the
563
562
  // skin shader's `@group(2) @binding(1) palette : array<mat4x4<f32>>` reference
564
563
  // trips a `Binding doesn't exist in [BindGroupLayoutInternal "pbr-mesh-array-bgl"]`
565
564
  // validation error in `device.createRenderPipeline`, surfaced as
@@ -575,12 +574,11 @@ export function isStandardPbrMaterialShader(shaderId: string | undefined): boole
575
574
 
576
575
  /**
577
576
  * Build the PBR skin pipeline layout (4 slots `[view, material,
578
- * mesh-array(3-entry), instances]`). View / material / instances BGLs are
577
+ * mesh-array(2-entry), instances]`). View / material / instances BGLs are
579
578
  * shared with the standard-PBR layout (passed in via `pbr` bundle); the only
580
- * new BGL is the 3-entry mesh-array slot for `meshes` plus current and
581
- * previous palettes.
579
+ * new BGL is the 2-entry mesh-array slot for `meshes` + `palette`.
582
580
  *
583
- * Throws on any `createBindGroupLayout` / `createPipelineLayout` Result
581
+ * Throws on each `createBindGroupLayout` / `createPipelineLayout` Result
584
582
  * failure -- the engine bootstrap path wraps the call in `runShimSyncStep`
585
583
  * to fold the throw into the structured error pipe.
586
584
  */
@@ -589,7 +587,8 @@ export function buildPbrSkinLayouts(
589
587
  caps: PbrCaps,
590
588
  pbr: PbrPipelineLayoutBundle,
591
589
  ): PbrPipelineLayoutBundle {
592
- // Mesh-array BGL: binding 0 meshes + current/previous palette bindings 1/2.
590
+ // 2-entry mesh-array BGL: binding 0 meshes + binding 1 palette. Both
591
+ // dynamic-offset (palette window per-entity, like meshes window).
593
592
  const skinMeshArrayBglRes = device.createBindGroupLayout(
594
593
  buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, {
595
594
  kind: 'pbr-skin-mesh-array',
@@ -733,17 +732,406 @@ export type { BindGroup };
733
732
  */
734
733
  export const SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET = '';
735
734
 
735
+ // BglKind dispatch (M3 / D-13) — closed union of BGL shapes the runtime ships
736
+ // ══════════════════════════════════════════════════════════════════════════════
737
+
738
+ /**
739
+ * Closed union of bind-group-layout shapes the runtime constructs.
740
+ *
741
+ * Each kind names one physically distinct BGL the runtime has historically
742
+ * built by hand. {@link buildBindGroupLayoutDescriptor} dispatches on this
743
+ * union so every `device.createBindGroupLayout(...)` call site shares one
744
+ * SSOT for entries / labels (plan-strategy §3.2; D-13 round-2 decision).
745
+ *
746
+ * Three groups by derivation source:
747
+ * 1. Shader-derived (paramSchema reflection + injection chain):
748
+ * - `'pbr-material-merged'` — derived user region + Skylight 7 + lightmap 4
749
+ * - `'unlit-material'` — 7 entries: base PBR material only (no inject)
750
+ * - `'hdrp-7-slot'` — 7 entries (binding 0 + 3..8): HDRP cluster + SSAO group(2) BGL
751
+ * 2. Caps-driven literal shapes (no shader):
752
+ * - `'pbr-view'` — 10 entries: view UBO + lights + 6 shadow bindings
753
+ * (directional 3/4, point 5/6, cascade 7, spot atlas 8, spot
754
+ * lightViewProj matrices 9 — feat-20260625)
755
+ * - `'pbr-mesh-array'` — 1 entry: per-entity mesh SSBO (dynamic-offset)
756
+ * - `'pbr-instances'` — 1 entry: per-instance SSBO (no dynamic-offset)
757
+ * - `'pbr-skin-mesh-array'` — 2 entries: meshes + skin palette
758
+ * 3. Attachment-driven (fullscreen post-process):
759
+ * - `'fullscreen-post'` — 2 entries: input texture + sampler. The texture
760
+ * `sampleType` is derived from `spec.attachments` (plan §R3 fix):
761
+ * `'depth32float'` → `'depth'`; `'r32float'` → `'unfilterable-float'`;
762
+ * else → `'float'`.
763
+ * - `'fullscreen-post-with-params'` — 3 entries: the same texture@0 +
764
+ * sampler@1 as `'fullscreen-post'`, plus a `buffer@2` uniform for the
765
+ * per-frame params UBO (feat-20260621 D-2: `entry.params !== undefined`
766
+ * passes route here; the layout stays group(1), q3=B). `'fullscreen-post'`
767
+ * stays byte-identical so param-less consumers degrade with no change.
768
+ * - `'fullscreen-post-with-scene-depth-msaa'` — the depth-read layout with
769
+ * `texture.multisampled=true`, selected for a 4-sample scene depth target.
770
+ */
771
+ export type BglKind =
772
+ | 'pbr-view'
773
+ | 'pbr-material-merged'
774
+ | 'pbr-mesh-array'
775
+ | 'pbr-instances'
776
+ | 'pbr-skin-mesh-array'
777
+ | 'unlit-material'
778
+ | 'hdrp-7-slot'
779
+ | 'fullscreen-post'
780
+ | 'fullscreen-post-with-params'
781
+ | 'fullscreen-post-with-scene-depth'
782
+ | 'fullscreen-post-with-scene-depth-msaa';
783
+
736
784
  /**
737
- * Pick the sprite-pass variant set for the current sprite entry. Returns
738
- * `''` (canonical all-true variant key, per bug-20260708 M2 (c)) when
739
- * `hasSpriteInstances` is true (the extract stage has populated
740
- * `RenderableSnapshot.spriteInstances`), otherwise `undefined` so the
741
- * existing sprite path stays byte-identical for non-SpriteInstances callers
742
- * (plan-strategy D-4 reverse-falsifier).
785
+ * Output shape of {@link buildBindGroupLayoutDescriptor}: matches the RHI
786
+ * `BindGroupLayoutDescriptor` (label + entries with `ExplicitUndefined`) so
787
+ * the result can be passed directly to `device.createBindGroupLayout(...)`.
743
788
  *
744
- * @param hasSpriteInstances true when the renderable carries a
745
- * `SpriteInstancesSnapshot` (extracted by render-system-extract M3 w10).
789
+ * `entries` is a mutable `Array` to match `GPUBindGroupLayoutDescriptor`
790
+ * (WebGPU types declare it mutable). Callers MUST treat the array as
791
+ * read-only — the dispatcher freezes neither the array nor its entries
792
+ * for hot-path performance.
746
793
  */
747
- export function selectSpritePassVariantSet(hasSpriteInstances: boolean): string | undefined {
748
- return hasSpriteInstances ? SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET : undefined;
794
+ export interface BindGroupLayoutDescriptorOutput {
795
+ readonly label: string | undefined;
796
+ readonly entries: GPUBindGroupLayoutEntry[];
749
797
  }
798
+
799
+ /** Build the canonical HDRP group(2) bind-group layout. */
800
+ export function createHdrpBindGroupLayoutDescriptor(
801
+ storageBuffer: boolean = true,
802
+ ): BindGroupLayoutDescriptor {
803
+ const meshBufType: GPUBufferBindingType = storageBuffer ? 'read-only-storage' : 'uniform';
804
+ const clusterBufType: GPUBufferBindingType = storageBuffer ? 'read-only-storage' : 'uniform';
805
+ return {
806
+ label: 'hdrp-unified-bgl-group2',
807
+ entries: [
808
+ {
809
+ binding: 0,
810
+ visibility: GPU_SHADER_STAGE_VERTEX,
811
+ buffer: { type: meshBufType, hasDynamicOffset: true },
812
+ },
813
+ // Bindings 1 and 2 stay absent for the URP physical isolation gap.
814
+ {
815
+ binding: 3,
816
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
817
+ buffer: { type: clusterBufType, hasDynamicOffset: false },
818
+ },
819
+ {
820
+ binding: 4,
821
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
822
+ buffer: { type: clusterBufType, hasDynamicOffset: false },
823
+ },
824
+ {
825
+ binding: 5,
826
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
827
+ buffer: { type: clusterBufType, hasDynamicOffset: false },
828
+ },
829
+ {
830
+ binding: 6,
831
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
832
+ buffer: { type: 'uniform', hasDynamicOffset: false },
833
+ },
834
+ {
835
+ binding: 7,
836
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
837
+ texture: { sampleType: 'float', viewDimension: '2d', multisampled: false },
838
+ },
839
+ {
840
+ binding: 8,
841
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
842
+ sampler: { type: 'filtering' },
843
+ },
844
+ ],
845
+ };
846
+ }
847
+
848
+ /**
849
+ * Build a `GPUBindGroupLayoutDescriptor` from a PipelineSpec, dispatching on
850
+ * `options.kind` to one of 9 closed BGL shapes (D-13 round-2).
851
+ *
852
+ * Shader-derived kinds (`'pbr-material-merged'` / `'unlit-material'` /
853
+ * `'hdrp-7-slot'`) require `options.registry` to look up the shader entry
854
+ * and reflect its `paramSchema` via {@link deriveBglShapeFromShader}; they
855
+ * compose the per-entry injection chain (Skylight + lightmap for material;
856
+ * HDRP variantSet for cluster-forward).
857
+ *
858
+ * Caps-driven kinds (`'pbr-view'` / `'pbr-mesh-array'` / `'pbr-instances'` /
859
+ * `'pbr-skin-mesh-array'`) require `options.caps` for the storage-buffer
860
+ * vs uniform-buffer fallback (RhiCaps.storageBuffer; PBR feat-20260526 M3 /
861
+ * w9). They are wholly determined by the caps shape.
862
+ *
863
+ * Attachment-driven kind (`'fullscreen-post'`) reads
864
+ * `spec.attachments.depthFormat` and `spec.attachments.colorFormats[0]` to
865
+ * pick the texture binding's `sampleType` (R3 fix: `'depth32float'` → `'depth'`,
866
+ * `'r32float'` → `'unfilterable-float'`, else → `'float'`).
867
+ *
868
+ * @param spec - the pipeline spec (axis source for reflection / caps fallback)
869
+ * @param options.kind - which BGL shape to build (closed {@link BglKind} union)
870
+ * @param options.registry - ShaderCatalog for shader-derived kinds
871
+ * @param options.caps - caps shape for caps-driven kinds (storageBuffer)
872
+ * @returns a WebGPU bind-group-layout descriptor (entries + label)
873
+ * @see plan-strategy §3.2 · plan-decisions D-13 · requirements AC-02
874
+ */
875
+ /**
876
+ * Resolve the material paramSchema for a per-shader user-region BGL derivation.
877
+ *
878
+ * Priority (D-1): explicit `options.materialParamSchema` > registry lookup of
879
+ * `spec.shader.id` > `undefined` (the user-region builder then falls back to
880
+ * the built-in standard-PBR 4-texture schema, whose user region is 9 entries).
881
+ */
882
+ function resolveMaterialParamSchema(
883
+ spec: PipelineSpec,
884
+ options: { registry?: ShaderCatalog; materialParamSchema?: readonly ParamSchemaEntry[] },
885
+ ): readonly ParamSchemaEntry[] | undefined {
886
+ if (options.materialParamSchema !== undefined) return options.materialParamSchema;
887
+ if (options.registry !== undefined) {
888
+ const lookup = options.registry.findMaterialArtifact(spec.shader.id);
889
+ if (lookup.ok) return lookup.value.paramSchema;
890
+ }
891
+ return undefined;
892
+ }
893
+
894
+ export function buildBindGroupLayoutDescriptor(
895
+ spec: PipelineSpec,
896
+ options: {
897
+ kind: BglKind;
898
+ registry?: ShaderCatalog;
899
+ caps?: PbrCaps;
900
+ /**
901
+ * Material paramSchema for the per-shader user-region derivation
902
+ * (`'pbr-material-merged'` / `'unlit-material'`). When supplied it is the
903
+ * authoritative source for the user-region BGL shape (D-1); when omitted,
904
+ * `buildPbrMaterialUserRegionEntries` falls back to the built-in
905
+ * standard-PBR 4-texture schema (user region is 9 entries), so
906
+ * the caps-driven `buildPbrPipelineLayouts` seam keeps working unchanged.
907
+ * A registry + resolvable shader id takes precedence over this field.
908
+ */
909
+ materialParamSchema?: readonly ParamSchemaEntry[];
910
+ },
911
+ ): BindGroupLayoutDescriptorOutput {
912
+ switch (options.kind) {
913
+ case 'pbr-view': {
914
+ const caps = options.caps ?? { storageBuffer: true };
915
+ return {
916
+ label: 'pbr-view-bgl',
917
+ entries: buildPbrViewBglEntries(caps),
918
+ };
919
+ }
920
+ case 'pbr-mesh-array': {
921
+ const caps = options.caps ?? { storageBuffer: true };
922
+ const meshBufType: GPUBufferBindingType = caps.storageBuffer
923
+ ? 'read-only-storage'
924
+ : 'uniform';
925
+ // sprite-lit's fragment stage does not read the mesh SSBO -- worldPos
926
+ // is carried through the VsOut interpolant. Visibility is kept widened
927
+ // to VERTEX|FRAGMENT because the BGL JSON is compared byte-identically
928
+ // across the sprite / sprite-lit / PBR pipelines that share this
929
+ // descriptor; narrowing here would change every sibling pipeline's
930
+ // BGL fingerprint. WebGPU rejects createRenderPipeline when a fragment
931
+ // stage accesses a binding whose BGL visibility excludes FRAGMENT --
932
+ // widening is permissive (validation-only, no perf cost).
933
+ return {
934
+ label: 'pbr-mesh-array-bgl',
935
+ entries: [
936
+ {
937
+ binding: 0,
938
+ visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
939
+ buffer: { type: meshBufType, hasDynamicOffset: true },
940
+ },
941
+ ],
942
+ };
943
+ }
944
+ case 'pbr-instances': {
945
+ const caps = options.caps ?? { storageBuffer: true };
946
+ const meshBufType: GPUBufferBindingType = caps.storageBuffer
947
+ ? 'read-only-storage'
948
+ : 'uniform';
949
+ return {
950
+ label: 'pbr-instances-bgl',
951
+ entries: [
952
+ {
953
+ binding: 0,
954
+ visibility: GPU_SHADER_STAGE_VERTEX,
955
+ buffer: { type: meshBufType, hasDynamicOffset: false },
956
+ },
957
+ ],
958
+ };
959
+ }
960
+ case 'pbr-skin-mesh-array': {
961
+ const caps = options.caps ?? { storageBuffer: true };
962
+ const meshBufType: GPUBufferBindingType = caps.storageBuffer
963
+ ? 'read-only-storage'
964
+ : 'uniform';
965
+ return {
966
+ label: 'pbr-skin-mesh-array-bgl',
967
+ entries: [
968
+ {
969
+ binding: 0,
970
+ visibility: GPU_SHADER_STAGE_VERTEX,
971
+ buffer: { type: meshBufType, hasDynamicOffset: true },
972
+ },
973
+ {
974
+ binding: 1,
975
+ visibility: GPU_SHADER_STAGE_VERTEX,
976
+ buffer: { type: meshBufType, hasDynamicOffset: true },
977
+ },
978
+ ],
979
+ };
980
+ }
981
+ case 'pbr-material-merged': {
982
+ // Material BGL: per-shader user-region (derive(paramSchema).bglEntries)
983
+ // + IBL injection (7) + lightmap injection (4). The user-region size is
984
+ // the only variable; injection start = userRegion.length so a 4-texture
985
+ // custom schema shifts IBL/lightmap by one sampler/texture pair (D-1).
986
+ // For the built-in 4-texture standard-PBR schema this is 9 + 7 + 4 = 20.
987
+ //
988
+ // Schema source priority (D-1): explicit materialParamSchema option >
989
+ // registry lookup of spec.shader.id > built-in standard-PBR fallback.
990
+ const resolvedSchema = resolveMaterialParamSchema(spec, options);
991
+ const userRegion = buildPbrMaterialUserRegionEntries(resolvedSchema);
992
+ const afterIbl = [...userRegion, ...appendInjection(userRegion, 'ibl')];
993
+ const merged = [...afterIbl, ...appendInjection(afterIbl, 'lightmap')];
994
+ return {
995
+ label: 'pbr-material-skylight-bgl',
996
+ entries: merged,
997
+ };
998
+ }
999
+ case 'unlit-material': {
1000
+ // Unlit material BGL: per-shader user-region only. No IBL/lightmap
1001
+ // injection (D-5 round-4: unlit demos do not pay for IBL state).
1002
+ const resolvedSchema = resolveMaterialParamSchema(spec, options);
1003
+ return {
1004
+ label: 'unlit-material-bgl',
1005
+ entries: buildPbrMaterialUserRegionEntries(resolvedSchema),
1006
+ };
1007
+ }
1008
+ case 'hdrp-7-slot': {
1009
+ // HDRP unified BGL for group(2): 9 entries (binding 0 + 3..8). The
1010
+ // shape depends on caps.storageBuffer for the cluster-buffer fallback.
1011
+ const caps = options.caps ?? { storageBuffer: true };
1012
+ const desc = createHdrpBindGroupLayoutDescriptor(caps.storageBuffer);
1013
+ return {
1014
+ label: desc.label ?? 'hdrp-unified-bgl-group2',
1015
+ entries: [...(desc.entries ?? [])],
1016
+ };
1017
+ }
1018
+ case 'fullscreen-post': {
1019
+ // Fullscreen post-process BGL: 2 entries (input texture + sampler).
1020
+ // R3 fix: derive sampleType from spec.attachments. Depth attachments
1021
+ // (depth32float) need `sampleType: 'depth'`; r32float needs
1022
+ // `'unfilterable-float'`; everything else (rgba8unorm-srgb, rgba16float,
1023
+ // bgra8unorm, …) is filterable `'float'`.
1024
+ return {
1025
+ label: 'fullscreen-post-bgl',
1026
+ entries: buildFullscreenPostInputEntries(spec),
1027
+ };
1028
+ }
1029
+ case 'fullscreen-post-with-params': {
1030
+ // feat-20260621 D-2: the same input texture@0 + sampler@1 as
1031
+ // 'fullscreen-post', plus binding 2 = per-frame params UBO (uniform).
1032
+ // The first two entries reuse buildFullscreenPostInputEntries so the
1033
+ // sampleType derivation stays a single SSOT; 'fullscreen-post' is
1034
+ // untouched (param-less zero-regression, R-A7).
1035
+ return {
1036
+ label: 'fullscreen-post-with-params-bgl',
1037
+ entries: [
1038
+ ...buildFullscreenPostInputEntries(spec),
1039
+ {
1040
+ binding: 2,
1041
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1042
+ buffer: { type: 'uniform' },
1043
+ },
1044
+ ],
1045
+ };
1046
+ }
1047
+ case 'fullscreen-post-with-scene-depth': {
1048
+ // plan-strategy D-3: 5-entry BGL for post-process passes that read the
1049
+ // camera scene depth. color@0 + sampler@1 reuse buildFullscreenPostInputEntries
1050
+ // (float+filtering for color). depthTex@3 uses `sampleType: 'depth'` and
1051
+ // `dimension: '2d'`; depthSampler@4 uses `type: 'non-filtering'` (nearest
1052
+ // + clamp-to-edge, D-2 — NOT comparison). params@2 is always present
1053
+ // (uniform) to avoid a 2x2 kind explosion per D-3.
1054
+ return {
1055
+ label: 'fullscreen-post-with-scene-depth-bgl',
1056
+ entries: [
1057
+ ...buildFullscreenPostInputEntries(spec),
1058
+ {
1059
+ binding: 2,
1060
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1061
+ buffer: { type: 'uniform' },
1062
+ },
1063
+ {
1064
+ binding: 3,
1065
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1066
+ texture: { sampleType: 'depth', viewDimension: '2d' },
1067
+ },
1068
+ {
1069
+ binding: 4,
1070
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1071
+ sampler: { type: 'non-filtering' },
1072
+ },
1073
+ ],
1074
+ };
1075
+ }
1076
+ case 'fullscreen-post-with-scene-depth-msaa': {
1077
+ return {
1078
+ label: 'fullscreen-post-with-scene-depth-msaa-bgl',
1079
+ entries: [
1080
+ ...buildFullscreenPostInputEntries(spec),
1081
+ {
1082
+ binding: 2,
1083
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1084
+ buffer: { type: 'uniform' },
1085
+ },
1086
+ {
1087
+ binding: 3,
1088
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1089
+ texture: { sampleType: 'depth', viewDimension: '2d', multisampled: true },
1090
+ },
1091
+ {
1092
+ binding: 4,
1093
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1094
+ sampler: { type: 'non-filtering' },
1095
+ },
1096
+ ],
1097
+ };
1098
+ }
1099
+ }
1100
+ }
1101
+
1102
+ /**
1103
+ * The shared texture@0 + sampler@1 entries for fullscreen post-process BGLs.
1104
+ * sampleType is derived from `spec.attachments` (R3 fix): depth attachments →
1105
+ * `'depth'` + `'comparison'` sampler; `'r32float'` → `'unfilterable-float'`;
1106
+ * else → `'float'` + `'filtering'`. Both `'fullscreen-post'` and
1107
+ * `'fullscreen-post-with-params'` reuse this so the derivation is one SSOT.
1108
+ */
1109
+ function buildFullscreenPostInputEntries(spec: PipelineSpec): GPUBindGroupLayoutEntry[] {
1110
+ const inputFormat: GPUTextureFormat | undefined =
1111
+ spec.attachments.depthFormat ?? spec.attachments.colorFormats[0];
1112
+ const sampleType: GPUTextureSampleType =
1113
+ inputFormat === 'depth32float' ||
1114
+ inputFormat === 'depth24plus' ||
1115
+ inputFormat === 'depth24plus-stencil8' ||
1116
+ inputFormat === 'depth16unorm'
1117
+ ? 'depth'
1118
+ : inputFormat === 'r32float'
1119
+ ? 'unfilterable-float'
1120
+ : 'float';
1121
+ return [
1122
+ {
1123
+ binding: 0,
1124
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1125
+ texture: { sampleType, viewDimension: '2d' },
1126
+ },
1127
+ {
1128
+ binding: 1,
1129
+ visibility: GPU_SHADER_STAGE_FRAGMENT,
1130
+ sampler: {
1131
+ type: sampleType === 'depth' ? 'comparison' : 'filtering',
1132
+ },
1133
+ },
1134
+ ];
1135
+ }
1136
+
1137
+ // ══════════════════════════════════════════════════════════════════════════════