@forgeax/engine-render 0.1.20 → 0.1.23

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 (645) hide show
  1. package/README.md +365 -29
  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/device-feature-admission.d.ts +18 -0
  5. package/dist/assembly/device-feature-admission.d.ts.map +1 -0
  6. package/dist/assembly/directional-shadow-inspection.d.ts +38 -0
  7. package/dist/assembly/directional-shadow-inspection.d.ts.map +1 -0
  8. package/dist/assembly/factory.d.ts +30 -19
  9. package/dist/assembly/factory.d.ts.map +1 -1
  10. package/dist/assembly/host-contract.d.ts +19 -0
  11. package/dist/assembly/host-contract.d.ts.map +1 -1
  12. package/dist/assembly/render-target-host.d.ts +46 -0
  13. package/dist/assembly/render-target-host.d.ts.map +1 -0
  14. package/dist/assets/render-asset-port.d.ts.map +1 -1
  15. package/dist/authoring.mjs +4 -1
  16. package/dist/authoring.mjs.map +1 -1
  17. package/dist/capture/cube-views.d.ts +21 -0
  18. package/dist/capture/cube-views.d.ts.map +1 -0
  19. package/dist/capture/scheduler.d.ts +54 -0
  20. package/dist/capture/scheduler.d.ts.map +1 -0
  21. package/dist/{chunk-PCHBPYML.mjs → chunk-4L3P6DT5.mjs} +2 -2
  22. package/dist/chunk-4L3P6DT5.mjs.map +1 -0
  23. package/dist/{chunk-VFPLTKCU.mjs → chunk-4NPUASZR.mjs} +15 -4
  24. package/dist/chunk-4NPUASZR.mjs.map +1 -0
  25. package/dist/chunk-DIYW3M5D.mjs +5085 -0
  26. package/dist/chunk-DIYW3M5D.mjs.map +1 -0
  27. package/dist/chunk-FBC4R44J.mjs +1003 -0
  28. package/dist/chunk-FBC4R44J.mjs.map +1 -0
  29. package/dist/{chunk-CDTWTHZR.mjs → chunk-FF7K3FSO.mjs} +474 -168
  30. package/dist/chunk-FF7K3FSO.mjs.map +1 -0
  31. package/dist/chunk-HZUPSYW7.mjs +1104 -0
  32. package/dist/chunk-HZUPSYW7.mjs.map +1 -0
  33. package/dist/{chunk-TBQJOK2L.mjs → chunk-QODA5UKU.mjs} +321 -269
  34. package/dist/chunk-QODA5UKU.mjs.map +1 -0
  35. package/dist/chunk-YALPS44A.mjs +296 -0
  36. package/dist/chunk-YALPS44A.mjs.map +1 -0
  37. package/dist/{chunk-4XINDLAY.mjs → chunk-ZUWKAZ2I.mjs} +1963 -2178
  38. package/dist/chunk-ZUWKAZ2I.mjs.map +1 -0
  39. package/dist/cluster-binner.d.ts +5 -0
  40. package/dist/cluster-binner.d.ts.map +1 -1
  41. package/dist/components/camera.d.ts +1 -0
  42. package/dist/components/camera.d.ts.map +1 -1
  43. package/dist/components/cube-camera.d.ts +20 -0
  44. package/dist/components/cube-camera.d.ts.map +1 -0
  45. package/dist/components/directional-light.d.ts +11 -2
  46. package/dist/components/directional-light.d.ts.map +1 -1
  47. package/dist/components/directional-shadow-filter.d.ts +25 -0
  48. package/dist/components/directional-shadow-filter.d.ts.map +1 -0
  49. package/dist/components/index.d.ts +5 -0
  50. package/dist/components/index.d.ts.map +1 -1
  51. package/dist/components/light-helpers.d.ts +4 -0
  52. package/dist/components/light-helpers.d.ts.map +1 -1
  53. package/dist/components/light-probe.d.ts +9 -0
  54. package/dist/components/light-probe.d.ts.map +1 -0
  55. package/dist/components/rect-area-light.d.ts +12 -0
  56. package/dist/components/rect-area-light.d.ts.map +1 -0
  57. package/dist/components/reflection-probe.d.ts +17 -0
  58. package/dist/components/reflection-probe.d.ts.map +1 -0
  59. package/dist/components/scene-instance.d.ts +4 -0
  60. package/dist/components/scene-instance.d.ts.map +1 -1
  61. package/dist/components/spot-light.d.ts +3 -0
  62. package/dist/components/spot-light.d.ts.map +1 -1
  63. package/dist/construct-renderer.mjs +14836 -9620
  64. package/dist/construct-renderer.mjs.map +1 -1
  65. package/dist/device/gpu-residency.d.ts +8 -1
  66. package/dist/device/gpu-residency.d.ts.map +1 -1
  67. package/dist/device/lifecycle-transaction.d.ts +2 -0
  68. package/dist/device/lifecycle-transaction.d.ts.map +1 -0
  69. package/dist/environment/frame.d.ts.map +1 -1
  70. package/dist/environment/lifecycle.d.ts +5 -0
  71. package/dist/environment/lifecycle.d.ts.map +1 -1
  72. package/dist/errors/gpu-driven.d.ts +26 -0
  73. package/dist/errors/gpu-driven.d.ts.map +1 -0
  74. package/dist/errors/index.d.ts +1 -0
  75. package/dist/errors/index.d.ts.map +1 -1
  76. package/dist/errors/recover.d.ts +9 -1
  77. package/dist/errors/recover.d.ts.map +1 -1
  78. package/dist/errors/render.d.ts +166 -93
  79. package/dist/errors/render.d.ts.map +1 -1
  80. package/dist/extract/directional-shadow-projection.d.ts +23 -0
  81. package/dist/extract/directional-shadow-projection.d.ts.map +1 -0
  82. package/dist/extract/environment.d.ts +14 -0
  83. package/dist/extract/environment.d.ts.map +1 -1
  84. package/dist/extract/gpu-driven.d.ts +50 -0
  85. package/dist/extract/gpu-driven.d.ts.map +1 -0
  86. package/dist/extract/visibility.d.ts.map +1 -1
  87. package/dist/features/fullscreen.d.ts.map +1 -1
  88. package/dist/features/targets.d.ts.map +1 -1
  89. package/dist/features/types.d.ts +10 -0
  90. package/dist/features/types.d.ts.map +1 -1
  91. package/dist/fullscreen-post-process-pass.d.ts +13 -2
  92. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  93. package/dist/gpu-driven/batch-topology.d.ts +34 -0
  94. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  95. package/dist/gpu-driven/prepared-draw.d.ts +63 -0
  96. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -0
  97. package/dist/gpu-driven/production-raster.d.ts +97 -2
  98. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  99. package/dist/gpu-driven/view-gpu.d.ts +64 -1
  100. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  101. package/dist/gpu-scene-schema.d.ts +14 -0
  102. package/dist/gpu-scene-schema.d.ts.map +1 -1
  103. package/dist/gpu-scene.d.ts +8 -1
  104. package/dist/gpu-scene.d.ts.map +1 -1
  105. package/dist/gpu-usage.d.ts +0 -1
  106. package/dist/gpu-usage.d.ts.map +1 -1
  107. package/dist/hdrp-buffers.d.ts +21 -19
  108. package/dist/hdrp-buffers.d.ts.map +1 -1
  109. package/dist/ibl/IblPipelineCache.d.ts +4 -0
  110. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  111. package/dist/ibl/kernel-cache.d.ts +36 -0
  112. package/dist/ibl/kernel-cache.d.ts.map +1 -0
  113. package/dist/index.d.ts +39 -3
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.mjs +91 -6
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/inspection-types.d.ts +214 -1
  118. package/dist/inspection-types.d.ts.map +1 -1
  119. package/dist/instances-derived-bounds.d.ts +50 -0
  120. package/dist/instances-derived-bounds.d.ts.map +1 -0
  121. package/dist/internal.d.ts +9 -0
  122. package/dist/internal.d.ts.map +1 -1
  123. package/dist/internal.mjs +23 -2
  124. package/dist/internal.mjs.map +1 -1
  125. package/dist/light-buffer-layout.d.ts +58 -140
  126. package/dist/light-buffer-layout.d.ts.map +1 -1
  127. package/dist/materials.d.ts.map +1 -1
  128. package/dist/mesh-material-bindings.d.ts +54 -0
  129. package/dist/mesh-material-bindings.d.ts.map +1 -1
  130. package/dist/pbr-pipeline.d.ts +38 -14
  131. package/dist/pbr-pipeline.d.ts.map +1 -1
  132. package/dist/pipeline/standard-forward-lane.d.ts +2 -1
  133. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  134. package/dist/pipeline/standard-lighting/errors.d.ts +4 -0
  135. package/dist/pipeline/standard-lighting/errors.d.ts.map +1 -0
  136. package/dist/pipeline/standard-lighting/graph.d.ts +24 -0
  137. package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -0
  138. package/dist/pipeline/standard-lighting/inspection.d.ts +38 -0
  139. package/dist/pipeline/standard-lighting/inspection.d.ts.map +1 -0
  140. package/dist/pipeline/standard-lighting/layout.d.ts +28 -0
  141. package/dist/pipeline/standard-lighting/layout.d.ts.map +1 -0
  142. package/dist/pipeline/standard-lighting/light-frame.d.ts +33 -0
  143. package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -0
  144. package/dist/pipeline/standard-lighting/membership.d.ts +14 -0
  145. package/dist/pipeline/standard-lighting/membership.d.ts.map +1 -0
  146. package/dist/pipeline/standard-lighting/prepare.d.ts +16 -0
  147. package/dist/pipeline/standard-lighting/prepare.d.ts.map +1 -0
  148. package/dist/pipeline/standard-lighting/topology.d.ts +45 -0
  149. package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -0
  150. package/dist/pipeline/standard-lighting/transport.d.ts +36 -0
  151. package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -0
  152. package/dist/pipeline/standard-pipeline.d.ts +4 -13
  153. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  154. package/dist/pipeline/standard-post.d.ts.map +1 -1
  155. package/dist/pipeline/standard-profile.d.ts +5 -26
  156. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  157. package/dist/pipeline-builder.d.ts +2 -0
  158. package/dist/pipeline-builder.d.ts.map +1 -1
  159. package/dist/pipeline-spec.d.ts +40 -7
  160. package/dist/pipeline-spec.d.ts.map +1 -1
  161. package/dist/plugin.d.ts.map +1 -1
  162. package/dist/point-shadow-inspection.d.ts +21 -0
  163. package/dist/point-shadow-inspection.d.ts.map +1 -0
  164. package/dist/prepare/extended-lighting/ltc-resources.d.ts +31 -0
  165. package/dist/prepare/extended-lighting/ltc-resources.d.ts.map +1 -0
  166. package/dist/prepare/extended-lighting/resources.d.ts +72 -0
  167. package/dist/prepare/extended-lighting/resources.d.ts.map +1 -0
  168. package/dist/prepare/extended-lighting/spot-modifiers.d.ts +42 -0
  169. package/dist/prepare/extended-lighting/spot-modifiers.d.ts.map +1 -0
  170. package/dist/prepare/extended-lighting/state.d.ts +24 -0
  171. package/dist/prepare/extended-lighting/state.d.ts.map +1 -0
  172. package/dist/record/frame-lighting.d.ts +33 -36
  173. package/dist/record/frame-lighting.d.ts.map +1 -1
  174. package/dist/record/frame-snapshot.d.ts +78 -24
  175. package/dist/record/frame-snapshot.d.ts.map +1 -1
  176. package/dist/record/frame-targets.d.ts +5 -0
  177. package/dist/record/frame-targets.d.ts.map +1 -1
  178. package/dist/record/frame.d.ts +16 -6
  179. package/dist/record/frame.d.ts.map +1 -1
  180. package/dist/record/gpu-pass-timing/contract.d.ts +96 -0
  181. package/dist/record/gpu-pass-timing/contract.d.ts.map +1 -0
  182. package/dist/record/gpu-pass-timing/errors.d.ts +18 -0
  183. package/dist/record/gpu-pass-timing/errors.d.ts.map +1 -0
  184. package/dist/record/gpu-pass-timing/index.d.ts +8 -0
  185. package/dist/record/gpu-pass-timing/index.d.ts.map +1 -0
  186. package/dist/record/gpu-pass-timing/parser.d.ts +11 -0
  187. package/dist/record/gpu-pass-timing/parser.d.ts.map +1 -0
  188. package/dist/record/gpu-pass-timing/session.d.ts +43 -0
  189. package/dist/record/gpu-pass-timing/session.d.ts.map +1 -0
  190. package/dist/record/gpu-timing.d.ts +20 -3
  191. package/dist/record/gpu-timing.d.ts.map +1 -1
  192. package/dist/record/helpers.d.ts +0 -20
  193. package/dist/record/helpers.d.ts.map +1 -1
  194. package/dist/record/main-pass-geometry.d.ts +6 -1
  195. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  196. package/dist/record/main-pass-material.d.ts +25 -2
  197. package/dist/record/main-pass-material.d.ts.map +1 -1
  198. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  199. package/dist/record/main-pass.d.ts +2 -0
  200. package/dist/record/main-pass.d.ts.map +1 -1
  201. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  202. package/dist/record/render-context.d.ts +98 -6
  203. package/dist/record/render-context.d.ts.map +1 -1
  204. package/dist/record/shadow-pass.d.ts.map +1 -1
  205. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  206. package/dist/record/typed-frame-graph.d.ts +119 -4
  207. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  208. package/dist/record/view-ubo.d.ts +7 -5
  209. package/dist/record/view-ubo.d.ts.map +1 -1
  210. package/dist/reflection/filter.d.ts +22 -0
  211. package/dist/reflection/filter.d.ts.map +1 -0
  212. package/dist/reflection/gpu-table.d.ts +25 -0
  213. package/dist/reflection/gpu-table.d.ts.map +1 -0
  214. package/dist/reflection/inspection.d.ts +10 -0
  215. package/dist/reflection/inspection.d.ts.map +1 -0
  216. package/dist/reflection/projection.d.ts +140 -0
  217. package/dist/reflection/projection.d.ts.map +1 -0
  218. package/dist/reflection/record-owner.d.ts +60 -0
  219. package/dist/reflection/record-owner.d.ts.map +1 -0
  220. package/dist/render-contract.d.ts +62 -14
  221. package/dist/render-contract.d.ts.map +1 -1
  222. package/dist/render-graph-primitives.d.ts +1 -0
  223. package/dist/render-graph-primitives.d.ts.map +1 -1
  224. package/dist/render-pipeline.d.ts +49 -2
  225. package/dist/render-pipeline.d.ts.map +1 -1
  226. package/dist/render-system-extract.d.ts +160 -31
  227. package/dist/render-system-extract.d.ts.map +1 -1
  228. package/dist/render-system.d.ts +28 -2
  229. package/dist/render-system.d.ts.map +1 -1
  230. package/dist/renderer.d.ts +43 -0
  231. package/dist/renderer.d.ts.map +1 -0
  232. package/dist/scene/probe-blend-record.d.ts +22 -0
  233. package/dist/scene/probe-blend-record.d.ts.map +1 -0
  234. package/dist/scene/probe-blend.d.ts +142 -0
  235. package/dist/scene/probe-blend.d.ts.map +1 -0
  236. package/dist/scene/render-scene-types.d.ts +0 -6
  237. package/dist/scene/render-scene-types.d.ts.map +1 -1
  238. package/dist/scene/render-scene.d.ts +117 -9
  239. package/dist/scene/render-scene.d.ts.map +1 -1
  240. package/dist/scene/visibility/bounds.d.ts +20 -0
  241. package/dist/scene/visibility/bounds.d.ts.map +1 -0
  242. package/dist/scene/visibility/budget.d.ts +16 -0
  243. package/dist/scene/visibility/budget.d.ts.map +1 -0
  244. package/dist/scene/visibility/facet.d.ts +73 -0
  245. package/dist/scene/visibility/facet.d.ts.map +1 -0
  246. package/dist/scene/visibility/gpu-frame-timing.d.ts +41 -0
  247. package/dist/scene/visibility/gpu-frame-timing.d.ts.map +1 -0
  248. package/dist/scene/visibility/gpu-lod.d.ts +46 -0
  249. package/dist/scene/visibility/gpu-lod.d.ts.map +1 -0
  250. package/dist/scene/visibility/inspection.d.ts +132 -0
  251. package/dist/scene/visibility/inspection.d.ts.map +1 -0
  252. package/dist/scene/visibility/lod-selector.d.ts +25 -0
  253. package/dist/scene/visibility/lod-selector.d.ts.map +1 -0
  254. package/dist/scene/visibility/occlusion-confidence.d.ts +81 -0
  255. package/dist/scene/visibility/occlusion-confidence.d.ts.map +1 -0
  256. package/dist/scene/visibility/occlusion-pass.d.ts +57 -0
  257. package/dist/scene/visibility/occlusion-pass.d.ts.map +1 -0
  258. package/dist/scene/visibility/occlusion-query-pool.d.ts +57 -0
  259. package/dist/scene/visibility/occlusion-query-pool.d.ts.map +1 -0
  260. package/dist/scene/visibility/occlusion-runtime.d.ts +96 -0
  261. package/dist/scene/visibility/occlusion-runtime.d.ts.map +1 -0
  262. package/dist/scene/visibility/types.d.ts +34 -0
  263. package/dist/scene/visibility/types.d.ts.map +1 -0
  264. package/dist/shadow-atlas.d.ts +3 -3
  265. package/dist/shadow-atlas.d.ts.map +1 -1
  266. package/dist/ssao-buffers.d.ts +3 -0
  267. package/dist/ssao-buffers.d.ts.map +1 -1
  268. package/dist/ssr/admission.d.ts +122 -0
  269. package/dist/ssr/admission.d.ts.map +1 -0
  270. package/dist/ssr/composition.d.ts +32 -0
  271. package/dist/ssr/composition.d.ts.map +1 -0
  272. package/dist/ssr/errors.d.ts +39 -0
  273. package/dist/ssr/errors.d.ts.map +1 -0
  274. package/dist/ssr/identity.d.ts +13 -0
  275. package/dist/ssr/identity.d.ts.map +1 -0
  276. package/dist/systems/skin-palette-allocator.d.ts +1 -1
  277. package/dist/targets/contracts.d.ts +66 -0
  278. package/dist/targets/contracts.d.ts.map +1 -0
  279. package/dist/targets/graph-projection.d.ts +29 -0
  280. package/dist/targets/graph-projection.d.ts.map +1 -0
  281. package/dist/targets/material-source.d.ts +34 -0
  282. package/dist/targets/material-source.d.ts.map +1 -0
  283. package/dist/targets/owner.d.ts +32 -0
  284. package/dist/targets/owner.d.ts.map +1 -0
  285. package/dist/targets/physical.d.ts +18 -0
  286. package/dist/targets/physical.d.ts.map +1 -0
  287. package/dist/targets/readback.d.ts +39 -0
  288. package/dist/targets/readback.d.ts.map +1 -0
  289. package/dist/temporal/frame-coordinator.d.ts +13 -0
  290. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  291. package/dist/temporal/frame.d.ts +2 -0
  292. package/dist/temporal/frame.d.ts.map +1 -1
  293. package/dist/temporal/index.mjs +6 -5
  294. package/dist/temporal/view.d.ts +7 -0
  295. package/dist/temporal/view.d.ts.map +1 -1
  296. package/dist/tilemap-chunk-extract-system.d.ts +1 -1
  297. package/dist/typed-render-graph-primitives.d.ts +5 -1
  298. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  299. package/dist/typed-shadow-passes.d.ts +1 -1
  300. package/dist/typed-shadow-passes.d.ts.map +1 -1
  301. package/dist/volume/passes.d.ts +9 -5
  302. package/dist/volume/passes.d.ts.map +1 -1
  303. package/package.json +20 -20
  304. package/src/__tests__/bloom-exact-zero.unit.test.ts +48 -19
  305. package/src/__tests__/bloom-lifecycle.integration.test.ts +41 -13
  306. package/src/__tests__/camera-target-consumption.unit.test.ts +53 -0
  307. package/src/__tests__/cluster-binner.unit.test.ts +35 -0
  308. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +12 -2
  309. package/src/__tests__/cube-camera-scheduler.unit.test.ts +70 -0
  310. package/src/__tests__/cube-camera-single-submit.perf.test.ts +75 -0
  311. package/src/__tests__/cube-camera-view-matrices.unit.test.ts +41 -0
  312. package/src/__tests__/cube-camera-vocabulary.unit.test.ts +47 -0
  313. package/src/__tests__/cube-camera.integration.test.ts +42 -0
  314. package/src/__tests__/detached-inspection.integration.test.ts +6 -0
  315. package/src/__tests__/device-feature-admission.unit.test.ts +85 -0
  316. package/src/__tests__/direct-light-snapshot.unit.test.ts +62 -6
  317. package/src/__tests__/docs-gate-green.unit.test.ts +38 -0
  318. package/src/__tests__/environment-generation.integration.test.ts +16 -0
  319. package/src/__tests__/evidence-identity.ts +13 -0
  320. package/src/__tests__/evidence-identity.unit.test.ts +24 -0
  321. package/src/__tests__/extended-lighting-recovery.browser.test.ts +14 -0
  322. package/src/__tests__/extended-lighting-recovery.dawn.test.ts +14 -0
  323. package/src/__tests__/extended-lighting-recovery.integration.test.ts +81 -0
  324. package/src/__tests__/extended-lighting-resources.unit.test.ts +51 -0
  325. package/src/__tests__/extended-lighting-zero-feature.integration.test.ts +52 -0
  326. package/src/__tests__/factory-contract.integration.test.ts +288 -29
  327. package/src/__tests__/fog-component.unit.test.ts +67 -0
  328. package/src/__tests__/fog.integration.test.ts +86 -0
  329. package/src/__tests__/frame-observation.contract.test.ts +15 -0
  330. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +37 -0
  331. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +146 -0
  332. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +10 -8
  333. package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +18 -1
  334. package/src/__tests__/gpu-driven-production.integration.test.ts +579 -17
  335. package/src/__tests__/gpu-driven-scaling.unit.test.ts +66 -2
  336. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +26 -1
  337. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +101 -6
  338. package/src/__tests__/gpu-driven-view.browser.test.ts +3 -3
  339. package/src/__tests__/gpu-driven-view.dawn.test.ts +3 -3
  340. package/src/__tests__/gpu-driven-view.unit.test.ts +50 -0
  341. package/src/__tests__/gpu-lod-evidence.ts +188 -0
  342. package/src/__tests__/gpu-lod-fallback.integration.test.ts +10 -0
  343. package/src/__tests__/gpu-lod-indirect.integration.test.ts +40 -0
  344. package/src/__tests__/gpu-lod-parity.dawn.test.ts +29 -0
  345. package/src/__tests__/gpu-lod-readiness.integration.test.ts +52 -0
  346. package/src/__tests__/gpu-lod-schema.unit.test.ts +66 -0
  347. package/src/__tests__/gpu-lod-selector.unit.test.ts +28 -0
  348. package/src/__tests__/gpu-lod-silhouette.browser.test.ts +13 -0
  349. package/src/__tests__/gpu-pass-timing-browser-runner.ts +281 -0
  350. package/src/__tests__/gpu-pass-timing-coexistence.integration.test.ts +80 -0
  351. package/src/__tests__/gpu-pass-timing-contract.unit.test.ts +243 -0
  352. package/src/__tests__/gpu-pass-timing-exact-zero.unit.test.ts +131 -0
  353. package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +230 -0
  354. package/src/__tests__/gpu-pass-timing-observation.unit.test.ts +233 -0
  355. package/src/__tests__/gpu-pass-timing-session.unit.test.ts +438 -0
  356. package/src/__tests__/gpu-pass-timing.browser.test.ts +26 -0
  357. package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +125 -0
  358. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +66 -1
  359. package/src/__tests__/gpu-scene.dawn.test.ts +8 -1
  360. package/src/__tests__/gpu-scene.unit.test.ts +49 -3
  361. package/src/__tests__/hdrp-group2-visibility.unit.test.ts +24 -0
  362. package/src/__tests__/instances-culling.integration.test.ts +94 -0
  363. package/src/__tests__/instances-derived-bounds.unit.test.ts +118 -0
  364. package/src/__tests__/light-buffer-layout.unit.test.ts +113 -3
  365. package/src/__tests__/light-inspection.unit.test.ts +55 -0
  366. package/src/__tests__/light-resource-error.unit.test.ts +43 -0
  367. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +109 -0
  368. package/src/__tests__/lod-bounds.unit.test.ts +42 -0
  369. package/src/__tests__/lod-cpu-lane.integration.test.ts +55 -0
  370. package/src/__tests__/lod-cpu-no-change.perf.test.ts +19 -0
  371. package/src/__tests__/lod-gpu-frame-timing.unit.test.ts +49 -0
  372. package/src/__tests__/lod-multi-view.integration.test.ts +63 -0
  373. package/src/__tests__/lod-occlusion-device-loss.integration.test.ts +27 -0
  374. package/src/__tests__/lod-occlusion-final-decision.integration.test.ts +47 -0
  375. package/src/__tests__/lod-occlusion-inspection.integration.test.ts +217 -0
  376. package/src/__tests__/lod-occlusion-inspection.schema.test-d.ts +14 -0
  377. package/src/__tests__/lod-occlusion-inspection.unit.test.ts +72 -0
  378. package/src/__tests__/lod-occlusion-visual-evidence.ts +91 -0
  379. package/src/__tests__/lod-occlusion.browser.test.ts +15 -0
  380. package/src/__tests__/lod-occlusion.dawn.test.ts +20 -0
  381. package/src/__tests__/lod-selector.profile.test.ts +35 -0
  382. package/src/__tests__/lod-selector.unit.test.ts +68 -0
  383. package/src/__tests__/lod-visibility-identity.unit.test.ts +198 -0
  384. package/src/__tests__/lod-visibility-lifecycle.integration.test.ts +132 -0
  385. package/src/__tests__/ltc-resources.unit.test.ts +32 -0
  386. package/src/__tests__/material-contract-inventory.unit.test.ts +17 -0
  387. package/src/__tests__/material-observation.integration.test.ts +101 -0
  388. package/src/__tests__/occlusion-confidence.unit.test.ts +168 -0
  389. package/src/__tests__/occlusion-invalidation.integration.test.ts +37 -0
  390. package/src/__tests__/occlusion-pass-routing.unit.test.ts +16 -0
  391. package/src/__tests__/occlusion-pass.dawn.test.ts +20 -0
  392. package/src/__tests__/occlusion-pass.integration.test.ts +43 -0
  393. package/src/__tests__/occlusion-pass.rhi-null.test.ts +22 -0
  394. package/src/__tests__/occlusion-query-pool.rhi-null.test.ts +21 -0
  395. package/src/__tests__/occlusion-query-pool.unit.test.ts +95 -0
  396. package/src/__tests__/occlusion-query-ticket.integration.test.ts +47 -0
  397. package/src/__tests__/occlusion-query.dawn.test.ts +16 -0
  398. package/src/__tests__/occlusion-query.evidence.ts +178 -0
  399. package/src/__tests__/occlusion-query.rhi-null.test.ts +31 -0
  400. package/src/__tests__/occlusion-runtime.unit.test.ts +120 -0
  401. package/src/__tests__/pbr-view-layout.unit.test.ts +16 -0
  402. package/src/__tests__/point-shadow-inspection.unit.test.ts +60 -0
  403. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +196 -0
  404. package/src/__tests__/probe-bindings.unit.test.ts +200 -0
  405. package/src/__tests__/probe-blend-numeric.unit.test.ts +67 -0
  406. package/src/__tests__/probe-blend-oracle.unit.test.ts +136 -0
  407. package/src/__tests__/probe-capacity.integration.test.ts +97 -0
  408. package/src/__tests__/probe-recovery.integration.test.ts +104 -0
  409. package/src/__tests__/probe-scene-dirty.integration.test.ts +211 -0
  410. package/src/__tests__/profiler-phase-catalog.test.ts +4 -1
  411. package/src/__tests__/profiler-phase-token.test.ts +1 -0
  412. package/src/__tests__/public-surface.test-d.ts +10 -0
  413. package/src/__tests__/rect-area-boundary.unit.test.ts +24 -0
  414. package/src/__tests__/reflection-fallback-graph.unit.test.ts +67 -0
  415. package/src/__tests__/reflection-fallback-inspection.unit.test.ts +77 -0
  416. package/src/__tests__/reflection-fallback-lifecycle.integration.test.ts +21 -0
  417. package/src/__tests__/reflection-fallback-projection.unit.test.ts +90 -0
  418. package/src/__tests__/reflection-fallback-source.unit.test.ts +32 -0
  419. package/src/__tests__/reflection-probe-authoring.unit.test.ts +71 -0
  420. package/src/__tests__/reflection-probe-filter.unit.test.ts +54 -0
  421. package/src/__tests__/reflection-probe-ibl-topology.unit.test.ts +45 -0
  422. package/src/__tests__/reflection-probe-owner-placement.unit.test.ts +39 -0
  423. package/src/__tests__/reflection-probe-pass-encode.integration.test.ts +101 -0
  424. package/src/__tests__/reflection-probe-performance.perf.test.ts +60 -0
  425. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +120 -0
  426. package/src/__tests__/reflection-probe-recovery.integration.test.ts +55 -0
  427. package/src/__tests__/reflection-probe-selection.unit.test.ts +46 -0
  428. package/src/__tests__/render-error-code-owner.test-d.ts +19 -3
  429. package/src/__tests__/render-feature-docs.unit.test.ts +12 -7
  430. package/src/__tests__/render-graph-fallback.integration.test.ts +24 -0
  431. package/src/__tests__/render-perf/extended-lighting.bench.test.ts +66 -0
  432. package/src/__tests__/render-scene-projection.unit.test.ts +447 -18
  433. package/src/__tests__/render-target-admission.unit.test.ts +80 -0
  434. package/src/__tests__/render-target-graph-projection.unit.test.ts +102 -0
  435. package/src/__tests__/render-target-inspection.unit.test.ts +52 -0
  436. package/src/__tests__/render-target-material-source.test-d.ts +30 -0
  437. package/src/__tests__/render-target-material-source.unit.test.ts +97 -0
  438. package/src/__tests__/render-target-owner-placement.unit.test.ts +203 -0
  439. package/src/__tests__/render-target-owner.unit.test.ts +122 -0
  440. package/src/__tests__/render-target-probe-soak.perf.test.ts +94 -0
  441. package/src/__tests__/render-target-public-schema.json +107 -0
  442. package/src/__tests__/render-target-public-schema.unit.test.ts +91 -0
  443. package/src/__tests__/render-target-public-surface.test-d.ts +83 -0
  444. package/src/__tests__/render-target-readback.integration.test.ts +90 -0
  445. package/src/__tests__/render-target-recovery.integration.test.ts +85 -0
  446. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +124 -0
  447. package/src/__tests__/renderer-lifecycle.integration.test.ts +14 -0
  448. package/src/__tests__/shader-stage-surface.unit.test.ts +19 -4
  449. package/src/__tests__/skin-motion-regression.unit.test.ts +154 -0
  450. package/src/__tests__/skinned-shadow-caster.test.ts +13 -4
  451. package/src/__tests__/spot-modifier-projection.unit.test.ts +70 -0
  452. package/src/__tests__/ssr-admission-matrix.integration.test.ts +206 -0
  453. package/src/__tests__/ssr-composition.unit.test.ts +46 -0
  454. package/src/__tests__/ssr-fallback-zero-work.bench.test.ts +94 -0
  455. package/src/__tests__/ssr-recovery-errors.unit.test.ts +58 -0
  456. package/src/__tests__/standard-cluster-capability.integration.test.ts +63 -0
  457. package/src/__tests__/standard-cluster-transport.unit.test.ts +121 -0
  458. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +299 -0
  459. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +15 -5
  460. package/src/__tests__/standard-lighting-inspection.integration.test.ts +138 -0
  461. package/src/__tests__/standard-lighting-ssot.unit.test.ts +18 -0
  462. package/src/__tests__/standard-lighting-write.unit.test.ts +441 -0
  463. package/src/__tests__/standard-lighting.integration.test.ts +67 -0
  464. package/src/__tests__/standard-pipeline.dawn.test.ts +206 -5
  465. package/src/__tests__/standard-pipeline.integration.test.ts +181 -150
  466. package/src/__tests__/standard-probe-binding.unit.test.ts +25 -0
  467. package/src/__tests__/standard-profile-oracle.unit.test.ts +23 -38
  468. package/src/__tests__/temporal-fallback-generation.integration.test.ts +16 -0
  469. package/src/__tests__/temporal-view.unit.test.ts +3 -3
  470. package/src/__tests__/transmission-prewarm.unit.test.ts +69 -0
  471. package/src/__tests__/typed-pipeline-topology.unit.test.ts +395 -14
  472. package/src/__tests__/urp-pipeline-targets.unit.test.ts +2 -2
  473. package/src/__tests__/visibility-budget.integration.test.ts +140 -0
  474. package/src/__tests__/visibility-budget.unit.test.ts +70 -0
  475. package/src/__tests__/visibility-extract.integration.test.ts +11 -6
  476. package/src/__tests__/visibility-resolver.unit.test.ts +15 -0
  477. package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +6 -3
  478. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +31 -28
  479. package/src/assembly/backend-contract.ts +13 -0
  480. package/src/assembly/device-feature-admission.ts +80 -0
  481. package/src/assembly/directional-shadow-inspection.ts +122 -0
  482. package/src/assembly/factory.ts +1411 -366
  483. package/src/assembly/host-contract.ts +35 -0
  484. package/src/assembly/render-target-host.ts +847 -0
  485. package/src/assets/asset-decoders.ts +1 -1
  486. package/src/assets/render-asset-port.ts +7 -1
  487. package/src/capture/cube-views.ts +69 -0
  488. package/src/capture/scheduler.ts +265 -0
  489. package/src/cluster-binner.ts +31 -0
  490. package/src/components/__tests__/lighting-authoring.unit.test.ts +39 -0
  491. package/src/components/__tests__/rect-area-light.unit.test.ts +33 -0
  492. package/src/components/__tests__/schema-contract.unit.test.ts +12 -0
  493. package/src/components/__tests__/schema-parity.unit.test.ts +9 -0
  494. package/src/components/camera.ts +4 -0
  495. package/src/components/cube-camera.ts +52 -0
  496. package/src/components/directional-light.ts +22 -2
  497. package/src/components/directional-shadow-filter.ts +57 -0
  498. package/src/components/index.ts +5 -0
  499. package/src/components/light-helpers.ts +133 -8
  500. package/src/components/light-probe.ts +13 -0
  501. package/src/components/rect-area-light.ts +15 -0
  502. package/src/components/reflection-probe.ts +49 -0
  503. package/src/components/scene-instance.ts +6 -0
  504. package/src/components/spot-light.ts +3 -0
  505. package/src/device/__tests__/extended-lighting-recovery.unit.test.ts +24 -0
  506. package/src/device/gpu-residency.ts +140 -9
  507. package/src/device/lifecycle-transaction.ts +12 -0
  508. package/src/environment/frame.ts +6 -24
  509. package/src/environment/lifecycle.ts +20 -1
  510. package/src/errors/gpu-driven.ts +92 -0
  511. package/src/errors/index.ts +1 -0
  512. package/src/errors/recover.ts +32 -0
  513. package/src/errors/render.ts +341 -143
  514. package/src/extract/camera.ts +3 -3
  515. package/src/extract/directional-shadow-projection.ts +61 -0
  516. package/src/extract/environment.ts +57 -0
  517. package/src/extract/gpu-driven.ts +108 -0
  518. package/src/extract/visibility.ts +2 -1
  519. package/src/features/fullscreen.ts +3 -0
  520. package/src/features/targets.ts +4 -1
  521. package/src/features/types.ts +10 -0
  522. package/src/fullscreen-post-process-pass.ts +43 -2
  523. package/src/gpu-driven/batch-topology.ts +207 -28
  524. package/src/gpu-driven/prepared-draw.ts +208 -0
  525. package/src/gpu-driven/production-raster.ts +953 -43
  526. package/src/gpu-driven/view-gpu.ts +411 -29
  527. package/src/gpu-scene-schema.ts +13 -0
  528. package/src/gpu-scene.ts +140 -64
  529. package/src/gpu-usage.ts +0 -1
  530. package/src/hdrp-buffers.ts +169 -63
  531. package/src/ibl/IblPipelineCache.ts +11 -0
  532. package/src/ibl/kernel-cache.ts +88 -0
  533. package/src/index.ts +222 -0
  534. package/src/inspection-types.ts +276 -1
  535. package/src/instances-derived-bounds.ts +171 -0
  536. package/src/internal.ts +38 -0
  537. package/src/light-buffer-layout.ts +155 -310
  538. package/src/materials.ts +16 -2
  539. package/src/mesh-material-bindings.ts +132 -0
  540. package/src/pbr-pipeline.ts +255 -60
  541. package/src/pipeline/standard-forward-lane.ts +93 -16
  542. package/src/pipeline/standard-lighting/errors.ts +6 -0
  543. package/src/pipeline/standard-lighting/graph.ts +158 -0
  544. package/src/pipeline/standard-lighting/inspection.ts +88 -0
  545. package/src/pipeline/standard-lighting/layout.ts +31 -0
  546. package/src/pipeline/standard-lighting/light-frame.ts +35 -0
  547. package/src/pipeline/standard-lighting/membership.ts +43 -0
  548. package/src/pipeline/standard-lighting/prepare.ts +37 -0
  549. package/src/pipeline/standard-lighting/topology.ts +120 -0
  550. package/src/pipeline/standard-lighting/transport.ts +78 -0
  551. package/src/pipeline/standard-pipeline.ts +124 -193
  552. package/src/pipeline/standard-post.ts +26 -7
  553. package/src/pipeline/standard-profile.ts +17 -47
  554. package/src/pipeline-builder.ts +5 -2
  555. package/src/pipeline-spec.ts +95 -21
  556. package/src/plugin.ts +4 -0
  557. package/src/point-shadow-inspection.ts +55 -0
  558. package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +56 -0
  559. package/src/prepare/extended-lighting/ltc-resources.ts +136 -0
  560. package/src/prepare/extended-lighting/resources.ts +389 -0
  561. package/src/prepare/extended-lighting/spot-modifiers.ts +194 -0
  562. package/src/prepare/extended-lighting/state.ts +92 -0
  563. package/src/record/__tests__/gpu-timing.unit.test.ts +177 -0
  564. package/src/record/__tests__/temporal-payload.unit.test.ts +64 -1
  565. package/src/record/__tests__/transparent-group2-selection.unit.test.ts +73 -0
  566. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +20 -1
  567. package/src/record/__tests__/view-ubo-layout.unit.test.ts +40 -0
  568. package/src/record/frame-lighting.ts +591 -452
  569. package/src/record/frame-snapshot.ts +92 -39
  570. package/src/record/frame-targets.ts +17 -0
  571. package/src/record/frame.ts +662 -158
  572. package/src/record/gpu-pass-timing/contract.ts +180 -0
  573. package/src/record/gpu-pass-timing/errors.ts +34 -0
  574. package/src/record/gpu-pass-timing/index.ts +37 -0
  575. package/src/record/gpu-pass-timing/parser.ts +97 -0
  576. package/src/record/gpu-pass-timing/session.ts +938 -0
  577. package/src/record/gpu-timing.ts +112 -39
  578. package/src/record/helpers.ts +0 -58
  579. package/src/record/main-pass-geometry.ts +324 -119
  580. package/src/record/main-pass-material.ts +103 -10
  581. package/src/record/main-pass-sprite-draws.ts +99 -103
  582. package/src/record/main-pass.ts +71 -15
  583. package/src/record/mesh-ssbo.ts +47 -36
  584. package/src/record/render-context.ts +136 -3
  585. package/src/record/shadow-pass.ts +83 -68
  586. package/src/record/skybox-post-pass.ts +20 -4
  587. package/src/record/typed-frame-graph.ts +1034 -43
  588. package/src/record/view-ubo.ts +72 -47
  589. package/src/reflection/filter.ts +81 -0
  590. package/src/reflection/gpu-table.ts +44 -0
  591. package/src/reflection/inspection.ts +67 -0
  592. package/src/reflection/projection.ts +476 -0
  593. package/src/reflection/record-owner.ts +1283 -0
  594. package/src/render-contract.ts +93 -10
  595. package/src/render-graph-primitives.ts +9 -4
  596. package/src/render-pipeline.ts +122 -2
  597. package/src/render-system-extract.ts +1041 -225
  598. package/src/render-system.ts +1310 -85
  599. package/src/renderer.ts +222 -0
  600. package/src/scene/__tests__/changed-block-summary.candidate.test.ts +36 -0
  601. package/src/scene/probe-blend-record.ts +54 -0
  602. package/src/scene/probe-blend.ts +813 -0
  603. package/src/scene/render-scene-types.ts +0 -7
  604. package/src/scene/render-scene.ts +942 -171
  605. package/src/scene/visibility/bounds.ts +57 -0
  606. package/src/scene/visibility/budget.ts +40 -0
  607. package/src/scene/visibility/facet.ts +400 -0
  608. package/src/scene/visibility/gpu-frame-timing.ts +101 -0
  609. package/src/scene/visibility/gpu-lod.ts +119 -0
  610. package/src/scene/visibility/inspection.ts +313 -0
  611. package/src/scene/visibility/lod-selector.ts +84 -0
  612. package/src/scene/visibility/occlusion-confidence.ts +478 -0
  613. package/src/scene/visibility/occlusion-pass.ts +165 -0
  614. package/src/scene/visibility/occlusion-query-pool.ts +178 -0
  615. package/src/scene/visibility/occlusion-runtime.ts +672 -0
  616. package/src/scene/visibility/types.ts +50 -0
  617. package/src/shadow-atlas.ts +5 -5
  618. package/src/ssao-buffers.ts +9 -2
  619. package/src/ssr/admission.ts +451 -0
  620. package/src/ssr/composition.ts +73 -0
  621. package/src/ssr/errors.ts +76 -0
  622. package/src/ssr/identity.ts +12 -0
  623. package/src/systems/skin-palette-allocator.ts +1 -1
  624. package/src/targets/contracts.ts +182 -0
  625. package/src/targets/graph-projection.ts +169 -0
  626. package/src/targets/material-source.ts +143 -0
  627. package/src/targets/owner.ts +214 -0
  628. package/src/targets/physical.ts +18 -0
  629. package/src/targets/readback.ts +153 -0
  630. package/src/temporal/frame-coordinator.ts +26 -0
  631. package/src/temporal/frame.ts +14 -1
  632. package/src/temporal/view.ts +11 -0
  633. package/src/tilemap-chunk-extract-system.ts +4 -4
  634. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +59 -20
  635. package/src/typed-render-graph-primitives.ts +53 -3
  636. package/src/typed-shadow-passes.ts +46 -40
  637. package/src/volume/passes.ts +61 -58
  638. package/dist/.tsbuildinfo +0 -1
  639. package/dist/chunk-4XINDLAY.mjs.map +0 -1
  640. package/dist/chunk-CDTWTHZR.mjs.map +0 -1
  641. package/dist/chunk-M2MP4ZOU.mjs +0 -73
  642. package/dist/chunk-M2MP4ZOU.mjs.map +0 -1
  643. package/dist/chunk-PCHBPYML.mjs.map +0 -1
  644. package/dist/chunk-TBQJOK2L.mjs.map +0 -1
  645. package/dist/chunk-VFPLTKCU.mjs.map +0 -1
@@ -1,18 +1,91 @@
1
1
  import type { RenderGraphBuilder, RenderGraphError } from '@forgeax/engine-render-graph';
2
- import type { BindGroupLayout, Result, RhiDevice, TextureFormat } from '@forgeax/engine-rhi';
2
+ import type { BindGroup, BindGroupLayout, Result, RhiDevice, TextureFormat } from '@forgeax/engine-rhi';
3
3
  import { RhiError } from '@forgeax/engine-rhi';
4
+ import type { MaterialShaderArtifact } from '@forgeax/engine-shader';
4
5
  import type { MeshGpuHandles } from '../device/gpu-residency';
5
6
  import type { GpuDrivenProductionInspection } from '../inspection-types';
6
7
  import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
8
+ import type { PipelineState } from '../record/render-context';
7
9
  import type { CameraSnapshot } from '../render-contract';
8
10
  import type { RenderPipelineFrame, RenderPipelineGpuDrivenProjection } from '../render-pipeline';
9
11
  import type { RenderableSnapshot } from '../render-system-extract';
10
12
  import type { PersistentGpuDrivenState } from '../scene/render-scene';
13
+ import type { OcclusionFrameProjection } from '../scene/visibility/occlusion-runtime';
14
+ import { type GpuDrivenLodSelectionInspection } from './view-gpu';
15
+ export interface StandardPbrSceneCandidate {
16
+ readonly primitiveIndex: number;
17
+ readonly world: Float32Array;
18
+ }
19
+ export interface StandardPbrSceneProjection {
20
+ readonly entryPoint: string;
21
+ readonly layoutIdentity: string;
22
+ readonly receiptGeneration: number;
23
+ /** Packed Mesh rows: mat4 + padded mat3 + previous mat4 + temporal vec4. */
24
+ readonly rows: Float32Array;
25
+ }
26
+ /**
27
+ * Build the producer-owned Standard PBR scene-index projection. The receipt is
28
+ * the only source of the vertex entry and layout identity; callers cannot
29
+ * silently fall back to the legacy GPU-driven shader ABI.
30
+ */
31
+ export declare function projectStandardPbrScene(input: {
32
+ readonly artifact: MaterialShaderArtifact;
33
+ readonly candidates: readonly StandardPbrSceneCandidate[];
34
+ }): {
35
+ readonly ok: true;
36
+ readonly value: StandardPbrSceneProjection;
37
+ } | {
38
+ readonly ok: false;
39
+ readonly error: {
40
+ readonly code: 'missing-material-receipt' | 'invalid-material-receipt';
41
+ };
42
+ };
43
+ export interface StandardPbrFrameResourceBinding {
44
+ readonly entryPoint: string;
45
+ readonly layoutIdentity: string;
46
+ readonly receiptGeneration: number;
47
+ readonly bindGroups: readonly [BindGroup, BindGroup, BindGroup, BindGroup];
48
+ readonly resourceSlots: NonNullable<MaterialShaderArtifact['receipt']>['resourceSlots'];
49
+ }
50
+ /**
51
+ * Adapt the frame's already-created Standard PBR groups to the GPU-driven
52
+ * scene-index draw. This deliberately accepts group handles rather than
53
+ * rebuilding layouts or shader artifacts; the receipt remains the binding
54
+ * contract and the regular frame producers remain the resource owners.
55
+ */
56
+ export declare function adaptStandardPbrFrameResources(input: {
57
+ readonly artifact: MaterialShaderArtifact;
58
+ readonly view: BindGroup;
59
+ readonly material: BindGroup;
60
+ readonly mesh: BindGroup;
61
+ readonly instances: BindGroup;
62
+ }): {
63
+ readonly ok: true;
64
+ readonly value: StandardPbrFrameResourceBinding;
65
+ } | {
66
+ readonly ok: false;
67
+ readonly error: {
68
+ readonly code: 'missing-material-receipt' | 'invalid-material-receipt';
69
+ };
70
+ };
11
71
  export declare const GPU_DRIVEN_RIGID_UNLIT_WGSL: string;
72
+ export interface GpuDrivenWorldLodSelectionInspection {
73
+ readonly worldKey: number;
74
+ readonly primitiveSlot: number;
75
+ readonly slotGeneration: number;
76
+ readonly candidateCount: number;
77
+ readonly visible: number;
78
+ readonly occluded: number;
79
+ readonly lodHistogram: readonly {
80
+ readonly level: number;
81
+ readonly count: number;
82
+ }[];
83
+ }
12
84
  export interface PreparedGpuDrivenFrame {
13
85
  readonly topologySignature: string;
14
86
  readonly entityKeys: ReadonlySet<number>;
15
87
  readonly ownsAllRenderables: boolean;
88
+ readonly occlusion?: OcclusionFrameProjection;
16
89
  /** @internal Commits a replacement generation only after graph promotion. */
17
90
  readonly _commitResourceReplacement: () => void;
18
91
  project(graph: RenderGraphBuilder<RenderPipelineFrame>, format: TextureFormat, sampleCount: 1 | 4): Result<RenderPipelineGpuDrivenProjection, RenderGraphError | RhiError>;
@@ -22,6 +95,7 @@ export declare class GpuDrivenProduction {
22
95
  private readonly shaderModuleFactory;
23
96
  private view;
24
97
  private raster;
98
+ private standardRaster;
25
99
  private readonly sceneIdentities;
26
100
  private nextSceneIdentity;
27
101
  private filteredCache;
@@ -31,6 +105,13 @@ export declare class GpuDrivenProduction {
31
105
  private batchBindGroupCreates;
32
106
  private validatedGpuOwnedRows;
33
107
  private cpuFallbackDrawItems;
108
+ private telemetryPrepared;
109
+ private telemetryCandidateCount;
110
+ private telemetryGeometryWork;
111
+ private telemetryRootGeometryWork;
112
+ private indirectDrawCount;
113
+ private sceneRowsRequired;
114
+ private standardPbrProjection;
34
115
  private signatureCache;
35
116
  constructor(device: RhiDevice, shaderModuleFactory: PipelineBuilderShaderModuleFactory);
36
117
  prepare(input: {
@@ -40,12 +121,26 @@ export declare class GpuDrivenProduction {
40
121
  readonly viewBindGroupLayout: BindGroupLayout;
41
122
  readonly meshResidencyEpoch: number;
42
123
  readonly hdrp: boolean;
124
+ /** Entity keys admitted by the persistent visibility facet for this view. */
125
+ readonly activeEntityKeys?: ReadonlySet<number>;
126
+ /** Collision-free renderer-owned revision for the active visibility set. */
127
+ readonly activeEntityRevision?: number;
128
+ /** Total extracted candidates, including facet-suppressed rows. */
129
+ readonly telemetryCandidateCount?: number;
130
+ readonly occlusion?: OcclusionFrameProjection;
131
+ /** Cooked producer artifact selected from the frame material catalog. */
132
+ readonly standardPbrArtifact?: MaterialShaderArtifact;
133
+ readonly standardPbrPipelineState?: PipelineState;
43
134
  }): Result<PreparedGpuDrivenFrame | undefined, RhiError>;
44
135
  dispose(): void;
136
+ /** Whether the current production topology can consume GPU Scene row updates. */
137
+ requiresSceneRows(): boolean;
45
138
  inspect(): GpuDrivenProductionInspection;
139
+ /** Read renderer-owned LOD counters copied by the last GPU submission. */
140
+ readLodSelection(): Promise<GpuDrivenLodSelectionInspection | undefined>;
46
141
  recordCpuValidation(validated: readonly {
47
142
  readonly source: RenderableSnapshot;
48
- }[], gpuOwned: ReadonlySet<number>): void;
143
+ }[], gpuOwned: ReadonlySet<number>, worldKeys?: readonly number[]): void;
49
144
  private sceneIdentity;
50
145
  }
51
146
  //# sourceMappingURL=production-raster.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"production-raster.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/production-raster.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAEV,eAAe,EAEf,MAAM,EACN,SAAS,EAET,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAO9D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAQtE,eAAO,MAAM,2BAA2B,QA0CvC,CAAC;AAsSF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,0BAA0B,EAAE,MAAM,IAAI,CAAC;IAChD,OAAO,CACL,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,CAAC,GAAG,CAAC,GACjB,MAAM,CAAC,iCAAiC,EAAE,gBAAgB,GAAG,QAAQ,CAAC,CAAC;CAC3E;AAED,qBAAa,mBAAmB;IA6B5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IA7BtC,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiC;IACjE,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAMP;IACd,OAAO,CAAC,6BAA6B,CAAK;IAC1C,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,cAAc,CAQR;gBAGK,MAAM,EAAE,SAAS,EACjB,mBAAmB,EAAE,kCAAkC;IAG1E,OAAO,CAAC,KAAK,EAAE;QACb,QAAQ,CAAC,KAAK,EAAE,wBAAwB,GAAG,SAAS,CAAC;QACrD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACrD,QAAQ,CAAC,mBAAmB,EAAE,eAAe,CAAC;QAC9C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;KACxB,GAAG,MAAM,CAAC,sBAAsB,GAAG,SAAS,EAAE,QAAQ,CAAC;IA2NxD,OAAO,IAAI,IAAI;IAQf,OAAO,IAAI,6BAA6B;IAiBxC,mBAAmB,CACjB,SAAS,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;KAAE,EAAE,EAC7D,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,IAAI;IASP,OAAO,CAAC,aAAa;CAQtB"}
1
+ {"version":3,"file":"production-raster.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/production-raster.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,13 @@ import { RhiError } from '@forgeax/engine-rhi';
5
5
  import type { GpuScene } from '../gpu-scene';
6
6
  import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
7
7
  import type { SubmissionPlan } from './batch-topology';
8
- export declare const GPU_DRIVEN_VIEW_WGSL = "\nstruct PrimitiveRecord {\n generation: u32,\n flags: u32,\n transformIndex: u32,\n materialIndex: u32,\n drawTemplateIndex: u32,\n instanceStart: u32,\n instanceCount: u32,\n assetHandle: u32,\n localBoundsMin: vec4<f32>,\n localBoundsMax: vec4<f32>,\n};\n\nstruct TransformRecord {\n currentWorld: mat4x4<f32>,\n previousWorld: mat4x4<f32>,\n};\n\nstruct CandidateRecord {\n primitiveIndex: u32,\n generation: u32,\n instanceOrdinal: u32,\n materialSlot: u32,\n batchIndex: u32,\n visibleBase: u32,\n visibleCapacity: u32,\n};\n\nstruct InstanceRecord {\n primitiveIndex: u32,\n transformIndex: u32,\n customDataStart: u32,\n flags: u32,\n};\n\nstruct BatchRecord {\n visibleBase: u32,\n visibleCapacity: u32,\n count: u32,\n first: u32,\n baseVertex: i32,\n indirectIndex: u32,\n indexed: u32,\n};\n\nstruct ViewConstants {\n planes: array<vec4<f32>, 6>,\n candidateCount: u32,\n batchCount: u32,\n pad0: u32,\n pad1: u32,\n};\n\n@group(0) @binding(0) var<storage, read> primitives: array<PrimitiveRecord>;\n@group(0) @binding(1) var<storage, read> instances: array<InstanceRecord>;\n@group(0) @binding(2) var<storage, read> transforms: array<TransformRecord>;\n@group(0) @binding(3) var<storage, read> candidates: array<CandidateRecord>;\n@group(0) @binding(4) var<storage, read> batches: array<BatchRecord>;\n@group(0) @binding(5) var<uniform> view: ViewConstants;\n@group(0) @binding(6) var<storage, read_write> counters: array<atomic<u32>>;\n@group(0) @binding(7) var<storage, read_write> visibleIndices: array<vec2<u32>>;\n@group(0) @binding(8) var<storage, read_write> indirectArgs: array<u32>;\n\nfn counterIndex(batchIndex: u32) -> u32 { return batchIndex * 2u; }\nfn overflowIndex(batchIndex: u32) -> u32 { return batchIndex * 2u + 1u; }\n\nfn isVisible(primitive: PrimitiveRecord, world: mat4x4<f32>) -> bool {\n if ((primitive.flags & 7u) != 7u) { return false; }\n let localCenter = (primitive.localBoundsMin.xyz + primitive.localBoundsMax.xyz) * 0.5;\n let localExtent = (primitive.localBoundsMax.xyz - primitive.localBoundsMin.xyz) * 0.5;\n let worldCenter = (world * vec4<f32>(localCenter, 1.0)).xyz;\n let worldExtent =\n abs(world[0].xyz) * localExtent.x +\n abs(world[1].xyz) * localExtent.y +\n abs(world[2].xyz) * localExtent.z;\n for (var planeIndex = 0u; planeIndex < 6u; planeIndex += 1u) {\n let plane = view.planes[planeIndex];\n let radius = dot(abs(plane.xyz), worldExtent);\n if (dot(plane.xyz, worldCenter) + plane.w < -radius) { return false; }\n }\n return true;\n}\n\n@compute @workgroup_size(64)\nfn resetView(@builtin(global_invocation_id) id: vec3<u32>) {\n let batchIndex = id.x;\n if (batchIndex >= view.batchCount) { return; }\n atomicStore(&counters[counterIndex(batchIndex)], 0u);\n atomicStore(&counters[overflowIndex(batchIndex)], 0u);\n}\n\n@compute @workgroup_size(64)\nfn cullView(@builtin(global_invocation_id) id: vec3<u32>) {\n let candidateIndex = id.x;\n if (candidateIndex >= view.candidateCount) { return; }\n let candidate = candidates[candidateIndex];\n let primitive = primitives[candidate.primitiveIndex];\n if (primitive.generation != candidate.generation) { return; }\n if (candidate.instanceOrdinal >= primitive.instanceCount) { return; }\n let instanceIndex = primitive.instanceStart + candidate.instanceOrdinal;\n let instance = instances[instanceIndex];\n let world = transforms[primitive.transformIndex].currentWorld * transforms[instance.transformIndex].currentWorld;\n if (!isVisible(primitive, world)) { return; }\n let localVisible = atomicAdd(&counters[counterIndex(candidate.batchIndex)], 1u);\n if (localVisible >= candidate.visibleCapacity) {\n atomicStore(&counters[overflowIndex(candidate.batchIndex)], 1u);\n return;\n }\n visibleIndices[candidate.visibleBase + localVisible] = vec2<u32>(\n instanceIndex,\n primitive.materialIndex + candidate.materialSlot,\n );\n}\n\n@compute @workgroup_size(64)\nfn finalizeView(@builtin(global_invocation_id) id: vec3<u32>) {\n let batchIndex = id.x;\n if (batchIndex >= view.batchCount) { return; }\n let batch = batches[batchIndex];\n let visibleCount = min(\n atomicLoad(&counters[counterIndex(batchIndex)]),\n batch.visibleCapacity,\n );\n let args = batch.indirectIndex * 5u;\n indirectArgs[args] = batch.count;\n indirectArgs[args + 1u] = visibleCount;\n indirectArgs[args + 2u] = batch.first;\n indirectArgs[args + 3u] = select(0u, bitcast<u32>(batch.baseVertex), batch.indexed != 0u);\n indirectArgs[args + 4u] = 0u;\n}\n";
8
+ export type GpuLodLane = 'gpu' | 'cpu';
9
+ export declare function selectGpuLodLane(caps: {
10
+ readonly compute: boolean;
11
+ readonly storageBuffer: boolean;
12
+ readonly indirectDrawing: boolean;
13
+ }): GpuLodLane;
14
+ export declare const GPU_DRIVEN_VIEW_WGSL = "\nstruct PrimitiveRecord {\n generation: u32,\n flags: u32,\n transformIndex: u32,\n materialIndex: u32,\n drawTemplateIndex: u32,\n instanceStart: u32,\n instanceCount: u32,\n assetHandle: u32,\n localBoundsMin: vec4<f32>,\n localBoundsMax: vec4<f32>,\n};\n\nstruct TransformRecord {\n currentWorld: mat4x4<f32>,\n previousWorld: mat4x4<f32>,\n};\n\nstruct LodRecord {\n generation: u32,\n level: u32,\n firstIndex: u32,\n indexCount: u32,\n baseVertex: i32,\n screenCoverage: f32,\n hysteresis: f32,\n ready: u32,\n};\n\nstruct CandidateRecord {\n primitiveIndex: u32,\n generation: u32,\n instanceOrdinal: u32,\n materialSlot: u32,\n batchIndex: u32,\n visibleBase: u32,\n visibleCapacity: u32,\n // Admission is separate from selector membership: suppressed candidates\n // still contribute to the all-candidate LOD histogram, but never enter the\n // compacted visible stream.\n submitAdmission: u32,\n projectedHeight: f32,\n previousLevel: u32,\n historyValid: u32,\n lodCount: u32,\n lodRows: array<LodRecord, 8>,\n};\n\nstruct InstanceRecord {\n primitiveIndex: u32,\n transformIndex: u32,\n customDataStart: u32,\n flags: u32,\n};\n\nstruct BatchRecord {\n visibleBase: u32,\n visibleCapacity: u32,\n count: u32,\n first: u32,\n baseVertex: i32,\n indirectIndex: u32,\n indexed: u32,\n candidateBase: u32,\n};\n\nstruct ViewConstants {\n planes: array<vec4<f32>, 6>,\n candidateCount: u32,\n batchCount: u32,\n pad0: u32,\n pad1: u32,\n};\n\nfn selectLodLevel(\n projectedHeight: f32,\n previousLevel: u32,\n historyValid: bool,\n rows: array<LodRecord, 8>,\n levelCount: u32,\n) -> u32 {\n // Row zero is the implicit root and has no transition threshold. Lower\n // levels carry the absolute boundary that introduces the preceding row.\n // This mirrors the CPU selector: height >= rows[1] selects root, height\n // between rows[2] and rows[1] selects level 1, and so on.\n var selected = levelCount - 1u;\n for (var level = 1u; level < levelCount; level += 1u) {\n if (projectedHeight >= rows[level].screenCoverage) {\n selected = level - 1u;\n break;\n }\n }\n if (historyValid && previousLevel < levelCount && selected != previousLevel) {\n var boundary = rows[previousLevel + 1u].screenCoverage;\n if (selected < previousLevel) { boundary = rows[previousLevel].screenCoverage; }\n let band = boundary * rows[previousLevel].hysteresis;\n if (abs(projectedHeight - boundary) <= band) { selected = previousLevel; }\n }\n if (selected >= levelCount || rows[selected].ready == 0u) { return 0u; }\n return selected;\n}\n\n@group(0) @binding(0) var<storage, read> primitives: array<PrimitiveRecord>;\n@group(0) @binding(1) var<storage, read> instances: array<InstanceRecord>;\n@group(0) @binding(2) var<storage, read> transforms: array<TransformRecord>;\n@group(0) @binding(3) var<storage, read> candidates: array<CandidateRecord>;\n@group(0) @binding(4) var<storage, read> batches: array<BatchRecord>;\n@group(0) @binding(5) var<uniform> view: ViewConstants;\n@group(0) @binding(6) var<storage, read_write> counters: array<atomic<u32>>;\n@group(0) @binding(7) var<storage, read_write> visibleIndices: array<vec2<u32>>;\n@group(0) @binding(8) var<storage, read_write> indirectArgs: array<u32>;\n\nfn counterIndex(batchIndex: u32) -> u32 { return batchIndex * 12u; }\nfn overflowIndex(batchIndex: u32) -> u32 { return counterIndex(batchIndex) + 1u; }\nfn lodCounterIndex(batchIndex: u32, level: u32) -> u32 {\n return counterIndex(batchIndex) + 2u + level;\n}\n\nfn isVisible(primitive: PrimitiveRecord, world: mat4x4<f32>) -> bool {\n // GPU Scene bounds are optional. A producer that has not published local\n // bounds still belongs in the GPU lane; keep it conservatively visible\n // instead of silently dropping a valid draw.\n if ((primitive.flags & 5u) != 5u) { return false; }\n if ((primitive.flags & 2u) == 0u) { return true; }\n let localCenter = (primitive.localBoundsMin.xyz + primitive.localBoundsMax.xyz) * 0.5;\n let localExtent = (primitive.localBoundsMax.xyz - primitive.localBoundsMin.xyz) * 0.5;\n let worldCenter = (world * vec4<f32>(localCenter, 1.0)).xyz;\n let worldExtent =\n abs(world[0].xyz) * localExtent.x +\n abs(world[1].xyz) * localExtent.y +\n abs(world[2].xyz) * localExtent.z;\n for (var planeIndex = 0u; planeIndex < 6u; planeIndex += 1u) {\n let plane = view.planes[planeIndex];\n let radius = dot(abs(plane.xyz), worldExtent);\n if (dot(plane.xyz, worldCenter) + plane.w < -radius) { return false; }\n }\n return true;\n}\n\n@compute @workgroup_size(64)\nfn resetView(@builtin(global_invocation_id) id: vec3<u32>) {\n let batchIndex = id.x;\n if (batchIndex >= view.batchCount) { return; }\n atomicStore(&counters[counterIndex(batchIndex)], 0u);\n atomicStore(&counters[overflowIndex(batchIndex)], 0u);\n for (var level = 0u; level < 8u; level += 1u) {\n atomicStore(&counters[lodCounterIndex(batchIndex, level)], 0u);\n }\n atomicStore(&counters[counterIndex(batchIndex) + 10u], 0u);\n atomicStore(&counters[counterIndex(batchIndex) + 11u], 0u);\n}\n\n@compute @workgroup_size(64)\nfn cullView(@builtin(global_invocation_id) id: vec3<u32>) {\n let candidateIndex = id.x;\n if (candidateIndex >= view.candidateCount) { return; }\n let candidate = candidates[candidateIndex];\n let primitive = primitives[candidate.primitiveIndex];\n if (primitive.generation != candidate.generation) { return; }\n if (candidate.instanceOrdinal >= primitive.instanceCount) { return; }\n let instanceIndex = primitive.instanceStart + candidate.instanceOrdinal;\n let instance = instances[instanceIndex];\n let world = transforms[primitive.transformIndex].currentWorld * transforms[instance.transformIndex].currentWorld;\n let selectedLod = selectLodLevel(\n candidate.projectedHeight,\n candidate.previousLevel,\n candidate.historyValid != 0u,\n candidate.lodRows,\n candidate.lodCount,\n );\n if (candidate.lodRows[selectedLod].ready == 0u) { return; }\n // Selector counters describe the complete LOD population, including\n // candidates outside the frustum and candidates suppressed by the CPU\n // visibility facet. Submission counters below remain compacted draw facts.\n atomicAdd(&counters[lodCounterIndex(candidate.batchIndex, selectedLod)], 1u);\n if (candidate.submitAdmission == 0u) { return; }\n if (!isVisible(primitive, world)) { return; }\n atomicAdd(\n &counters[counterIndex(candidate.batchIndex) + 10u],\n candidate.lodRows[selectedLod].indexCount,\n );\n atomicAdd(\n &counters[counterIndex(candidate.batchIndex) + 11u],\n candidate.lodRows[0u].indexCount,\n );\n let localVisible = atomicAdd(&counters[counterIndex(candidate.batchIndex)], 1u);\n if (localVisible >= candidate.visibleCapacity) {\n atomicStore(&counters[overflowIndex(candidate.batchIndex)], 1u);\n return;\n }\n visibleIndices[candidate.visibleBase + localVisible] = vec2<u32>(\n instanceIndex,\n primitive.materialIndex + candidate.materialSlot,\n );\n}\n\n@compute @workgroup_size(64)\nfn finalizeView(@builtin(global_invocation_id) id: vec3<u32>) {\n let batchIndex = id.x;\n if (batchIndex >= view.batchCount) { return; }\n let batch = batches[batchIndex];\n let visibleCount = min(\n atomicLoad(&counters[counterIndex(batchIndex)]),\n batch.visibleCapacity,\n );\n let args = batch.indirectIndex * 5u;\n let candidate = candidates[batch.candidateBase];\n let selectedLod = selectLodLevel(candidate.projectedHeight, candidate.previousLevel, candidate.historyValid != 0u, candidate.lodRows, candidate.lodCount);\n let lod = candidate.lodRows[selectedLod];\n indirectArgs[args] = select(batch.count, lod.indexCount, candidate.lodCount > 0u);\n indirectArgs[args + 1u] = visibleCount;\n indirectArgs[args + 2u] = select(batch.first, lod.firstIndex, candidate.lodCount > 0u && batch.indexed != 0u);\n indirectArgs[args + 3u] = select(0u, bitcast<u32>(lod.baseVertex), candidate.lodCount > 0u && batch.indexed != 0u);\n indirectArgs[args + 4u] = 0u;\n}\n";
9
15
  export interface GpuDrivenViewGraphResources {
10
16
  readonly primitive: GraphBuffer;
11
17
  readonly instance: GraphBuffer;
@@ -21,6 +27,8 @@ export interface GpuDrivenViewInspection {
21
27
  readonly batchCount: number;
22
28
  readonly visibleCapacity: number;
23
29
  readonly candidateCapacity: number;
30
+ /** Allocated visible-index capacity; distinct from logical candidates. */
31
+ readonly visibleBufferCapacity: number;
24
32
  readonly batchCapacity: number;
25
33
  readonly indirectCapacity: number;
26
34
  readonly updateCount: number;
@@ -32,6 +40,55 @@ export interface GpuDrivenViewInspection {
32
40
  readonly bufferRebuilds: number;
33
41
  readonly resourceGeneration: number;
34
42
  }
43
+ export interface GpuDrivenViewBufferCapacities {
44
+ readonly candidate: number;
45
+ readonly visible: number;
46
+ readonly batch: number;
47
+ readonly indirect: number;
48
+ }
49
+ export interface GpuDrivenLodSelectionInspection {
50
+ readonly candidateCount: number;
51
+ readonly batchCount: number;
52
+ readonly indirectDrawCount: number;
53
+ readonly visible: number;
54
+ readonly occluded: number;
55
+ readonly lodHistogram: readonly {
56
+ readonly level: number;
57
+ readonly count: number;
58
+ }[];
59
+ readonly batches: readonly {
60
+ readonly batchId: number;
61
+ readonly candidateCount: number;
62
+ readonly visible: number;
63
+ readonly occluded: number;
64
+ readonly lodHistogram: readonly {
65
+ readonly level: number;
66
+ readonly count: number;
67
+ }[];
68
+ }[];
69
+ readonly worldSelections?: readonly {
70
+ readonly worldKey: number;
71
+ readonly primitiveSlot: number;
72
+ readonly slotGeneration: number;
73
+ readonly candidateCount: number;
74
+ readonly visible: number;
75
+ readonly occluded: number;
76
+ readonly lodHistogram: readonly {
77
+ readonly level: number;
78
+ readonly count: number;
79
+ }[];
80
+ }[];
81
+ readonly geometryWork: number;
82
+ readonly rootGeometryWork: number;
83
+ }
84
+ /**
85
+ * Derive each GPU-driven allocation from its own logical capacity domain.
86
+ * Candidate records are dense; visible indices use the sparse, 64-entry
87
+ * aligned ranges assigned by BatchTopology. Keeping these values separate is
88
+ * what makes a large LOD candidate set bounded instead of multiplying the
89
+ * candidate record and inline LOD-row buffers by the visible address space.
90
+ */
91
+ export declare function deriveGpuDrivenViewBufferCapacities(plan: Pick<SubmissionPlan, 'candidateCount' | 'visibleCapacity' | 'batches'>): GpuDrivenViewBufferCapacities;
35
92
  export declare class GpuDrivenView {
36
93
  private readonly device;
37
94
  private readonly bindGroupLayout;
@@ -43,6 +100,7 @@ export declare class GpuDrivenView {
43
100
  private supersededBuffers;
44
101
  private bindGroup;
45
102
  private candidateCapacity;
103
+ private visibleBufferCapacity;
46
104
  private batchCapacity;
47
105
  private indirectCapacity;
48
106
  private plan;
@@ -59,6 +117,8 @@ export declare class GpuDrivenView {
59
117
  private bindGroupCreates;
60
118
  private bufferRebuilds;
61
119
  private resourceGeneration;
120
+ private telemetryPending;
121
+ private lodSelection;
62
122
  private constructor();
63
123
  static create(input: {
64
124
  readonly device: RhiDevice;
@@ -70,6 +130,8 @@ export declare class GpuDrivenView {
70
130
  get indirectBuffer(): Buffer | undefined;
71
131
  get overflowBuffer(): Buffer | undefined;
72
132
  get overflowByteOffset(): number;
133
+ /** Read selected levels written by the GPU cull pass for the last submit. */
134
+ readLodSelection(): Promise<GpuDrivenLodSelectionInspection | undefined>;
73
135
  addPasses<FrameCtx extends RenderGraphFrame>(builder: RenderGraphBuilder<FrameCtx>): Result<GpuDrivenViewGraphResources, RenderGraphError>;
74
136
  dispose(): void;
75
137
  /**
@@ -82,4 +144,5 @@ export declare class GpuDrivenView {
82
144
  private rebuildBuffers;
83
145
  private destroyAfterSubmittedWork;
84
146
  }
147
+ export { decideVisibility } from '../scene/visibility/occlusion-confidence';
85
148
  //# sourceMappingURL=view-gpu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"view-gpu.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/view-gpu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAGV,MAAM,EAGN,MAAM,EACN,SAAS,EACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAS7C,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAQvD,eAAO,MAAM,oBAAoB,88IAmIhC,CAAC;AAaF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAaD,qBAAa,aAAa;IAuBtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IA3BnC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,wBAAwB,CAAK;IACrC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO;IASP,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;QAC3B,QAAQ,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;KAClE,GAAG,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC;IA4DnC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAsH3F,OAAO,IAAI,uBAAuB;IAoBlC,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAI,cAAc,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED,IAAI,cAAc,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,SAAS,CAAC,QAAQ,SAAS,gBAAgB,EACzC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GACpC,MAAM,CAAC,2BAA2B,EAAE,gBAAgB,CAAC;IAiJxD,OAAO,IAAI,IAAI;IAkBf;;;;;OAKG;IACH,0BAA0B,IAAI,IAAI;IAOlC,OAAO,CAAC,cAAc;IAgDtB,OAAO,CAAC,yBAAyB;CAWlC"}
1
+ {"version":3,"file":"view-gpu.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/view-gpu.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,19 @@ export declare function deriveGpuSceneTableLayout(schema: GpuSceneTableSchema):
22
22
  export declare function gpuSceneFieldOffset(layout: GpuSceneTableLayout, name: string): number;
23
23
  export declare function gpuSceneWgsl(layout: GpuSceneTableLayout): string;
24
24
  export declare const GPU_SCENE_SCHEMAS: Readonly<{
25
+ lod: {
26
+ name: string;
27
+ fields: ({
28
+ name: string;
29
+ type: "u32";
30
+ } | {
31
+ name: string;
32
+ type: "i32";
33
+ } | {
34
+ name: string;
35
+ type: "f32";
36
+ })[];
37
+ };
25
38
  primitive: {
26
39
  name: string;
27
40
  fields: ({
@@ -68,6 +81,7 @@ export declare const GPU_SCENE_SCHEMAS: Readonly<{
68
81
  };
69
82
  }>;
70
83
  export declare const GPU_SCENE_LAYOUTS: Readonly<{
84
+ readonly lod: GpuSceneTableLayout;
71
85
  readonly primitive: GpuSceneTableLayout;
72
86
  readonly instance: GpuSceneTableLayout;
73
87
  readonly transform: GpuSceneTableLayout;
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-scene-schema.d.ts","sourceRoot":"","sources":["../src/gpu-scene-schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACjD;AAgBD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAY1F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAGhE;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0D4B,CAAC;AAE3D,eAAO,MAAM,iBAAiB;;;;;;EAS7B,CAAC;AAEF,eAAO,MAAM,cAAc,QAAkE,CAAC"}
1
+ {"version":3,"file":"gpu-scene-schema.d.ts","sourceRoot":"","sources":["../src/gpu-scene-schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACjD;AAgBD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAY1F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAGhE;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuE4B,CAAC;AAE3D,eAAO,MAAM,iBAAiB;;;;;;;EAS7B,CAAC;AAEF,eAAO,MAAM,cAAc,QAAkE,CAAC"}
@@ -21,6 +21,8 @@ export declare class GpuScene {
21
21
  private readonly device;
22
22
  private capacity;
23
23
  private tableBytes;
24
+ private transformBytes;
25
+ private transformView;
24
26
  private buffers;
25
27
  private uploadRanges;
26
28
  private uploadBytes;
@@ -28,11 +30,13 @@ export declare class GpuScene {
28
30
  private fullRebuilds;
29
31
  private clearedSlots;
30
32
  private noChangeFrames;
33
+ private identityUploaded;
31
34
  private readonly allocations;
32
35
  private readonly instances;
33
36
  private readonly transforms;
34
37
  private readonly draws;
35
38
  private readonly materials;
39
+ private readonly writesByTable;
36
40
  private constructor();
37
41
  static create(device: RhiDevice, initialCapacity?: number): Result<GpuSceneAvailability, RhiError>;
38
42
  get primitiveBuffer(): Buffer;
@@ -42,16 +46,19 @@ export declare class GpuScene {
42
46
  get materialBuffer(): Buffer;
43
47
  sync(delta: RenderSceneApplyResult): Result<GpuSceneSyncResult, RhiError>;
44
48
  /** Publish current transforms as previous only after a successful submit. */
45
- commitTemporalFrame(): Result<void, RhiError>;
49
+ commitTemporalFrame(enabled?: boolean): Result<void, RhiError>;
46
50
  rebuild(slots: readonly RenderSceneSlot[]): Result<GpuSceneSyncResult, RhiError>;
47
51
  inspect(): GpuSceneInspection;
48
52
  dispose(): void;
49
53
  private writeSlot;
54
+ private writeRootTransform;
50
55
  private clearSlot;
51
56
  private uploadRows;
52
57
  private ensureAllocation;
53
58
  private clearAllocation;
54
59
  private grow;
55
60
  private allocateCpuTables;
61
+ private refreshTransformViews;
62
+ private writeIdentityTransform;
56
63
  }
57
64
  //# sourceMappingURL=gpu-scene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-scene.d.ts","sourceRoot":"","sources":["../src/gpu-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAWxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE1F,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0F7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AA8EtF,yEAAyE;AACzE,qBAAa,QAAQ;IAgBjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ;IAhBlB,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IAExD,OAAO;IASP,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,SAAM,GAAG,MAAM,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IAa/F,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IA8CzE,6EAA6E;IAC7E,mBAAmB,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAuB7C,OAAO,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IA2ChF,OAAO,IAAI,kBAAkB;IAkC7B,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,SAAS;IAgMjB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,eAAe;IA8CvB,OAAO,CAAC,IAAI;IA+BZ,OAAO,CAAC,iBAAiB;CAS1B"}
1
+ {"version":3,"file":"gpu-scene.d.ts","sourceRoot":"","sources":["../src/gpu-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAWxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE1F,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA4F7D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAqFtF,yEAAyE;AACzE,qBAAa,QAAQ;IA0BjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ;IA1BlB,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAM5B;IAEF,OAAO;IAaP,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,SAAM,GAAG,MAAM,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IAa/F,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IAuDzE,6EAA6E;IAC7E,mBAAmB,CAAC,OAAO,UAAO,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAyB3D,OAAO,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IA6ChF,OAAO,IAAI,kBAAkB;IAkC7B,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,SAAS;IA2LjB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,eAAe;IAgDvB,OAAO,CAAC,IAAI;IAgCZ,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,sBAAsB;CAI/B"}
@@ -6,6 +6,5 @@ export declare const GPU_BUFFER_USAGE_UNIFORM = 64;
6
6
  export declare const GPU_BUFFER_USAGE_STORAGE = 128;
7
7
  export declare const GPU_BUFFER_USAGE_INDIRECT = 256;
8
8
  export declare const GPU_BUFFER_USAGE_MAP_READ = 1;
9
- /** GPUBufferUsage.QUERY_RESOLVE, used by optional timestamp captures. */
10
9
  export declare const GPU_BUFFER_USAGE_QUERY_RESOLVE = 512;
11
10
  //# sourceMappingURL=gpu-usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-usage.d.ts","sourceRoot":"","sources":["../src/gpu-usage.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,KAAO,CAAC;AAC5C,eAAO,MAAM,sBAAsB,KAAO,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAC9C,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAC9C,eAAO,MAAM,wBAAwB,KAAO,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAO,CAAC;AAC7C,eAAO,MAAM,yBAAyB,MAAQ,CAAC;AAC/C,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAC9C,yEAAyE;AACzE,eAAO,MAAM,8BAA8B,MAAQ,CAAC"}
1
+ {"version":3,"file":"gpu-usage.d.ts","sourceRoot":"","sources":["../src/gpu-usage.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,KAAO,CAAC;AAC5C,eAAO,MAAM,sBAAsB,KAAO,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAC9C,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAC9C,eAAO,MAAM,wBAAwB,KAAO,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAO,CAAC;AAC7C,eAAO,MAAM,yBAAyB,MAAQ,CAAC;AAC/C,eAAO,MAAM,yBAAyB,IAAO,CAAC;AAC9C,eAAO,MAAM,8BAA8B,MAAQ,CAAC"}
@@ -1,21 +1,14 @@
1
1
  import { type BindGroup, type BindGroupLayout, type BindGroupLayoutDescriptor, type Buffer, RhiError, type TextureView } from '@forgeax/engine-rhi';
2
2
  import type { RenderSystemRuntime } from './record/render-context';
3
3
  export { getOrCreateSsaoFallbackTexture } from './ssao-buffers';
4
- /**
5
- * WebGL2 HDRP downlevel light-list capacity. 128 x 64 B = 8 KiB, below the
6
- * WebGL2 minimum uniform-buffer binding size of 16 KiB. The storage path
7
- * keeps the full MAX_LIGHTS budget; the uniform path uses the same LightSlot
8
- * POD and only changes the transport.
9
- */
10
- export declare const HDRP_UNIFORM_LIGHT_CAPACITY = 128;
11
4
  /** Bind-group layout used only by the WebGPU cluster membership producer. */
12
5
  export declare function createHdrpClusterMembershipBindGroupLayoutDescriptor(): BindGroupLayoutDescriptor;
13
6
  /**
14
7
  * The persistent HDRP GPU buffers (plan D-1, BGL slot 3..6) plus the unified
15
8
  * BGL layout for group(2) (plan D-6, feat-20260609-hdrp-cluster-fragment-ggx M3).
16
9
  *
17
- * AC-11: light_data stride = `BYTES_PER_LIGHT_SLOT` = 64 (double-sided lock with
18
- * WGSL hdrp-cluster-forward.wgsl LightSlot).
10
+ * AC-11: light_data stride = `BYTES_PER_DIRECT_LIGHT_SLOT` = 80 (double-sided
11
+ * lock with WGSL hdrp-cluster-forward.wgsl DirectLightSlot).
19
12
  * AC-13: 4 distinct RHI Buffer handles, ready for slot-3..6 BGL binding.
20
13
  * AC-14: clusterUniform is a uniform buffer (not storage); runtime grid change
21
14
  * is a writeBuffer field update, not a PSO rebuild.
@@ -23,9 +16,9 @@ export declare function createHdrpClusterMembershipBindGroupLayoutDescriptor():
23
16
  * cluster 4 buffer).
24
17
  */
25
18
  export interface HdrpBuffers {
26
- /** Whether bindings 3..5 carry storage buffers or uniform-buffer fallback data. */
27
- readonly storageBuffer: boolean;
28
- /** light_data -- 256 x 64 B on storage, 128 x 64 B on uniform fallback. */
19
+ /** Device identity that owns every handle in this bundle. */
20
+ readonly device: RenderSystemRuntime['device'];
21
+ /** light_data -- the full 256 x 80 B DirectLightSlot budget. */
29
22
  readonly lightDataBuffer: Buffer;
30
23
  readonly lightDataBytes: number;
31
24
  /** cluster_grid SSBO -- gridX*gridY*gridZ * 2 u32, BGL slot 4. */
@@ -58,23 +51,30 @@ export interface HdrpBuffers {
58
51
  * pipeline disable (charter P3 explicit failure).
59
52
  *
60
53
  * `grid` defaults to `DEFAULT_CLUSTER_GRID` when undefined (matches the M5
61
- * record-stage default). The buffers are sized at the *first* call's grid; a
62
- * later install with a different grid keeps the existing allocation as long as
63
- * it has enough capacity (gridX*gridY*gridZ <= cached.grid product). Different
64
- * grids that exceed capacity are not currently re-allocated -- M-future.
54
+ * record-stage default). A smaller grid reuses the existing capacity. When a
55
+ * later install requests a larger grid, this owner allocates a complete new
56
+ * bundle, publishes it atomically, and retires the previous bundle after the
57
+ * device queue fence so graph and bind-group caches never observe a partially
58
+ * replaced resource set.
65
59
  */
66
60
  export declare function getOrCreateHdrpBuffers(runtime: RenderSystemRuntime, grid?: {
67
61
  x: number;
68
62
  y: number;
69
63
  z: number;
70
64
  }): HdrpBuffers | null;
65
+ /**
66
+ * Drop the cached bundle before a device recovery or renderer disposal. The
67
+ * bundle carries the old device identity, so retirement fences that device's
68
+ * queue instead of consulting the replacement runtime device.
69
+ */
70
+ export declare function resetHdrpBuffers(runtime: RenderSystemRuntime): void;
71
71
  /**
72
72
  * Build the 8-float cluster_uniform std140 payload.
73
73
  *
74
74
  * [0] gridX u32 (cast in shader)
75
75
  * [1] gridY u32
76
76
  * [2] gridZ u32
77
- * [3] lightCount u32 (vec4 alignment; capped by the active transport)
77
+ * [3] lightCount u32 (vec4 alignment; capped by MAX_LIGHTS)
78
78
  * [4] near f32
79
79
  * [5] far f32
80
80
  * [6] logFarOverNear f32
@@ -93,7 +93,7 @@ export declare function packClusterUniform(grid: {
93
93
  x: number;
94
94
  y: number;
95
95
  z: number;
96
- }, near: number, far: number, ssaoIntensity?: number, lightCount?: number, lightCapacity?: number): ArrayBuffer;
96
+ }, near: number, far: number, ssaoIntensity?: number, lightCount?: number): ArrayBuffer;
97
97
  /**
98
98
  * Consumers pass the same mesh storage buffer + stride that URP uses, so the
99
99
  * dynamic offset (`i * MESH_PER_ENTITY_STRIDE`) at `setBindGroup(2, ...)`
@@ -107,7 +107,7 @@ export declare function packClusterUniform(grid: {
107
107
  * feat-20260609-hdrp-cluster-fragment-ggx M4 / w19. Called per-frame from the
108
108
  * recordFrame HDRP block after binner+writeBuffer; the resulting BindGroup
109
109
  * lands on `passCtx.hdrpClusterBindGroup` and recordMainPass binds it at
110
- * group(2) when `frameState.isHdrpActive`.
110
+ * group(2) when the prepared Standard topology selects clustered lighting.
111
111
  *
112
112
  * Returns `null` on `device.createBindGroup` failure (a structured RhiError
113
113
  * is fired on `runtime.errorRegistry`); recordMainPass gracefully falls back
@@ -150,6 +150,8 @@ export type SsaoBindOptions = {
150
150
  readonly enabled: false;
151
151
  };
152
152
  export declare function createHdrpUnifiedBindGroup(runtime: RenderSystemRuntime, hdrpBuffers: HdrpBuffers, meshStorageBuffer: Buffer, ssaoOptions?: SsaoBindOptions): BindGroup | null;
153
+ /** Build the clustered skin group(2) bind group with one shared palette window. */
154
+ export declare function createHdrpSkinUnifiedBindGroup(runtime: RenderSystemRuntime, hdrpBuffers: HdrpBuffers, layout: BindGroupLayout, meshStorageBuffer: Buffer, paletteBuffer: Buffer, paletteBindingWindowBytes: number, ssaoOptions?: SsaoBindOptions): BindGroup | null;
153
155
  /**
154
156
  * Build the compute-only bind group for ordered cluster membership output.
155
157
  * Its group is intentionally separate from the fragment group: the same
@@ -1 +1 @@
1
- {"version":3,"file":"hdrp-buffers.d.ts","sourceRoot":"","sources":["../src/hdrp-buffers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hdrp-buffers.d.ts","sourceRoot":"","sources":["../src/hdrp-buffers.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { type BindGroupLayout, type Buffer, type RenderPipeline, type Result, type RhiDevice, type RhiError, type ShaderModule, type Texture, type TextureFormat, type TextureView } from '@forgeax/engine-rhi';
2
2
  import type { DeviceScope } from '../device/device-scope';
3
+ import { type IblKernelCache } from './kernel-cache';
4
+ export { createIblKernelCache, type IblKernelCache, resetIblKernelCaches, } from './kernel-cache';
3
5
  /**
4
6
  * Shader module factory (async, injected via configureGpuDevice).
5
7
  * Mirrors `MipmapShaderModuleFactory` from mipmap-generator.
@@ -39,6 +41,8 @@ export interface IblPipelineError {
39
41
  * (idempotent).
40
42
  */
41
43
  export interface IblPipelineCache {
44
+ /** Reusable generation-scoped kernel state; per-probe outputs stay elsewhere. */
45
+ readonly probeKernel: IblKernelCache;
42
46
  /** Color format shared by all precompute outputs for this device. */
43
47
  outputFormat?: TextureFormat;
44
48
  /** Equirectangular-to-cubemap pipeline. */
@@ -1 +1 @@
1
- {"version":3,"file":"IblPipelineCache.d.ts","sourceRoot":"","sources":["../../src/ibl/IblPipelineCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IblPipelineCache.d.ts","sourceRoot":"","sources":["../../src/ibl/IblPipelineCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export declare const REFLECTION_PROBE_IBL_STAGES: readonly ["raw", "filtered", "publish"];
2
+ export type ReflectionProbeIblStage = (typeof REFLECTION_PROBE_IBL_STAGES)[number];
3
+ export interface IblKernelCache {
4
+ readonly generation: number;
5
+ readonly pipelineIdentity: object;
6
+ readonly samplerIdentity: object;
7
+ readonly brdfLutIdentity: object;
8
+ }
9
+ export declare function createIblKernelCache(generation: number): IblKernelCache;
10
+ export interface ProbeIblOutput {
11
+ readonly entityKey: number;
12
+ readonly resolution: number;
13
+ readonly deviceGeneration: number;
14
+ readonly raw: object;
15
+ readonly filtered: object;
16
+ readonly rawGeneration: number;
17
+ readonly filteredGeneration: number;
18
+ readonly lkg: boolean;
19
+ }
20
+ export interface ProbeIblUpdate extends ProbeIblOutput {
21
+ readonly stages: typeof REFLECTION_PROBE_IBL_STAGES;
22
+ readonly nextStage: ReflectionProbeIblStage;
23
+ readonly candidateGeneration: number;
24
+ }
25
+ export declare function createProbeIblOutput(input: {
26
+ readonly entityKey: number;
27
+ readonly resolution: number;
28
+ readonly deviceGeneration: number;
29
+ }): ProbeIblOutput;
30
+ export declare function beginProbeIblUpdate(output: ProbeIblOutput): ProbeIblUpdate;
31
+ export declare function publishProbeIblOutput(update: ProbeIblUpdate, result: {
32
+ readonly stage: ReflectionProbeIblStage;
33
+ readonly ok: boolean;
34
+ }): ProbeIblOutput;
35
+ export declare function resetIblKernelCaches(): void;
36
+ //# sourceMappingURL=kernel-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-cache.d.ts","sourceRoot":"","sources":["../../src/ibl/kernel-cache.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,yCAA0C,CAAC;AACnF,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAID,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAWvE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,QAAQ,CAAC,MAAM,EAAE,OAAO,2BAA2B,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,GAAG,cAAc,CASjB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAO1E;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GACxE,cAAc,CAchB;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}