@forgeax/engine-render 0.1.28 → 0.1.30

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 (768) hide show
  1. package/README.md +856 -126
  2. package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
  3. package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
  4. package/dist/assembly/device-feature-admission.d.ts +4 -3
  5. package/dist/assembly/device-feature-admission.d.ts.map +1 -1
  6. package/dist/assembly/dynamic-geometry-host.d.ts +27 -0
  7. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
  8. package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
  9. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
  10. package/dist/assembly/factory.d.ts +3 -1
  11. package/dist/assembly/factory.d.ts.map +1 -1
  12. package/dist/assembly/gpu-driven-owner.d.ts +10 -0
  13. package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
  14. package/dist/assembly/host-contract.d.ts +14 -0
  15. package/dist/assembly/host-contract.d.ts.map +1 -1
  16. package/dist/assembly/material/assembly.d.ts +31 -1
  17. package/dist/assembly/material/assembly.d.ts.map +1 -1
  18. package/dist/assembly/material/pipeline-helpers.d.ts +24 -0
  19. package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -0
  20. package/dist/assembly/material-shader-policy.d.ts +3 -1
  21. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  22. package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
  23. package/dist/assembly/recovery/failure-location.d.ts +12 -0
  24. package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
  25. package/dist/assembly/recovery/recovery-attempt.d.ts +1 -6
  26. package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -1
  27. package/dist/assembly/recovery/renderer-recover.d.ts +7 -4
  28. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  29. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  30. package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
  31. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
  32. package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
  33. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  34. package/dist/assembly/renderer-helpers.d.ts +3 -0
  35. package/dist/assembly/renderer-helpers.d.ts.map +1 -1
  36. package/dist/assembly/renderer-inspection.d.ts +4 -0
  37. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  38. package/dist/assembly/shader-prewarm-policy.d.ts +7 -1
  39. package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
  40. package/dist/assembly/skin-palette-owner.d.ts +8 -0
  41. package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
  42. package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
  43. package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
  44. package/dist/assembly/webgpu-device-loss.d.ts +15 -0
  45. package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
  46. package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
  47. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
  48. package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
  49. package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
  50. package/dist/assembly/webgpu-ready.d.ts +7 -3
  51. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  52. package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
  53. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
  54. package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
  55. package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
  56. package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
  57. package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
  58. package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
  59. package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
  60. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
  61. package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
  62. package/dist/assembly/webgpu-renderer.d.ts +7 -141
  63. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  64. package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
  65. package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
  66. package/dist/authoring.mjs +2 -2
  67. package/dist/capture/scene-projection.d.ts +41 -0
  68. package/dist/capture/scene-projection.d.ts.map +1 -0
  69. package/dist/{chunk-J52NMQKR.mjs → chunk-7MQ3XBSP.mjs} +1098 -844
  70. package/dist/chunk-7MQ3XBSP.mjs.map +1 -0
  71. package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
  72. package/dist/chunk-BLXGONR2.mjs.map +1 -0
  73. package/dist/{chunk-VSL23LZE.mjs → chunk-C3DDSXYK.mjs} +1188 -463
  74. package/dist/chunk-C3DDSXYK.mjs.map +1 -0
  75. package/dist/{chunk-IQMKJLNU.mjs → chunk-FUUO4UND.mjs} +443 -30
  76. package/dist/chunk-FUUO4UND.mjs.map +1 -0
  77. package/dist/{chunk-J6KACNOH.mjs → chunk-JRBDO2KB.mjs} +617 -7
  78. package/dist/chunk-JRBDO2KB.mjs.map +1 -0
  79. package/dist/{chunk-GE3SDD72.mjs → chunk-MDQJPY3T.mjs} +20 -40
  80. package/dist/chunk-MDQJPY3T.mjs.map +1 -0
  81. package/dist/{chunk-MYJ5RPJO.mjs → chunk-NO4WZCAH.mjs} +3 -3
  82. package/dist/chunk-NO4WZCAH.mjs.map +1 -0
  83. package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
  84. package/dist/chunk-PA5DRJNI.mjs.map +1 -0
  85. package/dist/{chunk-MBU4ZVE7.mjs → chunk-PSEQ6QPH.mjs} +4655 -892
  86. package/dist/chunk-PSEQ6QPH.mjs.map +1 -0
  87. package/dist/{chunk-JAASCMXA.mjs → chunk-S5UE2T5P.mjs} +289 -41
  88. package/dist/chunk-S5UE2T5P.mjs.map +1 -0
  89. package/dist/components/camera.d.ts +62 -2
  90. package/dist/components/camera.d.ts.map +1 -1
  91. package/dist/components/directional-light.d.ts +2 -2
  92. package/dist/components/dynamic-resolution.d.ts +15 -0
  93. package/dist/components/dynamic-resolution.d.ts.map +1 -0
  94. package/dist/components/index.d.ts +2 -0
  95. package/dist/components/index.d.ts.map +1 -1
  96. package/dist/components/instances.d.ts +6 -20
  97. package/dist/components/instances.d.ts.map +1 -1
  98. package/dist/components/light-helpers.d.ts.map +1 -1
  99. package/dist/components/reflection-probe.d.ts +1 -0
  100. package/dist/components/reflection-probe.d.ts.map +1 -1
  101. package/dist/components/scene-instance.d.ts +2 -1
  102. package/dist/components/scene-instance.d.ts.map +1 -1
  103. package/dist/components/screen-space-reflection.d.ts +14 -0
  104. package/dist/components/screen-space-reflection.d.ts.map +1 -0
  105. package/dist/components/skylight.d.ts +4 -1
  106. package/dist/components/skylight.d.ts.map +1 -1
  107. package/dist/construct-renderer.mjs +14809 -7570
  108. package/dist/construct-renderer.mjs.map +1 -1
  109. package/dist/device/device-scope.d.ts +2 -0
  110. package/dist/device/device-scope.d.ts.map +1 -1
  111. package/dist/device/gpu-residency.d.ts +3 -14
  112. package/dist/device/gpu-residency.d.ts.map +1 -1
  113. package/dist/dynamic-geometry.d.ts.map +1 -1
  114. package/dist/environment/background.d.ts +7 -0
  115. package/dist/environment/background.d.ts.map +1 -0
  116. package/dist/environment/ibl.d.ts +11 -0
  117. package/dist/environment/ibl.d.ts.map +1 -0
  118. package/dist/environment/storage.d.ts +14 -0
  119. package/dist/environment/storage.d.ts.map +1 -0
  120. package/dist/errors/gpu-driven.d.ts +6 -3
  121. package/dist/errors/gpu-driven.d.ts.map +1 -1
  122. package/dist/errors/render.d.ts +41 -4
  123. package/dist/errors/render.d.ts.map +1 -1
  124. package/dist/extract/camera.d.ts.map +1 -1
  125. package/dist/extract/contracts.d.ts +7 -0
  126. package/dist/extract/contracts.d.ts.map +1 -1
  127. package/dist/extract/gpu-driven.d.ts +50 -3
  128. package/dist/extract/gpu-driven.d.ts.map +1 -1
  129. package/dist/features/host.d.ts +23 -1
  130. package/dist/features/host.d.ts.map +1 -1
  131. package/dist/features/noise-texture.d.ts +17 -0
  132. package/dist/features/noise-texture.d.ts.map +1 -0
  133. package/dist/features/plan.d.ts +83 -2
  134. package/dist/features/plan.d.ts.map +1 -1
  135. package/dist/features/prepared-gpu-work.d.ts +37 -4
  136. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  137. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  138. package/dist/features/prepared-graphics.d.ts +5 -0
  139. package/dist/features/prepared-graphics.d.ts.map +1 -1
  140. package/dist/features/render-graph-compute.d.ts +5 -3
  141. package/dist/features/render-graph-compute.d.ts.map +1 -1
  142. package/dist/features/render-graph-contribution.d.ts +11 -3
  143. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  144. package/dist/features/render-graph-raster.d.ts +19 -3
  145. package/dist/features/render-graph-raster.d.ts.map +1 -1
  146. package/dist/features/types.d.ts +11 -0
  147. package/dist/features/types.d.ts.map +1 -1
  148. package/dist/fullscreen-post-process-pass.d.ts +2 -0
  149. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  150. package/dist/gpu-driven/batch-topology.d.ts +34 -1
  151. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  152. package/dist/gpu-driven/material-artifacts.d.ts +24 -0
  153. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -0
  154. package/dist/gpu-driven/material-bindings.d.ts +7 -0
  155. package/dist/gpu-driven/material-bindings.d.ts.map +1 -0
  156. package/dist/gpu-driven/pbr-program.d.ts +10 -0
  157. package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
  158. package/dist/gpu-driven/prepared-draw.d.ts +2 -0
  159. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  160. package/dist/gpu-driven/production-raster.d.ts +169 -27
  161. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  162. package/dist/gpu-driven/shadow-views.d.ts +126 -0
  163. package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
  164. package/dist/gpu-driven/view-gpu.d.ts +18 -2
  165. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  166. package/dist/gpu-resource.d.ts +5 -2
  167. package/dist/gpu-resource.d.ts.map +1 -1
  168. package/dist/gpu-scene-schema.d.ts +2 -8
  169. package/dist/gpu-scene-schema.d.ts.map +1 -1
  170. package/dist/gpu-scene.d.ts +14 -0
  171. package/dist/gpu-scene.d.ts.map +1 -1
  172. package/dist/gpu-texture-usage.d.ts +1 -0
  173. package/dist/gpu-texture-usage.d.ts.map +1 -1
  174. package/dist/hdrp-buffers.d.ts +9 -0
  175. package/dist/hdrp-buffers.d.ts.map +1 -1
  176. package/dist/ibl/IblPipelineCache.d.ts +2 -0
  177. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  178. package/dist/ibl/frame-resources.d.ts +8 -0
  179. package/dist/ibl/frame-resources.d.ts.map +1 -0
  180. package/dist/ibl/skylight-bind-group.d.ts +3 -1
  181. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  182. package/dist/index.d.ts +87 -75
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.mjs +10 -8
  185. package/dist/index.mjs.map +1 -1
  186. package/dist/inspection-types.d.ts +180 -1
  187. package/dist/inspection-types.d.ts.map +1 -1
  188. package/dist/instances-derived-bounds.d.ts +11 -0
  189. package/dist/instances-derived-bounds.d.ts.map +1 -1
  190. package/dist/instances.d.ts +89 -44
  191. package/dist/instances.d.ts.map +1 -1
  192. package/dist/internal.d.ts +3 -0
  193. package/dist/internal.d.ts.map +1 -1
  194. package/dist/internal.mjs +117 -9
  195. package/dist/internal.mjs.map +1 -1
  196. package/dist/lifecycle.d.ts +2 -1
  197. package/dist/lifecycle.d.ts.map +1 -1
  198. package/dist/material-row.d.ts +15 -0
  199. package/dist/material-row.d.ts.map +1 -0
  200. package/dist/materials.d.ts +15 -0
  201. package/dist/materials.d.ts.map +1 -1
  202. package/dist/pbr-pipeline.d.ts +23 -5
  203. package/dist/pbr-pipeline.d.ts.map +1 -1
  204. package/dist/pipeline/render-extent.d.ts +51 -0
  205. package/dist/pipeline/render-extent.d.ts.map +1 -0
  206. package/dist/pipeline/standard-build-context.d.ts +7 -0
  207. package/dist/pipeline/standard-build-context.d.ts.map +1 -0
  208. package/dist/pipeline/standard-forward-lane.d.ts +3 -2
  209. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  210. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
  211. package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
  212. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
  213. package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
  214. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
  215. package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
  216. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
  217. package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
  218. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
  219. package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
  220. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
  221. package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
  222. package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
  223. package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
  224. package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
  225. package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
  226. package/dist/pipeline/standard-output/graph.d.ts +15 -0
  227. package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
  228. package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
  229. package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
  230. package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
  231. package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
  232. package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
  233. package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
  234. package/dist/pipeline/standard-output/resources.d.ts +10 -0
  235. package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
  236. package/dist/pipeline/standard-output/types.d.ts +39 -0
  237. package/dist/pipeline/standard-output/types.d.ts.map +1 -0
  238. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  239. package/dist/pipeline/standard-post.d.ts +2 -2
  240. package/dist/pipeline/standard-post.d.ts.map +1 -1
  241. package/dist/pipeline/standard-profile.d.ts +2 -1
  242. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  243. package/dist/pipeline-builder.d.ts +5 -2
  244. package/dist/pipeline-builder.d.ts.map +1 -1
  245. package/dist/pipeline-spec-types.d.ts +4 -0
  246. package/dist/pipeline-spec-types.d.ts.map +1 -1
  247. package/dist/pipeline-spec.d.ts +1 -9
  248. package/dist/pipeline-spec.d.ts.map +1 -1
  249. package/dist/plugin.d.ts.map +1 -1
  250. package/dist/points-lines/standard-owner.d.ts +1 -1
  251. package/dist/points-lines/standard-owner.d.ts.map +1 -1
  252. package/dist/post-process-errors.d.ts +9 -2
  253. package/dist/post-process-errors.d.ts.map +1 -1
  254. package/dist/prepare/extended-lighting/resources.d.ts +3 -3
  255. package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
  256. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  257. package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
  258. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
  259. package/dist/record/frame-lighting.d.ts +3 -3
  260. package/dist/record/frame-lighting.d.ts.map +1 -1
  261. package/dist/record/frame-snapshot.d.ts +109 -13
  262. package/dist/record/frame-snapshot.d.ts.map +1 -1
  263. package/dist/record/frame-targets.d.ts.map +1 -1
  264. package/dist/record/frame.d.ts +41 -5
  265. package/dist/record/frame.d.ts.map +1 -1
  266. package/dist/record/main-pass-geometry.d.ts +13 -9
  267. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  268. package/dist/record/main-pass-material.d.ts +43 -3
  269. package/dist/record/main-pass-material.d.ts.map +1 -1
  270. package/dist/record/main-pass-sprite-draws.d.ts +2 -10
  271. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  272. package/dist/record/main-pass.d.ts +14 -2
  273. package/dist/record/main-pass.d.ts.map +1 -1
  274. package/dist/record/mesh-ssbo.d.ts +15 -6
  275. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  276. package/dist/record/prepared-material-bindings.d.ts +19 -0
  277. package/dist/record/prepared-material-bindings.d.ts.map +1 -0
  278. package/dist/record/recovery-pipeline.d.ts +1 -0
  279. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  280. package/dist/record/render-context.d.ts +101 -22
  281. package/dist/record/render-context.d.ts.map +1 -1
  282. package/dist/record/shadow-pass.d.ts +62 -7
  283. package/dist/record/shadow-pass.d.ts.map +1 -1
  284. package/dist/record/skybox-post-pass.d.ts +1 -1
  285. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  286. package/dist/record/typed-frame-graph.d.ts +39 -8
  287. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  288. package/dist/record/view-ubo.d.ts +1 -0
  289. package/dist/record/view-ubo.d.ts.map +1 -1
  290. package/dist/recovery/render-system-candidate.d.ts +10 -2
  291. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  292. package/dist/recovery/render-system-roots.d.ts +11 -0
  293. package/dist/recovery/render-system-roots.d.ts.map +1 -0
  294. package/dist/recovery/types.d.ts +76 -0
  295. package/dist/recovery/types.d.ts.map +1 -0
  296. package/dist/reflection/background.d.ts +14 -0
  297. package/dist/reflection/background.d.ts.map +1 -0
  298. package/dist/reflection/filter.d.ts.map +1 -1
  299. package/dist/reflection/projection.d.ts +1 -0
  300. package/dist/reflection/projection.d.ts.map +1 -1
  301. package/dist/reflection/record-owner.d.ts +4 -4
  302. package/dist/reflection/record-owner.d.ts.map +1 -1
  303. package/dist/render-contract.d.ts +211 -53
  304. package/dist/render-contract.d.ts.map +1 -1
  305. package/dist/render-graph-primitives.d.ts +1 -0
  306. package/dist/render-graph-primitives.d.ts.map +1 -1
  307. package/dist/render-pipeline.d.ts +81 -6
  308. package/dist/render-pipeline.d.ts.map +1 -1
  309. package/dist/render-system-extract-tail.d.ts +15 -6
  310. package/dist/render-system-extract-tail.d.ts.map +1 -1
  311. package/dist/render-system-extract.d.ts +128 -41
  312. package/dist/render-system-extract.d.ts.map +1 -1
  313. package/dist/render-system-projections.d.ts +22 -0
  314. package/dist/render-system-projections.d.ts.map +1 -0
  315. package/dist/render-system.d.ts +27 -77
  316. package/dist/render-system.d.ts.map +1 -1
  317. package/dist/scene/render-scene-types.d.ts +14 -7
  318. package/dist/scene/render-scene-types.d.ts.map +1 -1
  319. package/dist/scene/render-scene.d.ts +31 -11
  320. package/dist/scene/render-scene.d.ts.map +1 -1
  321. package/dist/scene/shadow-visibility.d.ts +5 -0
  322. package/dist/scene/shadow-visibility.d.ts.map +1 -0
  323. package/dist/ssao-config.d.ts +8 -6
  324. package/dist/ssao-config.d.ts.map +1 -1
  325. package/dist/ssr/admission.d.ts +70 -1
  326. package/dist/ssr/admission.d.ts.map +1 -1
  327. package/dist/ssr/compose.d.ts +13 -0
  328. package/dist/ssr/compose.d.ts.map +1 -0
  329. package/dist/ssr/errors.d.ts +35 -0
  330. package/dist/ssr/errors.d.ts.map +1 -1
  331. package/dist/ssr/graph.d.ts +60 -0
  332. package/dist/ssr/graph.d.ts.map +1 -0
  333. package/dist/ssr/history.d.ts +97 -0
  334. package/dist/ssr/history.d.ts.map +1 -0
  335. package/dist/ssr/hiz.d.ts +37 -0
  336. package/dist/ssr/hiz.d.ts.map +1 -0
  337. package/dist/ssr/inspection.d.ts +42 -0
  338. package/dist/ssr/inspection.d.ts.map +1 -0
  339. package/dist/ssr/resources.d.ts +58 -0
  340. package/dist/ssr/resources.d.ts.map +1 -0
  341. package/dist/ssr/temporal.d.ts +38 -0
  342. package/dist/ssr/temporal.d.ts.map +1 -0
  343. package/dist/systems/skin-palette-allocator.d.ts +32 -10
  344. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  345. package/dist/systems/skin-palette-types.d.ts +15 -0
  346. package/dist/systems/skin-palette-types.d.ts.map +1 -1
  347. package/dist/systems/transparent-dispatch.d.ts +9 -0
  348. package/dist/systems/transparent-dispatch.d.ts.map +1 -0
  349. package/dist/targets/material-source.d.ts +7 -0
  350. package/dist/targets/material-source.d.ts.map +1 -1
  351. package/dist/temporal/frame-coordinator.d.ts +7 -0
  352. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  353. package/dist/temporal/gpu.d.ts +8 -0
  354. package/dist/temporal/gpu.d.ts.map +1 -1
  355. package/dist/temporal/history.d.ts.map +1 -1
  356. package/dist/temporal/index.mjs +6 -6
  357. package/dist/temporal/inspection.d.ts.map +1 -1
  358. package/dist/temporal/standard-scene-data.d.ts +4 -2
  359. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  360. package/dist/temporal/target-coverage-attachment.d.ts +15 -0
  361. package/dist/temporal/target-coverage-attachment.d.ts.map +1 -0
  362. package/dist/temporal/temporal-view.d.ts +6 -0
  363. package/dist/temporal/temporal-view.d.ts.map +1 -1
  364. package/dist/temporal/view.d.ts +6 -0
  365. package/dist/temporal/view.d.ts.map +1 -1
  366. package/dist/typed-render-graph-primitives.d.ts +41 -1
  367. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  368. package/dist/typed-shadow-passes.d.ts +3 -1
  369. package/dist/typed-shadow-passes.d.ts.map +1 -1
  370. package/dist/volume/component.d.ts +1 -0
  371. package/dist/volume/component.d.ts.map +1 -1
  372. package/dist/volume/temporal.d.ts +6 -0
  373. package/dist/volume/temporal.d.ts.map +1 -1
  374. package/package.json +21 -20
  375. package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
  376. package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
  377. package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
  378. package/src/__tests__/auto-exposure.browser.test.ts +33 -0
  379. package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
  380. package/src/__tests__/capture-scene-projection.unit.test.ts +24 -0
  381. package/src/__tests__/detached-inspection.integration.test.ts +5 -0
  382. package/src/__tests__/device-feature-admission.unit.test.ts +15 -24
  383. package/src/__tests__/device-loss-fanout.unit.test.ts +43 -0
  384. package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
  385. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
  386. package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
  387. package/src/__tests__/dynamic-geometry-batch.unit.test.ts +157 -0
  388. package/src/__tests__/dynamic-geometry.unit.test.ts +36 -0
  389. package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +81 -0
  390. package/src/__tests__/factory-contract.integration.test.ts +231 -9
  391. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
  392. package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
  393. package/src/__tests__/feature-noise.unit.test.ts +38 -0
  394. package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
  395. package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
  396. package/src/__tests__/frame-observation.contract.test.ts +21 -0
  397. package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
  398. package/src/__tests__/frame-targets.unit.test.ts +24 -0
  399. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
  400. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
  401. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +307 -7
  402. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
  403. package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
  404. package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +261 -0
  405. package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +346 -0
  406. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1422 -0
  407. package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
  408. package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
  409. package/src/__tests__/gpu-driven-production.integration.test.ts +1076 -106
  410. package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
  411. package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
  412. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
  413. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
  414. package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
  415. package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
  416. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
  417. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
  418. package/src/__tests__/gpu-driven-view.unit.test.ts +160 -52
  419. package/src/__tests__/gpu-pass-timing-browser-runner.ts +15 -0
  420. package/src/__tests__/gpu-pass-timing.browser.test.ts +20 -2
  421. package/src/__tests__/gpu-resource-scope.unit.test.ts +71 -0
  422. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
  423. package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
  424. package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
  425. package/src/__tests__/gpu-scene.unit.test.ts +613 -33
  426. package/src/__tests__/instances-culling.integration.test.ts +36 -10
  427. package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
  428. package/src/__tests__/instances-store.unit.test.ts +242 -39
  429. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
  430. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
  431. package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
  432. package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
  433. package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
  434. package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
  435. package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
  436. package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
  437. package/src/__tests__/material-texture-source.unit.test.ts +87 -0
  438. package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
  439. package/src/__tests__/materials-standard-contract.unit.test.ts +57 -3
  440. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
  441. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +8 -0
  442. package/src/__tests__/morph-neutral-admission.unit.test.ts +19 -0
  443. package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
  444. package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
  445. package/src/__tests__/physical-clearcoat.integration.test.ts +42 -3
  446. package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
  447. package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
  448. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -5
  449. package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
  450. package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
  451. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +251 -9
  452. package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
  453. package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
  454. package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
  455. package/src/__tests__/public-surface.test-d.ts +3 -0
  456. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
  457. package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +171 -0
  458. package/src/__tests__/reflection-probe-authoring.unit.test.ts +12 -10
  459. package/src/__tests__/reflection-probe-box.dawn.test.ts +71 -0
  460. package/src/__tests__/reflection-probe-filter.unit.test.ts +9 -0
  461. package/src/__tests__/reflection-probe-orientation.dawn.test.ts +294 -0
  462. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +5 -14
  463. package/src/__tests__/reflection-probe-updates.unit.test.ts +129 -0
  464. package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
  465. package/src/__tests__/render-error-detail-ssot.test-d.ts +27 -1
  466. package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
  467. package/src/__tests__/render-extent.unit.test.ts +63 -0
  468. package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
  469. package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
  470. package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
  471. package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
  472. package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
  473. package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
  474. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
  475. package/src/__tests__/render-scene-projection.unit.test.ts +915 -23
  476. package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
  477. package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
  478. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
  479. package/src/__tests__/render-target-material-source.test-d.ts +27 -3
  480. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +233 -9
  481. package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
  482. package/src/__tests__/shader-manifest-fixture.ts +45 -0
  483. package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
  484. package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
  485. package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
  486. package/src/__tests__/skinned-shadow-caster.test.ts +125 -14
  487. package/src/__tests__/specular-environment-scale.dawn.test.ts +158 -0
  488. package/src/__tests__/ssao-config.unit.test.ts +7 -0
  489. package/src/__tests__/ssao-surface.dawn.test.ts +252 -0
  490. package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
  491. package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
  492. package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
  493. package/src/__tests__/ssr-cube-silhouette.dawn.test.ts +270 -0
  494. package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
  495. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +99 -0
  496. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +116 -0
  497. package/src/__tests__/ssr-gpu-dispatch.ts +951 -0
  498. package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
  499. package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
  500. package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
  501. package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
  502. package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
  503. package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
  504. package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
  505. package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
  506. package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
  507. package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
  508. package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
  509. package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
  510. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
  511. package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
  512. package/src/__tests__/ssr-reprojection-probe.ts +90 -0
  513. package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
  514. package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
  515. package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
  516. package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
  517. package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
  518. package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
  519. package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
  520. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +84 -12
  521. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
  522. package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
  523. package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
  524. package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
  525. package/src/__tests__/standard-output.browser.test.ts +15 -0
  526. package/src/__tests__/standard-output.dawn.test.ts +15 -0
  527. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +275 -0
  528. package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
  529. package/src/__tests__/standard-profile-oracle.unit.test.ts +49 -0
  530. package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
  531. package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
  532. package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
  533. package/src/__tests__/taa-coverage-edge.dawn.test.ts +199 -0
  534. package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
  535. package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +782 -0
  536. package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
  537. package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
  538. package/src/__tests__/taa-stability-feedback.ts +342 -0
  539. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
  540. package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
  541. package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
  542. package/src/__tests__/temporal-view.unit.test.ts +17 -0
  543. package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
  544. package/src/__tests__/transmission-prewarm.unit.test.ts +57 -0
  545. package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
  546. package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
  547. package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
  548. package/src/__tests__/visibility-extract.perf.test.ts +20 -8
  549. package/src/__tests__/visibility-instances.integration.test.ts +19 -7
  550. package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
  551. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +62 -13
  552. package/src/__tests__/volumetric-fog-topology.unit.test.ts +7 -7
  553. package/src/assembly/atmosphere-shader-prewarm.ts +39 -0
  554. package/src/assembly/device-feature-admission.ts +9 -4
  555. package/src/assembly/dynamic-geometry-host.ts +284 -163
  556. package/src/assembly/dynamic-geometry-runtime.ts +71 -0
  557. package/src/assembly/factory.ts +4 -0
  558. package/src/assembly/gpu-driven-owner.ts +29 -0
  559. package/src/assembly/host-contract.ts +19 -0
  560. package/src/assembly/material/assembly.ts +383 -1
  561. package/src/assembly/material/pipeline-helpers.ts +100 -0
  562. package/src/assembly/material-shader-policy.ts +110 -46
  563. package/src/assembly/recovery/device-loss-fanout.ts +5 -0
  564. package/src/assembly/recovery/failure-location.ts +62 -0
  565. package/src/assembly/recovery/recovery-attempt.ts +2 -29
  566. package/src/assembly/recovery/renderer-recover.ts +16 -17
  567. package/src/assembly/renderer-facade.ts +34 -1
  568. package/src/assembly/renderer-feature-inspection.ts +13 -0
  569. package/src/assembly/renderer-frame-transaction.ts +63 -0
  570. package/src/assembly/renderer-helpers.ts +26 -0
  571. package/src/assembly/renderer-inspection.ts +6 -0
  572. package/src/assembly/shader-prewarm-policy.ts +46 -1
  573. package/src/assembly/skin-palette-owner.ts +21 -0
  574. package/src/assembly/ssr-shader-prewarm.ts +41 -0
  575. package/src/assembly/webgpu-device-loss.ts +75 -0
  576. package/src/assembly/webgpu-pbr-ready.ts +232 -0
  577. package/src/assembly/webgpu-ready-mipmap.ts +26 -0
  578. package/src/assembly/webgpu-ready.ts +161 -131
  579. package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
  580. package/src/assembly/webgpu-renderer-contract.ts +69 -0
  581. package/src/assembly/webgpu-renderer-guards.ts +32 -0
  582. package/src/assembly/webgpu-renderer-observation.ts +43 -0
  583. package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
  584. package/src/assembly/webgpu-renderer.ts +744 -730
  585. package/src/assembly/webgpu-vertex-layouts.ts +233 -87
  586. package/src/capture/scene-projection.ts +37 -0
  587. package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
  588. package/src/components/__tests__/dynamic-resolution-schema.unit.test.ts +65 -0
  589. package/src/components/__tests__/light-radius.integration.test.ts +59 -0
  590. package/src/components/camera.ts +287 -7
  591. package/src/components/directional-light.ts +3 -3
  592. package/src/components/dynamic-resolution.ts +67 -0
  593. package/src/components/index.ts +2 -0
  594. package/src/components/instances.ts +45 -18
  595. package/src/components/light-helpers.ts +6 -1
  596. package/src/components/reflection-probe.ts +1 -0
  597. package/src/components/scene-instance.ts +2 -1
  598. package/src/components/screen-space-reflection.ts +21 -0
  599. package/src/components/skylight.ts +4 -1
  600. package/src/components/sprite-animation.ts +2 -2
  601. package/src/components/sprite-instances.ts +1 -1
  602. package/src/device/device-scope.ts +13 -7
  603. package/src/device/gpu-residency.ts +45 -42
  604. package/src/dynamic-geometry.ts +13 -8
  605. package/src/environment/background.ts +281 -0
  606. package/src/environment/ibl.ts +211 -0
  607. package/src/environment/storage.ts +63 -0
  608. package/src/errors/gpu-driven.ts +49 -8
  609. package/src/errors/render.ts +91 -3
  610. package/src/extract/camera.ts +37 -1
  611. package/src/extract/contracts.ts +10 -0
  612. package/src/extract/gpu-driven.ts +240 -10
  613. package/src/features/host.ts +237 -19
  614. package/src/features/noise-texture.ts +91 -0
  615. package/src/features/plan.ts +553 -24
  616. package/src/features/prepared-gpu-work.ts +631 -49
  617. package/src/features/prepared-graphics-store.ts +31 -0
  618. package/src/features/prepared-graphics.ts +5 -0
  619. package/src/features/render-graph-compute.ts +41 -8
  620. package/src/features/render-graph-contribution.ts +141 -3
  621. package/src/features/render-graph-raster.ts +143 -30
  622. package/src/features/types.ts +11 -0
  623. package/src/fullscreen-post-process-pass.ts +3 -0
  624. package/src/gpu-driven/batch-topology.ts +452 -108
  625. package/src/gpu-driven/material-artifacts.ts +179 -0
  626. package/src/gpu-driven/material-bindings.ts +41 -0
  627. package/src/gpu-driven/pbr-program.ts +31 -0
  628. package/src/gpu-driven/prepared-draw.ts +42 -6
  629. package/src/gpu-driven/production-raster.ts +2806 -716
  630. package/src/gpu-driven/shadow-views.ts +539 -0
  631. package/src/gpu-driven/view-gpu.ts +188 -41
  632. package/src/gpu-resource.ts +21 -2
  633. package/src/gpu-scene-schema.ts +61 -11
  634. package/src/gpu-scene.ts +197 -99
  635. package/src/gpu-texture-usage.ts +1 -0
  636. package/src/hdrp-buffers.ts +141 -36
  637. package/src/ibl/IblPipelineCache.ts +5 -0
  638. package/src/ibl/frame-resources.ts +38 -0
  639. package/src/ibl/skylight-bind-group.ts +32 -21
  640. package/src/index.ts +194 -75
  641. package/src/inspection-types.ts +207 -1
  642. package/src/instances-derived-bounds.ts +258 -34
  643. package/src/instances.ts +459 -150
  644. package/src/internal.ts +22 -0
  645. package/src/lifecycle.ts +2 -0
  646. package/src/material-row.ts +194 -0
  647. package/src/materials.ts +44 -8
  648. package/src/pbr-pipeline.ts +172 -19
  649. package/src/pipeline/render-extent.ts +111 -0
  650. package/src/pipeline/standard-build-context.ts +7 -0
  651. package/src/pipeline/standard-forward-lane.ts +74 -29
  652. package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
  653. package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
  654. package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
  655. package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
  656. package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
  657. package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
  658. package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
  659. package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
  660. package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
  661. package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
  662. package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
  663. package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
  664. package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
  665. package/src/pipeline/standard-output/color-transform.ts +124 -0
  666. package/src/pipeline/standard-output/graph.ts +139 -0
  667. package/src/pipeline/standard-output/lut-admission.ts +121 -0
  668. package/src/pipeline/standard-output/lut-gpu.ts +399 -0
  669. package/src/pipeline/standard-output/lut-state.ts +176 -0
  670. package/src/pipeline/standard-output/resources.ts +121 -0
  671. package/src/pipeline/standard-output/types.ts +58 -0
  672. package/src/pipeline/standard-pipeline.ts +232 -70
  673. package/src/pipeline/standard-post.ts +190 -27
  674. package/src/pipeline/standard-profile.ts +2 -1
  675. package/src/pipeline-builder.ts +28 -9
  676. package/src/pipeline-spec-types.ts +4 -0
  677. package/src/pipeline-spec.ts +37 -29
  678. package/src/plugin.ts +4 -0
  679. package/src/points-lines/standard-owner.ts +6 -14
  680. package/src/post-process-errors.ts +26 -18
  681. package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +2 -2
  682. package/src/prepare/extended-lighting/resources.ts +3 -3
  683. package/src/prepare/prepared-graphics-resolver.ts +9 -2
  684. package/src/record/__tests__/main-pass-geometry.unit.test.ts +68 -0
  685. package/src/record/__tests__/material-bg-cache.unit.test.ts +45 -0
  686. package/src/record/__tests__/material-slot-plan.unit.test.ts +57 -0
  687. package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
  688. package/src/record/__tests__/recovery-pipeline.unit.test.ts +20 -1
  689. package/src/record/__tests__/sprite-material-abi.unit.test.ts +41 -6
  690. package/src/record/__tests__/temporal-payload.unit.test.ts +2 -0
  691. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
  692. package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
  693. package/src/record/dynamic-geometry-consumption.ts +59 -0
  694. package/src/record/frame-lighting.ts +15 -12
  695. package/src/record/frame-snapshot.ts +146 -34
  696. package/src/record/frame-targets.ts +9 -0
  697. package/src/record/frame.ts +838 -170
  698. package/src/record/main-pass-geometry.ts +209 -103
  699. package/src/record/main-pass-material.ts +157 -40
  700. package/src/record/main-pass-sprite-draws.ts +16 -107
  701. package/src/record/main-pass.ts +141 -12
  702. package/src/record/material-uniforms.ts +1 -1
  703. package/src/record/mesh-ssbo.ts +59 -15
  704. package/src/record/prepared-material-bindings.ts +238 -0
  705. package/src/record/recovery-pipeline.ts +69 -90
  706. package/src/record/render-context.ts +123 -24
  707. package/src/record/shadow-pass.ts +1389 -230
  708. package/src/record/skybox-post-pass.ts +14 -3
  709. package/src/record/typed-frame-graph.ts +1064 -47
  710. package/src/record/view-ubo.ts +12 -1
  711. package/src/recovery/render-system-candidate.ts +135 -68
  712. package/src/recovery/render-system-roots.ts +113 -0
  713. package/src/recovery/types.ts +77 -0
  714. package/src/reflection/background.ts +151 -0
  715. package/src/reflection/filter.ts +3 -0
  716. package/src/reflection/projection.ts +16 -6
  717. package/src/reflection/record-owner.ts +308 -140
  718. package/src/render-contract.ts +237 -49
  719. package/src/render-graph-primitives.ts +34 -5
  720. package/src/render-pipeline.ts +90 -2
  721. package/src/render-system-extract-tail.ts +431 -162
  722. package/src/render-system-extract.ts +478 -119
  723. package/src/render-system-projections.ts +241 -0
  724. package/src/render-system.ts +715 -828
  725. package/src/scene/render-scene-types.ts +13 -4
  726. package/src/scene/render-scene.ts +577 -355
  727. package/src/scene/shadow-visibility.ts +21 -0
  728. package/src/ssao-config.ts +25 -8
  729. package/src/ssr/admission.ts +380 -14
  730. package/src/ssr/compose.ts +144 -0
  731. package/src/ssr/errors.ts +48 -0
  732. package/src/ssr/graph.ts +797 -0
  733. package/src/ssr/history.ts +436 -0
  734. package/src/ssr/hiz.ts +124 -0
  735. package/src/ssr/inspection.ts +124 -0
  736. package/src/ssr/resources.ts +202 -0
  737. package/src/ssr/temporal.ts +164 -0
  738. package/src/systems/skin-palette-allocator.ts +495 -148
  739. package/src/systems/skin-palette-types.ts +17 -0
  740. package/src/systems/transparent-dispatch.ts +90 -0
  741. package/src/targets/material-source.ts +34 -0
  742. package/src/temporal/coverage.ts +1 -1
  743. package/src/temporal/frame-coordinator.ts +23 -2
  744. package/src/temporal/gpu.ts +79 -12
  745. package/src/temporal/history.ts +3 -1
  746. package/src/temporal/inspection.ts +2 -1
  747. package/src/temporal/standard-scene-data.ts +10 -2
  748. package/src/temporal/target-coverage-attachment.ts +72 -0
  749. package/src/temporal/temporal-view.ts +11 -2
  750. package/src/temporal/view.ts +12 -2
  751. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +219 -139
  752. package/src/typed-render-graph-primitives.ts +304 -74
  753. package/src/typed-shadow-passes.ts +122 -12
  754. package/src/volume/component.ts +1 -0
  755. package/src/volume/passes.ts +3 -3
  756. package/src/volume/temporal.ts +10 -0
  757. package/dist/chunk-GE3SDD72.mjs.map +0 -1
  758. package/dist/chunk-GF523LHF.mjs.map +0 -1
  759. package/dist/chunk-IQMKJLNU.mjs.map +0 -1
  760. package/dist/chunk-J52NMQKR.mjs.map +0 -1
  761. package/dist/chunk-J6KACNOH.mjs.map +0 -1
  762. package/dist/chunk-JAASCMXA.mjs.map +0 -1
  763. package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
  764. package/dist/chunk-MYJ5RPJO.mjs.map +0 -1
  765. package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
  766. package/dist/chunk-VSL23LZE.mjs.map +0 -1
  767. package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
  768. package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
@@ -118,3 +118,66 @@ export function executeRendererFrameTransaction<T>(
118
118
  steps.commit(built.value);
119
119
  return { ok: true, value: built.value };
120
120
  }
121
+
122
+ export interface AutoExposureFrameTransactionOptions {
123
+ readonly failAt?: RendererFrameStage;
124
+ }
125
+
126
+ export type AutoExposureFrameTransactionResult =
127
+ | {
128
+ readonly ok: true;
129
+ readonly state: AutoExposureState;
130
+ readonly commitCount: 1;
131
+ }
132
+ | {
133
+ readonly ok: false;
134
+ readonly error: RendererFrameStageFailure;
135
+ readonly state: AutoExposureState;
136
+ readonly commitCount: 0;
137
+ };
138
+
139
+ /**
140
+ * Adapt the auto-exposure candidate to the renderer's single submit barrier.
141
+ * This helper deliberately has no encoder or history state of its own.
142
+ */
143
+ export function executeAutoExposureFrameTransaction(
144
+ state: AutoExposureState,
145
+ candidate: AutoExposureCandidate,
146
+ options: AutoExposureFrameTransactionOptions = {},
147
+ ): AutoExposureFrameTransactionResult {
148
+ let committed = false;
149
+ const prepared = prepareAutoExposureCandidate(state, candidate);
150
+ const transaction = executeRendererFrameTransaction<AutoExposureCandidate>({
151
+ build: () =>
152
+ prepared.ok && options.failAt !== 'build'
153
+ ? { ok: true, value: prepared.value }
154
+ : { ok: false, stage: 'build' },
155
+ execute: (_value) =>
156
+ options.failAt === 'execute'
157
+ ? { ok: false, stage: 'execute' }
158
+ : { ok: true, value: undefined },
159
+ finish: (_value) =>
160
+ options.failAt === 'finish' ? { ok: false, stage: 'finish' } : { ok: true, value: undefined },
161
+ submit: (_value) =>
162
+ options.failAt === 'submit' ? { ok: false, stage: 'submit' } : { ok: true, value: undefined },
163
+ commit: (_value) => {
164
+ committed = true;
165
+ },
166
+ });
167
+ if (!transaction.ok || !committed) {
168
+ return {
169
+ ok: false,
170
+ error: transaction.ok ? { stage: 'submit' } : transaction.error,
171
+ state,
172
+ commitCount: 0,
173
+ };
174
+ }
175
+ return { ok: true, state: commitAutoExposureCandidate(state, candidate), commitCount: 1 };
176
+ }
177
+
178
+ import {
179
+ type AutoExposureCandidate,
180
+ type AutoExposureState,
181
+ commitAutoExposureCandidate,
182
+ prepareAutoExposureCandidate,
183
+ } from '../pipeline/standard-output/auto-exposure/state';
@@ -1,6 +1,7 @@
1
1
  import type { Result, RhiCanvasContext, RhiDevice } from '@forgeax/engine-rhi';
2
2
  import { err, ok, RhiError } from '@forgeax/engine-rhi';
3
3
  import type { RhiErrorListenerRegistry } from '../lifecycle';
4
+ import type { PipelineSpecError } from '../pipeline-spec';
4
5
  import { configureSurface, type PipelineState } from '../render-system';
5
6
 
6
7
  /** Minimum device-bound surface contract needed by lazy context configuration. */
@@ -24,6 +25,31 @@ export function wrapDisposeError(cause: unknown, step: string): RhiError {
24
25
  });
25
26
  }
26
27
 
28
+ export function rendererInitializationPipelineError(error: PipelineSpecError): RhiError {
29
+ return new RhiError({
30
+ code: 'webgpu-runtime-error',
31
+ expected: 'Renderer.initialization three-step strict-serial succeeds',
32
+ hint: 'inspect detail.error for the underlying PipelineSpecError and GPU cause',
33
+ detail: {
34
+ error: {
35
+ name: error.name,
36
+ code: error.code,
37
+ message: error.message,
38
+ detail: error.detail,
39
+ },
40
+ },
41
+ });
42
+ }
43
+
44
+ export function rendererInitializationError(cause: unknown): RhiError {
45
+ const message = cause instanceof Error ? cause.message : String(cause);
46
+ return new RhiError({
47
+ code: 'webgpu-runtime-error',
48
+ expected: 'Renderer.initialization three-step strict-serial succeeds',
49
+ hint: `pipeline build raised: ${message}`,
50
+ });
51
+ }
52
+
27
53
  export function ensureContextConfigured(
28
54
  internals: RendererSurfaceInternals,
29
55
  state: PipelineState,
@@ -1,5 +1,7 @@
1
1
  import type { CompiledRenderGraphInfo } from '@forgeax/engine-render-graph';
2
2
  import type { RhiCanvasSurfacePresentationProof, TextureFormat } from '@forgeax/engine-rhi';
3
+ import type { AutoExposureInspection } from '../pipeline/standard-output/auto-exposure/inspection';
4
+ import type { StandardLutInspection } from '../pipeline/standard-output/lut-state';
3
5
  import {
4
6
  type RenderOutputInspection,
5
7
  type RenderStandardOutputColorInspection,
@@ -15,6 +17,8 @@ export interface RendererOutputInspectionInput {
15
17
  readonly surfaceProfile?: 'dual-view' | 'raw-only';
16
18
  readonly rgba16floatRenderable: boolean;
17
19
  readonly presentationProof?: RhiCanvasSurfacePresentationProof | undefined;
20
+ readonly autoExposure?: AutoExposureInspection | undefined;
21
+ readonly standardLut?: StandardLutInspection | undefined;
18
22
  }
19
23
 
20
24
  function isSrgbFormat(format: TextureFormat): boolean {
@@ -75,6 +79,8 @@ export function projectRendererOutputInspection(
75
79
  const outputReady = input.surfaceAvailable && displayEncoded;
76
80
 
77
81
  return {
82
+ ...(input.autoExposure === undefined ? {} : { autoExposure: input.autoExposure }),
83
+ ...(input.standardLut === undefined ? {} : { standardLut: input.standardLut }),
78
84
  ...(outputTransformPass === undefined
79
85
  ? {}
80
86
  : { outputTransform: STANDARD_OUTPUT_TRANSFORM_FEATURE_ID }),
@@ -2,7 +2,13 @@ import type { Result, RhiError, ShaderModule } from '@forgeax/engine-rhi';
2
2
  import { findVariantByKey, type MaterialShaderManifestEntry } from '@forgeax/engine-shader';
3
3
 
4
4
  /** Minimum sampled-texture limit needed by Standard transmission variants. */
5
- export const STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES = 17;
5
+ export const STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES = 18;
6
+
7
+ function isOrdinaryMaterialVariant(
8
+ variant: MaterialShaderManifestEntry['variants'][number],
9
+ ): boolean {
10
+ return variant.defines.COVERAGE_ONLY !== true;
11
+ }
6
12
 
7
13
  /** Select HDRP variants that must be seeded during ready-state construction. */
8
14
  export function selectHdrpPbrPrewarmVariants(
@@ -27,6 +33,7 @@ export function selectHdrpPbrPrewarmVariants(
27
33
  return (
28
34
  variants.filter(
29
35
  (variant) =>
36
+ isOrdinaryMaterialVariant(variant) &&
30
37
  variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
31
38
  (!('EXTENDED_LIGHTING_AVAILABLE' in variant.defines) ||
32
39
  variant.defines.EXTENDED_LIGHTING_AVAILABLE === extendedLightingShaderAvailable) &&
@@ -49,6 +56,7 @@ export function selectSkinPrewarmVariants(
49
56
  return (
50
57
  manifestEntry?.variants.filter(
51
58
  (variant) =>
59
+ isOrdinaryMaterialVariant(variant) &&
52
60
  variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
53
61
  (storageBufferCapable || variant.defines.CLUSTER_FORWARD_AVAILABLE !== true) &&
54
62
  variant.defines.PROBE_BLEND_AVAILABLE !== true,
@@ -56,6 +64,41 @@ export function selectSkinPrewarmVariants(
56
64
  );
57
65
  }
58
66
 
67
+ /**
68
+ * Select the explicit storage-backed, non-clustered GPU scene-index variant.
69
+ * The GPU raster adapter owns a dedicated slot-3 BGL, so this source must not
70
+ * be reused by direct, probe, clustered, or transmission material draws.
71
+ */
72
+ export function selectGpuDrivenSceneIndexVariant(
73
+ manifestEntry: MaterialShaderManifestEntry | undefined,
74
+ extendedLightingAvailable: boolean,
75
+ directionalPcssAvailable: boolean,
76
+ projectorAvailable: boolean,
77
+ vertexColorAvailable = false,
78
+ ): MaterialShaderManifestEntry['variants'][number] | undefined {
79
+ return manifestEntry?.variants.find(
80
+ (variant) =>
81
+ isOrdinaryMaterialVariant(variant) &&
82
+ variant.defines.STORAGE_BUFFER_AVAILABLE === true &&
83
+ variant.defines.GPU_DRIVEN_SCENE_INDEX_AVAILABLE === true &&
84
+ (!('CLUSTER_FORWARD_AVAILABLE' in variant.defines) ||
85
+ variant.defines.CLUSTER_FORWARD_AVAILABLE === false) &&
86
+ (variant.defines.VERTEX_COLOR_AVAILABLE === true) === vertexColorAvailable &&
87
+ (!('PROBE_BLEND_AVAILABLE' in variant.defines) ||
88
+ variant.defines.PROBE_BLEND_AVAILABLE === false) &&
89
+ (!('EXTENDED_LIGHTING_AVAILABLE' in variant.defines) ||
90
+ variant.defines.EXTENDED_LIGHTING_AVAILABLE === extendedLightingAvailable) &&
91
+ (!('DIRECTIONAL_PCSS_AVAILABLE' in variant.defines) ||
92
+ variant.defines.DIRECTIONAL_PCSS_AVAILABLE === directionalPcssAvailable) &&
93
+ (!('PROJECTOR_AVAILABLE' in variant.defines) ||
94
+ variant.defines.PROJECTOR_AVAILABLE === projectorAvailable) &&
95
+ (!('REFLECTION_FALLBACK_AVAILABLE' in variant.defines) ||
96
+ variant.defines.REFLECTION_FALLBACK_AVAILABLE === false) &&
97
+ (!('TRANSMISSION_AVAILABLE' in variant.defines) ||
98
+ variant.defines.TRANSMISSION_AVAILABLE === false),
99
+ );
100
+ }
101
+
59
102
  /** Select probe-enabled material modules for recovery candidate prewarming. */
60
103
  export function selectProbePrewarmVariants(
61
104
  manifestEntry: MaterialShaderManifestEntry | undefined,
@@ -71,6 +114,7 @@ export function selectProbePrewarmVariants(
71
114
  manifestEntry?.variants.filter((variant) => {
72
115
  const defines = variant.defines;
73
116
  return (
117
+ isOrdinaryMaterialVariant(variant) &&
74
118
  defines.PROBE_BLEND_AVAILABLE === true &&
75
119
  defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
76
120
  (!('WEBGL2_COMPAT' in defines) || defines.WEBGL2_COMPAT === webgl2Downlevel) &&
@@ -124,6 +168,7 @@ export function selectStandardPbrTransmissionPrewarmVariants(
124
168
  for (const transmissionAvailable of [false, true]) {
125
169
  const declared = manifestEntry.variants.find(
126
170
  (variant) =>
171
+ isOrdinaryMaterialVariant(variant) &&
127
172
  variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
128
173
  variant.defines.CLUSTER_FORWARD_AVAILABLE === standardBootClusterAxis() &&
129
174
  variant.defines.VERTEX_COLOR_AVAILABLE === false &&
@@ -0,0 +1,21 @@
1
+ import type { RhiDevice } from '@forgeax/engine-rhi';
2
+ import {
3
+ createSkinPaletteAllocator,
4
+ type SkinPaletteAllocator,
5
+ } from '../systems/skin-palette-allocator';
6
+
7
+ /**
8
+ * Constructs the renderer's single skin palette owner. Capability selection
9
+ * stays at assembly, while allocation and writes remain in the allocator.
10
+ */
11
+ export function createSkinPaletteOwner(
12
+ device: RhiDevice,
13
+ storageBufferCapable: boolean,
14
+ ): SkinPaletteAllocator {
15
+ const limitKey = storageBufferCapable
16
+ ? 'maxStorageBufferBindingSize'
17
+ : 'maxUniformBufferBindingSize';
18
+ const deviceLimit = (device.limits as Readonly<Record<string, number>>)[limitKey];
19
+ const maxBindingBytes = typeof deviceLimit === 'number' && deviceLimit > 0 ? deviceLimit : 65536;
20
+ return createSkinPaletteAllocator(device, maxBindingBytes, storageBufferCapable);
21
+ }
@@ -0,0 +1,41 @@
1
+ import { RhiError, type ShaderModule } from '@forgeax/engine-rhi';
2
+ import type { ManifestEntry } from '@forgeax/engine-types';
3
+ import type { SsrShaderSources } from '../render-contract';
4
+
5
+ /** Admit and compile the entire SSR bundle before exposing any of its modules. */
6
+ export async function prewarmSsrShaders(
7
+ entries: readonly ManifestEntry[],
8
+ compile: (label: string, source: string) => Promise<ShaderModule>,
9
+ seed: (label: string, module: ShaderModule) => void,
10
+ ): Promise<SsrShaderSources | undefined> {
11
+ const stages = [
12
+ ['hiz', 'ssr_hiz_seed', 'ssr_hiz_seed'],
13
+ ['hizReduce', 'ssr_hiz_reduce', 'ssr_hiz_reduce'],
14
+ ['trace', 'ssr_trace', 'ssr_trace'],
15
+ ['temporal', 'ssr_temporal', 'ssr_temporal'],
16
+ ['compose', 'ssr_compose', 'vs_ssr_compose'],
17
+ ] as const;
18
+ const resolved = stages.map(([stage, label, entryPoint]) => ({
19
+ stage,
20
+ label,
21
+ entry: entries.find((entry) => entry.wgsl.includes(`fn ${entryPoint}(`)),
22
+ }));
23
+ if (resolved.every(({ entry }) => entry === undefined)) return undefined;
24
+ const missing = resolved.find(({ entry }) => entry === undefined);
25
+ if (missing !== undefined) {
26
+ throw new RhiError({
27
+ code: 'shader-compile-failed',
28
+ expected: 'shader manifest contains all five SSR utility entries',
29
+ hint: `add the package-owned WGSL entry for '${missing.label}' to the engine shader manifest`,
30
+ });
31
+ }
32
+ const compiled: Array<{ label: string; module: ShaderModule }> = [];
33
+ const sources = {} as Record<keyof SsrShaderSources, string>;
34
+ for (const { stage, label, entry } of resolved) {
35
+ if (entry === undefined) throw new Error(`missing SSR shader ${label}`);
36
+ compiled.push({ label, module: await compile(label, entry.wgsl) });
37
+ sources[stage] = entry.wgsl;
38
+ }
39
+ for (const { label, module } of compiled) seed(label, module);
40
+ return sources;
41
+ }
@@ -0,0 +1,75 @@
1
+ import type { RhiDevice } from '@forgeax/engine-rhi';
2
+ import { RhiError } from '@forgeax/engine-rhi';
3
+
4
+ import type {
5
+ HealthListenerRegistry,
6
+ LostListenerRegistry,
7
+ RhiErrorListenerRegistry,
8
+ } from '../lifecycle';
9
+ import type { RhiBackendPack } from './backend-contract';
10
+
11
+ /**
12
+ * Wire one device's loss promise into the renderer's shared health, error,
13
+ * and lost listener registries. The same helper is used during construction
14
+ * and recovery so a fresh device cannot silently lose the host subscriptions.
15
+ */
16
+ export function attachDeviceLostFanout(
17
+ device: RhiDevice,
18
+ pack: RhiBackendPack,
19
+ registries: {
20
+ lostRegistry: LostListenerRegistry;
21
+ errorRegistry: RhiErrorListenerRegistry;
22
+ healthRegistry: HealthListenerRegistry;
23
+ onDeviceLost?: (detail: string) => void;
24
+ },
25
+ ): void {
26
+ const { lostRegistry, errorRegistry, healthRegistry, onDeviceLost } = registries;
27
+ const lost = pack.instrumentation?.deviceLost?.(device) ?? device.lost;
28
+ lost
29
+ .then((info) => {
30
+ const safe = {
31
+ reason: info?.reason ?? 'unknown',
32
+ message: info?.message ?? '',
33
+ };
34
+ onDeviceLost?.(`device.lost: ${safe.reason}; ${safe.message || '<empty>'}`);
35
+ lostRegistry.fire(safe);
36
+ if (safe.reason !== 'destroyed') {
37
+ pack.instrumentation?.onDeviceLost?.();
38
+ healthRegistry.fire({
39
+ reason: 'device-lost',
40
+ detail: { lostReason: safe.reason, message: safe.message },
41
+ recoverable: true,
42
+ });
43
+ if (pack.translateErrorEventToRhiError) {
44
+ const translated = pack.translateErrorEventToRhiError(safe);
45
+ errorRegistry.fire(translated.error);
46
+ } else {
47
+ errorRegistry.fire(
48
+ new RhiError({
49
+ code: 'device-lost',
50
+ expected:
51
+ 'device must remain alive (driver / browser must not destroy the GPUDevice)',
52
+ hint: `device-lost reason: ${safe.reason}; message: ${safe.message || '<empty>'}`,
53
+ }),
54
+ );
55
+ }
56
+ }
57
+ })
58
+ .catch((error: unknown) => {
59
+ pack.instrumentation?.onDeviceLost?.();
60
+ onDeviceLost?.(`device.lost rejected: ${String(error)}`);
61
+ lostRegistry.fire({ reason: 'unknown', message: String(error) });
62
+ healthRegistry.fire({
63
+ reason: 'device-lost',
64
+ detail: { lostReason: 'unknown', message: String(error) },
65
+ recoverable: true,
66
+ });
67
+ errorRegistry.fire(
68
+ new RhiError({
69
+ code: 'device-lost',
70
+ expected: 'device.lost Promise resolves with GPUDeviceLostInfo',
71
+ hint: `device.lost Promise rejected unexpectedly: ${String(error)}`,
72
+ }),
73
+ );
74
+ });
75
+ }
@@ -0,0 +1,232 @@
1
+ import type {
2
+ BindGroupLayout,
3
+ PipelineLayout,
4
+ Result,
5
+ RhiDevice,
6
+ ShaderModule,
7
+ } from '@forgeax/engine-rhi';
8
+ import { ok, type RhiError } from '@forgeax/engine-rhi';
9
+ import type { MaterialShaderManifestEntry } from '@forgeax/engine-shader';
10
+ import type { ManifestEntry } from '@forgeax/engine-types';
11
+ import { type GpuDrivenPbrProgram, standardPbrProgramKey } from '../gpu-driven/pbr-program';
12
+ import { GPU_DRIVEN_VIEW_WGSL } from '../gpu-driven/view-gpu';
13
+ import {
14
+ buildGpuDrivenPbrInstancesBindGroupLayout,
15
+ buildGpuDrivenPbrPipelineLayout,
16
+ buildGpuDrivenPbrSkinPipelineLayout,
17
+ buildPbrSkinLayouts,
18
+ type PbrPipelineLayoutBundle,
19
+ SKIN_MATERIAL_SHADER_ID,
20
+ } from '../pbr-pipeline';
21
+ import { assembleStandardPbrArtifact } from './material/assembly';
22
+ import { invokeDeviceCreateShaderModule } from './material-shader-policy';
23
+ import { runShimStep, runShimSyncStep } from './renderer-helpers';
24
+ import {
25
+ selectGpuDrivenSceneIndexVariant,
26
+ selectSkinPrewarmVariants,
27
+ } from './shader-prewarm-policy';
28
+
29
+ export type AsyncCreateShaderModule = (
30
+ device: RhiDevice,
31
+ desc: { code: string; label?: string | undefined },
32
+ ) => Promise<Result<ShaderModule, RhiError>>;
33
+
34
+ export interface GpuDrivenPbrReadyModules {
35
+ readonly pbrSkinModule: ShaderModule | null;
36
+ readonly gpuDrivenPbrPrograms: ReadonlyMap<string, GpuDrivenPbrProgram>;
37
+ }
38
+
39
+ export interface GpuDrivenPbrReadyLayouts {
40
+ readonly pbrSkinPipelineLayout: PipelineLayout | null;
41
+ readonly pbrSkinProbePipelineLayout: PipelineLayout | null;
42
+ readonly pbrSkinMeshBindGroupLayout: BindGroupLayout | null;
43
+ readonly gpuDrivenInstancesBindGroupLayout: BindGroupLayout | null;
44
+ readonly gpuDrivenPbrPipelineLayout: PipelineLayout | null;
45
+ readonly gpuDrivenPbrSkinPipelineLayout: PipelineLayout | null;
46
+ }
47
+
48
+ interface GpuDrivenPbrModuleInput {
49
+ readonly device: RhiDevice;
50
+ readonly storageBufferCapable: boolean;
51
+ readonly asyncCreateShaderModule: AsyncCreateShaderModule | undefined;
52
+ readonly pbrSkinEntry: ManifestEntry | undefined;
53
+ readonly pbrManifestEntry: MaterialShaderManifestEntry | undefined;
54
+ readonly pbrSkinManifestEntry: MaterialShaderManifestEntry | undefined;
55
+ readonly extendedLightingShaderAvailable: boolean;
56
+ readonly directionalPcssAvailable: boolean;
57
+ readonly projectorAvailable: boolean;
58
+ readonly seedShaderModule: (label: string, module: ShaderModule) => void;
59
+ }
60
+
61
+ function createShader(
62
+ input: Pick<GpuDrivenPbrModuleInput, 'device' | 'asyncCreateShaderModule'>,
63
+ code: string,
64
+ label: string,
65
+ ): Promise<Result<ShaderModule, RhiError>> {
66
+ return input.asyncCreateShaderModule
67
+ ? input.asyncCreateShaderModule(input.device, { code, label })
68
+ : Promise.resolve(invokeDeviceCreateShaderModule(input.device, { code, label }));
69
+ }
70
+
71
+ export async function buildGpuDrivenPbrReadyModules(
72
+ input: GpuDrivenPbrModuleInput,
73
+ ): Promise<GpuDrivenPbrReadyModules> {
74
+ let pbrSkinModule: ShaderModule | null = null;
75
+ const gpuDrivenPbrPrograms = new Map<string, GpuDrivenPbrProgram>();
76
+ if (input.pbrSkinEntry !== undefined && input.pbrSkinEntry.wgsl.length > 0) {
77
+ const result = await runShimStep(
78
+ () => createShader(input, input.pbrSkinEntry?.wgsl ?? '', 'pbr-skin'),
79
+ 'shader-compile-failed',
80
+ 'skinned PBR shader module compiled',
81
+ 'inspect manifest pbr-skin entry composed wgsl; check device.features',
82
+ );
83
+ if (!result.ok) throw result.error;
84
+ pbrSkinModule = result.value;
85
+ input.seedShaderModule(`module-${SKIN_MATERIAL_SHADER_ID}`, pbrSkinModule);
86
+ }
87
+ if (
88
+ input.storageBufferCapable &&
89
+ input.device.caps.compute &&
90
+ input.device.caps.indirectDrawing
91
+ ) {
92
+ const result = await runShimStep(
93
+ () => createShader(input, GPU_DRIVEN_VIEW_WGSL, 'gpu-driven-view'),
94
+ 'shader-compile-failed',
95
+ 'GPU-driven view shader module compiled',
96
+ 'inspect the GPU-driven view compute WGSL and check device.features',
97
+ );
98
+ if (!result.ok) throw result.error;
99
+ input.seedShaderModule('gpu-driven-view', result.value);
100
+ }
101
+ if (input.storageBufferCapable) {
102
+ for (const [materialId, entry] of [
103
+ ['forgeax::default-standard-pbr', input.pbrManifestEntry],
104
+ ['forgeax::pbr-skin', input.pbrSkinManifestEntry],
105
+ ] as const) {
106
+ for (const color of [false, true]) {
107
+ const variant = selectGpuDrivenSceneIndexVariant(
108
+ entry,
109
+ input.extendedLightingShaderAvailable,
110
+ input.directionalPcssAvailable,
111
+ input.projectorAvailable,
112
+ color,
113
+ );
114
+ if (variant === undefined || entry === undefined) continue;
115
+ const key = standardPbrProgramKey(materialId, color);
116
+ const artifact = assembleStandardPbrArtifact(materialId, variant.composedWgsl, color);
117
+ if (key === undefined || artifact === undefined) continue;
118
+ const result = await runShimStep(
119
+ () => createShader(input, artifact.wgsl, `gpu-driven-${key}`),
120
+ 'shader-compile-failed',
121
+ 'GPU-driven Standard PBR program compiled',
122
+ 'inspect the selected scene-index and vertex-color variant with its slot-3 ABI',
123
+ );
124
+ if (!result.ok) throw result.error;
125
+ gpuDrivenPbrPrograms.set(key, { module: result.value, artifact });
126
+ input.seedShaderModule(`gpu-driven-${key}`, result.value);
127
+ }
128
+ }
129
+ }
130
+ const declaredSkinVariants = selectSkinPrewarmVariants(
131
+ input.pbrSkinManifestEntry,
132
+ input.storageBufferCapable,
133
+ );
134
+ // The complete Cartesian product is useful for a full local/nightly boot,
135
+ // but compiling every pbr-skin capability combination in each lightweight
136
+ // Dawn process dominates CI startup (the renderer only needs the active
137
+ // device axes plus the two topology/color lanes). Other combinations remain
138
+ // available in the manifest and are still resolved lazily when requested.
139
+ const lightweightDawn =
140
+ (globalThis as { process?: { env?: { FORGEAX_DAWN_LIGHTWEIGHT?: string } } }).process?.env
141
+ ?.FORGEAX_DAWN_LIGHTWEIGHT === '1';
142
+ const skinVariants = lightweightDawn
143
+ ? declaredSkinVariants.filter((variant) => {
144
+ const defines = variant.defines;
145
+ return (
146
+ defines.STORAGE_BUFFER_AVAILABLE === input.storageBufferCapable &&
147
+ defines.PROBE_BLEND_AVAILABLE !== true &&
148
+ (!('EXTENDED_LIGHTING_AVAILABLE' in defines) ||
149
+ defines.EXTENDED_LIGHTING_AVAILABLE === input.extendedLightingShaderAvailable) &&
150
+ (!('DIRECTIONAL_PCSS_AVAILABLE' in defines) ||
151
+ defines.DIRECTIONAL_PCSS_AVAILABLE === input.directionalPcssAvailable) &&
152
+ (!('PROJECTOR_AVAILABLE' in defines) ||
153
+ defines.PROJECTOR_AVAILABLE === input.projectorAvailable) &&
154
+ defines.GPU_DRIVEN_SCENE_INDEX_AVAILABLE === false &&
155
+ defines.TRANSMISSION_AVAILABLE === false
156
+ );
157
+ })
158
+ : declaredSkinVariants;
159
+ for (const variant of skinVariants) {
160
+ const label = `module-${SKIN_MATERIAL_SHADER_ID}#${variant.definesKey}`;
161
+ const result = await runShimStep(
162
+ () => createShader(input, variant.composedWgsl, label),
163
+ 'shader-compile-failed',
164
+ `pbr-skin variant ${variant.definesKey || '<default>'} compiled`,
165
+ 'inspect the selected pbr-skin storage/cluster/color variant and device.features',
166
+ );
167
+ if (!result.ok) throw result.error;
168
+ input.seedShaderModule(label, result.value);
169
+ if (variant.definesKey === '')
170
+ input.seedShaderModule(`module-${SKIN_MATERIAL_SHADER_ID}`, result.value);
171
+ }
172
+ return { pbrSkinModule, gpuDrivenPbrPrograms };
173
+ }
174
+
175
+ export function buildGpuDrivenPbrReadyLayouts(
176
+ device: RhiDevice,
177
+ storageBufferCapable: boolean,
178
+ pbrLayouts: PbrPipelineLayoutBundle,
179
+ ): GpuDrivenPbrReadyLayouts {
180
+ let pbrSkinPipelineLayout: PipelineLayout | null = null;
181
+ let pbrSkinProbePipelineLayout: PipelineLayout | null = null;
182
+ let pbrSkinMeshBindGroupLayout: BindGroupLayout | null = null;
183
+ let gpuDrivenInstancesBindGroupLayout: BindGroupLayout | null = null;
184
+ let gpuDrivenPbrPipelineLayout: PipelineLayout | null = null;
185
+ let gpuDrivenPbrSkinPipelineLayout: PipelineLayout | null = null;
186
+ const skinResult = runShimSyncStep(
187
+ () => ok(buildPbrSkinLayouts(device, { storageBuffer: storageBufferCapable }, pbrLayouts)),
188
+ 'webgpu-runtime-error',
189
+ 'buildPbrSkinLayouts succeeded',
190
+ 'check device.limits.maxBindingsPerBindGroup (need >=14) and maxBindGroupsPerPipelineLayout',
191
+ );
192
+ if (skinResult.ok) {
193
+ pbrSkinPipelineLayout = skinResult.value.pipelineLayout;
194
+ pbrSkinProbePipelineLayout = skinResult.value.probePipelineLayout;
195
+ pbrSkinMeshBindGroupLayout = skinResult.value.meshArrayBgl;
196
+ }
197
+ if (storageBufferCapable) {
198
+ const layoutResult = runShimSyncStep(
199
+ () => {
200
+ const instances = buildGpuDrivenPbrInstancesBindGroupLayout(device, {
201
+ storageBuffer: true,
202
+ });
203
+ const rigid = buildGpuDrivenPbrPipelineLayout(device, pbrLayouts, instances);
204
+ const skin =
205
+ pbrSkinMeshBindGroupLayout === null
206
+ ? null
207
+ : buildGpuDrivenPbrSkinPipelineLayout(
208
+ device,
209
+ { ...pbrLayouts, meshArrayBgl: pbrSkinMeshBindGroupLayout },
210
+ instances,
211
+ );
212
+ return ok({ instances, rigid, skin });
213
+ },
214
+ 'webgpu-runtime-error',
215
+ 'build GPU-driven PBR pipeline layouts succeeded',
216
+ 'check the dedicated scene-index slot-3 storage layout and four-slot pipeline layouts',
217
+ );
218
+ if (layoutResult.ok) {
219
+ gpuDrivenInstancesBindGroupLayout = layoutResult.value.instances;
220
+ gpuDrivenPbrPipelineLayout = layoutResult.value.rigid;
221
+ gpuDrivenPbrSkinPipelineLayout = layoutResult.value.skin;
222
+ }
223
+ }
224
+ return {
225
+ pbrSkinPipelineLayout,
226
+ pbrSkinProbePipelineLayout,
227
+ pbrSkinMeshBindGroupLayout,
228
+ gpuDrivenInstancesBindGroupLayout,
229
+ gpuDrivenPbrPipelineLayout,
230
+ gpuDrivenPbrSkinPipelineLayout,
231
+ };
232
+ }
@@ -0,0 +1,26 @@
1
+ import type { MipmapShaderModuleFactory } from '@forgeax/engine-assets-runtime';
2
+ import type { RhiDevice } from '@forgeax/engine-rhi';
3
+ import type { GpuResidencyCache } from '../device/gpu-residency';
4
+ import type { RhiBackendPack } from './backend-contract';
5
+ import { MIPMAP_PREWARM_FORMATS } from './webgpu-ready-contract';
6
+
7
+ export function adaptMipmapShaderModuleFactory(
8
+ factory: RhiBackendPack['createShaderModule'],
9
+ ): MipmapShaderModuleFactory | undefined {
10
+ if (factory === undefined) return undefined;
11
+ return (device, descriptor) => factory(device as RhiDevice, descriptor);
12
+ }
13
+
14
+ /**
15
+ * Prewarm the mipmap pipeline while the renderer is still on its async ready
16
+ * path. A manifest-free camera-only renderer must not create the shader.
17
+ */
18
+ export async function prewarmMipmapPipeline(
19
+ rhiDevice: RhiDevice,
20
+ gpuStore: GpuResidencyCache,
21
+ hasMaterialManifest: boolean,
22
+ ): Promise<void> {
23
+ if (!hasMaterialManifest) return;
24
+ const result = await gpuStore.prewarmMipmapPipeline(rhiDevice, MIPMAP_PREWARM_FORMATS);
25
+ if (!result.ok) throw result.error;
26
+ }