@forgeax/engine-render 0.1.33 → 0.1.35

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 (624) hide show
  1. package/README.md +1062 -127
  2. package/dist/assembly/backend-contract.d.ts +2 -0
  3. package/dist/assembly/backend-contract.d.ts.map +1 -1
  4. package/dist/assembly/barrel-distortion-inspection.d.ts +3 -0
  5. package/dist/assembly/barrel-distortion-inspection.d.ts.map +1 -0
  6. package/dist/assembly/canvas-draw-guard.d.ts +3 -0
  7. package/dist/assembly/canvas-draw-guard.d.ts.map +1 -0
  8. package/dist/assembly/cloud-shadow-entry.d.ts +4 -0
  9. package/dist/assembly/cloud-shadow-entry.d.ts.map +1 -0
  10. package/dist/assembly/device-feature-admission.d.ts +2 -2
  11. package/dist/assembly/dynamic-geometry-host.d.ts +4 -1
  12. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
  13. package/dist/assembly/dynamic-geometry-runtime.d.ts +1 -1
  14. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -1
  15. package/dist/assembly/factory.d.ts +1 -1
  16. package/dist/assembly/factory.d.ts.map +1 -1
  17. package/dist/assembly/host-contract.d.ts +6 -5
  18. package/dist/assembly/host-contract.d.ts.map +1 -1
  19. package/dist/assembly/material/assembly.d.ts.map +1 -1
  20. package/dist/assembly/material/pipeline-helpers.d.ts +5 -0
  21. package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -1
  22. package/dist/assembly/material-shader-policy.d.ts +16 -2
  23. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  24. package/dist/assembly/material-shader-prewarm.d.ts.map +1 -1
  25. package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
  26. package/dist/assembly/recovery/renderer-recover.d.ts +2 -0
  27. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  28. package/dist/assembly/render-feature-post-processes.d.ts +6 -0
  29. package/dist/assembly/render-feature-post-processes.d.ts.map +1 -0
  30. package/dist/assembly/render-target-host.d.ts +5 -0
  31. package/dist/assembly/render-target-host.d.ts.map +1 -1
  32. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  33. package/dist/assembly/renderer-feature-inspection.d.ts +1 -1
  34. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -1
  35. package/dist/assembly/renderer-frame-transaction.d.ts +12 -0
  36. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  37. package/dist/assembly/renderer-inspection.d.ts +11 -0
  38. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  39. package/dist/assembly/webgpu-pbr-ready.d.ts +1 -0
  40. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -1
  41. package/dist/assembly/webgpu-ready-per-pass.d.ts +39 -0
  42. package/dist/assembly/webgpu-ready-per-pass.d.ts.map +1 -0
  43. package/dist/assembly/webgpu-ready.d.ts +1 -1
  44. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  45. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -1
  46. package/dist/assembly/webgpu-renderer-observation-owner.d.ts +35 -0
  47. package/dist/assembly/webgpu-renderer-observation-owner.d.ts.map +1 -0
  48. package/dist/assembly/webgpu-renderer.d.ts +2 -1
  49. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  50. package/dist/authoring.mjs +2 -4
  51. package/dist/authoring.mjs.map +1 -1
  52. package/dist/barrel-distortion.d.ts +47 -0
  53. package/dist/barrel-distortion.d.ts.map +1 -0
  54. package/dist/chunk-3XUBWRY2.mjs +1842 -0
  55. package/dist/chunk-3XUBWRY2.mjs.map +1 -0
  56. package/dist/{chunk-OO3DRYK7.mjs → chunk-G6HDNGY7.mjs} +2400 -1767
  57. package/dist/chunk-G6HDNGY7.mjs.map +1 -0
  58. package/dist/{chunk-ZDQWGQW7.mjs → chunk-LM5IE7GF.mjs} +4 -4
  59. package/dist/{chunk-ZDQWGQW7.mjs.map → chunk-LM5IE7GF.mjs.map} +1 -1
  60. package/dist/{chunk-VOZWDM3L.mjs → chunk-LNIUIKQ7.mjs} +1514 -498
  61. package/dist/chunk-LNIUIKQ7.mjs.map +1 -0
  62. package/dist/chunk-MXTWKZO4.mjs +3268 -0
  63. package/dist/chunk-MXTWKZO4.mjs.map +1 -0
  64. package/dist/chunk-MZ4C7EHF.mjs +6942 -0
  65. package/dist/chunk-MZ4C7EHF.mjs.map +1 -0
  66. package/dist/chunk-RIPAEGI6.mjs +48 -0
  67. package/dist/chunk-RIPAEGI6.mjs.map +1 -0
  68. package/dist/{chunk-LEAXOMYJ.mjs → chunk-SGPUJW3F.mjs} +117 -5
  69. package/dist/chunk-SGPUJW3F.mjs.map +1 -0
  70. package/dist/{chunk-PA5DRJNI.mjs → chunk-X2KA6WHM.mjs} +29 -4
  71. package/dist/chunk-X2KA6WHM.mjs.map +1 -0
  72. package/dist/{chunk-BLXGONR2.mjs → chunk-XSFB7XXQ.mjs} +51 -4
  73. package/dist/chunk-XSFB7XXQ.mjs.map +1 -0
  74. package/dist/cloud/density.d.ts +55 -0
  75. package/dist/cloud/density.d.ts.map +1 -0
  76. package/dist/cloud/extract.d.ts +25 -0
  77. package/dist/cloud/extract.d.ts.map +1 -0
  78. package/dist/cloud/feature.d.ts +57 -0
  79. package/dist/cloud/feature.d.ts.map +1 -0
  80. package/dist/cloud/frame-context.d.ts +8 -0
  81. package/dist/cloud/frame-context.d.ts.map +1 -0
  82. package/dist/cloud/inspection.d.ts +59 -0
  83. package/dist/cloud/inspection.d.ts.map +1 -0
  84. package/dist/cloud/optics.d.ts +56 -0
  85. package/dist/cloud/optics.d.ts.map +1 -0
  86. package/dist/cloud/parameters.d.ts +73 -0
  87. package/dist/cloud/parameters.d.ts.map +1 -0
  88. package/dist/cloud/resources.d.ts +60 -0
  89. package/dist/cloud/resources.d.ts.map +1 -0
  90. package/dist/cloud/shadow.d.ts +42 -0
  91. package/dist/cloud/shadow.d.ts.map +1 -0
  92. package/dist/cloud/temporal.d.ts +74 -0
  93. package/dist/cloud/temporal.d.ts.map +1 -0
  94. package/dist/components/barrel-distortion.d.ts +13 -0
  95. package/dist/components/barrel-distortion.d.ts.map +1 -0
  96. package/dist/components/cloud-layer.d.ts +29 -0
  97. package/dist/components/cloud-layer.d.ts.map +1 -0
  98. package/dist/components/index.d.ts +2 -0
  99. package/dist/components/index.d.ts.map +1 -1
  100. package/dist/components/instances.d.ts +20 -6
  101. package/dist/components/instances.d.ts.map +1 -1
  102. package/dist/construct-renderer.d.ts +1 -1
  103. package/dist/construct-renderer.d.ts.map +1 -1
  104. package/dist/construct-renderer.mjs +8406 -5785
  105. package/dist/construct-renderer.mjs.map +1 -1
  106. package/dist/device/gpu-residency.d.ts +19 -19
  107. package/dist/device/gpu-residency.d.ts.map +1 -1
  108. package/dist/dynamic-geometry.d.ts +5 -1
  109. package/dist/dynamic-geometry.d.ts.map +1 -1
  110. package/dist/errors/cloud.d.ts +59 -0
  111. package/dist/errors/cloud.d.ts.map +1 -0
  112. package/dist/errors/render.d.ts +20 -5
  113. package/dist/errors/render.d.ts.map +1 -1
  114. package/dist/examples/single-layer-medium-surface.d.ts +47 -0
  115. package/dist/examples/single-layer-medium-surface.d.ts.map +1 -0
  116. package/dist/extract/camera.d.ts.map +1 -1
  117. package/dist/extract/contracts.d.ts +5 -1
  118. package/dist/extract/contracts.d.ts.map +1 -1
  119. package/dist/extract/material-context.d.ts +7 -0
  120. package/dist/extract/material-context.d.ts.map +1 -0
  121. package/dist/features/barrel-distortion.d.ts +29 -0
  122. package/dist/features/barrel-distortion.d.ts.map +1 -0
  123. package/dist/features/error-reporting.d.ts +6 -2
  124. package/dist/features/error-reporting.d.ts.map +1 -1
  125. package/dist/features/host.d.ts +15 -0
  126. package/dist/features/host.d.ts.map +1 -1
  127. package/dist/features/plan.d.ts +10 -0
  128. package/dist/features/plan.d.ts.map +1 -1
  129. package/dist/features/render-graph-contribution.d.ts +5 -0
  130. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  131. package/dist/features/render-graph-raster.d.ts +1 -0
  132. package/dist/features/render-graph-raster.d.ts.map +1 -1
  133. package/dist/features/targets.d.ts +2 -0
  134. package/dist/features/targets.d.ts.map +1 -1
  135. package/dist/features/types.d.ts +48 -0
  136. package/dist/features/types.d.ts.map +1 -1
  137. package/dist/fullscreen-post-process-pass.d.ts +15 -7
  138. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  139. package/dist/glyph-text-layout-system.d.ts +1 -1
  140. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  141. package/dist/gpu-dirty-ranges.d.ts +11 -0
  142. package/dist/gpu-dirty-ranges.d.ts.map +1 -0
  143. package/dist/gpu-driven/batch-topology.d.ts +17 -0
  144. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  145. package/dist/gpu-driven/material-artifacts.d.ts +6 -0
  146. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
  147. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  148. package/dist/gpu-driven/production-raster-material.d.ts +178 -0
  149. package/dist/gpu-driven/production-raster-material.d.ts.map +1 -0
  150. package/dist/gpu-driven/production-raster.d.ts +47 -3
  151. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  152. package/dist/gpu-driven/resource-allocation.d.ts +31 -0
  153. package/dist/gpu-driven/resource-allocation.d.ts.map +1 -0
  154. package/dist/gpu-driven/shadow-ownership.d.ts +14 -0
  155. package/dist/gpu-driven/shadow-ownership.d.ts.map +1 -0
  156. package/dist/gpu-driven/view-gpu.d.ts +26 -2
  157. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  158. package/dist/gpu-scene.d.ts +5 -0
  159. package/dist/gpu-scene.d.ts.map +1 -1
  160. package/dist/hdrp-buffers.d.ts +2 -2
  161. package/dist/hdrp-buffers.d.ts.map +1 -1
  162. package/dist/ibl/frame-resources.d.ts.map +1 -1
  163. package/dist/ibl/skylight-bind-group.d.ts +14 -5
  164. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  165. package/dist/index.d.ts +30 -7
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.mjs +780 -9
  168. package/dist/index.mjs.map +1 -1
  169. package/dist/inspection-types.d.ts +135 -1
  170. package/dist/inspection-types.d.ts.map +1 -1
  171. package/dist/instance-buffer-cache.d.ts +4 -4
  172. package/dist/instance-buffer-cache.d.ts.map +1 -1
  173. package/dist/instances.d.ts +47 -100
  174. package/dist/instances.d.ts.map +1 -1
  175. package/dist/internal.mjs +7 -8
  176. package/dist/internal.mjs.map +1 -1
  177. package/dist/pbr-pipeline.d.ts +22 -4
  178. package/dist/pbr-pipeline.d.ts.map +1 -1
  179. package/dist/pipeline/single-layer-medium-passes.d.ts +73 -0
  180. package/dist/pipeline/single-layer-medium-passes.d.ts.map +1 -0
  181. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  182. package/dist/pipeline/standard-output/graph.d.ts.map +1 -1
  183. package/dist/pipeline/standard-output/lut-gpu.d.ts +2 -2
  184. package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -1
  185. package/dist/pipeline/standard-output/resources.d.ts +2 -2
  186. package/dist/pipeline/standard-output/resources.d.ts.map +1 -1
  187. package/dist/pipeline/standard-output/types.d.ts +4 -2
  188. package/dist/pipeline/standard-output/types.d.ts.map +1 -1
  189. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  190. package/dist/pipeline/standard-post.d.ts.map +1 -1
  191. package/dist/pipeline-builder.d.ts +1 -1
  192. package/dist/pipeline-builder.d.ts.map +1 -1
  193. package/dist/plugin.d.ts.map +1 -1
  194. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -0
  195. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  196. package/dist/publication/contract.d.ts +77 -0
  197. package/dist/publication/contract.d.ts.map +1 -0
  198. package/dist/publication/dependencies.d.ts +7 -0
  199. package/dist/publication/dependencies.d.ts.map +1 -0
  200. package/dist/publication/prepare-geometry.d.ts +9 -0
  201. package/dist/publication/prepare-geometry.d.ts.map +1 -0
  202. package/dist/publication/programs.d.ts +5 -0
  203. package/dist/publication/programs.d.ts.map +1 -0
  204. package/dist/publication/publisher.d.ts +33 -0
  205. package/dist/publication/publisher.d.ts.map +1 -0
  206. package/dist/publication/receiver.d.ts +29 -0
  207. package/dist/publication/receiver.d.ts.map +1 -0
  208. package/dist/publication/resource-scope.d.ts +18 -0
  209. package/dist/publication/resource-scope.d.ts.map +1 -0
  210. package/dist/publication/targets.d.ts +33 -0
  211. package/dist/publication/targets.d.ts.map +1 -0
  212. package/dist/publication/video.d.ts +5 -0
  213. package/dist/publication/video.d.ts.map +1 -0
  214. package/dist/record/barrel-distortion-frame.d.ts +15 -0
  215. package/dist/record/barrel-distortion-frame.d.ts.map +1 -0
  216. package/dist/record/dynamic-geometry-consumption.d.ts +10 -2
  217. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -1
  218. package/dist/record/fold-buckets.d.ts +95 -0
  219. package/dist/record/fold-buckets.d.ts.map +1 -0
  220. package/dist/record/fold-instance-buffer.d.ts +6 -0
  221. package/dist/record/fold-instance-buffer.d.ts.map +1 -0
  222. package/dist/record/frame-lighting.d.ts +1 -0
  223. package/dist/record/frame-lighting.d.ts.map +1 -1
  224. package/dist/record/frame-snapshot.d.ts +43 -9
  225. package/dist/record/frame-snapshot.d.ts.map +1 -1
  226. package/dist/record/frame.d.ts +15 -65
  227. package/dist/record/frame.d.ts.map +1 -1
  228. package/dist/record/gpu-draw-receipts.d.ts +11 -0
  229. package/dist/record/gpu-draw-receipts.d.ts.map +1 -0
  230. package/dist/record/gpu-timing.d.ts +8 -0
  231. package/dist/record/gpu-timing.d.ts.map +1 -1
  232. package/dist/record/helpers.d.ts +2 -2
  233. package/dist/record/helpers.d.ts.map +1 -1
  234. package/dist/record/main-pass-geometry.d.ts +22 -6
  235. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  236. package/dist/record/main-pass-material.d.ts +14 -10
  237. package/dist/record/main-pass-material.d.ts.map +1 -1
  238. package/dist/record/main-pass-sprite-draws.d.ts +3 -16
  239. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  240. package/dist/record/main-pass.d.ts +13 -2
  241. package/dist/record/main-pass.d.ts.map +1 -1
  242. package/dist/record/motion-blur-receipt.d.ts +11 -0
  243. package/dist/record/motion-blur-receipt.d.ts.map +1 -0
  244. package/dist/record/prepared-material-bindings.d.ts +3 -3
  245. package/dist/record/prepared-material-bindings.d.ts.map +1 -1
  246. package/dist/record/probe-blend-buffer.d.ts +16 -0
  247. package/dist/record/probe-blend-buffer.d.ts.map +1 -0
  248. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  249. package/dist/record/render-context.d.ts +24 -5
  250. package/dist/record/render-context.d.ts.map +1 -1
  251. package/dist/record/shadow-pass.d.ts +2 -0
  252. package/dist/record/shadow-pass.d.ts.map +1 -1
  253. package/dist/record/skybox-post-pass.d.ts +1 -1
  254. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  255. package/dist/record/sprite-instance-buffer.d.ts +31 -0
  256. package/dist/record/sprite-instance-buffer.d.ts.map +1 -0
  257. package/dist/record/target-capture-graph.d.ts +19 -0
  258. package/dist/record/target-capture-graph.d.ts.map +1 -0
  259. package/dist/record/typed-frame-graph.d.ts +24 -15
  260. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  261. package/dist/record/view-ubo.d.ts +11 -3
  262. package/dist/record/view-ubo.d.ts.map +1 -1
  263. package/dist/record/volume-params.d.ts +9 -0
  264. package/dist/record/volume-params.d.ts.map +1 -0
  265. package/dist/recovery/render-system-candidate.d.ts +14 -4
  266. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  267. package/dist/reflection/record-owner.d.ts.map +1 -1
  268. package/dist/render-contract.d.ts +46 -5
  269. package/dist/render-contract.d.ts.map +1 -1
  270. package/dist/render-graph-primitives.d.ts.map +1 -1
  271. package/dist/render-pipeline.d.ts +103 -2
  272. package/dist/render-pipeline.d.ts.map +1 -1
  273. package/dist/render-system-extract-tail.d.ts +3 -2
  274. package/dist/render-system-extract-tail.d.ts.map +1 -1
  275. package/dist/render-system-extract.d.ts +18 -9
  276. package/dist/render-system-extract.d.ts.map +1 -1
  277. package/dist/render-system-presentation.d.ts +23 -0
  278. package/dist/render-system-presentation.d.ts.map +1 -0
  279. package/dist/render-system-producer-roots.d.ts +10 -0
  280. package/dist/render-system-producer-roots.d.ts.map +1 -0
  281. package/dist/render-system-projections.d.ts +3 -2
  282. package/dist/render-system-projections.d.ts.map +1 -1
  283. package/dist/render-system-residency.d.ts +12 -0
  284. package/dist/render-system-residency.d.ts.map +1 -0
  285. package/dist/render-system.d.ts +22 -21
  286. package/dist/render-system.d.ts.map +1 -1
  287. package/dist/scene/probe-blend.d.ts +27 -0
  288. package/dist/scene/probe-blend.d.ts.map +1 -1
  289. package/dist/scene/render-scene.d.ts +18 -7
  290. package/dist/scene/render-scene.d.ts.map +1 -1
  291. package/dist/scene/render-source.d.ts +42 -0
  292. package/dist/scene/render-source.d.ts.map +1 -0
  293. package/dist/scene/source-systems.d.ts +6 -0
  294. package/dist/scene/source-systems.d.ts.map +1 -0
  295. package/dist/ssao-buffers.d.ts +9 -0
  296. package/dist/ssao-buffers.d.ts.map +1 -1
  297. package/dist/surface/dynamic-input.d.ts +133 -0
  298. package/dist/surface/dynamic-input.d.ts.map +1 -0
  299. package/dist/surface/gpu-driven.d.ts +41 -0
  300. package/dist/surface/gpu-driven.d.ts.map +1 -0
  301. package/dist/surface/submission-observation.d.ts +136 -0
  302. package/dist/surface/submission-observation.d.ts.map +1 -0
  303. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  304. package/dist/systems/skin-palette-types.d.ts +10 -0
  305. package/dist/systems/skin-palette-types.d.ts.map +1 -1
  306. package/dist/systems/transparent-dispatch.d.ts +2 -2
  307. package/dist/systems/transparent-dispatch.d.ts.map +1 -1
  308. package/dist/systems/transparent-sort-config.d.ts +2 -1
  309. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  310. package/dist/temporal/gpu.d.ts +13 -1
  311. package/dist/temporal/gpu.d.ts.map +1 -1
  312. package/dist/temporal/index.mjs +6 -7
  313. package/dist/temporal/inspection.d.ts.map +1 -1
  314. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  315. package/dist/temporal/target-coverage-attachment.d.ts.map +1 -1
  316. package/dist/transmission/single-layer-medium.d.ts +89 -0
  317. package/dist/transmission/single-layer-medium.d.ts.map +1 -0
  318. package/dist/typed-render-graph-primitives.d.ts +14 -2
  319. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  320. package/dist/volume/component.d.ts +9 -4
  321. package/dist/volume/component.d.ts.map +1 -1
  322. package/dist/volume/extract.d.ts +1 -1
  323. package/dist/volume/extract.d.ts.map +1 -1
  324. package/dist/volume/inspection.d.ts +2 -0
  325. package/dist/volume/inspection.d.ts.map +1 -1
  326. package/dist/volume/passes.d.ts +4 -1
  327. package/dist/volume/passes.d.ts.map +1 -1
  328. package/dist/volume/resources.d.ts.map +1 -1
  329. package/package.json +22 -21
  330. package/src/__tests__/atmosphere-daylight.dawn.test.ts +72 -0
  331. package/src/__tests__/auto-exposure-transaction.integration.test.ts +4 -9
  332. package/src/__tests__/barrel-distortion-lkg.integration.test.ts +353 -0
  333. package/src/__tests__/barrel-distortion.dawn.test.ts +41 -0
  334. package/src/__tests__/barrel-distortion.unit.test.ts +364 -0
  335. package/src/__tests__/construct-renderer-identity.unit.test.ts +49 -0
  336. package/src/__tests__/detached-recovery-graph.unit.test.ts +277 -0
  337. package/src/__tests__/device-feature-admission.unit.test.ts +3 -2
  338. package/src/__tests__/device-loss-fanout.unit.test.ts +36 -1
  339. package/src/__tests__/docs-gate-green.unit.test.ts +112 -1
  340. package/src/__tests__/factory-contract.integration.test.ts +295 -45
  341. package/src/__tests__/feature-depth-input.dawn.test.ts +129 -2
  342. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +14 -3
  343. package/src/__tests__/gpu-dirty-ranges.unit.test.ts +22 -0
  344. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +16 -3
  345. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +12 -0
  346. package/src/__tests__/gpu-driven-material-artifacts.unit.test.ts +143 -0
  347. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +5 -6
  348. package/src/__tests__/gpu-driven-production.integration.test.ts +482 -3
  349. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +6 -5
  350. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +94 -6
  351. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +18 -2
  352. package/src/__tests__/gpu-driven-view.browser.test.ts +5 -8
  353. package/src/__tests__/gpu-driven-view.dawn.test.ts +6 -2
  354. package/src/__tests__/gpu-driven-view.unit.test.ts +1 -1
  355. package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +1 -0
  356. package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -4
  357. package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +1 -0
  358. package/src/__tests__/gpu-scene.unit.test.ts +119 -9
  359. package/src/__tests__/instance-allocation-failure.unit.test.ts +57 -0
  360. package/src/__tests__/instances-culling.integration.test.ts +10 -36
  361. package/src/__tests__/instances-store.unit.test.ts +97 -305
  362. package/src/__tests__/instances-world-ownership.integration.test.ts +62 -0
  363. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +4 -1
  364. package/src/__tests__/main-pass-material-medium-selection.unit.test.ts +145 -0
  365. package/src/__tests__/material-shader-prewarm.unit.test.ts +59 -0
  366. package/src/__tests__/material-snapshot-mutation.integration.test.ts +39 -1
  367. package/src/__tests__/materials-standard-contract.unit.test.ts +0 -1
  368. package/src/__tests__/morph-culling-reentry.dawn.test.ts +5 -5
  369. package/src/__tests__/morph-visual-evidence.integration.test.ts +8 -7
  370. package/src/__tests__/motion-blur-compute.dawn.test.ts +13 -7
  371. package/src/__tests__/motion-blur.pixel.integration.test.ts +2 -2
  372. package/src/__tests__/nineslice-handle-surface.unit.test.ts +4 -4
  373. package/src/__tests__/pbr-view-layout.unit.test.ts +9 -0
  374. package/src/__tests__/physical-clearcoat.integration.test.ts +66 -8
  375. package/src/__tests__/physical-material-budget.unit.test.ts +40 -0
  376. package/src/__tests__/prepared-graphics-capability.unit.test.ts +66 -2
  377. package/src/__tests__/probe-bindings.unit.test.ts +582 -1
  378. package/src/__tests__/probe-scene-dirty.integration.test.ts +28 -1
  379. package/src/__tests__/receipt-observation-retirement.unit.test.ts +65 -0
  380. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +69 -0
  381. package/src/__tests__/render-error-code-owner.test-d.ts +8 -0
  382. package/src/__tests__/render-feature-diagnostics.unit.test.ts +15 -2
  383. package/src/__tests__/render-feature-error-reporting.unit.test.ts +21 -1
  384. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +10 -1
  385. package/src/__tests__/render-feature-retry.unit.test.ts +12 -1
  386. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +145 -19
  387. package/src/__tests__/render-scene-projection.unit.test.ts +36 -11
  388. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +20 -20
  389. package/src/__tests__/render-target-probe-soak.perf.test.ts +2 -2
  390. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +3 -3
  391. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +5 -2
  392. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +42 -8
  393. package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +16 -0
  394. package/src/__tests__/renderer-frame-transaction.integration.test.ts +26 -10
  395. package/src/__tests__/resource-allocation.unit.test.ts +123 -0
  396. package/src/__tests__/single-layer-medium-passes.unit.test.ts +275 -0
  397. package/src/__tests__/skin-motion-regression.unit.test.ts +70 -1
  398. package/src/__tests__/skin-palette-recycling.dawn.test.ts +97 -0
  399. package/src/__tests__/skinned-shadow-caster.test.ts +15 -0
  400. package/src/__tests__/ssr-carrier-public-contract.unit.test.ts +21 -0
  401. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +4 -4
  402. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +2 -2
  403. package/src/__tests__/ssr-gpu-dispatch.ts +1 -1
  404. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +6 -2
  405. package/src/__tests__/standard-output-chain-contract.unit.test.ts +28 -0
  406. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +46 -1
  407. package/src/__tests__/standard-pipeline.integration.test.ts +182 -1
  408. package/src/__tests__/surface-dynamic-buffer-lifecycle.unit.test.ts +506 -0
  409. package/src/__tests__/surface-submission-observation.unit.test.ts +812 -0
  410. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +32 -0
  411. package/src/__tests__/temporal-performance.integration.test.ts +3 -3
  412. package/src/__tests__/visibility-instances.integration.test.ts +7 -19
  413. package/src/__tests__/visibility-producer-matrix.integration.test.ts +9 -20
  414. package/src/__tests__/volume-optics-oracle.unit.test.ts +4 -2
  415. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +30 -20
  416. package/src/__tests__/volumetric-fog-errors.unit.test.ts +4 -3
  417. package/src/__tests__/volumetric-fog-multiple.unit.test.ts +55 -0
  418. package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +1 -1
  419. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +113 -9
  420. package/src/__tests__/volumetric-fog-topology.unit.test.ts +5 -3
  421. package/src/assembly/backend-contract.ts +30 -0
  422. package/src/assembly/barrel-distortion-inspection.ts +22 -0
  423. package/src/assembly/canvas-draw-guard.ts +11 -0
  424. package/src/assembly/cloud-shadow-entry.ts +22 -0
  425. package/src/assembly/device-feature-admission.ts +2 -2
  426. package/src/assembly/dynamic-geometry-host.ts +65 -37
  427. package/src/assembly/dynamic-geometry-runtime.ts +7 -1
  428. package/src/assembly/factory.ts +2 -30
  429. package/src/assembly/host-contract.ts +8 -5
  430. package/src/assembly/material/assembly.ts +25 -13
  431. package/src/assembly/material/pipeline-helpers.ts +53 -12
  432. package/src/assembly/material-shader-policy.ts +55 -0
  433. package/src/assembly/material-shader-prewarm.ts +21 -10
  434. package/src/assembly/recovery/device-loss-fanout.ts +13 -0
  435. package/src/assembly/recovery/renderer-recover.ts +50 -18
  436. package/src/assembly/render-feature-post-processes.ts +54 -0
  437. package/src/assembly/render-target-host.ts +57 -47
  438. package/src/assembly/renderer-facade.ts +7 -2
  439. package/src/assembly/renderer-feature-inspection.ts +8 -2
  440. package/src/assembly/renderer-frame-transaction.ts +23 -0
  441. package/src/assembly/renderer-inspection.ts +28 -0
  442. package/src/assembly/skin-palette-owner.ts +1 -1
  443. package/src/assembly/temporal-post-process-prewarm.ts +3 -3
  444. package/src/assembly/webgpu-pbr-ready.ts +9 -1
  445. package/src/assembly/webgpu-ready-per-pass.ts +104 -0
  446. package/src/assembly/webgpu-ready.ts +116 -62
  447. package/src/assembly/webgpu-renderer-bootstrap.ts +0 -12
  448. package/src/assembly/webgpu-renderer-observation-owner.ts +222 -0
  449. package/src/assembly/webgpu-renderer.ts +303 -313
  450. package/src/assembly/webgpu-vertex-layouts.ts +1 -1
  451. package/src/barrel-distortion.ts +247 -0
  452. package/src/cloud/__tests__/cloud-density-parity.dawn.test.ts +173 -0
  453. package/src/cloud/__tests__/cloud-layer-framebuffer-y.dawn.test.ts +265 -0
  454. package/src/cloud/__tests__/cloud-layer.browser.test.ts +432 -0
  455. package/src/cloud/__tests__/cloud-layer.unit.test.ts +634 -0
  456. package/src/cloud/density.ts +600 -0
  457. package/src/cloud/extract.ts +110 -0
  458. package/src/cloud/feature.ts +1810 -0
  459. package/src/cloud/frame-context.ts +42 -0
  460. package/src/cloud/inspection.ts +130 -0
  461. package/src/cloud/optics.ts +285 -0
  462. package/src/cloud/parameters.ts +255 -0
  463. package/src/cloud/resources.ts +122 -0
  464. package/src/cloud/shadow.ts +167 -0
  465. package/src/cloud/temporal.ts +226 -0
  466. package/src/components/barrel-distortion.ts +46 -0
  467. package/src/components/cloud-layer.ts +47 -0
  468. package/src/components/index.ts +2 -0
  469. package/src/components/instances.ts +18 -45
  470. package/src/components/sprite-instances.ts +1 -1
  471. package/src/construct-renderer.ts +1 -1
  472. package/src/device/gpu-residency.ts +26 -25
  473. package/src/dynamic-geometry.ts +12 -1
  474. package/src/errors/cloud.ts +103 -0
  475. package/src/errors/render.ts +47 -8
  476. package/src/examples/single-layer-medium-surface.ts +59 -0
  477. package/src/extract/camera.ts +15 -1
  478. package/src/extract/contracts.ts +5 -0
  479. package/src/extract/material-context.ts +21 -0
  480. package/src/features/barrel-distortion.ts +172 -0
  481. package/src/features/error-reporting.ts +26 -6
  482. package/src/features/host.ts +128 -19
  483. package/src/features/plan.ts +10 -0
  484. package/src/features/render-graph-contribution.ts +9 -0
  485. package/src/features/render-graph-raster.ts +45 -3
  486. package/src/features/targets.ts +66 -0
  487. package/src/features/types.ts +51 -0
  488. package/src/fullscreen-post-process-pass.ts +41 -9
  489. package/src/glyph-text-layout-system.ts +2 -2
  490. package/src/gpu-dirty-ranges.ts +48 -0
  491. package/src/gpu-driven/batch-topology.ts +53 -0
  492. package/src/gpu-driven/material-artifacts.ts +33 -25
  493. package/src/gpu-driven/prepared-draw.ts +12 -4
  494. package/src/gpu-driven/production-raster-material.ts +1894 -0
  495. package/src/gpu-driven/production-raster.ts +825 -784
  496. package/src/gpu-driven/resource-allocation.ts +142 -0
  497. package/src/gpu-driven/shadow-ownership.ts +71 -0
  498. package/src/gpu-driven/view-gpu.ts +164 -10
  499. package/src/gpu-scene.ts +75 -84
  500. package/src/hdrp-buffers.ts +4 -3
  501. package/src/ibl/frame-resources.ts +0 -1
  502. package/src/ibl/skylight-bind-group.ts +62 -32
  503. package/src/index.ts +205 -9
  504. package/src/inspection-types.ts +162 -0
  505. package/src/instance-buffer-cache.ts +4 -4
  506. package/src/instances.ts +152 -569
  507. package/src/pbr-pipeline.ts +230 -30
  508. package/src/pipeline/single-layer-medium-passes.ts +267 -0
  509. package/src/pipeline/standard-forward-lane.ts +313 -57
  510. package/src/pipeline/standard-output/graph.ts +8 -2
  511. package/src/pipeline/standard-output/lut-gpu.ts +3 -3
  512. package/src/pipeline/standard-output/resources.ts +2 -2
  513. package/src/pipeline/standard-output/types.ts +12 -1
  514. package/src/pipeline/standard-pipeline.ts +291 -18
  515. package/src/pipeline/standard-post.ts +90 -24
  516. package/src/pipeline-builder.ts +1 -1
  517. package/src/plugin.ts +4 -0
  518. package/src/points-lines/__tests__/points-lines.bench.ts +17 -8
  519. package/src/prepare/prepared-graphics-resolver.ts +2 -0
  520. package/src/publication/__tests__/derived-geometry.integration.test.ts +177 -0
  521. package/src/publication/__tests__/features.integration.test.ts +122 -0
  522. package/src/publication/__tests__/programs.unit.test.ts +25 -0
  523. package/src/publication/__tests__/publication.integration.test.ts +370 -0
  524. package/src/publication/__tests__/targets.integration.test.ts +120 -0
  525. package/src/publication/__tests__/video.browser.test.ts +50 -0
  526. package/src/publication/contract.ts +104 -0
  527. package/src/publication/dependencies.ts +54 -0
  528. package/src/publication/prepare-geometry.ts +94 -0
  529. package/src/publication/programs.ts +45 -0
  530. package/src/publication/publisher.ts +618 -0
  531. package/src/publication/receiver.ts +297 -0
  532. package/src/publication/resource-scope.ts +31 -0
  533. package/src/publication/targets.ts +182 -0
  534. package/src/publication/video.ts +33 -0
  535. package/src/record/__tests__/main-pass-geometry.unit.test.ts +30 -0
  536. package/src/record/__tests__/material-bg-cache.unit.test.ts +15 -1
  537. package/src/record/__tests__/sprite-material-abi.unit.test.ts +9 -11
  538. package/src/record/__tests__/temporal-payload.unit.test.ts +1 -1
  539. package/src/record/__tests__/transparent-group2-selection.unit.test.ts +11 -0
  540. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +1 -0
  541. package/src/record/__tests__/video-texture-view.unit.test.ts +9 -9
  542. package/src/record/__tests__/view-ubo-layout.unit.test.ts +4 -3
  543. package/src/record/barrel-distortion-frame.ts +110 -0
  544. package/src/record/dynamic-geometry-consumption.ts +39 -9
  545. package/src/record/fold-buckets.ts +855 -0
  546. package/src/record/fold-instance-buffer.ts +51 -0
  547. package/src/record/frame-lighting.ts +36 -2
  548. package/src/record/frame-snapshot.ts +45 -9
  549. package/src/record/frame.ts +258 -1105
  550. package/src/record/gpu-draw-receipts.ts +38 -0
  551. package/src/record/gpu-timing.ts +48 -5
  552. package/src/record/helpers.ts +2 -2
  553. package/src/record/main-pass-geometry.ts +272 -84
  554. package/src/record/main-pass-material.ts +102 -36
  555. package/src/record/main-pass-sprite-draws.ts +13 -217
  556. package/src/record/main-pass.ts +164 -27
  557. package/src/record/motion-blur-receipt.ts +91 -0
  558. package/src/record/prepared-material-bindings.ts +11 -6
  559. package/src/record/probe-blend-buffer.ts +180 -0
  560. package/src/record/recovery-pipeline.ts +35 -3
  561. package/src/record/render-context.ts +41 -5
  562. package/src/record/shadow-pass.ts +30 -4
  563. package/src/record/skybox-post-pass.ts +28 -4
  564. package/src/record/sprite-instance-buffer.ts +155 -0
  565. package/src/record/target-capture-graph.ts +258 -0
  566. package/src/record/typed-frame-graph.ts +776 -340
  567. package/src/record/view-ubo.ts +27 -4
  568. package/src/record/volume-params.ts +225 -0
  569. package/src/recovery/render-system-candidate.ts +243 -50
  570. package/src/reflection/record-owner.ts +7 -3
  571. package/src/render-contract.ts +54 -5
  572. package/src/render-graph-primitives.ts +7 -1
  573. package/src/render-pipeline.ts +130 -0
  574. package/src/render-system-extract-tail.ts +90 -78
  575. package/src/render-system-extract.ts +76 -76
  576. package/src/render-system-presentation.ts +56 -0
  577. package/src/render-system-producer-roots.ts +96 -0
  578. package/src/render-system-projections.ts +3 -2
  579. package/src/render-system-residency.ts +159 -0
  580. package/src/render-system.ts +421 -408
  581. package/src/scene/probe-blend.ts +96 -4
  582. package/src/scene/render-scene.ts +416 -337
  583. package/src/scene/render-source.ts +90 -0
  584. package/src/scene/source-systems.ts +33 -0
  585. package/src/ssao-buffers.ts +95 -2
  586. package/src/surface/__tests__/dynamic-input.unit.test.ts +374 -0
  587. package/src/surface/__tests__/gpu-driven.unit.test.ts +87 -0
  588. package/src/surface/dynamic-input.ts +658 -0
  589. package/src/surface/gpu-driven.ts +147 -0
  590. package/src/surface/submission-observation.ts +517 -0
  591. package/src/systems/skin-palette-allocator.ts +5 -1
  592. package/src/systems/skin-palette-types.ts +11 -0
  593. package/src/systems/transparent-dispatch.ts +2 -2
  594. package/src/systems/transparent-sort-config.ts +3 -1
  595. package/src/temporal/gpu.ts +101 -17
  596. package/src/temporal/inspection.ts +7 -1
  597. package/src/temporal/standard-scene-data.ts +5 -0
  598. package/src/temporal/target-coverage-attachment.ts +4 -0
  599. package/src/transmission/__tests__/single-layer-medium.unit.test.ts +149 -0
  600. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +12 -11
  601. package/src/transmission/single-layer-medium.ts +322 -0
  602. package/src/typed-render-graph-primitives.ts +70 -2
  603. package/src/volume/component.ts +10 -9
  604. package/src/volume/extract.ts +11 -5
  605. package/src/volume/inspection.ts +3 -0
  606. package/src/volume/passes.ts +87 -4
  607. package/src/volume/resources.ts +2 -1
  608. package/dist/chunk-3RTCJTH4.mjs +0 -1610
  609. package/dist/chunk-3RTCJTH4.mjs.map +0 -1
  610. package/dist/chunk-BLXGONR2.mjs.map +0 -1
  611. package/dist/chunk-ILQ5MEZF.mjs +0 -32
  612. package/dist/chunk-ILQ5MEZF.mjs.map +0 -1
  613. package/dist/chunk-LEAXOMYJ.mjs.map +0 -1
  614. package/dist/chunk-NB2S7ZRX.mjs +0 -1783
  615. package/dist/chunk-NB2S7ZRX.mjs.map +0 -1
  616. package/dist/chunk-NNQL7CB3.mjs +0 -1713
  617. package/dist/chunk-NNQL7CB3.mjs.map +0 -1
  618. package/dist/chunk-OO3DRYK7.mjs.map +0 -1
  619. package/dist/chunk-PA5DRJNI.mjs.map +0 -1
  620. package/dist/chunk-PLAXOOX5.mjs +0 -1907
  621. package/dist/chunk-PLAXOOX5.mjs.map +0 -1
  622. package/dist/chunk-RXZ3RGOU.mjs +0 -53
  623. package/dist/chunk-RXZ3RGOU.mjs.map +0 -1
  624. package/dist/chunk-VOZWDM3L.mjs.map +0 -1
@@ -79,6 +79,11 @@ interface ReadbackRecord {
79
79
  export interface RenderTargetHost {
80
80
  /** The logical owner for every target lifecycle operation. */
81
81
  readonly owner: 'renderer';
82
+ /** Logical descriptions for the source publication boundary; no physical state escapes. */
83
+ descriptions(): readonly {
84
+ readonly target: RenderTarget;
85
+ readonly descriptor: RenderTargetDescriptor;
86
+ }[];
82
87
  createRenderTarget(descriptor: RenderTargetDescriptor): RenderResult<RenderTarget, RenderError>;
83
88
  resizeRenderTarget(
84
89
  target: RenderTarget,
@@ -231,53 +236,51 @@ function makePhysical(
231
236
  const faceViews: TextureView[] = [];
232
237
  const depthTextures: Texture[] = [];
233
238
  const depthViews: TextureView[] = [];
234
- if (descriptor.shape === 'cube') {
235
- for (let face = 0; face < layers; face += 1) {
236
- const depth = device.createTexture({
237
- label: `render-target.${generation}.depth.${face}`,
238
- size: {
239
- width: descriptor.width,
240
- height: descriptor.height,
241
- depthOrArrayLayers: descriptor.sampleCount === 4 ? 1 : layers,
242
- },
243
- mipLevelCount: 1,
244
- sampleCount: descriptor.sampleCount,
245
- dimension: '2d',
246
- format: 'depth24plus-stencil8',
247
- usage: GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
248
- viewFormats: undefined,
249
- textureBindingViewDimension: undefined,
250
- });
251
- if (!depth.ok)
252
- return {
253
- ok: false,
254
- error: new RenderTargetOperationFailedError({
255
- operation: 'create',
256
- stage: 'allocation',
257
- generation,
258
- cause: depth.error,
259
- recovery: 'retry',
260
- }),
261
- };
262
- const depthView = device.createTextureView(depth.value, {
263
- dimension: '2d',
264
- baseArrayLayer: descriptor.sampleCount === 4 ? 0 : face,
265
- arrayLayerCount: 1,
266
- });
267
- if (!depthView.ok)
268
- return {
269
- ok: false,
270
- error: new RenderTargetOperationFailedError({
271
- operation: 'create',
272
- stage: 'allocation',
273
- generation,
274
- cause: depthView.error,
275
- recovery: 'retry',
276
- }),
277
- };
278
- depthTextures.push(depth.value);
279
- depthViews.push(depthView.value);
280
- }
239
+ for (let face = 0; face < layers; face += 1) {
240
+ const depth = device.createTexture({
241
+ label: `render-target.${generation}.depth.${face}`,
242
+ size: {
243
+ width: descriptor.width,
244
+ height: descriptor.height,
245
+ depthOrArrayLayers: descriptor.sampleCount === 4 ? 1 : layers,
246
+ },
247
+ mipLevelCount: 1,
248
+ sampleCount: descriptor.sampleCount,
249
+ dimension: '2d',
250
+ format: 'depth24plus-stencil8',
251
+ usage: GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
252
+ viewFormats: undefined,
253
+ textureBindingViewDimension: undefined,
254
+ });
255
+ if (!depth.ok)
256
+ return {
257
+ ok: false,
258
+ error: new RenderTargetOperationFailedError({
259
+ operation: 'create',
260
+ stage: 'allocation',
261
+ generation,
262
+ cause: depth.error,
263
+ recovery: 'retry',
264
+ }),
265
+ };
266
+ const depthView = device.createTextureView(depth.value, {
267
+ dimension: '2d',
268
+ baseArrayLayer: descriptor.sampleCount === 4 ? 0 : face,
269
+ arrayLayerCount: 1,
270
+ });
271
+ if (!depthView.ok)
272
+ return {
273
+ ok: false,
274
+ error: new RenderTargetOperationFailedError({
275
+ operation: 'create',
276
+ stage: 'allocation',
277
+ generation,
278
+ cause: depthView.error,
279
+ recovery: 'retry',
280
+ }),
281
+ };
282
+ depthTextures.push(depth.value);
283
+ depthViews.push(depthView.value);
281
284
  }
282
285
  if (descriptor.sampleCount === 4) {
283
286
  for (let face = 0; face < layers; face += 1) {
@@ -405,6 +408,13 @@ export function createRenderTargetHost(options: RenderTargetHostOptions = {}): R
405
408
 
406
409
  return Object.freeze({
407
410
  owner: 'renderer' as const,
411
+ descriptions() {
412
+ return [...targets].map((target) => {
413
+ const state = owner.inspect(target);
414
+ if (!state.ok) throw state.error;
415
+ return { target, descriptor: state.value.candidate?.descriptor ?? state.value.descriptor };
416
+ });
417
+ },
408
418
  createRenderTarget(
409
419
  descriptor: RenderTargetDescriptor,
410
420
  ): RenderResult<RenderTarget, RenderError> {
@@ -1,3 +1,4 @@
1
+ import { RenderPublicationError } from '../publication/contract';
1
2
  // Public renderer facade and profile validation.
2
3
  // This module narrows the lifetime-heavy host implementation to the stable
3
4
  // lease/receipt contract and owns the profile/error projection helpers.
@@ -64,7 +65,8 @@ export function exposeRenderer(renderer: RendererHostImplementation): Renderer {
64
65
  cause: structuredRendererCause(cause, 'renderer-event'),
65
66
  });
66
67
  const drawError = (cause: RhiError | RenderError): RenderError => {
67
- if (cause instanceof MotionBlurValidationError) return cause;
68
+ if (cause instanceof MotionBlurValidationError || cause instanceof RenderPublicationError)
69
+ return cause;
68
70
  if (cause instanceof RendererOperationError) return cause;
69
71
  if (cause instanceof RendererContractFailureError) {
70
72
  return new RendererOperationError('device-operation-failed', {
@@ -92,7 +94,7 @@ export function exposeRenderer(renderer: RendererHostImplementation): Renderer {
92
94
  });
93
95
 
94
96
  return {
95
- instances: renderer.instances,
97
+ setSurfaceDynamicInput: (frame) => renderer.setSurfaceDynamicInput(frame),
96
98
  bounds: (world, entity) => (disposed ? undefined : renderer.bounds(world, entity)),
97
99
  attach: (world) => {
98
100
  const result = renderer.attach(world);
@@ -155,6 +157,9 @@ export function exposeRenderer(renderer: RendererHostImplementation): Renderer {
155
157
  kind: 'frame-submitted',
156
158
  frameId: result.value.frameId,
157
159
  deviceGeneration: result.value.deviceGeneration,
160
+ ...(result.value.graphGeneration === undefined
161
+ ? {}
162
+ : { graphGeneration: result.value.graphGeneration }),
158
163
  receipt: result.value,
159
164
  }),
160
165
  );
@@ -1,13 +1,19 @@
1
+ import type { CloudLayerInspection } from '../cloud/inspection';
1
2
  import type { RenderFeatureHost } from '../features/host';
2
3
  import type { RenderInspection } from '../render-contract';
3
4
 
4
5
  /** Project feature-host lifecycle facts without exposing the live host. */
5
6
  export function projectRendererFeatureInspection(
6
7
  featureHost: RenderFeatureHost | undefined,
7
- ): Pick<RenderInspection, 'features' | 'featureDiagnostics' | 'featureHost'> {
8
+ ): Pick<RenderInspection, 'features' | 'featureDiagnostics' | 'featureHost' | 'cloudLayer'> {
9
+ const featureDiagnostics = featureHost?.diagnostics() ?? Object.freeze([]);
10
+ const cloudLayer = featureDiagnostics.find(
11
+ (diagnostic) => diagnostic.identity === 'forgeax.cloud-layer',
12
+ )?.inspection as CloudLayerInspection | undefined;
8
13
  return {
9
14
  features: Object.freeze((featureHost?.features ?? []).map((feature) => feature.identity)),
10
- featureDiagnostics: featureHost?.diagnostics() ?? Object.freeze([]),
15
+ featureDiagnostics,
16
+ ...(cloudLayer === undefined ? {} : { cloudLayer }),
11
17
  ...(featureHost?.inspection === undefined ? {} : { featureHost: featureHost.inspection() }),
12
18
  };
13
19
  }
@@ -64,6 +64,29 @@ export interface ContinuationTerminator {
64
64
  guard(kind: ContinuationKind): boolean;
65
65
  }
66
66
 
67
+ export type FrameCompletionResult<T, E> =
68
+ | { readonly ok: true; readonly value: T }
69
+ | { readonly ok: false; readonly error: E };
70
+
71
+ /**
72
+ * Preserve producer Result failures while fencing a fulfilled GPU completion
73
+ * against disposal or device-generation loss.
74
+ */
75
+ export function guardFrameCompletion<T, E>(
76
+ completion: PromiseLike<FrameCompletionResult<T, E>>,
77
+ isCurrent: () => boolean,
78
+ staleError: () => E,
79
+ rejectedError: (cause: unknown) => E,
80
+ ): Promise<FrameCompletionResult<T, E>> {
81
+ return Promise.resolve(completion).then(
82
+ (result) => {
83
+ if (!result.ok) return result;
84
+ return isCurrent() ? result : { ok: false, error: staleError() };
85
+ },
86
+ (cause) => ({ ok: false, error: rejectedError(cause) }),
87
+ );
88
+ }
89
+
67
90
  export function createContinuationTerminator(): ContinuationTerminator {
68
91
  let termination: ContinuationTerminationReason | undefined;
69
92
  let resolveTermination: ((reason: ContinuationTerminationReason) => void) | undefined;
@@ -2,6 +2,7 @@ import type { CompiledRenderGraphInfo } from '@forgeax/engine-render-graph';
2
2
  import type { RhiCanvasSurfacePresentationProof, TextureFormat } from '@forgeax/engine-rhi';
3
3
  import type { AutoExposureInspection } from '../pipeline/standard-output/auto-exposure/inspection';
4
4
  import type { StandardLutInspection } from '../pipeline/standard-output/lut-state';
5
+ import type { PipelineState } from '../record/render-context';
5
6
  import {
6
7
  type RenderOutputInspection,
7
8
  type RenderStandardOutputColorInspection,
@@ -112,6 +113,33 @@ export function projectRendererOutputInspection(
112
113
  };
113
114
  }
114
115
 
116
+ /** Assemble output inspection inputs from the live surface owner. */
117
+ export function projectRendererOutputInspectionFromSurface(input: {
118
+ readonly graph: CompiledRenderGraphInfo | undefined;
119
+ readonly surfaceReleased: boolean;
120
+ readonly pipelineState: PipelineState | null;
121
+ readonly rgba16floatRenderable: boolean;
122
+ readonly presentationProof?: RhiCanvasSurfacePresentationProof | undefined;
123
+ readonly autoExposure?: AutoExposureInspection | undefined;
124
+ readonly standardLut?: StandardLutInspection | undefined;
125
+ }): RenderOutputInspection {
126
+ return projectRendererOutputInspection({
127
+ graph: input.graph,
128
+ surfaceAvailable: !input.surfaceReleased && input.pipelineState !== null,
129
+ surfaceStorage: input.pipelineState?.format ?? 'rgba8unorm',
130
+ surfaceDisplay: input.pipelineState?.colorAttachmentFormat ?? 'rgba8unorm',
131
+ ...(input.pipelineState?.surfaceProfile === undefined
132
+ ? {}
133
+ : { surfaceProfile: input.pipelineState.surfaceProfile }),
134
+ rgba16floatRenderable: input.rgba16floatRenderable,
135
+ autoExposure: input.autoExposure,
136
+ standardLut: input.standardLut,
137
+ ...(input.presentationProof === undefined
138
+ ? {}
139
+ : { presentationProof: input.presentationProof }),
140
+ });
141
+ }
142
+
115
143
  /** Detached inspection projection helper; live renderer objects never cross this boundary. */
116
144
  export function detachRendererInspection<T extends object>(inspection: T): Readonly<T> {
117
145
  return Object.freeze({ ...inspection });
@@ -15,7 +15,7 @@ export function createSkinPaletteOwner(
15
15
  const limitKey = storageBufferCapable
16
16
  ? 'maxStorageBufferBindingSize'
17
17
  : 'maxUniformBufferBindingSize';
18
- const deviceLimit = (device.limits as Readonly<Record<string, number>>)[limitKey];
18
+ const deviceLimit = device.limits[limitKey];
19
19
  const maxBindingBytes = typeof deviceLimit === 'number' && deviceLimit > 0 ? deviceLimit : 65536;
20
20
  return createSkinPaletteAllocator(device, maxBindingBytes, storageBufferCapable);
21
21
  }
@@ -24,17 +24,17 @@ export function createTemporalShaderPrewarmer(input: {
24
24
  input.asyncCreateShaderModule
25
25
  ? input.asyncCreateShaderModule(input.device, {
26
26
  code: entry.wgsl,
27
- label: postProcessShaderModuleLabel(id, entry.wgsl),
27
+ label: postProcessShaderModuleLabel(entry.wgsl),
28
28
  })
29
29
  : invokeDeviceCreateShaderModule(input.device, {
30
30
  code: entry.wgsl,
31
- label: postProcessShaderModuleLabel(id, entry.wgsl),
31
+ label: postProcessShaderModuleLabel(entry.wgsl),
32
32
  }),
33
33
  'shader-compile-failed',
34
34
  `${id} shader module compiled (unified post-process prewarm)`,
35
35
  `inspect manifest ${id} entry composed wgsl; check device.features`,
36
36
  );
37
37
  if (!prewarm.ok) throw prewarm.error;
38
- input.seedShaderModule(postProcessShaderModuleLabel(id, entry.wgsl), prewarm.value);
38
+ input.seedShaderModule(postProcessShaderModuleLabel(entry.wgsl), prewarm.value);
39
39
  };
40
40
  }
@@ -15,6 +15,7 @@ import {
15
15
  buildGpuDrivenPbrPipelineLayout,
16
16
  buildGpuDrivenPbrSkinPipelineLayout,
17
17
  buildPbrSkinLayouts,
18
+ buildSurfaceDirectInstancesBindGroupLayout,
18
19
  type PbrPipelineLayoutBundle,
19
20
  SKIN_MATERIAL_SHADER_ID,
20
21
  } from '../pbr-pipeline';
@@ -43,6 +44,7 @@ export interface GpuDrivenPbrReadyLayouts {
43
44
  readonly gpuDrivenInstancesBindGroupLayout: BindGroupLayout | null;
44
45
  readonly gpuDrivenPbrPipelineLayout: PipelineLayout | null;
45
46
  readonly gpuDrivenPbrSkinPipelineLayout: PipelineLayout | null;
47
+ readonly surfaceDirectInstancesBindGroupLayout: BindGroupLayout | null;
46
48
  }
47
49
 
48
50
  interface GpuDrivenPbrModuleInput {
@@ -183,6 +185,7 @@ export function buildGpuDrivenPbrReadyLayouts(
183
185
  let gpuDrivenInstancesBindGroupLayout: BindGroupLayout | null = null;
184
186
  let gpuDrivenPbrPipelineLayout: PipelineLayout | null = null;
185
187
  let gpuDrivenPbrSkinPipelineLayout: PipelineLayout | null = null;
188
+ let surfaceDirectInstancesBindGroupLayout: BindGroupLayout | null = null;
186
189
  const skinResult = runShimSyncStep(
187
190
  () => ok(buildPbrSkinLayouts(device, { storageBuffer: storageBufferCapable }, pbrLayouts)),
188
191
  'webgpu-runtime-error',
@@ -200,6 +203,9 @@ export function buildGpuDrivenPbrReadyLayouts(
200
203
  const instances = buildGpuDrivenPbrInstancesBindGroupLayout(device, {
201
204
  storageBuffer: true,
202
205
  });
206
+ const surfaceDirect = buildSurfaceDirectInstancesBindGroupLayout(device, {
207
+ storageBuffer: true,
208
+ });
203
209
  const rigid = buildGpuDrivenPbrPipelineLayout(device, pbrLayouts, instances);
204
210
  const skin =
205
211
  pbrSkinMeshBindGroupLayout === null
@@ -209,7 +215,7 @@ export function buildGpuDrivenPbrReadyLayouts(
209
215
  { ...pbrLayouts, meshArrayBgl: pbrSkinMeshBindGroupLayout },
210
216
  instances,
211
217
  );
212
- return ok({ instances, rigid, skin });
218
+ return ok({ instances, rigid, skin, surfaceDirect });
213
219
  },
214
220
  'webgpu-runtime-error',
215
221
  'build GPU-driven PBR pipeline layouts succeeded',
@@ -219,6 +225,7 @@ export function buildGpuDrivenPbrReadyLayouts(
219
225
  gpuDrivenInstancesBindGroupLayout = layoutResult.value.instances;
220
226
  gpuDrivenPbrPipelineLayout = layoutResult.value.rigid;
221
227
  gpuDrivenPbrSkinPipelineLayout = layoutResult.value.skin;
228
+ surfaceDirectInstancesBindGroupLayout = layoutResult.value.surfaceDirect;
222
229
  }
223
230
  }
224
231
  return {
@@ -228,5 +235,6 @@ export function buildGpuDrivenPbrReadyLayouts(
228
235
  gpuDrivenInstancesBindGroupLayout,
229
236
  gpuDrivenPbrPipelineLayout,
230
237
  gpuDrivenPbrSkinPipelineLayout,
238
+ surfaceDirectInstancesBindGroupLayout,
231
239
  };
232
240
  }
@@ -0,0 +1,104 @@
1
+ import type { PerPassResources } from '../record/render-context';
2
+
3
+ export interface ReadyPerPassResourceInputs {
4
+ readonly fxaaPipeline: PerPassResources['fxaaPipeline'];
5
+ readonly fxaaBindGroupLayout: PerPassResources['fxaaBindGroupLayout'];
6
+ readonly fxaaSampler: PerPassResources['fxaaSampler'];
7
+ readonly skyboxPipeline: PerPassResources['skyboxPipeline'];
8
+ readonly skyboxPipelineMsaa: PerPassResources['skyboxPipelineMsaa'];
9
+ readonly skyboxBindGroupLayout: PerPassResources['skyboxBindGroupLayout'];
10
+ readonly skyboxSampler: PerPassResources['skyboxSampler'];
11
+ readonly skyboxRotationBuffer: PerPassResources['skyboxRotationBuffer'];
12
+ readonly shadowSampler: PerPassResources['shadowSampler'];
13
+ readonly shadowLightSpaceMatrix: PerPassResources['shadowLightSpaceMatrix'];
14
+ readonly shadowCsmLightViewProj: PerPassResources['shadowCsmLightViewProj'];
15
+ readonly shadowCsmSelection: PerPassResources['shadowCsmSelection'];
16
+ readonly bloomDownsamplePipeline: PerPassResources['bloomDownsamplePipeline'];
17
+ readonly bloomUpsamplePipeline: PerPassResources['bloomUpsamplePipeline'];
18
+ readonly bloomCompositePipeline: PerPassResources['bloomCompositePipeline'];
19
+ readonly bloomDownsampleBindGroupLayout: PerPassResources['bloomDownsampleBindGroupLayout'];
20
+ readonly bloomUpsampleBindGroupLayout: PerPassResources['bloomUpsampleBindGroupLayout'];
21
+ readonly bloomCompositeBindGroupLayout: PerPassResources['bloomCompositeBindGroupLayout'];
22
+ readonly bloomSampler: PerPassResources['bloomSampler'];
23
+ readonly bloomDownsampleParamsBuffer: PerPassResources['bloomDownsampleParamsBuffer'];
24
+ readonly bloomUpsampleParamsBuffer: PerPassResources['bloomUpsampleParamsBuffer'];
25
+ readonly bloomCompositeParamsBuffer: PerPassResources['bloomCompositeParamsBuffer'];
26
+ readonly ensureBloomResources: NonNullable<PerPassResources['ensureBloomResources']>;
27
+ readonly getBloomResources: NonNullable<PerPassResources['getBloomResources']>;
28
+ readonly commitBloomResources: NonNullable<PerPassResources['commitBloomResources']>;
29
+ readonly commitBloomFrameReceipts: NonNullable<PerPassResources['commitBloomFrameReceipts']>;
30
+ readonly discardBloomResources: NonNullable<PerPassResources['discardBloomResources']>;
31
+ readonly retireBloomResources: NonNullable<PerPassResources['retireBloomResources']>;
32
+ readonly drainBloomResources: NonNullable<PerPassResources['drainBloomResources']>;
33
+ readonly inspectBloomResources: NonNullable<PerPassResources['inspectBloomResources']>;
34
+ readonly ssaoCalcPipeline: PerPassResources['ssaoCalcPipeline'];
35
+ readonly ssaoBlurPipeline: PerPassResources['ssaoBlurPipeline'];
36
+ readonly ssaoBgl: PerPassResources['ssaoBgl'];
37
+ }
38
+
39
+ /** Creates the mutable per-pass slots owned by one prepared device generation. */
40
+ export function createReadyPerPassResources(input: ReadyPerPassResourceInputs): PerPassResources {
41
+ return {
42
+ depthTexture: null,
43
+ depthTextureView: null,
44
+ depthTextureWidth: 0,
45
+ depthTextureHeight: 0,
46
+ configured: false,
47
+ hdrColorTexture: null,
48
+ hdrColorView: null,
49
+ hdrDepthTexture: null,
50
+ hdrDepthView: null,
51
+ hdrTextureWidth: 0,
52
+ hdrTextureHeight: 0,
53
+ hdrDepthSampleCount: 1,
54
+ fxaaPipeline: input.fxaaPipeline,
55
+ fxaaBindGroupLayout: input.fxaaBindGroupLayout,
56
+ fxaaSampler: input.fxaaSampler,
57
+ msaaColorTexture: null,
58
+ msaaColorView: null,
59
+ msaaSpriteColorTexture: null,
60
+ msaaSpriteColorView: null,
61
+ msaaDepthTexture: null,
62
+ msaaDepthView: null,
63
+ msaaTextureWidth: 0,
64
+ msaaTextureHeight: 0,
65
+ hdrColorMsaaTexture: null,
66
+ hdrColorMsaaView: null,
67
+ skyboxPipeline: input.skyboxPipeline,
68
+ skyboxPipelineMsaa: input.skyboxPipelineMsaa,
69
+ skyboxBindGroupLayout: input.skyboxBindGroupLayout,
70
+ skyboxSampler: input.skyboxSampler,
71
+ skyboxRotationBuffer: input.skyboxRotationBuffer,
72
+ shadowTexture: null,
73
+ shadowMapSize: 0,
74
+ shadowCascadeCount: 0,
75
+ shadowSampler: input.shadowSampler,
76
+ shadowLightSpaceMatrix: input.shadowLightSpaceMatrix,
77
+ shadowCsmLightViewProj: input.shadowCsmLightViewProj,
78
+ shadowCsmSelection: input.shadowCsmSelection,
79
+ bloomDownsamplePipeline: input.bloomDownsamplePipeline,
80
+ bloomUpsamplePipeline: input.bloomUpsamplePipeline,
81
+ bloomCompositePipeline: input.bloomCompositePipeline,
82
+ bloomDownsampleBindGroupLayout: input.bloomDownsampleBindGroupLayout,
83
+ bloomUpsampleBindGroupLayout: input.bloomUpsampleBindGroupLayout,
84
+ bloomCompositeBindGroupLayout: input.bloomCompositeBindGroupLayout,
85
+ bloomSampler: input.bloomSampler,
86
+ bloomDownsampleParamsBuffer: input.bloomDownsampleParamsBuffer,
87
+ bloomUpsampleParamsBuffer: input.bloomUpsampleParamsBuffer,
88
+ bloomCompositeParamsBuffer: input.bloomCompositeParamsBuffer,
89
+ ensureBloomResources: input.ensureBloomResources,
90
+ getBloomResources: input.getBloomResources,
91
+ commitBloomResources: input.commitBloomResources,
92
+ commitBloomFrameReceipts: input.commitBloomFrameReceipts,
93
+ discardBloomResources: input.discardBloomResources,
94
+ retireBloomResources: input.retireBloomResources,
95
+ drainBloomResources: input.drainBloomResources,
96
+ inspectBloomResources: input.inspectBloomResources,
97
+ ssaoCalcPipeline: input.ssaoCalcPipeline,
98
+ ssaoBlurPipeline: input.ssaoBlurPipeline,
99
+ ssaoBgl: input.ssaoBgl,
100
+ ssaoFilteringSampler: null,
101
+ ssaoDepthSampler: null,
102
+ ssaoFallbackRawView: null,
103
+ };
104
+ }