@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
@@ -31,23 +31,60 @@ import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
31
31
  import type { PostProcessShaderEntry } from './fullscreen-post-process-pass';
32
32
  import type {
33
33
  BloomInspection,
34
+ DirectionalShadowInspection,
35
+ LightInspection,
36
+ LodOcclusionInspection,
34
37
  MotionBlurInspection,
38
+ ReflectionProbeInspection,
35
39
  RenderSceneInspection,
40
+ SsrDependenciesInspection,
36
41
  TemporalTargetInspection,
37
42
  TransmissionInspection,
38
43
  } from './inspection-types';
44
+ import type { SsrAdmissionIdentity } from './ssr/identity';
45
+ import type {
46
+ RenderTarget,
47
+ RenderTargetDescriptor,
48
+ RenderTargetReadbackData,
49
+ RenderTargetReadbackRequest,
50
+ RenderTargetReadbackTicket,
51
+ RenderTargetTextureSource,
52
+ RenderTargetTextureSourceOptions,
53
+ } from './targets/contracts';
39
54
  import type { TemporalInspection } from './temporal/inspection';
40
55
 
41
56
  export type { TransmissionInspection } from './inspection-types';
42
57
  export type { PointsLinesInspection } from './points-lines/inspection';
43
58
 
44
59
  import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
60
+ import type { StandardLightingInspection } from './pipeline/standard-lighting/inspection';
45
61
  import type { StandardProfile } from './pipeline/standard-profile';
62
+ import type { PointShadowInspection } from './point-shadow-inspection';
46
63
  import type { PostProcessError } from './post-process-errors';
64
+ import type {
65
+ GpuPassTimingObservation,
66
+ GpuPassTimingOptions,
67
+ } from './record/gpu-pass-timing/index.js';
47
68
  import type { VolumeTimingObservation } from './record/gpu-timing';
48
69
  import type { TemporalView } from './temporal/view';
49
70
  import type { VolumetricFogInspection } from './volume/inspection';
50
71
 
72
+ export type {
73
+ CubeCameraFace,
74
+ CubeCameraUpdateIntent,
75
+ } from './components/cube-camera';
76
+
77
+ export interface CubeCameraSnapshot {
78
+ readonly entityKey?: number;
79
+ readonly target: RenderTarget;
80
+ readonly position: readonly [number, number, number];
81
+ readonly near: number;
82
+ readonly far: number;
83
+ readonly updateIntent: import('./components/cube-camera').CubeCameraUpdateIntent;
84
+ readonly requestVersion: number;
85
+ readonly faceBudget: number;
86
+ }
87
+
51
88
  export type RenderResult<T, E> =
52
89
  | { readonly ok: true; readonly value: T }
53
90
  | { readonly ok: false; readonly error: E };
@@ -65,13 +102,15 @@ export type RenderWorldLease = RenderReadLease;
65
102
  export interface CameraSnapshot {
66
103
  /** Stable ECS identity used by the frame plan's camera authority fact. */
67
104
  readonly entityKey?: number;
105
+ /** Auxiliary logical target; physical views remain renderer-owned. */
106
+ readonly target?: RenderTarget;
68
107
  /** World index supplied by the multi-world extract merge. */
69
108
  readonly worldId?: number;
70
109
  /** Camera-owned history generation forwarded into the frame plan. */
71
110
  readonly historyVersion?: number;
72
- /** World-space camera translation (mat4.getTranslation of Transform.world). */
111
+ /** World-space camera translation (mat4.getTranslation of GlobalTransform.world). */
73
112
  readonly position: Vec3;
74
- /** Resolved world-space camera mat4, copied from Transform.world. */
113
+ /** Resolved world-space camera mat4, copied from GlobalTransform.world. */
75
114
  readonly world: Float32Array;
76
115
  readonly fov: number;
77
116
  readonly aspect: number;
@@ -105,6 +144,9 @@ export interface CameraSnapshot {
105
144
  /** Stable identity owned by the Standard feature host for output transform. */
106
145
  export const STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = 'forgeax::standard::output-transform';
107
146
 
147
+ /** Stable identity for the special FXAA pass' per-frame output policy UBO. */
148
+ export const FXAA_POST_PROCESS_ID = 'forgeax::post::fxaa';
149
+
108
150
  export type {
109
151
  EnvironmentFrame,
110
152
  EnvironmentSource,
@@ -123,9 +165,6 @@ interface RenderPipelineStateView {
123
165
  readonly colorAttachmentFormat: TextureFormat;
124
166
  /** Renderer-owned View UBO shared by Standard lighting, shadows, and fog. */
125
167
  readonly viewUniformBuffer: Buffer;
126
- /** Renderer-owned SpotLight std430 buffer shared by Standard and volume. */
127
- readonly pointLightsBuffer: Buffer;
128
- readonly spotLightsBuffer: Buffer;
129
168
  /** Fallback resources keep the shared view layout valid when no projector is authored. */
130
169
  readonly defaultWhiteTextureView: TextureView;
131
170
  readonly defaultSampler: Sampler;
@@ -156,6 +195,7 @@ interface RenderPipelineRuntime {
156
195
  id: string,
157
196
  bgl: BindGroupLayout,
158
197
  colorFormat: GPUTextureFormat,
198
+ entry?: PostProcessShaderEntry,
159
199
  ) => RhiRenderPipeline | null;
160
200
  }
161
201
 
@@ -237,6 +277,10 @@ export interface SpotLightProjectorFrameContext {
237
277
  readonly texture: Texture;
238
278
  readonly view: TextureView;
239
279
  readonly sampler: Sampler;
280
+ /** Spot-light index in ExtractedLights.spot for the accepted texture. */
281
+ readonly spotIndex?: number;
282
+ /** Unified Standard Cluster slot index (points precede spots). */
283
+ readonly lightSlotIndex?: number;
240
284
  }
241
285
 
242
286
  /**
@@ -246,6 +290,20 @@ export interface SpotLightProjectorFrameContext {
246
290
  export interface Renderer {
247
291
  attach(world: World): RenderResult<RenderWorldLease, RenderError>;
248
292
  draw(input: RenderFrameInput): RenderResult<FrameReceipt, RenderError>;
293
+ createRenderTarget(descriptor: RenderTargetDescriptor): RenderResult<RenderTarget, RenderError>;
294
+ resizeRenderTarget(
295
+ target: RenderTarget,
296
+ descriptor: RenderTargetDescriptor,
297
+ ): RenderResult<void, RenderError>;
298
+ createRenderTargetTextureSource(
299
+ target: RenderTarget,
300
+ options: RenderTargetTextureSourceOptions,
301
+ ): RenderResult<RenderTargetTextureSource, RenderError>;
302
+ requestTargetReadback(
303
+ target: RenderTarget,
304
+ request: RenderTargetReadbackRequest,
305
+ ): RenderResult<RenderTargetReadbackTicket, RenderError>;
306
+ destroyRenderTarget(target: RenderTarget): RenderResult<void, RenderError>;
249
307
  setProfile(profile: RenderProfile): RenderResult<void, RenderError>;
250
308
  state(): RendererState;
251
309
  inspect(): RenderInspection;
@@ -256,6 +314,7 @@ export interface Renderer {
256
314
  subscribe(listener: (event: RendererEvent) => void): () => void;
257
315
  releaseSurface(): RenderResult<void, RenderError>;
258
316
  restoreSurface(): RenderResult<void, RenderError>;
317
+ /** Recover only from device-lost; a healthy renderer returns a guard error. */
259
318
  recover(): Promise<RenderResult<void, RenderError>>;
260
319
  dispose(): Promise<RenderResult<void, RenderError>>;
261
320
  }
@@ -305,11 +364,12 @@ export interface FrameEnvironment {
305
364
 
306
365
  /**
307
366
  * Receipt-bound observation selection. The request is consumed by `observe`
308
- * only with the matching FrameReceipt and returns a structured Result error
309
- * when the generation or frame identity is stale.
367
+ * only with the matching FrameReceipt after `receipt.completed` and returns a
368
+ * structured Result error when the generation or frame identity is stale.
310
369
  */
311
370
  export interface FrameObservationRequest {
312
- readonly include: readonly ('timings' | 'draws' | 'bindings')[];
371
+ readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
372
+ readonly targetReadbacks?: readonly RenderTargetReadbackTicket[];
313
373
  }
314
374
 
315
375
  /**
@@ -340,8 +400,12 @@ export interface RenderFrameInput {
340
400
  export interface FrameReceiptObservation {
341
401
  readonly frameId: number;
342
402
  readonly deviceGeneration: number;
343
- readonly include: readonly ('timings' | 'draws' | 'bindings')[];
344
- readonly timings?: VolumeTimingObservation;
403
+ readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
404
+ /** Receipt-bound Render-owned GPU pass facts; absent when not requested. */
405
+ readonly timings?: GpuPassTimingObservation | undefined;
406
+ /** Receipt-bound volume GPU timing facts; absent when not requested. */
407
+ readonly volumeTimings?: VolumeTimingObservation | undefined;
408
+ readonly targetReadbacks?: readonly RenderTargetReadbackData[];
345
409
  }
346
410
 
347
411
  /** Stable backend facts for the Standard output transform projection. */
@@ -418,8 +482,15 @@ export interface RenderInspection {
418
482
  readonly frustumStats: { readonly culled: number; readonly total: number };
419
483
  readonly visibilityStats: { readonly explicitlyHidden: number };
420
484
  readonly renderScene: RenderSceneInspection;
485
+ readonly reflectionProbes: ReflectionProbeInspection;
486
+ /** Renderer-owned SSR dependency seam; consumer facts are projected from live owners. */
487
+ readonly ssrDependencies: SsrDependenciesInspection;
421
488
  /** Last completed transmission candidate facts, detached from GPU handles. */
422
489
  readonly transmission?: TransmissionInspection;
490
+ /** Last prepared Standard transport facts, detached from GPU handles. */
491
+ readonly standardLighting?: StandardLightingInspection;
492
+ /** Renderer-owned point-shadow atlas budget facts from the last frame. */
493
+ readonly pointShadow?: PointShadowInspection;
423
494
  readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
424
495
  readonly perFramePassNames: readonly string[];
425
496
  readonly bindGroupCounts: {
@@ -440,10 +511,15 @@ export interface RenderInspection {
440
511
  readonly environment: EnvironmentInspection;
441
512
  readonly temporal: TemporalInspection;
442
513
  readonly bloom: BloomInspection;
514
+ /** Candidate/accepted/LKG facts for the single extendedLighting topology. */
515
+ readonly extendedLighting: LightInspection;
516
+ readonly directionalShadow: DirectionalShadowInspection;
443
517
  /** Semantic Standard temporal target metadata; no graph or RHI handles. */
444
518
  readonly temporalTarget?: TemporalTargetInspection;
445
519
  /** Renderer-owned Motion Blur facts; absent when no component is active. */
446
520
  readonly motionBlur?: MotionBlurInspection;
521
+ /** Bounded renderer-owned LOD/occlusion facts; absent before a candidate frame. */
522
+ readonly lodOcclusion?: LodOcclusionInspection;
447
523
  }
448
524
 
449
525
  /** Backend marker — single-element union preserved for future extensibility (D-2). */
@@ -607,6 +683,8 @@ export const RENDER_SCENE_STATE_PHASE_CATALOG = [
607
683
  * attribution without guessing from RHI command counts.
608
684
  */
609
685
  export const RENDER_RECORD_PHASE_CATALOG = [
686
+ 'record/occlusion-query-submit',
687
+ 'record/occlusion-global-advance',
610
688
  'record/scene-state',
611
689
  ...RENDER_SCENE_STATE_PHASE_CATALOG,
612
690
  'record/swapchain',
@@ -624,6 +702,7 @@ export type RenderRecordPhase = (typeof RENDER_RECORD_PHASE_CATALOG)[number];
624
702
 
625
703
  export const RENDER_PHASE_CATALOG = [
626
704
  'extract',
705
+ 'occlusion-prepare',
627
706
  'bind-groups',
628
707
  'features',
629
708
  'sort',
@@ -651,6 +730,10 @@ export interface RendererOptions {
651
730
  readonly captureGpuTimings?: boolean | undefined;
652
731
  /** Optional host-owned RHI lifecycle instrumentation, such as recording. */
653
732
  readonly rhiInstrumentation?: RhiBackendInstrumentation | undefined;
733
+ /** Optional bounded GPU pass timing facts; this is not frame latency. */
734
+ readonly gpuPassTiming?: GpuPassTimingOptions | undefined;
735
+ /** Exact source/tree/lock/build identity binding for the renderer-owned SSR seam. */
736
+ readonly ssrIdentity?: SsrAdmissionIdentity | undefined;
654
737
  // feat-20260608-create-app-param-surface-trim / M1 / AC-02: `clearColor`
655
738
  // was deleted as a one-cut breaking change (AGENTS.md Change stance +
656
739
  // requirements constraint #1: no deprecation window, no shim). Scene
@@ -550,6 +550,7 @@ function dispatchFullscreenPass(
550
550
  graphPass?: RhiRenderPassEncoder,
551
551
  graphOutputFormat?: GPUTextureFormat,
552
552
  graphDepthView?: TextureView,
553
+ paramsOverride?: Uint8Array,
553
554
  ): void {
554
555
  if (shader === 'fxaa') {
555
556
  if (resolveCtx === undefined) {
@@ -705,7 +706,11 @@ function dispatchFullscreenPass(
705
706
  if (entry.params !== undefined) {
706
707
  const ubo = ctx.runtime.getPostProcessParamsBuffer?.(shader);
707
708
  if (ubo !== undefined) {
708
- const data = ctx.postProcessParams.get(shader);
709
+ // Typed graph passes may make a narrow, per-pass copy of the payload
710
+ // (for example enabling final-surface dither without changing the
711
+ // camera-owned SSOT). Use it when present, while preserving the normal
712
+ // frame snapshot for legacy callers.
713
+ const data = paramsOverride ?? ctx.postProcessParams.get(shader);
709
714
  if (data !== undefined) {
710
715
  if (data.byteLength !== entry.params.byteSize) {
711
716
  throw new PostProcessError({
@@ -769,9 +774,7 @@ function dispatchFullscreenPass(
769
774
  if (lookupPipeline === undefined) return;
770
775
  const postColorFormat = writeFormat;
771
776
  const pipeline = lookupPipeline(shader, built.bindGroupLayout, postColorFormat);
772
- if (pipeline === null) {
773
- return;
774
- }
777
+ if (pipeline === null) return;
775
778
  const handle = built.createHandle(name, pipeline, paramsBuffer);
776
779
 
777
780
  // Open a render pass writing into the resolved color target. Fullscreen
@@ -810,6 +813,7 @@ export function encodeFullscreenPass(
810
813
  readonly outputFormat: GPUTextureFormat;
811
814
  readonly rawSwapchainOutput?: boolean | undefined;
812
815
  readonly depthView?: TextureView | undefined;
816
+ readonly paramsOverride?: Uint8Array | undefined;
813
817
  },
814
818
  ): void {
815
819
  dispatchFullscreenPass(
@@ -824,5 +828,6 @@ export function encodeFullscreenPass(
824
828
  pass,
825
829
  input.outputFormat,
826
830
  input.depthView,
831
+ input.paramsOverride,
827
832
  );
828
833
  }
@@ -35,21 +35,115 @@ import type {
35
35
  } from '@forgeax/engine-rhi';
36
36
  import { ok, type Result } from '@forgeax/engine-types';
37
37
  import type { Tonemap } from './components/camera';
38
+ import type { DirectionalShadowFilterLabel } from './components/directional-shadow-filter';
38
39
  import type { RenderError } from './errors/render';
39
40
  import type { RenderFeatureTargetKind } from './features/targets';
40
41
  import {
41
42
  GPU_TEXTURE_USAGE_COPY_SRC,
42
43
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
43
44
  } from './gpu-texture-usage';
45
+ import type { StandardTopologyInputValue } from './pipeline/standard-lighting/topology';
44
46
  import { STANDARD_POST_STAGE_NAMES, type StandardProfile } from './pipeline/standard-profile';
45
47
  import type { SurfaceProfile } from './record/render-context';
46
48
  import type { RenderPipelineContext } from './render-contract';
49
+ import type { OcclusionFrameProjection } from './scene/visibility/occlusion-runtime';
47
50
  import type { TransmissionDemand } from './transmission/projection';
48
51
 
49
52
  export type { RenderPipelineContext } from './render-contract';
50
53
 
51
54
  export type RenderColorDomain = 'linearHdr' | 'linearLdr' | 'displayEncoded';
52
55
 
56
+ /** Backend admission inputs used by the existing Render candidate owner. */
57
+ export interface DirectionalShadowBackendAdmissionInput {
58
+ readonly backendKind: 'webgpu' | 'wgpu-webgl2' | 'null';
59
+ readonly requested: 'off' | DirectionalShadowFilterLabel;
60
+ readonly candidate: 'accepted' | 'failed';
61
+ readonly lastKnownGood?: DirectionalShadowFilterLabel | undefined;
62
+ }
63
+
64
+ /** Bounded, truthful Directional effective-profile projection. */
65
+ export interface DirectionalShadowBackendAdmission {
66
+ readonly requested: 'off' | DirectionalShadowFilterLabel;
67
+ readonly effective: 'off' | DirectionalShadowFilterLabel | 'rhi-null-structural';
68
+ readonly status: 'accepted' | 'fallback' | 'rejected';
69
+ readonly fallbackReason?: 'webgl2-unsupported' | 'rhi-null-structural' | 'candidate-failed';
70
+ readonly lastKnownGood: boolean;
71
+ readonly pixelEvidence: 'available' | 'not-available';
72
+ }
73
+
74
+ /**
75
+ * Resolve a Directional profile only after the selected production candidate
76
+ * has been admitted. WebGL2 and RhiNull are the sole declared fallbacks;
77
+ * capable candidate failure retains a compatible LKG and never silently maps
78
+ * a failed PCSS request to PCF.
79
+ */
80
+ export function resolveDirectionalShadowBackendAdmission(
81
+ input: DirectionalShadowBackendAdmissionInput,
82
+ ): DirectionalShadowBackendAdmission {
83
+ if (input.requested === 'off') {
84
+ return {
85
+ requested: 'off',
86
+ effective: 'off',
87
+ status: 'accepted',
88
+ lastKnownGood: false,
89
+ pixelEvidence: 'not-available',
90
+ };
91
+ }
92
+ if (input.backendKind === 'null') {
93
+ return {
94
+ requested: input.requested,
95
+ effective: 'rhi-null-structural',
96
+ status: 'fallback',
97
+ fallbackReason: 'rhi-null-structural',
98
+ lastKnownGood: false,
99
+ pixelEvidence: 'not-available',
100
+ };
101
+ }
102
+ if (input.backendKind === 'wgpu-webgl2') {
103
+ const effective =
104
+ input.requested === 'pcssMedium'
105
+ ? 'pcf3'
106
+ : input.requested === 'pcssHigh'
107
+ ? 'pcf5'
108
+ : input.requested;
109
+ return {
110
+ requested: input.requested,
111
+ effective,
112
+ status: effective === input.requested ? 'accepted' : 'fallback',
113
+ ...(effective === input.requested ? {} : { fallbackReason: 'webgl2-unsupported' as const }),
114
+ lastKnownGood: false,
115
+ pixelEvidence: 'available',
116
+ };
117
+ }
118
+ if (input.candidate === 'accepted') {
119
+ return {
120
+ requested: input.requested,
121
+ effective: input.requested,
122
+ status: 'accepted',
123
+ lastKnownGood: false,
124
+ pixelEvidence: 'available',
125
+ };
126
+ }
127
+ if (input.lastKnownGood !== undefined) {
128
+ return {
129
+ requested: input.requested,
130
+ effective: input.lastKnownGood,
131
+ status: 'rejected',
132
+ fallbackReason: 'candidate-failed',
133
+ lastKnownGood: true,
134
+ pixelEvidence: 'available',
135
+ };
136
+ }
137
+ return {
138
+ requested: input.requested,
139
+ effective: input.requested,
140
+ status: 'rejected',
141
+ fallbackReason: 'candidate-failed',
142
+ lastKnownGood: false,
143
+ pixelEvidence: 'available',
144
+ };
145
+ }
146
+
53
147
  export interface ToneOutputContract {
54
148
  readonly input: RenderColorDomain;
55
149
  readonly toneMapped: boolean;
@@ -122,6 +216,8 @@ export interface RenderPipelineTopology {
122
216
  * clear directly to the surface.
123
217
  */
124
218
  readonly clearOnly?: boolean | undefined;
219
+ /** Whether Standard main draws carry the producer-owned fallback MRT. */
220
+ readonly reflectionFallback?: { readonly enabled: boolean } | undefined;
125
221
  readonly surface: {
126
222
  readonly width: number;
127
223
  readonly height: number;
@@ -135,8 +231,13 @@ export interface RenderPipelineTopology {
135
231
  readonly motionBlur: boolean;
136
232
  };
137
233
  readonly shadow: {
138
- readonly mapSize: number;
139
- readonly cascadeCount: 1 | 2 | 3 | 4;
234
+ readonly directional:
235
+ | 'disabled'
236
+ | {
237
+ readonly mapSize: number;
238
+ readonly cascadeCount: 1 | 2 | 3 | 4;
239
+ };
240
+ readonly spotMapSize: number;
140
241
  readonly pointCount: number;
141
242
  readonly pointFaceSize: number;
142
243
  readonly spotCount: number;
@@ -191,10 +292,19 @@ export interface RenderPipelineTopology {
191
292
  };
192
293
  readonly featureTopologySignature: string;
193
294
  readonly gpuDrivenTopologySignature: string;
295
+ /** Stable Cluster transport/layout facts; excludes per-frame light payloads. */
296
+ readonly standardLightingTopologySignature?: string | undefined;
194
297
  /** Internal graph fact; renderer callers do not configure transmission demand. */
195
298
  readonly transmissionDemand?: TransmissionDemand | undefined;
196
299
  }
197
300
 
301
+ /** Resolve the built-in final-output dither policy from the pipeline asset. */
302
+ export function resolveOutputDither(
303
+ config: import('@forgeax/engine-types').RenderPipelineAsset['config'],
304
+ ): boolean {
305
+ return config?.outputDither ?? true;
306
+ }
307
+
198
308
  export interface RenderPipelineFrame extends RenderPipelineContext, RenderGraphFrame {}
199
309
 
200
310
  export interface RenderPipelineTarget {
@@ -320,6 +430,12 @@ export interface RenderPipelineGpuDrivenProjection {
320
430
 
321
431
  export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame> {
322
432
  readonly graph: RenderGraphBuilder<FrameCtx>;
433
+ /**
434
+ * The single prepared Standard lighting projection for this frame. The
435
+ * Forward and Deferred adapters consume this value; they never inspect raw
436
+ * light snapshots, cluster config, or capability facts themselves.
437
+ */
438
+ readonly standardLighting?: StandardTopologyInputValue;
323
439
  /**
324
440
  * Renderer-owned capability facts needed for admission decisions. The
325
441
  * Standard temporal producer must use the live device probe rather than
@@ -345,6 +461,8 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
345
461
  readonly destination: GraphTextureView;
346
462
  readonly level: number;
347
463
  }) => void;
464
+ /** Renderer-owned occlusion query state for the primary scene pass. */
465
+ readonly occlusion?: OcclusionFrameProjection;
348
466
  projectGpuDriven(target: {
349
467
  readonly format: TextureFormat;
350
468
  readonly sampleCount: 1 | 4;
@@ -354,6 +472,8 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
354
472
  semanticTargets?: readonly RenderPipelineTarget[],
355
473
  namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
356
474
  ): Result<void, RenderPipelineBuildError>;
475
+ /** Add renderer-owned cube capture work to the active pipeline graph. */
476
+ contributeCubeCaptures?(): Result<void, RenderPipelineBuildError>;
357
477
  /** Whether a producer-owned feature is installed for this graph build. */
358
478
  hasFeature?(identity: string): boolean;
359
479
  }