@forgeax/engine-render 0.1.21 → 0.1.24

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 (584) hide show
  1. package/README.md +281 -38
  2. package/dist/assembly/backend-contract.d.ts +13 -0
  3. package/dist/assembly/backend-contract.d.ts.map +1 -1
  4. package/dist/assembly/bundler-contract.d.ts +9 -0
  5. package/dist/assembly/bundler-contract.d.ts.map +1 -0
  6. package/dist/assembly/device-feature-admission.d.ts +8 -0
  7. package/dist/assembly/device-feature-admission.d.ts.map +1 -1
  8. package/dist/assembly/extended-lighting-fallback.d.ts +13 -0
  9. package/dist/assembly/extended-lighting-fallback.d.ts.map +1 -0
  10. package/dist/assembly/factory.d.ts +7 -235
  11. package/dist/assembly/factory.d.ts.map +1 -1
  12. package/dist/assembly/host-contract.d.ts +10 -0
  13. package/dist/assembly/host-contract.d.ts.map +1 -1
  14. package/dist/assembly/material/assembly.d.ts +3 -2
  15. package/dist/assembly/material/assembly.d.ts.map +1 -1
  16. package/dist/assembly/material/standard-layer-projection.d.ts +10 -0
  17. package/dist/assembly/material/standard-layer-projection.d.ts.map +1 -0
  18. package/dist/assembly/material-shader-policy.d.ts +168 -0
  19. package/dist/assembly/material-shader-policy.d.ts.map +1 -0
  20. package/dist/assembly/material-shader-prewarm.d.ts +21 -0
  21. package/dist/assembly/material-shader-prewarm.d.ts.map +1 -0
  22. package/dist/assembly/mesh-ssbo-grow.d.ts +88 -0
  23. package/dist/assembly/mesh-ssbo-grow.d.ts.map +1 -0
  24. package/dist/assembly/recovery/device-loss-fanout.d.ts +14 -0
  25. package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -0
  26. package/dist/assembly/recovery/generation.d.ts +46 -0
  27. package/dist/assembly/recovery/generation.d.ts.map +1 -0
  28. package/dist/assembly/recovery/recovery-attempt.d.ts +63 -0
  29. package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -0
  30. package/dist/assembly/recovery/renderer-recover.d.ts +115 -0
  31. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -0
  32. package/dist/assembly/renderer-facade.d.ts +10 -0
  33. package/dist/assembly/renderer-facade.d.ts.map +1 -0
  34. package/dist/assembly/renderer-frame-transaction.d.ts +17 -0
  35. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  36. package/dist/assembly/renderer-helpers.d.ts +19 -0
  37. package/dist/assembly/renderer-helpers.d.ts.map +1 -0
  38. package/dist/assembly/renderer-lifecycle.d.ts +34 -0
  39. package/dist/assembly/renderer-lifecycle.d.ts.map +1 -1
  40. package/dist/assembly/shader-prewarm-policy.d.ts +15 -0
  41. package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -0
  42. package/dist/assembly/webgpu-ready-contract.d.ts +9 -0
  43. package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -0
  44. package/dist/assembly/webgpu-ready.d.ts +55 -0
  45. package/dist/assembly/webgpu-ready.d.ts.map +1 -0
  46. package/dist/assembly/webgpu-renderer.d.ts +152 -0
  47. package/dist/assembly/webgpu-renderer.d.ts.map +1 -0
  48. package/dist/authoring.mjs +1 -1
  49. package/dist/{chunk-PCHBPYML.mjs → chunk-GE3SDD72.mjs} +37 -5
  50. package/dist/chunk-GE3SDD72.mjs.map +1 -0
  51. package/dist/chunk-KZFTK6DO.mjs +1191 -0
  52. package/dist/chunk-KZFTK6DO.mjs.map +1 -0
  53. package/dist/{chunk-FS2KNUQH.mjs → chunk-Q752SHI5.mjs} +332 -568
  54. package/dist/chunk-Q752SHI5.mjs.map +1 -0
  55. package/dist/{chunk-6OPXDQ2E.mjs → chunk-RR5L4SRS.mjs} +33 -294
  56. package/dist/chunk-RR5L4SRS.mjs.map +1 -0
  57. package/dist/chunk-TFH5I7JJ.mjs +296 -0
  58. package/dist/chunk-TFH5I7JJ.mjs.map +1 -0
  59. package/dist/chunk-UQYS7FRM.mjs +1003 -0
  60. package/dist/chunk-UQYS7FRM.mjs.map +1 -0
  61. package/dist/chunk-YKB5DQV7.mjs +345 -0
  62. package/dist/chunk-YKB5DQV7.mjs.map +1 -0
  63. package/dist/{chunk-5YADUCA7.mjs → chunk-YRUYGA4A.mjs} +1189 -1217
  64. package/dist/chunk-YRUYGA4A.mjs.map +1 -0
  65. package/dist/chunk-Z3YYH2MB.mjs +5082 -0
  66. package/dist/chunk-Z3YYH2MB.mjs.map +1 -0
  67. package/dist/cluster-binner.d.ts +5 -0
  68. package/dist/cluster-binner.d.ts.map +1 -1
  69. package/dist/components/index.d.ts +3 -0
  70. package/dist/components/index.d.ts.map +1 -1
  71. package/dist/components/light-helpers.d.ts +4 -0
  72. package/dist/components/light-helpers.d.ts.map +1 -1
  73. package/dist/components/light-probe.d.ts +9 -0
  74. package/dist/components/light-probe.d.ts.map +1 -0
  75. package/dist/components/rect-area-light.d.ts +12 -0
  76. package/dist/components/rect-area-light.d.ts.map +1 -0
  77. package/dist/components/scene-instance.d.ts +4 -0
  78. package/dist/components/scene-instance.d.ts.map +1 -1
  79. package/dist/components/spot-light.d.ts +3 -0
  80. package/dist/components/spot-light.d.ts.map +1 -1
  81. package/dist/construct-renderer.mjs +27276 -23232
  82. package/dist/construct-renderer.mjs.map +1 -1
  83. package/dist/device/device-scope.d.ts +2 -0
  84. package/dist/device/device-scope.d.ts.map +1 -1
  85. package/dist/device/gpu-residency.d.ts +32 -5
  86. package/dist/device/gpu-residency.d.ts.map +1 -1
  87. package/dist/device/lifecycle-transaction.d.ts +2 -0
  88. package/dist/device/lifecycle-transaction.d.ts.map +1 -0
  89. package/dist/environment/frame.d.ts +5 -0
  90. package/dist/environment/frame.d.ts.map +1 -1
  91. package/dist/environment/inspection.d.ts +7 -0
  92. package/dist/environment/inspection.d.ts.map +1 -1
  93. package/dist/environment/lifecycle.d.ts +20 -2
  94. package/dist/environment/lifecycle.d.ts.map +1 -1
  95. package/dist/errors/gpu-driven.d.ts +26 -0
  96. package/dist/errors/gpu-driven.d.ts.map +1 -0
  97. package/dist/errors/index.d.ts +1 -0
  98. package/dist/errors/index.d.ts.map +1 -1
  99. package/dist/errors/recover.d.ts +67 -3
  100. package/dist/errors/recover.d.ts.map +1 -1
  101. package/dist/errors/render.d.ts +39 -1
  102. package/dist/errors/render.d.ts.map +1 -1
  103. package/dist/extract/contracts.d.ts +899 -0
  104. package/dist/extract/contracts.d.ts.map +1 -0
  105. package/dist/extract/gpu-driven.d.ts +50 -0
  106. package/dist/extract/gpu-driven.d.ts.map +1 -0
  107. package/dist/extract/visibility.d.ts.map +1 -1
  108. package/dist/features/host.d.ts +2 -0
  109. package/dist/features/host.d.ts.map +1 -1
  110. package/dist/features/prepared-gpu-work.d.ts +3 -0
  111. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  112. package/dist/features/prepared-graphics-store.d.ts +2 -0
  113. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  114. package/dist/gpu-driven/batch-topology.d.ts +34 -0
  115. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  116. package/dist/gpu-driven/prepared-draw.d.ts +63 -0
  117. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -0
  118. package/dist/gpu-driven/production-raster.d.ts +126 -2
  119. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  120. package/dist/gpu-driven/view-gpu.d.ts +64 -1
  121. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  122. package/dist/gpu-scene-schema.d.ts +14 -0
  123. package/dist/gpu-scene-schema.d.ts.map +1 -1
  124. package/dist/gpu-scene.d.ts +9 -1
  125. package/dist/gpu-scene.d.ts.map +1 -1
  126. package/dist/gpu-usage.d.ts +0 -1
  127. package/dist/gpu-usage.d.ts.map +1 -1
  128. package/dist/hdrp-buffers.d.ts +3 -3
  129. package/dist/hdrp-buffers.d.ts.map +1 -1
  130. package/dist/ibl/IblPipelineCache.d.ts +7 -6
  131. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  132. package/dist/ibl/skylight-bind-group.d.ts +7 -1
  133. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  134. package/dist/index.d.ts +13 -2
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.mjs +90 -5
  137. package/dist/index.mjs.map +1 -1
  138. package/dist/inspection-types.d.ts +163 -1
  139. package/dist/inspection-types.d.ts.map +1 -1
  140. package/dist/internal.d.ts +9 -0
  141. package/dist/internal.d.ts.map +1 -1
  142. package/dist/internal.mjs +23 -2
  143. package/dist/internal.mjs.map +1 -1
  144. package/dist/light-buffer-layout.d.ts +60 -148
  145. package/dist/light-buffer-layout.d.ts.map +1 -1
  146. package/dist/materials.d.ts +34 -10
  147. package/dist/materials.d.ts.map +1 -1
  148. package/dist/mesh-material-bindings.d.ts +56 -0
  149. package/dist/mesh-material-bindings.d.ts.map +1 -1
  150. package/dist/occlusion-proxy.d.ts +4 -0
  151. package/dist/occlusion-proxy.d.ts.map +1 -0
  152. package/dist/pbr-pipeline.d.ts +58 -21
  153. package/dist/pbr-pipeline.d.ts.map +1 -1
  154. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  155. package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -1
  156. package/dist/pipeline/standard-lighting/light-frame.d.ts +3 -3
  157. package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -1
  158. package/dist/pipeline/standard-lighting/topology.d.ts +1 -1
  159. package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -1
  160. package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -1
  161. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  162. package/dist/pipeline-builder.d.ts +2 -0
  163. package/dist/pipeline-builder.d.ts.map +1 -1
  164. package/dist/pipeline-spec.d.ts +1 -1
  165. package/dist/pipeline-spec.d.ts.map +1 -1
  166. package/dist/plugin.d.ts.map +1 -1
  167. package/dist/points-lines/prepare.d.ts +3 -0
  168. package/dist/points-lines/prepare.d.ts.map +1 -1
  169. package/dist/points-lines/standard-owner.d.ts +33 -0
  170. package/dist/points-lines/standard-owner.d.ts.map +1 -0
  171. package/dist/prepare/extended-lighting/ltc-resources.d.ts +31 -0
  172. package/dist/prepare/extended-lighting/ltc-resources.d.ts.map +1 -0
  173. package/dist/prepare/extended-lighting/resources.d.ts +72 -0
  174. package/dist/prepare/extended-lighting/resources.d.ts.map +1 -0
  175. package/dist/prepare/extended-lighting/spot-modifiers.d.ts +42 -0
  176. package/dist/prepare/extended-lighting/spot-modifiers.d.ts.map +1 -0
  177. package/dist/prepare/extended-lighting/state.d.ts +24 -0
  178. package/dist/prepare/extended-lighting/state.d.ts.map +1 -0
  179. package/dist/record/frame-lighting.d.ts +8 -6
  180. package/dist/record/frame-lighting.d.ts.map +1 -1
  181. package/dist/record/frame-snapshot.d.ts +55 -10
  182. package/dist/record/frame-snapshot.d.ts.map +1 -1
  183. package/dist/record/frame-targets.d.ts.map +1 -1
  184. package/dist/record/frame.d.ts +21 -5
  185. package/dist/record/frame.d.ts.map +1 -1
  186. package/dist/record/gpu-timing.d.ts +19 -7
  187. package/dist/record/gpu-timing.d.ts.map +1 -1
  188. package/dist/record/helpers.d.ts +0 -20
  189. package/dist/record/helpers.d.ts.map +1 -1
  190. package/dist/record/main-pass-geometry.d.ts +20 -2
  191. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  192. package/dist/record/main-pass-material.d.ts +10 -18
  193. package/dist/record/main-pass-material.d.ts.map +1 -1
  194. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  195. package/dist/record/main-pass.d.ts.map +1 -1
  196. package/dist/record/mesh-ssbo.d.ts +11 -3
  197. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  198. package/dist/record/recovery-pipeline.d.ts +30 -0
  199. package/dist/record/recovery-pipeline.d.ts.map +1 -0
  200. package/dist/record/render-context.d.ts +82 -9
  201. package/dist/record/render-context.d.ts.map +1 -1
  202. package/dist/record/shadow-pass.d.ts.map +1 -1
  203. package/dist/record/typed-frame-graph.d.ts +49 -2
  204. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  205. package/dist/record/view-ubo.d.ts +1 -2
  206. package/dist/record/view-ubo.d.ts.map +1 -1
  207. package/dist/recovery/render-system-candidate.d.ts +65 -0
  208. package/dist/recovery/render-system-candidate.d.ts.map +1 -0
  209. package/dist/reflection/inspection.d.ts +10 -0
  210. package/dist/reflection/inspection.d.ts.map +1 -0
  211. package/dist/reflection/projection.d.ts +49 -0
  212. package/dist/reflection/projection.d.ts.map +1 -1
  213. package/dist/reflection/record-owner.d.ts +60 -0
  214. package/dist/reflection/record-owner.d.ts.map +1 -0
  215. package/dist/render-contract.d.ts +78 -15
  216. package/dist/render-contract.d.ts.map +1 -1
  217. package/dist/render-pipeline.d.ts +7 -0
  218. package/dist/render-pipeline.d.ts.map +1 -1
  219. package/dist/render-system-extract-tail.d.ts +12 -0
  220. package/dist/render-system-extract-tail.d.ts.map +1 -0
  221. package/dist/render-system-extract.d.ts +252 -30
  222. package/dist/render-system-extract.d.ts.map +1 -1
  223. package/dist/render-system.d.ts +140 -5
  224. package/dist/render-system.d.ts.map +1 -1
  225. package/dist/scene/probe-blend-record.d.ts +22 -0
  226. package/dist/scene/probe-blend-record.d.ts.map +1 -0
  227. package/dist/scene/probe-blend.d.ts +142 -0
  228. package/dist/scene/probe-blend.d.ts.map +1 -0
  229. package/dist/scene/render-scene-types.d.ts +0 -6
  230. package/dist/scene/render-scene-types.d.ts.map +1 -1
  231. package/dist/scene/render-scene.d.ts +122 -9
  232. package/dist/scene/render-scene.d.ts.map +1 -1
  233. package/dist/scene/visibility/bounds.d.ts +20 -0
  234. package/dist/scene/visibility/bounds.d.ts.map +1 -0
  235. package/dist/scene/visibility/budget.d.ts +16 -0
  236. package/dist/scene/visibility/budget.d.ts.map +1 -0
  237. package/dist/scene/visibility/facet.d.ts +73 -0
  238. package/dist/scene/visibility/facet.d.ts.map +1 -0
  239. package/dist/scene/visibility/gpu-frame-timing.d.ts +41 -0
  240. package/dist/scene/visibility/gpu-frame-timing.d.ts.map +1 -0
  241. package/dist/scene/visibility/gpu-lod.d.ts +46 -0
  242. package/dist/scene/visibility/gpu-lod.d.ts.map +1 -0
  243. package/dist/scene/visibility/inspection.d.ts +132 -0
  244. package/dist/scene/visibility/inspection.d.ts.map +1 -0
  245. package/dist/scene/visibility/lod-selector.d.ts +25 -0
  246. package/dist/scene/visibility/lod-selector.d.ts.map +1 -0
  247. package/dist/scene/visibility/occlusion-confidence.d.ts +81 -0
  248. package/dist/scene/visibility/occlusion-confidence.d.ts.map +1 -0
  249. package/dist/scene/visibility/occlusion-pass.d.ts +57 -0
  250. package/dist/scene/visibility/occlusion-pass.d.ts.map +1 -0
  251. package/dist/scene/visibility/occlusion-query-pool.d.ts +57 -0
  252. package/dist/scene/visibility/occlusion-query-pool.d.ts.map +1 -0
  253. package/dist/scene/visibility/occlusion-runtime.d.ts +96 -0
  254. package/dist/scene/visibility/occlusion-runtime.d.ts.map +1 -0
  255. package/dist/scene/visibility/types.d.ts +34 -0
  256. package/dist/scene/visibility/types.d.ts.map +1 -0
  257. package/dist/ssr/admission.d.ts +122 -0
  258. package/dist/ssr/admission.d.ts.map +1 -0
  259. package/dist/ssr/composition.d.ts +32 -0
  260. package/dist/ssr/composition.d.ts.map +1 -0
  261. package/dist/ssr/errors.d.ts +39 -0
  262. package/dist/ssr/errors.d.ts.map +1 -0
  263. package/dist/ssr/identity.d.ts +13 -0
  264. package/dist/ssr/identity.d.ts.map +1 -0
  265. package/dist/systems/skin-palette-allocator.d.ts +1 -1
  266. package/dist/temporal/frame-coordinator.d.ts +13 -0
  267. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  268. package/dist/temporal/frame.d.ts +2 -0
  269. package/dist/temporal/frame.d.ts.map +1 -1
  270. package/dist/temporal/index.mjs +6 -5
  271. package/dist/temporal/taa-history-store.d.ts +15 -1
  272. package/dist/temporal/taa-history-store.d.ts.map +1 -1
  273. package/dist/temporal/transaction.d.ts +5 -0
  274. package/dist/temporal/transaction.d.ts.map +1 -1
  275. package/dist/temporal/view.d.ts +7 -0
  276. package/dist/temporal/view.d.ts.map +1 -1
  277. package/dist/tilemap-chunk-extract-system.d.ts +1 -1
  278. package/dist/typed-render-graph-primitives.d.ts +4 -0
  279. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  280. package/dist/volume/passes.d.ts +8 -4
  281. package/dist/volume/passes.d.ts.map +1 -1
  282. package/package.json +20 -20
  283. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +5 -0
  284. package/src/__tests__/detached-inspection.integration.test.ts +6 -0
  285. package/src/__tests__/device-feature-admission.unit.test.ts +19 -1
  286. package/src/__tests__/device-loss-fanout.unit.test.ts +107 -0
  287. package/src/__tests__/device-scope-lifecycle.unit.test.ts +21 -0
  288. package/src/__tests__/direct-light-snapshot.unit.test.ts +59 -3
  289. package/src/__tests__/environment-generation.integration.test.ts +39 -0
  290. package/src/__tests__/evidence-identity.ts +13 -0
  291. package/src/__tests__/evidence-identity.unit.test.ts +24 -0
  292. package/src/__tests__/expose-renderer-errors.unit.test.ts +34 -0
  293. package/src/__tests__/extended-lighting-recovery.browser.test.ts +14 -0
  294. package/src/__tests__/extended-lighting-recovery.dawn.test.ts +14 -0
  295. package/src/__tests__/extended-lighting-recovery.integration.test.ts +81 -0
  296. package/src/__tests__/extended-lighting-resources.unit.test.ts +51 -0
  297. package/src/__tests__/extended-lighting-zero-feature.integration.test.ts +52 -0
  298. package/src/__tests__/factory-contract.integration.test.ts +154 -6
  299. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +4 -1
  300. package/src/__tests__/frame-observation.contract.test.ts +15 -0
  301. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +146 -0
  302. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +1 -0
  303. package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +1 -0
  304. package/src/__tests__/gpu-driven-production.integration.test.ts +572 -9
  305. package/src/__tests__/gpu-driven-scaling.unit.test.ts +66 -2
  306. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +26 -1
  307. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +89 -2
  308. package/src/__tests__/gpu-driven-view.browser.test.ts +3 -3
  309. package/src/__tests__/gpu-driven-view.dawn.test.ts +3 -3
  310. package/src/__tests__/gpu-driven-view.unit.test.ts +50 -0
  311. package/src/__tests__/gpu-lod-evidence.ts +188 -0
  312. package/src/__tests__/gpu-lod-fallback.integration.test.ts +10 -0
  313. package/src/__tests__/gpu-lod-indirect.integration.test.ts +40 -0
  314. package/src/__tests__/gpu-lod-parity.dawn.test.ts +29 -0
  315. package/src/__tests__/gpu-lod-readiness.integration.test.ts +52 -0
  316. package/src/__tests__/gpu-lod-schema.unit.test.ts +66 -0
  317. package/src/__tests__/gpu-lod-selector.unit.test.ts +28 -0
  318. package/src/__tests__/gpu-lod-silhouette.browser.test.ts +13 -0
  319. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +66 -1
  320. package/src/__tests__/gpu-scene.dawn.test.ts +8 -1
  321. package/src/__tests__/gpu-scene.unit.test.ts +49 -3
  322. package/src/__tests__/ibl/face-uniforms.unit.test.ts +2 -0
  323. package/src/__tests__/ibl-residency-publication.unit.test.ts +113 -0
  324. package/src/__tests__/light-buffer-layout.unit.test.ts +113 -3
  325. package/src/__tests__/light-inspection.unit.test.ts +55 -0
  326. package/src/__tests__/light-resource-error.unit.test.ts +43 -0
  327. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +109 -0
  328. package/src/__tests__/lod-bounds.unit.test.ts +42 -0
  329. package/src/__tests__/lod-cpu-lane.integration.test.ts +55 -0
  330. package/src/__tests__/lod-cpu-no-change.perf.test.ts +19 -0
  331. package/src/__tests__/lod-gpu-frame-timing.unit.test.ts +49 -0
  332. package/src/__tests__/lod-multi-view.integration.test.ts +63 -0
  333. package/src/__tests__/lod-occlusion-device-loss.integration.test.ts +27 -0
  334. package/src/__tests__/lod-occlusion-final-decision.integration.test.ts +47 -0
  335. package/src/__tests__/lod-occlusion-inspection.integration.test.ts +217 -0
  336. package/src/__tests__/lod-occlusion-inspection.schema.test-d.ts +14 -0
  337. package/src/__tests__/lod-occlusion-inspection.unit.test.ts +72 -0
  338. package/src/__tests__/lod-occlusion-visual-evidence.ts +91 -0
  339. package/src/__tests__/lod-occlusion.browser.test.ts +15 -0
  340. package/src/__tests__/lod-occlusion.dawn.test.ts +20 -0
  341. package/src/__tests__/lod-selector.profile.test.ts +35 -0
  342. package/src/__tests__/lod-selector.unit.test.ts +68 -0
  343. package/src/__tests__/lod-visibility-identity.unit.test.ts +198 -0
  344. package/src/__tests__/lod-visibility-lifecycle.integration.test.ts +132 -0
  345. package/src/__tests__/ltc-resources.unit.test.ts +32 -0
  346. package/src/__tests__/material-contract-inventory.unit.test.ts +41 -9
  347. package/src/__tests__/material-cooked-projection.unit.test.ts +19 -1
  348. package/src/__tests__/material-static-dynamic-route.unit.test.ts +29 -0
  349. package/src/__tests__/material-stride-surface.unit.test.ts +7 -3
  350. package/src/__tests__/materials-standard-contract.unit.test.ts +104 -0
  351. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +1 -1
  352. package/src/__tests__/occlusion-confidence.unit.test.ts +168 -0
  353. package/src/__tests__/occlusion-invalidation.integration.test.ts +37 -0
  354. package/src/__tests__/occlusion-pass-routing.unit.test.ts +16 -0
  355. package/src/__tests__/occlusion-pass.dawn.test.ts +20 -0
  356. package/src/__tests__/occlusion-pass.integration.test.ts +43 -0
  357. package/src/__tests__/occlusion-pass.rhi-null.test.ts +22 -0
  358. package/src/__tests__/occlusion-query-pool.rhi-null.test.ts +21 -0
  359. package/src/__tests__/occlusion-query-pool.unit.test.ts +95 -0
  360. package/src/__tests__/occlusion-query-ticket.integration.test.ts +47 -0
  361. package/src/__tests__/occlusion-query.dawn.test.ts +16 -0
  362. package/src/__tests__/occlusion-query.evidence.ts +178 -0
  363. package/src/__tests__/occlusion-query.rhi-null.test.ts +31 -0
  364. package/src/__tests__/occlusion-runtime.unit.test.ts +120 -0
  365. package/src/__tests__/physical-clearcoat.integration.test.ts +89 -0
  366. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +196 -0
  367. package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +1 -1
  368. package/src/__tests__/probe-bindings.unit.test.ts +200 -0
  369. package/src/__tests__/probe-blend-numeric.unit.test.ts +67 -0
  370. package/src/__tests__/probe-blend-oracle.unit.test.ts +136 -0
  371. package/src/__tests__/probe-capacity.integration.test.ts +97 -0
  372. package/src/__tests__/probe-recovery.integration.test.ts +104 -0
  373. package/src/__tests__/probe-scene-dirty.integration.test.ts +211 -0
  374. package/src/__tests__/profiler-phase-catalog.test.ts +4 -1
  375. package/src/__tests__/profiler-phase-token.test.ts +1 -0
  376. package/src/__tests__/recover-error-policy-owner.unit.test.ts +6 -3
  377. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +140 -0
  378. package/src/__tests__/rect-area-boundary.unit.test.ts +24 -0
  379. package/src/__tests__/reflection-fallback-graph.unit.test.ts +67 -0
  380. package/src/__tests__/reflection-fallback-inspection.unit.test.ts +77 -0
  381. package/src/__tests__/reflection-fallback-lifecycle.integration.test.ts +21 -0
  382. package/src/__tests__/reflection-fallback-projection.unit.test.ts +90 -0
  383. package/src/__tests__/reflection-fallback-source.unit.test.ts +32 -0
  384. package/src/__tests__/reflection-probe-owner-placement.unit.test.ts +39 -0
  385. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +120 -0
  386. package/src/__tests__/render-error-code-owner.test-d.ts +1 -0
  387. package/src/__tests__/render-feature-docs.unit.test.ts +12 -7
  388. package/src/__tests__/render-graph-fallback.integration.test.ts +24 -0
  389. package/src/__tests__/render-perf/extended-lighting.bench.test.ts +66 -0
  390. package/src/__tests__/render-scene-projection.unit.test.ts +447 -18
  391. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +160 -17
  392. package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +47 -0
  393. package/src/__tests__/renderer-generation-assembly.unit.test.ts +77 -0
  394. package/src/__tests__/renderer-generation-failure.unit.test.ts +108 -0
  395. package/src/__tests__/renderer-producer-root-matrix.integration.test.ts +33 -0
  396. package/src/__tests__/renderer-recovery-capability-matrix.unit.test.ts +59 -0
  397. package/src/__tests__/renderer-recovery-contract.unit.test.ts +73 -0
  398. package/src/__tests__/renderer-recovery-lifecycle.unit.test.ts +216 -0
  399. package/src/__tests__/renderer-target-history-recovery.integration.test.ts +80 -0
  400. package/src/__tests__/shader-manifest-fixture.ts +13 -16
  401. package/src/__tests__/shader-stage-surface.unit.test.ts +1 -1
  402. package/src/__tests__/skin-motion-regression.unit.test.ts +22 -0
  403. package/src/__tests__/skinned-shadow-caster.test.ts +2 -2
  404. package/src/__tests__/spot-modifier-projection.unit.test.ts +70 -0
  405. package/src/__tests__/ssr-admission-matrix.integration.test.ts +206 -0
  406. package/src/__tests__/ssr-composition.unit.test.ts +46 -0
  407. package/src/__tests__/ssr-fallback-zero-work.bench.test.ts +94 -0
  408. package/src/__tests__/ssr-recovery-errors.unit.test.ts +58 -0
  409. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +67 -0
  410. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +7 -0
  411. package/src/__tests__/standard-layer-projection.unit.test.ts +23 -0
  412. package/src/__tests__/standard-lighting-inspection.integration.test.ts +1 -1
  413. package/src/__tests__/standard-lighting-write.unit.test.ts +66 -2
  414. package/src/__tests__/temporal-fallback-generation.integration.test.ts +16 -0
  415. package/src/__tests__/temporal-view.unit.test.ts +3 -3
  416. package/src/__tests__/transmission-prewarm.unit.test.ts +111 -32
  417. package/src/__tests__/visibility-budget.integration.test.ts +140 -0
  418. package/src/__tests__/visibility-budget.unit.test.ts +70 -0
  419. package/src/__tests__/visibility-extract.integration.test.ts +11 -6
  420. package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +6 -3
  421. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +31 -28
  422. package/src/__tests__/volumetric-fog-topology.unit.test.ts +3 -1
  423. package/src/assembly/backend-contract.ts +13 -0
  424. package/src/assembly/bundler-contract.ts +9 -0
  425. package/src/assembly/device-feature-admission.ts +26 -9
  426. package/src/assembly/extended-lighting-fallback.ts +216 -0
  427. package/src/assembly/factory.ts +81 -9634
  428. package/src/assembly/host-contract.ts +10 -0
  429. package/src/assembly/material/assembly.ts +18 -2
  430. package/src/assembly/material/standard-layer-projection.ts +16 -0
  431. package/src/assembly/material-shader-policy.ts +854 -0
  432. package/src/assembly/material-shader-prewarm.ts +88 -0
  433. package/src/assembly/mesh-ssbo-grow.ts +270 -0
  434. package/src/assembly/recovery/device-loss-fanout.ts +89 -0
  435. package/src/assembly/recovery/generation.ts +141 -0
  436. package/src/assembly/recovery/recovery-attempt.ts +800 -0
  437. package/src/assembly/recovery/renderer-recover.ts +906 -0
  438. package/src/assembly/renderer-facade.ts +342 -0
  439. package/src/assembly/renderer-frame-transaction.ts +45 -0
  440. package/src/assembly/renderer-helpers.ts +99 -0
  441. package/src/assembly/renderer-lifecycle.ts +159 -0
  442. package/src/assembly/shader-prewarm-policy.ts +157 -0
  443. package/src/assembly/webgpu-ready-contract.ts +14 -0
  444. package/src/assembly/webgpu-ready.ts +4079 -0
  445. package/src/assembly/webgpu-renderer.ts +4095 -0
  446. package/src/cluster-binner.ts +31 -0
  447. package/src/components/__tests__/lighting-authoring.unit.test.ts +39 -0
  448. package/src/components/__tests__/rect-area-light.unit.test.ts +33 -0
  449. package/src/components/camera.ts +1 -1
  450. package/src/components/index.ts +3 -0
  451. package/src/components/light-helpers.ts +52 -1
  452. package/src/components/light-probe.ts +13 -0
  453. package/src/components/rect-area-light.ts +15 -0
  454. package/src/components/scene-instance.ts +6 -0
  455. package/src/components/spot-light.ts +3 -0
  456. package/src/debug-draw-glue.ts +1 -1
  457. package/src/device/__tests__/extended-lighting-recovery.unit.test.ts +24 -0
  458. package/src/device/device-scope.ts +35 -6
  459. package/src/device/gpu-residency.ts +334 -35
  460. package/src/device/lifecycle-transaction.ts +12 -0
  461. package/src/environment/frame.ts +6 -0
  462. package/src/environment/inspection.ts +10 -0
  463. package/src/environment/lifecycle.ts +122 -9
  464. package/src/errors/gpu-driven.ts +92 -0
  465. package/src/errors/index.ts +1 -0
  466. package/src/errors/recover.ts +108 -5
  467. package/src/errors/render.ts +72 -1
  468. package/src/extract/camera.ts +3 -3
  469. package/src/extract/contracts.ts +974 -0
  470. package/src/extract/gpu-driven.ts +108 -0
  471. package/src/extract/visibility.ts +0 -23
  472. package/src/features/host.ts +16 -0
  473. package/src/features/prepared-gpu-work.ts +20 -2
  474. package/src/features/prepared-graphics-store.ts +17 -0
  475. package/src/gpu-driven/batch-topology.ts +206 -28
  476. package/src/gpu-driven/prepared-draw.ts +208 -0
  477. package/src/gpu-driven/production-raster.ts +1046 -39
  478. package/src/gpu-driven/view-gpu.ts +411 -29
  479. package/src/gpu-scene-schema.ts +13 -0
  480. package/src/gpu-scene.ts +137 -67
  481. package/src/gpu-usage.ts +0 -1
  482. package/src/hdrp-buffers.ts +6 -6
  483. package/src/ibl/IblPipelineCache.ts +134 -50
  484. package/src/ibl/skylight-bind-group.ts +26 -0
  485. package/src/index.ts +83 -1
  486. package/src/inspection-types.ts +220 -1
  487. package/src/internal.ts +38 -0
  488. package/src/light-buffer-layout.ts +157 -324
  489. package/src/materials.ts +278 -47
  490. package/src/mesh-material-bindings.ts +59 -0
  491. package/src/occlusion-proxy.ts +64 -0
  492. package/src/pbr-pipeline.ts +290 -60
  493. package/src/pipeline/standard-forward-lane.ts +47 -0
  494. package/src/pipeline/standard-lighting/graph.ts +2 -1
  495. package/src/pipeline/standard-lighting/light-frame.ts +3 -2
  496. package/src/pipeline/standard-lighting/topology.ts +1 -1
  497. package/src/pipeline/standard-lighting/transport.ts +2 -1
  498. package/src/pipeline/standard-pipeline.ts +2 -0
  499. package/src/pipeline-builder.ts +5 -2
  500. package/src/pipeline-spec.ts +12 -1
  501. package/src/plugin.ts +4 -0
  502. package/src/points-lines/__tests__/cache-recovery.unit.test.ts +22 -0
  503. package/src/points-lines/prepare.ts +9 -0
  504. package/src/points-lines/standard-owner.ts +403 -0
  505. package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +56 -0
  506. package/src/prepare/extended-lighting/ltc-resources.ts +136 -0
  507. package/src/prepare/extended-lighting/resources.ts +389 -0
  508. package/src/prepare/extended-lighting/spot-modifiers.ts +194 -0
  509. package/src/prepare/extended-lighting/state.ts +92 -0
  510. package/src/record/__tests__/frame-targets-recovery.unit.test.ts +60 -0
  511. package/src/record/__tests__/gpu-timing.unit.test.ts +177 -0
  512. package/src/record/__tests__/main-pass-geometry.unit.test.ts +26 -1
  513. package/src/record/__tests__/mesh-ssbo.unit.test.ts +38 -0
  514. package/src/record/__tests__/recovery-pipeline.unit.test.ts +124 -0
  515. package/src/record/__tests__/sprite-material-abi.unit.test.ts +28 -13
  516. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +47 -4
  517. package/src/record/__tests__/temporal-payload.unit.test.ts +29 -28
  518. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +21 -2
  519. package/src/record/frame-lighting.ts +252 -53
  520. package/src/record/frame-snapshot.ts +72 -12
  521. package/src/record/frame-targets.ts +11 -1
  522. package/src/record/frame.ts +416 -95
  523. package/src/record/gpu-timing.ts +108 -44
  524. package/src/record/helpers.ts +1 -59
  525. package/src/record/main-pass-geometry.ts +434 -44
  526. package/src/record/main-pass-material.ts +324 -210
  527. package/src/record/main-pass-sprite-draws.ts +58 -92
  528. package/src/record/main-pass.ts +94 -6
  529. package/src/record/mesh-ssbo.ts +79 -46
  530. package/src/record/recovery-pipeline.ts +695 -0
  531. package/src/record/render-context.ts +99 -7
  532. package/src/record/shadow-pass.ts +66 -40
  533. package/src/record/typed-frame-graph.ts +270 -84
  534. package/src/record/view-ubo.ts +17 -27
  535. package/src/recovery/render-system-candidate.ts +839 -0
  536. package/src/reflection/inspection.ts +67 -0
  537. package/src/reflection/projection.ts +196 -1
  538. package/src/reflection/record-owner.ts +1283 -0
  539. package/src/render-contract.ts +82 -12
  540. package/src/render-pipeline.ts +5 -0
  541. package/src/render-system-extract-tail.ts +2983 -0
  542. package/src/render-system-extract.ts +290 -2784
  543. package/src/render-system.ts +1597 -1192
  544. package/src/scene/__tests__/changed-block-summary.candidate.test.ts +36 -0
  545. package/src/scene/probe-blend-record.ts +54 -0
  546. package/src/scene/probe-blend.ts +813 -0
  547. package/src/scene/render-scene-types.ts +0 -7
  548. package/src/scene/render-scene.ts +972 -184
  549. package/src/scene/visibility/bounds.ts +57 -0
  550. package/src/scene/visibility/budget.ts +40 -0
  551. package/src/scene/visibility/facet.ts +400 -0
  552. package/src/scene/visibility/gpu-frame-timing.ts +101 -0
  553. package/src/scene/visibility/gpu-lod.ts +119 -0
  554. package/src/scene/visibility/inspection.ts +313 -0
  555. package/src/scene/visibility/lod-selector.ts +84 -0
  556. package/src/scene/visibility/occlusion-confidence.ts +478 -0
  557. package/src/scene/visibility/occlusion-pass.ts +165 -0
  558. package/src/scene/visibility/occlusion-query-pool.ts +178 -0
  559. package/src/scene/visibility/occlusion-runtime.ts +672 -0
  560. package/src/scene/visibility/types.ts +50 -0
  561. package/src/ssr/admission.ts +451 -0
  562. package/src/ssr/composition.ts +73 -0
  563. package/src/ssr/errors.ts +76 -0
  564. package/src/ssr/identity.ts +12 -0
  565. package/src/systems/skin-palette-allocator.ts +1 -1
  566. package/src/temporal/frame-coordinator.ts +30 -1
  567. package/src/temporal/frame.ts +14 -1
  568. package/src/temporal/taa-history-store.ts +46 -2
  569. package/src/temporal/temporal-view.ts +1 -1
  570. package/src/temporal/transaction.ts +9 -0
  571. package/src/temporal/view.ts +11 -0
  572. package/src/tilemap-chunk-extract-system.ts +5 -5
  573. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +19 -12
  574. package/src/typed-render-graph-primitives.ts +48 -0
  575. package/src/volume/passes.ts +46 -49
  576. package/dist/.tsbuildinfo +0 -1
  577. package/dist/chunk-5YADUCA7.mjs.map +0 -1
  578. package/dist/chunk-6OPXDQ2E.mjs.map +0 -1
  579. package/dist/chunk-BXBQQKFQ.mjs +0 -67
  580. package/dist/chunk-BXBQQKFQ.mjs.map +0 -1
  581. package/dist/chunk-FS2KNUQH.mjs.map +0 -1
  582. package/dist/chunk-PCHBPYML.mjs.map +0 -1
  583. package/dist/chunk-VFPLTKCU.mjs +0 -192
  584. package/dist/chunk-VFPLTKCU.mjs.map +0 -1
@@ -20,7 +20,11 @@ import type {
20
20
  TextureView,
21
21
  } from '@forgeax/engine-rhi';
22
22
  import { err, ok, RhiError } from '@forgeax/engine-rhi';
23
- import type { MaterialRuntimeArtifact } from '@forgeax/engine-shader';
23
+ import {
24
+ DEFAULT_STANDARD_PBR_PARAM_SCHEMA,
25
+ type MaterialRuntimeArtifact,
26
+ type MaterialShaderArtifact,
27
+ } from '@forgeax/engine-shader';
24
28
  import type {
25
29
  MaterialRenderState,
26
30
  ParamSchemaEntry,
@@ -28,6 +32,7 @@ import type {
28
32
  PrimitiveTopology,
29
33
  VertexAttributeMap,
30
34
  } from '@forgeax/engine-types';
35
+ import { derive } from '@forgeax/engine-types';
31
36
  import type { MaterialRenderProjection } from '../assembly/material/assembly';
32
37
  import type { DeviceScope } from '../device/device-scope';
33
38
  import type { MeshGpuHandles } from '../device/gpu-residency';
@@ -50,6 +55,7 @@ import type { PointsLinesInspection } from '../points-lines/inspection';
50
55
  import type { PointsLinesRecordPlan } from '../points-lines/record';
51
56
  import type { ReflectionProbeTable } from '../reflection/gpu-table';
52
57
  import type { ReflectionProbeSelectionResult } from '../reflection/projection';
58
+ import type { SsrAdmissionIdentity } from '../ssr/identity';
53
59
  import type { GpuPassTimingReason } from './gpu-pass-timing/errors';
54
60
  import type {
55
61
  GpuPassTimingCapture,
@@ -68,7 +74,33 @@ export interface ReflectionProbeRecordState {
68
74
  readonly table: ReflectionProbeTable;
69
75
  readonly selections: ReadonlyMap<string, ReflectionProbeSelectionResult>;
70
76
  readonly graph: import('./typed-frame-graph').ReflectionProbeGraphState;
71
- readonly completeSubmission: (submitted: boolean, completed?: Promise<unknown>) => void;
77
+ /** Detached committed fallback projections joined by main-pass renderable key. */
78
+ readonly fallbackProjections?: ReadonlyMap<
79
+ string,
80
+ import('../inspection-types').ReflectionFallbackReceipt
81
+ >;
82
+ /** Demand is derived from this frame's renderable/source selection. */
83
+ readonly fallbackDemand?: boolean;
84
+ /** True when at least one selected row must prove a non-zero readback. */
85
+ readonly fallbackHasNonNeutral?: boolean;
86
+ readonly completeSubmission: (
87
+ submitted: boolean,
88
+ completed?: Promise<unknown>,
89
+ fallbackOutput?: {
90
+ readonly format: TextureFormat;
91
+ readonly size: { readonly width: number; readonly height: number };
92
+ readonly frameId: number;
93
+ readonly graphGeneration: number;
94
+ readonly textureIdentity: number;
95
+ readonly readback?: Promise<{
96
+ readonly linearHdr: readonly [number, number, number, number];
97
+ readonly hash: string;
98
+ readonly graphGeneration: number;
99
+ readonly textureIdentity: number;
100
+ }>;
101
+ },
102
+ fallbackRequested?: boolean,
103
+ ) => Promise<void>;
72
104
  }
73
105
 
74
106
  export interface MaterialShaderPipelineEntry {
@@ -76,6 +108,18 @@ export interface MaterialShaderPipelineEntry {
76
108
  readonly group2Contract: PipelineGroup2Contract;
77
109
  }
78
110
 
111
+ /**
112
+ * Armed only for the first published recovery frame. Candidate preparation
113
+ * must make every pipeline and static residency lookup a cache hit before this
114
+ * guard is armed; a miss is a hard failure before queue submission.
115
+ */
116
+ export interface RecoveryColdWorkGuard {
117
+ arm(): void;
118
+ notePipelineColdWork(): void;
119
+ noteUploadColdWork(): void;
120
+ finish(): void;
121
+ }
122
+
79
123
  import type {
80
124
  RenderDebugOverlay,
81
125
  RenderPipelineContext,
@@ -103,12 +147,20 @@ import type { FoldDispatchPlan } from './mesh-ssbo';
103
147
 
104
148
  export interface RenderSystemRuntime {
105
149
  readonly device: RhiDevice;
150
+ /** Internal backend-fixture hook evaluated at the submit transaction edge. */
151
+ readonly beforeSubmit?: ((device: RhiDevice) => RhiError | undefined) | undefined;
106
152
  readonly deviceScope: DeviceScope;
153
+ /** Resolve a recorder/backend wrapper before configuring the native surface. */
154
+ readonly resolveSurfaceDevice?: (device: RhiDevice) => Result<RhiDevice, RhiError>;
107
155
  readonly errorRegistry: RhiErrorListenerRegistry;
108
156
  readonly debugOverlay?: RenderDebugOverlay | undefined;
109
157
  readonly healthRegistry: HealthListenerRegistry;
110
158
  readonly getMaterialProjection?: (materialGuid: string) => MaterialRenderProjection | undefined;
111
159
  readonly getMaterialArtifact?: (specializationKey: string) => MaterialRuntimeArtifact | undefined;
160
+ /** Producer-owned cooked Standard PBR artifact used by GPU-driven projection. */
161
+ readonly getMaterialShaderArtifact?: (
162
+ materialShaderId: string,
163
+ ) => MaterialShaderArtifact | undefined;
112
164
  readonly getMaterialShaderPipeline?: (
113
165
  materialShaderId: string,
114
166
  isHdr: boolean,
@@ -126,6 +178,7 @@ export interface RenderSystemRuntime {
126
178
  vertexLayoutProjection?: VertexLayoutProjection,
127
179
  shaderModuleMode?: RenderFeatureShaderModuleMode,
128
180
  layoutKindOverride?: 'pbr' | 'pbr-skin',
181
+ additionalColorFormats?: readonly GPUTextureFormat[],
129
182
  ) => RhiRenderPipeline | null;
130
183
  readonly getMaterialShaderPipelineEntry?: (
131
184
  materialShaderId: string,
@@ -143,12 +196,20 @@ export interface RenderSystemRuntime {
143
196
  vertexLayout?: string,
144
197
  vertexLayoutProjection?: VertexLayoutProjection,
145
198
  shaderModuleMode?: RenderFeatureShaderModuleMode,
199
+ layoutKindOverride?: 'pbr' | 'pbr-skin',
200
+ additionalColorFormats?: readonly GPUTextureFormat[],
146
201
  ) => MaterialShaderPipelineEntry | null;
202
+ /** Reflection-derived UV count included in the material PipelineSpec cache key. */
203
+ readonly getMaterialShaderUvSetCount?: (materialShaderId: string) => number | undefined;
147
204
  readonly getMaterialShaderBindingContract?: (
148
205
  materialShaderId: string,
149
206
  ) => 'group-0' | 'group-0-resource' | 'view-only' | 'view-and-scene-depth' | 'render-material';
150
207
  readonly getParamSchema?: (materialShaderId: string) => readonly ParamSchemaEntry[] | undefined;
151
- readonly getMaterialBindGroupLayout?: (materialShaderId: string) => BindGroupLayout | undefined;
208
+ readonly getMaterialBindGroupLayout?: (
209
+ materialShaderId: string,
210
+ materialParamSchema?: readonly ParamSchemaEntry[],
211
+ ) => BindGroupLayout | undefined;
212
+ recoveryColdWorkGuard?: RecoveryColdWorkGuard | undefined;
152
213
  readonly metrics: EngineMetrics;
153
214
  readonly lookupPostProcess?: (
154
215
  id: string,
@@ -160,6 +221,8 @@ export interface RenderSystemRuntime {
160
221
  colorFormat: GPUTextureFormat,
161
222
  entry?: import('../fullscreen-post-process-pass').PostProcessShaderEntry,
162
223
  ) => RhiRenderPipeline | null;
224
+ /** Candidate-owned post-process pipelines transferred at publication. */
225
+ readonly getRecoveryPostProcessPipelines?: () => ReadonlyMap<string, RhiRenderPipeline>;
163
226
  readonly clearPostProcessPipelineCache?: (id: string) => void;
164
227
  readonly invalidateShaderModule?: (label: string) => void;
165
228
  readonly dynamicTextureStore?: DynamicTextureStore | undefined;
@@ -295,9 +358,9 @@ export interface PipelineState {
295
358
  readonly shadowCasterCascadeBuffer: Buffer;
296
359
  readonly materialUniformBuffer: { readonly buffer: Buffer; readonly sizeInBytes: number };
297
360
  readonly meshStorageBuffer: { readonly buffer: Buffer; readonly sizeInBytes: number };
298
- readonly pointLightsBuffer: Buffer;
299
- readonly spotLightsBuffer: Buffer;
300
361
  readonly instancesBindGroupLayout: BindGroupLayout;
362
+ /** Probe-enabled slot-3 layout; omitted from no-probe bind groups. */
363
+ readonly probeInstancesBindGroupLayout?: BindGroupLayout;
301
364
  readonly identityInstanceBuffer: Buffer;
302
365
  readonly defaultSampler: Sampler;
303
366
  readonly nearestSampler: Sampler;
@@ -307,19 +370,37 @@ export interface PipelineState {
307
370
  readonly unlitPipelineMsaa: RhiRenderPipeline | null;
308
371
  readonly unlitPipelineHdrMsaa: RhiRenderPipeline | null;
309
372
  readonly pbrPipelineLayout: PipelineLayout | null;
373
+ readonly pbrProbePipelineLayout?: PipelineLayout | null;
310
374
  readonly hdrpPbrPipelineLayout: PipelineLayout | null;
375
+ readonly hdrpProbePbrPipelineLayout?: PipelineLayout | null;
311
376
  readonly hdrpClusterMembershipPipeline: ComputePipeline | null;
312
377
  readonly hdrpClusterMembershipBindGroupLayout: BindGroupLayout | null;
313
378
  readonly pbrSkinPipelineLayout: PipelineLayout | null;
379
+ readonly pbrSkinProbePipelineLayout?: PipelineLayout | null;
314
380
  readonly pbrSkinMeshBindGroupLayout: BindGroupLayout | null;
315
381
  readonly hdrpSkinPipelineLayout: PipelineLayout | null;
316
382
  readonly hdrpSkinMeshBindGroupLayout: BindGroupLayout | null;
317
383
  readonly skinPaletteAllocator: SkinPaletteAllocator | null;
318
384
  readonly defaultWhiteTextureView: TextureView;
319
385
  readonly defaultNormalTextureView: TextureView;
386
+ /** Missing anisotropy maps encode a neutral direction and unit strength. */
387
+ readonly defaultAnisotropyTextureView?: TextureView;
320
388
  readonly unlitPipelineHdr: RhiRenderPipeline | null;
321
389
  readonly shadowFallbackTextureView: TextureView;
322
390
  readonly shadowAtlasFallbackTextureView: TextureView;
391
+ readonly extendedLightingAvailable?: boolean;
392
+ readonly iesProfileTexture?: Texture;
393
+ readonly cookieTexture?: Texture;
394
+ readonly cookieMatrixBuffer?: Buffer;
395
+ spotModifierUploadState?: {
396
+ readonly ies: Map<number, number>;
397
+ readonly cookie: Map<number, number>;
398
+ readonly cookieMatrix: Map<number, number>;
399
+ };
400
+ readonly iesProfileTextureView?: TextureView;
401
+ readonly cookieTextureView?: TextureView;
402
+ readonly ltcLambertTextureView?: TextureView;
403
+ readonly ltcGgxTextureView?: TextureView;
323
404
  readonly shadowParamsBuffer: Buffer;
324
405
  readonly skylightFallback: SkylightFallback | null;
325
406
  readonly perPassResources: PerPassResources;
@@ -327,9 +408,15 @@ export interface PipelineState {
327
408
 
328
409
  export interface RenderSystemInternals extends RenderSystemRuntime {
329
410
  readonly canvas: HTMLCanvasElement | OffscreenCanvas;
411
+ /** Build identity injected by the host's build-tool adapter. */
412
+ readonly build?: string | undefined;
413
+ /** Host identity binding for the renderer-owned SSR dependency seam. */
414
+ readonly ssrIdentity?: SsrAdmissionIdentity | undefined;
330
415
  readonly standardProfile?: StandardProfile | undefined;
331
416
  readonly standardPipeline: RenderFrameState['activePipeline'];
332
417
  readonly featureHost?: RenderFeatureHost | undefined;
418
+ /** Install a detached feature host only at the recovery publication boundary. */
419
+ readonly setFeatureHost?: ((host: RenderFeatureHost) => void) | undefined;
333
420
  readonly shaderModuleFactory?: PipelineBuilderShaderModuleFactory;
334
421
  readonly createShaderModule?: (
335
422
  device: import('@forgeax/engine-rhi').RhiDevice,
@@ -398,6 +485,8 @@ export interface _StandardForwardSceneView {
398
485
  readonly directionalShadowCacheReuse: boolean;
399
486
  readonly world: World;
400
487
  readonly gpuDrivenEntityKeys: ReadonlySet<number>;
488
+ /** Renderer-local world namespace paired with gpuDrivenEntityKeys. */
489
+ readonly gpuDrivenWorldKeys?: readonly number[];
401
490
  readonly tonemapActive: boolean;
402
491
  readonly geometryColorView: TextureView | null;
403
492
  readonly geometryDepthView: TextureView | null;
@@ -406,6 +495,8 @@ export interface _StandardForwardSceneView {
406
495
  readonly splitLdrSprite: boolean;
407
496
  readonly ldrSpritePassView: TextureView | null;
408
497
  readonly transparentColorFormat?: GPUTextureFormat;
498
+ /** Second Standard main-pass attachment used by the fallback producer. */
499
+ readonly reflectionFallbackColorFormat?: GPUTextureFormat;
409
500
  readonly dispatch: readonly DispatchEntry[];
410
501
  readonly hdrpClusterBindGroup: BindGroup | null;
411
502
  readonly hdrpClusterMembershipBindGroup: BindGroup | null;
@@ -425,14 +516,15 @@ export interface _StandardForwardSceneView {
425
516
  readonly payload: Uint8Array;
426
517
  };
427
518
  hdrpSsaoBlurredView?: TextureView;
519
+ readonly occlusion?: import('../scene/visibility/occlusion-runtime').OcclusionFrameProjection;
428
520
  }
429
521
 
430
522
  export type _InternalRenderPipelineContext = RenderPipelineContext & _StandardForwardSceneView;
431
523
 
432
524
  export type RecordProfileRunner = <T>(phase: RenderRecordPhase, action: () => T) => T;
433
525
 
434
- export const STANDARD_PBR_UBO_SIZE = 384;
435
- export const MATERIAL_PER_ENTITY_STRIDE = 512;
526
+ export const STANDARD_PBR_UBO_SIZE = derive(DEFAULT_STANDARD_PBR_PARAM_SCHEMA).uboLayout.totalBytes;
527
+ export const MATERIAL_PER_ENTITY_STRIDE = Math.ceil(STANDARD_PBR_UBO_SIZE / 256) * 256;
436
528
 
437
529
  export type SwapChainFormatPair = {
438
530
  readonly storage: GPUTextureFormat;
@@ -23,12 +23,13 @@ import {
23
23
  SHADOW_CASTER_SHADER_ID,
24
24
  shadowCasterVariantSet,
25
25
  } from '../pbr-pipeline';
26
+ import { COOKIE_MATRIX_BYTES } from '../prepare/extended-lighting/resources';
26
27
  import type { DispatchEntry, ExtractedLights } from '../render-system-extract';
27
28
  import { matchPass } from '../systems/pass-selector';
28
29
  import { worldEntityKey } from './frame-snapshot';
30
+ import { resolveGeometryInstancesBindGroup } from './main-pass-geometry';
29
31
  import {
30
32
  getOrCreateFromChain,
31
- getOrCreatePerEntity,
32
33
  MAX_UNIFORM_INSTANCES,
33
34
  MESH_PER_ENTITY_STRIDE,
34
35
  MESH_SSBO_BYTES,
@@ -83,23 +84,79 @@ function ensureTypedShadowViewBg(
83
84
  const { runtime, frameState, pipelineState } = c;
84
85
  const shadowSampler = pipelineState.perPassResources.shadowSampler;
85
86
  if (shadowSampler === null) return null;
87
+ const extendedLighting = pipelineState.extendedLightingAvailable ?? false;
88
+ const iesProfileTextureView = pipelineState.iesProfileTextureView;
89
+ const cookieTextureView = pipelineState.cookieTextureView;
90
+ const cookieMatrixBuffer = pipelineState.cookieMatrixBuffer;
91
+ const ltcLambertTextureView = pipelineState.ltcLambertTextureView;
92
+ const ltcGgxTextureView = pipelineState.ltcGgxTextureView;
93
+ const extendedLightingCacheKeys: object[] = [];
94
+ const extendedLightingEntries: BindGroupEntry[] = [];
95
+ if (extendedLighting) {
96
+ if (
97
+ iesProfileTextureView === undefined ||
98
+ cookieTextureView === undefined ||
99
+ cookieMatrixBuffer === undefined ||
100
+ ltcLambertTextureView === undefined ||
101
+ ltcGgxTextureView === undefined
102
+ ) {
103
+ return null;
104
+ }
105
+ extendedLightingCacheKeys.push(
106
+ pipelineState.defaultSampler,
107
+ iesProfileTextureView,
108
+ cookieTextureView,
109
+ ltcLambertTextureView,
110
+ ltcGgxTextureView,
111
+ cookieMatrixBuffer,
112
+ );
113
+ extendedLightingEntries.push(
114
+ {
115
+ binding: 9,
116
+ resource: { kind: 'sampler', value: pipelineState.defaultSampler },
117
+ },
118
+ {
119
+ binding: 11,
120
+ resource: { kind: 'textureView', value: iesProfileTextureView },
121
+ },
122
+ {
123
+ binding: 12,
124
+ resource: { kind: 'textureView', value: cookieTextureView },
125
+ },
126
+ {
127
+ binding: 13,
128
+ resource: { kind: 'textureView', value: ltcLambertTextureView },
129
+ },
130
+ {
131
+ binding: 14,
132
+ resource: { kind: 'textureView', value: ltcGgxTextureView },
133
+ },
134
+ {
135
+ binding: 15,
136
+ resource: {
137
+ kind: 'buffer',
138
+ value: { buffer: cookieMatrixBuffer, size: COOKIE_MATRIX_BYTES },
139
+ },
140
+ },
141
+ );
142
+ }
86
143
  const projectorAvailable = pipelineState.projectorAvailable !== false;
87
144
  try {
88
145
  return getOrCreateFromChain(
89
146
  frameState.viewBindGroupCache,
90
147
  [
91
148
  pipelineState.viewUniformBuffer,
92
- pipelineState.pointLightsBuffer,
93
- pipelineState.spotLightsBuffer,
94
149
  pipelineState.shadowFallbackTextureView,
95
150
  shadowSampler,
96
151
  pipelineState.shadowAtlasFallbackTextureView,
97
152
  pipelineState.shadowParamsBuffer,
98
153
  pipelineState.shadowCasterCascadeBuffer,
99
154
  pipelineState.shadowFallbackTextureView,
100
- ...(projectorAvailable
101
- ? [pipelineState.defaultWhiteTextureView, pipelineState.defaultSampler]
102
- : []),
155
+ ...(extendedLighting
156
+ ? extendedLightingCacheKeys
157
+ : projectorAvailable
158
+ ? [pipelineState.defaultWhiteTextureView, pipelineState.defaultSampler]
159
+ : []),
103
160
  pipelineState.pointsLinesViewBuffer ?? pipelineState.viewUniformBuffer,
104
161
  ],
105
162
  variant,
@@ -119,14 +176,6 @@ function ensureTypedShadowViewBg(
119
176
  },
120
177
  },
121
178
  },
122
- {
123
- binding: 1,
124
- resource: { kind: 'buffer', value: { buffer: pipelineState.pointLightsBuffer } },
125
- },
126
- {
127
- binding: 2,
128
- resource: { kind: 'buffer', value: { buffer: pipelineState.spotLightsBuffer } },
129
- },
130
179
  {
131
180
  binding: 3,
132
181
  resource: { kind: 'textureView', value: pipelineState.shadowFallbackTextureView },
@@ -161,6 +210,7 @@ function ensureTypedShadowViewBg(
161
210
  binding: 8,
162
211
  resource: { kind: 'textureView', value: pipelineState.shadowFallbackTextureView },
163
212
  },
213
+ ...extendedLightingEntries,
164
214
  {
165
215
  binding: 10,
166
216
  resource: {
@@ -171,7 +221,7 @@ function ensureTypedShadowViewBg(
171
221
  },
172
222
  },
173
223
  },
174
- ...(projectorAvailable
224
+ ...(!extendedLighting && projectorAvailable
175
225
  ? [
176
226
  {
177
227
  binding: 11,
@@ -671,31 +721,7 @@ function recordShadowCasterDraws(
671
721
  // handle = shadowInstanceBuffer; the HDRP main pass read end (:3820 below)
672
722
  // must look up the same (compositeKey, instBuffer) leaf or the shadow
673
723
  // instances silently drop.
674
- const shadowInstancesBg = getOrCreatePerEntity(
675
- c.frameState.instancesBgPerEntity,
676
- worldEntityKey(entry.source.worldId, entry.source.entityKey),
677
- [shadowInstanceBuffer],
678
- 'shadow-instances',
679
- () => {
680
- const result = runtime.device.createBindGroup({
681
- label: 'shadow-instances-bg',
682
- layout: pipelineState.instancesBindGroupLayout,
683
- entries: [
684
- {
685
- binding: 0,
686
- resource: {
687
- kind: 'buffer',
688
- value: { buffer: shadowInstanceBuffer },
689
- },
690
- },
691
- ],
692
- });
693
- if (!result.ok) throw result.error;
694
- return result.value;
695
- },
696
- c.bindGroupCounts,
697
- );
698
-
724
+ const shadowInstancesBg = resolveGeometryInstancesBindGroup(c, shadowInstanceBuffer);
699
725
  shadowPass.setBindGroup(3, shadowInstancesBg);
700
726
  // feat-20260608 M4 / w16: per-submesh shadow draw loop.
701
727
  // Only draw submeshes whose topology is triangle-list or triangle-strip