@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
@@ -0,0 +1,25 @@
1
+ import type { MeshLodLevel } from '@forgeax/engine-types';
2
+ export interface ProjectedHeightInput {
3
+ readonly radius: number;
4
+ readonly depth: number;
5
+ readonly projection: 'perspective' | 'orthographic';
6
+ readonly fov?: number;
7
+ readonly orthoHeight?: number;
8
+ }
9
+ export interface LodSelectorInput {
10
+ /** Lower-detail levels in ascending detail order; LOD0 is implicit. */
11
+ readonly levels: readonly Pick<MeshLodLevel, 'screenCoverage'>[];
12
+ readonly projectedHeight: number;
13
+ readonly previousLevel: number;
14
+ readonly hysteresis: number;
15
+ /** Index zero is the root and must remain the safe fallback. */
16
+ readonly ready: readonly boolean[];
17
+ readonly historyValid: boolean;
18
+ }
19
+ export interface LodSelection {
20
+ readonly level: number;
21
+ readonly confidence: number;
22
+ }
23
+ export declare function projectedHeight(input: ProjectedHeightInput): number;
24
+ export declare function selectLod(input: LodSelectorInput): LodSelection;
25
+ //# sourceMappingURL=lod-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lod-selector.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/lod-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,cAAc,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAE,CAAC;IACjE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAUnE;AAmCD,wBAAgB,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAY/D"}
@@ -0,0 +1,81 @@
1
+ import { type VisibilityBudget } from './budget';
2
+ export type InvalidationReason = 'cut' | 'teleport' | 'resize' | 'projection' | 'primitive' | 'bounds' | 'topology' | 'world-reorder' | 'detach' | 'failed-submit' | 'device-loss' | 'transparent';
3
+ export interface ConfidenceState {
4
+ readonly status: 'visible' | 'hidden';
5
+ readonly zeroStreak: number;
6
+ readonly successfulSubmits: number;
7
+ readonly queryable: boolean;
8
+ readonly dirty: boolean;
9
+ readonly lastResultGeneration: number | undefined;
10
+ }
11
+ export type ConfidenceEvent = {
12
+ readonly type: 'result';
13
+ readonly samples: number;
14
+ readonly submissionGeneration: number;
15
+ } | {
16
+ readonly type: 'submit';
17
+ readonly submissionGeneration: number;
18
+ } | {
19
+ readonly type: 'failure';
20
+ readonly submissionGeneration: number;
21
+ } | {
22
+ readonly type: 'invalidate';
23
+ readonly reason: InvalidationReason;
24
+ };
25
+ export declare function createConfidenceState(): ConfidenceState;
26
+ export declare function applyConfidenceEvent(state: ConfidenceState, event: ConfidenceEvent, budget?: VisibilityBudget): ConfidenceState;
27
+ export declare function shouldIssueRetest(state: ConfidenceState, budget?: VisibilityBudget): boolean;
28
+ export declare class OcclusionConfidenceScheduler {
29
+ private readonly budget;
30
+ private readonly states;
31
+ private readonly wakeByGeneration;
32
+ private readonly expireByGeneration;
33
+ private readonly wakeHeap;
34
+ private readonly expireHeap;
35
+ private readonly wakeHeapMembers;
36
+ private readonly expireHeapMembers;
37
+ private readonly retestKeys;
38
+ private readonly scheduleByKey;
39
+ constructor(budget?: VisibilityBudget);
40
+ ensure(key: string): ConfidenceState;
41
+ apply(key: string, event: ConfidenceEvent): ConfidenceState;
42
+ /** Apply an in-flight query submit without scheduling a same-generation wake. */
43
+ applyInFlightSubmit(key: string, event: Extract<ConfidenceEvent, {
44
+ readonly type: 'submit';
45
+ }>): ConfidenceState;
46
+ drainRetests(limit: number): string[];
47
+ get(key: string): ConfidenceState | undefined;
48
+ remove(key: string): void;
49
+ /** Advance hidden evidence on a successful frame even when no query was issued for it. */
50
+ advanceSuccessfulSubmits(submissionGeneration: number, excludedKeys?: ReadonlySet<string>): {
51
+ readonly changed: boolean;
52
+ readonly drawChangedKeys: readonly string[];
53
+ readonly queryChangedKeys: readonly string[];
54
+ };
55
+ clear(): void;
56
+ private schedule;
57
+ private scheduleExpiry;
58
+ private scheduleExpiryOnly;
59
+ private unschedule;
60
+ private takeDue;
61
+ private addDue;
62
+ private refreshRetestKey;
63
+ }
64
+ export interface VisibilityDecisionInput {
65
+ readonly authorVisible: boolean;
66
+ readonly validBounds: boolean;
67
+ readonly frustumVisible: boolean;
68
+ readonly lodReady: boolean;
69
+ readonly occlusion: Pick<ConfidenceState, 'status' | 'queryable'>;
70
+ readonly lane?: 'cpu' | 'gpu';
71
+ }
72
+ export interface VisibilityDecision {
73
+ readonly draw: boolean;
74
+ readonly stage: 'author' | 'bounds' | 'frustum' | 'lod' | 'occlusion';
75
+ }
76
+ export declare function decideVisibility(input: VisibilityDecisionInput): VisibilityDecision;
77
+ export interface RecoveredVisibilityState extends ConfidenceState {
78
+ readonly retryCount: 1;
79
+ }
80
+ export declare function recoverVisibilityAfterDeviceLoss(_state: ConfidenceState, _deviceGeneration: number): RecoveredVisibilityState;
81
+ //# sourceMappingURL=occlusion-confidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-confidence.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-confidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface OcclusionBounds {
2
+ readonly min: readonly [number, number, number];
3
+ readonly max: readonly [number, number, number];
4
+ }
5
+ export interface OcclusionPassIdentity {
6
+ readonly primitiveSlot: number;
7
+ readonly slotGeneration: number;
8
+ }
9
+ export interface OcclusionPassPlan {
10
+ readonly after: string;
11
+ readonly depth: {
12
+ readonly resource: string;
13
+ readonly usage: 'depth-read-only';
14
+ };
15
+ readonly color: {
16
+ readonly resource: string;
17
+ readonly usage: 'not-written';
18
+ };
19
+ readonly proxyBounds: OcclusionBounds;
20
+ readonly queryIndex: number;
21
+ readonly identity?: OcclusionPassIdentity;
22
+ readonly resolve: {
23
+ readonly queryIndex: number;
24
+ readonly bytes: number;
25
+ };
26
+ readonly copy: {
27
+ readonly asynchronous: true;
28
+ readonly bytes: number;
29
+ };
30
+ readonly writesColor: false;
31
+ readonly writesDepth: false;
32
+ readonly submitCount: 1;
33
+ readonly mapSameFrame: false;
34
+ }
35
+ export interface OcclusionPassInput {
36
+ readonly opaquePass: string;
37
+ readonly depthResource: string;
38
+ readonly colorResource: string;
39
+ readonly bounds: OcclusionBounds | undefined;
40
+ readonly queryIndex: number;
41
+ readonly identity?: OcclusionPassIdentity;
42
+ readonly transparent?: boolean;
43
+ readonly deformed?: boolean;
44
+ }
45
+ export interface OcclusionQueryResources {
46
+ readonly pageIndex: number;
47
+ readonly querySet: QuerySet;
48
+ readonly resolveBuffer: Buffer;
49
+ readonly stagingBuffer: Buffer;
50
+ }
51
+ export declare function createOcclusionQueryResources(device: RhiDevice, pageIndex: number): Result<OcclusionQueryResources, RhiError>;
52
+ /** Records resolve and copy only; caller owns one shared encoder and submit. */
53
+ export declare function recordOcclusionResolve(encoder: RhiCommandEncoder, resources: OcclusionQueryResources, firstQuery: number, queryCount: number): Result<void, RhiError>;
54
+ /** Creates only the transport plan; confidence remains owned by visibility facet/M4. */
55
+ export declare function buildOcclusionPassPlan(input: OcclusionPassInput): OcclusionPassPlan | undefined;
56
+ import type { Buffer, QuerySet, Result, RhiCommandEncoder, RhiDevice, RhiError } from '@forgeax/engine-rhi';
57
+ //# sourceMappingURL=occlusion-pass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-pass.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-pass.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IACjF,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC;IAC7E,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAgC3C;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,uBAAuB,EAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CA0BxB;AAOD,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,SAAS,CAwB/F;AAED,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACT,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,57 @@
1
+ export declare const OCCLUSION_QUERY_PAGE_COUNT = 3;
2
+ export declare const OCCLUSION_QUERY_PAGE_INDEX_LIMIT = 4096;
3
+ export declare const OCCLUSION_QUERY_RESULT_BYTES = 8;
4
+ export declare const OCCLUSION_QUERY_PAGE_BYTES: number;
5
+ export interface OcclusionQueryIdentity {
6
+ readonly viewKey: string;
7
+ readonly attachmentId: string;
8
+ readonly deviceGeneration: number;
9
+ readonly worldGeneration: number;
10
+ readonly primitiveSlot: number;
11
+ readonly slotGeneration: number;
12
+ }
13
+ export interface OcclusionQueryReservation extends OcclusionQueryIdentity {
14
+ readonly pageIndex: number;
15
+ readonly queryIndex: number;
16
+ readonly reservationId: number;
17
+ }
18
+ export interface OcclusionQueryTicket extends OcclusionQueryIdentity {
19
+ readonly pageIndex: number;
20
+ readonly queryIndex: number;
21
+ readonly reservationId: number;
22
+ readonly submissionGeneration: number;
23
+ }
24
+ export interface OcclusionQueryPoolInspection {
25
+ readonly pageCount: number;
26
+ readonly pageIndexLimit: number;
27
+ readonly resolveBytes: number;
28
+ readonly stagingBytes: number;
29
+ readonly availablePages: number;
30
+ readonly inFlight: number;
31
+ readonly disposed: boolean;
32
+ }
33
+ export interface OcclusionQueryCompletion {
34
+ readonly status: 'accepted' | 'stale';
35
+ /** M3 transport never suppresses a draw; M4 owns confidence policy. */
36
+ readonly visible: true;
37
+ }
38
+ /** Renderer-owned bounded query transport; it contains no visibility policy. */
39
+ export declare class OcclusionQueryPool {
40
+ private readonly pages;
41
+ private readonly pending;
42
+ private readonly tickets;
43
+ private nextReservationId;
44
+ private disposed;
45
+ reserve(identity: OcclusionQueryIdentity): OcclusionQueryReservation | undefined;
46
+ publish(reservation: OcclusionQueryReservation, result: {
47
+ readonly submitted: boolean;
48
+ readonly submissionGeneration: number;
49
+ }): OcclusionQueryTicket | undefined;
50
+ /** Return an unsubmitted reservation to its bounded page. */
51
+ cancel(reservation: OcclusionQueryReservation): boolean;
52
+ complete(ticket: OcclusionQueryTicket, _samples: number): OcclusionQueryCompletion;
53
+ inspect(): OcclusionQueryPoolInspection;
54
+ dispose(): void;
55
+ private releasePage;
56
+ }
57
+ //# sourceMappingURL=occlusion-query-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-query-pool.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-query-pool.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,gCAAgC,OAAO,CAAC;AACrD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,0BAA0B,QAC0B,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IACtC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACxB;AAoBD,gFAAgF;AAChF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGpB;IACF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IACxE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,yBAAyB,GAAG,SAAS;IAsBhF,OAAO,CACL,WAAW,EAAE,yBAAyB,EACtC,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,GAC7E,oBAAoB,GAAG,SAAS;IAmBnC,6DAA6D;IAC7D,MAAM,CAAC,WAAW,EAAE,yBAAyB,GAAG,OAAO;IAYvD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,GAAG,wBAAwB;IAclF,OAAO,IAAI,4BAA4B;IAiBvC,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,WAAW;CAMpB"}
@@ -0,0 +1,96 @@
1
+ import type { QuerySet, Result, RhiCommandEncoder, RhiDevice, RhiError, RhiRenderPassEncoder } from '@forgeax/engine-rhi';
2
+ import type { PipelineBuilderShaderModuleFactory } from '../../pipeline-builder';
3
+ import type { VisibilityBudget } from './budget';
4
+ import type { VisibilityFacetStore } from './facet';
5
+ import { type OcclusionBounds } from './occlusion-pass';
6
+ import { OcclusionQueryPool } from './occlusion-query-pool';
7
+ import { type PrimitiveKey, type ViewKey, type VisibilityCandidate } from './types';
8
+ /** @internal Deterministic producer hook; never configured by the player API. */
9
+ export interface OcclusionRuntimeTestHooks {
10
+ readonly beforeMap?: () => Promise<void>;
11
+ }
12
+ /** @internal Used only by the production evidence falsification harness. */
13
+ export declare function setOcclusionRuntimeTestHooks(hooks: OcclusionRuntimeTestHooks | undefined): void;
14
+ export interface OcclusionRuntimeCandidate {
15
+ readonly view: ViewKey;
16
+ readonly primitive: PrimitiveKey;
17
+ readonly epoch: number;
18
+ readonly bounds: OcclusionBounds;
19
+ readonly candidate: VisibilityCandidate;
20
+ readonly deviceGeneration: number;
21
+ /** Clip-space triangles for the conservative bounds proxy. */
22
+ readonly proxyVertices?: Float32Array;
23
+ }
24
+ export interface OcclusionFrameProjection {
25
+ readonly querySet: QuerySet;
26
+ readonly queryIndex: number;
27
+ readonly queryCount: number;
28
+ readonly sampleCount: 1 | 4;
29
+ readonly pageIndex: number;
30
+ readonly reservationId: number;
31
+ readonly encodeProxyBounds: (pass: RhiRenderPassEncoder) => Result<void, RhiError>;
32
+ readonly beginCandidate: (pass: RhiRenderPassEncoder) => Result<void, RhiError>;
33
+ readonly endCandidate: (pass: RhiRenderPassEncoder) => Result<void, RhiError>;
34
+ readonly recordResolve: (encoder: RhiCommandEncoder) => Result<void, RhiError>;
35
+ readonly commit: (submitted: boolean, submissionGeneration: number, profilePhase?: OcclusionProfilePhaseRunner) => void;
36
+ }
37
+ export type OcclusionProfilePhaseRunner = <T>(phase: 'record/occlusion-query-submit' | 'record/occlusion-global-advance', action: () => T) => T;
38
+ /**
39
+ * RenderSystem-owned query transport. It is deliberately the only bridge
40
+ * between the logical pool, the typed graph raster pass, and facet completion.
41
+ */
42
+ export declare class OcclusionRenderRuntime {
43
+ private readonly device;
44
+ private readonly facets;
45
+ private readonly shaderModuleFactory?;
46
+ private readonly budget;
47
+ private readonly pool;
48
+ private readonly resources;
49
+ private readonly activeCompletions;
50
+ private readonly retiredResources;
51
+ /** Candidate descriptors are rebuilt only when the extracted frame changes. */
52
+ private candidateSource;
53
+ private validCandidates;
54
+ private readonly candidateByKey;
55
+ private lastPrepareUnavailable;
56
+ private pendingFrame;
57
+ private disposed;
58
+ private proxyBuffer;
59
+ private readonly proxyScratch;
60
+ private proxyPipeline;
61
+ private proxyPipelineSampleCount;
62
+ private readonly queryLatencySamplesUs;
63
+ private lastQueryLatencyUs;
64
+ private readonly projection;
65
+ constructor(device: RhiDevice, facets: VisibilityFacetStore, shaderModuleFactory?: PipelineBuilderShaderModuleFactory | undefined, budget?: VisibilityBudget);
66
+ prepare(candidate: OcclusionRuntimeCandidate): OcclusionFrameProjection | undefined;
67
+ prepareBatch(candidates: readonly OcclusionRuntimeCandidate[], sampleCount?: 1 | 4, useReadyQueue?: boolean): OcclusionFrameProjection | undefined;
68
+ inspect(): ReturnType<OcclusionQueryPool['inspect']>;
69
+ get prepareUnavailable(): boolean;
70
+ /** Map-only latency from the submitted query page; queue wait is excluded. */
71
+ inspectQueryLatency(): {
72
+ readonly median: number;
73
+ readonly p95: number;
74
+ readonly last: number;
75
+ };
76
+ /**
77
+ * Wait until query readbacks submitted before the current observation have
78
+ * settled. The renderer receipt only fences command submission; query
79
+ * completion also includes the asynchronous map/unmap transition. Keeping
80
+ * that fence here makes `renderer.observe()` publish the latest visibility
81
+ * result and measured map latency instead of racing the readback promise.
82
+ */
83
+ waitForCompletions(): Promise<void>;
84
+ /** Count a successful frame for hidden rows that were not queried this frame. */
85
+ advanceSuccessfulSubmit(submissionGeneration: number): void;
86
+ dispose(): void;
87
+ private ensureResources;
88
+ private commit;
89
+ private publishAndApplySubmit;
90
+ private destroyResources;
91
+ private completeAfterSubmit;
92
+ private encodeProxyBounds;
93
+ private ensureProxyBuffer;
94
+ private ensureProxyPipeline;
95
+ }
96
+ //# sourceMappingURL=occlusion-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-runtime.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /** Closed view roles used by the renderer-owned visibility facet. */
2
+ export type VisibilityViewRole = 'main' | 'shadow' | 'reflection' | 'probe';
3
+ export interface ViewKey {
4
+ readonly attachmentId: string;
5
+ readonly cameraEntity: number;
6
+ readonly viewRole: VisibilityViewRole;
7
+ readonly viewGeneration: number;
8
+ }
9
+ export interface PrimitiveKey {
10
+ readonly attachmentId: string;
11
+ readonly worldGeneration: number;
12
+ readonly primitiveSlot: number;
13
+ readonly slotGeneration: number;
14
+ }
15
+ export interface VisibilityCandidate {
16
+ readonly level: number;
17
+ readonly confidence: number;
18
+ }
19
+ export interface VisibilityFacetInspection {
20
+ readonly owner: 'persistent-render-scene';
21
+ readonly activeViews: number;
22
+ readonly facetRows: number;
23
+ }
24
+ export interface VisibilityFacetInput {
25
+ readonly view: ViewKey;
26
+ readonly primitive: PrimitiveKey;
27
+ readonly epoch: number;
28
+ readonly candidate: VisibilityCandidate;
29
+ }
30
+ export declare function viewKeyId(key: ViewKey): string;
31
+ export declare function primitiveKeyId(key: PrimitiveKey): string;
32
+ export declare function viewKey(input: ViewKey): ViewKey;
33
+ export declare function primitiveKey(input: PrimitiveKey): PrimitiveKey;
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/types.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE9C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAExD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAE9D"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Consumer-only SSR M0 admission.
3
+ *
4
+ * This module consumes detached producer receipts. It owns no capture,
5
+ * device, graph, or recovery handle and therefore cannot repair a missing
6
+ * producer. A complete receipt set is the only route to an admitted result.
7
+ */
8
+ import { type RhiTextureFormatCapabilityReceipt } from '@forgeax/engine-rhi';
9
+ import type { ReflectionFallbackReceipt } from '../inspection-types';
10
+ import type { SsrOwnerRecoveryAction } from './errors';
11
+ import type { SsrAdmissionIdentity } from './identity';
12
+ export declare const SSR_FORMAT_PROFILE: "r32float-mip-sampled-storage";
13
+ export declare const SSR_FORMAT_STAGES: readonly ["texture-create", "mip-view", "sampled-storage-bind-group", "pipeline-bind", "finish", "submit", "completion", "readback"];
14
+ export type { SsrAdmissionIdentity } from './identity';
15
+ export type SsrFormatStage = (typeof SSR_FORMAT_STAGES)[number];
16
+ /**
17
+ * The admission input is the real renderer owner receipt plus the one
18
+ * integration identity supplied by the host. It deliberately does not
19
+ * recreate submitted/source/LKG boolean flags.
20
+ */
21
+ export type SsrReflectionFallbackReceipt = ReflectionFallbackReceipt & {
22
+ readonly identity: SsrAdmissionIdentity;
23
+ };
24
+ /** RHI capability receipt with the same host-supplied integration identity. */
25
+ export type SsrFormatReceipt = RhiTextureFormatCapabilityReceipt & {
26
+ readonly identity: SsrAdmissionIdentity;
27
+ };
28
+ export interface SsrTemporalReceipt {
29
+ readonly identity: SsrAdmissionIdentity;
30
+ readonly successfulSubmit: true;
31
+ readonly generation: number;
32
+ }
33
+ export interface SsrAdmissionWork {
34
+ readonly attachmentCount: number;
35
+ readonly passCount: number;
36
+ readonly bindingCount: number;
37
+ readonly resourceCount: number;
38
+ readonly historyCount: 0;
39
+ readonly temporalDemand: 0;
40
+ }
41
+ export interface SsrAdmissionBudget {
42
+ readonly probeExecutions: 0 | 1;
43
+ readonly resetCount: 0;
44
+ readonly rebuildCount: 0;
45
+ }
46
+ export interface SsrAdmissionFailure {
47
+ readonly code: 'ssr-not-requested' | 'ssr-reflection-fallback-unavailable' | 'ssr-format-unavailable' | 'ssr-temporal-unavailable' | 'ssr-receipt-identity-mismatch' | 'ssr-receipt-stale';
48
+ readonly expected: string;
49
+ readonly hint: string;
50
+ readonly detail: Readonly<{
51
+ readonly owner: 'producer' | 'format' | 'temporal' | 'consumer';
52
+ /** Owner-directed action an AI consumer can take without parsing hint text. */
53
+ readonly action: SsrOwnerRecoveryAction;
54
+ readonly generation?: number;
55
+ readonly identityField?: keyof SsrAdmissionIdentity;
56
+ }>;
57
+ }
58
+ export type SsrAdmissionResult = {
59
+ readonly status: 'admitted';
60
+ readonly identity: SsrAdmissionIdentity | undefined;
61
+ readonly generation: number;
62
+ readonly work: SsrAdmissionWork;
63
+ readonly budget: SsrAdmissionBudget;
64
+ readonly failure?: undefined;
65
+ } | {
66
+ readonly status: 'fallback-only';
67
+ readonly identity: SsrAdmissionIdentity | undefined;
68
+ readonly generation: number;
69
+ readonly work: SsrAdmissionWork;
70
+ readonly budget: SsrAdmissionBudget;
71
+ readonly failure: SsrAdmissionFailure;
72
+ };
73
+ export interface SsrAdmissionInput {
74
+ readonly requested: boolean;
75
+ readonly identity: SsrAdmissionIdentity;
76
+ readonly reflectionFallback?: SsrReflectionFallbackReceipt;
77
+ readonly format?: SsrFormatReceipt;
78
+ readonly temporal?: SsrTemporalReceipt;
79
+ readonly previousGeneration?: number;
80
+ }
81
+ /** Public renderer projection consumed by the parent SSR feature. */
82
+ export interface SsrDependenciesInspection {
83
+ readonly status: 'admitted' | 'fallback-only';
84
+ /** Absent until the host binds an exact source/tree/lock/build identity. */
85
+ readonly identity: SsrAdmissionIdentity | undefined;
86
+ readonly requested: boolean;
87
+ readonly reflectionFallback: ReflectionFallbackReceipt | undefined;
88
+ readonly format: SsrFormatReceipt | undefined;
89
+ readonly temporal: SsrTemporalReceipt | undefined;
90
+ readonly admission: SsrAdmissionResult;
91
+ readonly work: SsrAdmissionWork;
92
+ readonly budget: SsrAdmissionBudget;
93
+ readonly failure: SsrAdmissionFailure | undefined;
94
+ }
95
+ export declare function admitSsrM0(input: SsrAdmissionInput): SsrAdmissionResult;
96
+ /**
97
+ * Joins the live owner projections at the renderer boundary. The only casts
98
+ * here add the host identity to receipts that otherwise remain canonical RHI
99
+ * or ReflectionProbe PODs; no producer fact is copied or renamed.
100
+ */
101
+ export declare function projectSsrDependencies(input: {
102
+ readonly requested: boolean;
103
+ readonly identity: SsrAdmissionIdentity | undefined;
104
+ readonly reflectionFallback: ReflectionFallbackReceipt | undefined;
105
+ readonly format: RhiTextureFormatCapabilityReceipt | undefined;
106
+ readonly temporal: {
107
+ readonly successfulSubmit: true;
108
+ readonly generation: number;
109
+ } | undefined;
110
+ readonly previousGeneration?: number;
111
+ }): SsrDependenciesInspection;
112
+ export declare function zeroSsrAdmissionWork(): SsrAdmissionWork;
113
+ /**
114
+ * Projects the admission decision into the existing temporal reset seam.
115
+ * Admission never creates temporal history; only a changed committed
116
+ * producer generation can request a reset through the coordinator.
117
+ */
118
+ export declare function resolveSsrAdmissionGeneration(previousGeneration: number | undefined, nextGeneration: number | undefined): {
119
+ readonly changed: boolean;
120
+ readonly generation: number | undefined;
121
+ };
122
+ //# sourceMappingURL=admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../src/ssr/admission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type Result } from '@forgeax/engine-types';
2
+ /** Linear HDR RGB used by the M0 composition contract. */
3
+ export type SsrReflectionColor = readonly [number, number, number];
4
+ export interface SsrCompositionInput {
5
+ /** Screen-hit confidence. The parent SSR consumer supplies 0..1. */
6
+ readonly c: number;
7
+ /** The Standard BRDF specular lobe before SSR replacement. */
8
+ readonly baseSpecular: SsrReflectionColor;
9
+ /** The same-source BRDF-projected screen contribution. */
10
+ readonly screenSpecular: SsrReflectionColor;
11
+ /** The committed producer-owned environment contribution. */
12
+ readonly fallbackSpecular: SsrReflectionColor;
13
+ }
14
+ export interface SsrCompositionInputError {
15
+ readonly code: 'ssr-composition-input-invalid';
16
+ readonly expected: string;
17
+ readonly hint: string;
18
+ readonly detail: Readonly<{
19
+ readonly field: 'c' | 'baseSpecular' | 'screenSpecular' | 'fallbackSpecular';
20
+ }>;
21
+ }
22
+ export type SsrCompositionResult = Result<SsrReflectionColor, SsrCompositionInputError>;
23
+ /**
24
+ * Apply the M0 reflection replacement contract without owning an SSR pass.
25
+ *
26
+ * `c=0` returns the base Standard specular lobe. `c=1` replaces only that
27
+ * lobe with the same-source screen contribution, subtracting the committed
28
+ * environment contribution once. Hi-Z traversal, history and graph wiring
29
+ * remain owned by the parent SSR feature.
30
+ */
31
+ export declare function composeSsrReflection(input: SsrCompositionInput): SsrCompositionResult;
32
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/ssr/composition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,0DAA0D;IAC1D,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC5C,6DAA6D;IAC7D,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;CAC/C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,cAAc,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;KAC9E,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;AAkBxF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAqBrF"}
@@ -0,0 +1,39 @@
1
+ /** Closed, consumer-facing failures for the detached SSR M0 contract. */
2
+ export type SsrAdmissionErrorCode = 'ssr-not-requested' | 'ssr-reflection-fallback-unavailable' | 'ssr-format-unavailable' | 'ssr-temporal-unavailable' | 'ssr-receipt-identity-mismatch' | 'ssr-receipt-stale';
3
+ export type SsrOwnerRecoveryAction = 'use-LKG' | 'use-Skylight' | 'use-neutral' | 'recapture' | 'rebuild' | 'retry';
4
+ export type SsrAdmissionErrorDetail = {
5
+ readonly code: 'ssr-not-requested';
6
+ readonly owner: 'consumer';
7
+ readonly action: 'retry';
8
+ } | {
9
+ readonly code: 'ssr-reflection-fallback-unavailable';
10
+ readonly owner: 'producer';
11
+ readonly action: 'use-LKG' | 'use-Skylight' | 'use-neutral' | 'recapture' | 'rebuild';
12
+ } | {
13
+ readonly code: 'ssr-format-unavailable';
14
+ readonly owner: 'format';
15
+ readonly action: 'rebuild' | 'retry';
16
+ readonly stage?: string;
17
+ } | {
18
+ readonly code: 'ssr-temporal-unavailable';
19
+ readonly owner: 'temporal';
20
+ readonly action: 'rebuild' | 'retry';
21
+ } | {
22
+ readonly code: 'ssr-receipt-identity-mismatch';
23
+ readonly owner: 'producer' | 'format' | 'temporal';
24
+ readonly action: 'rebuild';
25
+ readonly identityField: 'sourceHead' | 'sourceTree' | 'lockSha256' | 'buildSha256';
26
+ } | {
27
+ readonly code: 'ssr-receipt-stale';
28
+ readonly owner: 'consumer';
29
+ readonly action: 'retry';
30
+ readonly generation: number;
31
+ };
32
+ export interface SsrAdmissionError {
33
+ readonly code: SsrAdmissionErrorCode;
34
+ readonly expected: string;
35
+ readonly hint: string;
36
+ readonly detail: SsrAdmissionErrorDetail;
37
+ }
38
+ export declare function createSsrAdmissionError(detail: SsrAdmissionErrorDetail): SsrAdmissionError;
39
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/ssr/errors.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,MAAM,qBAAqB,GAC7B,mBAAmB,GACnB,qCAAqC,GACrC,wBAAwB,GACxB,0BAA0B,GAC1B,+BAA+B,GAC/B,mBAAmB,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,cAAc,GACd,aAAa,GACb,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,uBAAuB,GAC/B;IACE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,qCAAqC,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;CACvF,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CACtC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;CACpF,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEN,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAc1F"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Exact source/build identity shared by the producer, RHI and SSR consumer.
3
+ *
4
+ * Keeping the POD in its own leaf avoids a second copy of the identity shape
5
+ * in the owner inspection types and in the admission module.
6
+ */
7
+ export type SsrAdmissionIdentity = Readonly<{
8
+ readonly sourceHead: string;
9
+ readonly sourceTree: string;
10
+ readonly lockSha256: string;
11
+ readonly buildSha256: string;
12
+ }>;
13
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/ssr/identity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC,CAAC"}
@@ -33,7 +33,7 @@ export interface SkinPaletteAllocator {
33
33
  * Computes M_i = jointWorldTransforms[i] * ibm[i] per joint.
34
34
  *
35
35
  * `jointWorlds[i]` is taken straight from `Skin.joints[i]` entity's
36
- * `Transform.world` view (a 16-float column-major Float32Array
36
+ * `GlobalTransform.world` view (a 16-float column-major Float32Array
37
37
  * written by propagateTransforms); zero recompose, premultiplies
38
38
  * directly against the IBM.
39
39
  */