@forgeax/engine-runtime 0.1.4 → 0.1.7

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 (606) hide show
  1. package/README.md +65 -83
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts +2 -0
  4. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts.map +1 -0
  5. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts +2 -0
  6. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts +2 -0
  8. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts.map +1 -0
  9. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts +11 -0
  10. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts.map +1 -0
  11. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts +2 -0
  12. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts.map +1 -0
  13. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts +2 -0
  14. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts.map +1 -0
  15. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts +2 -0
  16. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts.map +1 -0
  17. package/dist/__tests__/asset-registry-mounts.test.d.ts +2 -0
  18. package/dist/__tests__/asset-registry-mounts.test.d.ts.map +1 -0
  19. package/dist/__tests__/asset-registry.browser.test.d.ts +2 -0
  20. package/dist/__tests__/asset-registry.browser.test.d.ts.map +1 -0
  21. package/dist/__tests__/asset-registry.dawn.test.d.ts +2 -0
  22. package/dist/__tests__/asset-registry.dawn.test.d.ts.map +1 -0
  23. package/dist/__tests__/asset-registry.listCatalog.test.d.ts +2 -0
  24. package/dist/__tests__/asset-registry.listCatalog.test.d.ts.map +1 -0
  25. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts +2 -0
  26. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts.map +1 -0
  27. package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
  28. package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
  29. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts +2 -0
  30. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts.map +1 -0
  31. package/dist/__tests__/asset-registry.recursive.spec.d.ts +2 -0
  32. package/dist/__tests__/asset-registry.recursive.spec.d.ts.map +1 -0
  33. package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
  34. package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/asset.unit.test.d.ts +2 -0
  36. package/dist/__tests__/asset.unit.test.d.ts.map +1 -0
  37. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts +2 -0
  38. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts.map +1 -0
  39. package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
  40. package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
  41. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts +2 -0
  42. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts.map +1 -0
  43. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts +2 -0
  44. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts.map +1 -0
  45. package/dist/__tests__/collect-scene-asset.test.d.ts +1 -2
  46. package/dist/__tests__/collect-scene-asset.test.d.ts.map +1 -1
  47. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts +2 -0
  48. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts.map +1 -0
  49. package/dist/__tests__/collect-transient-roundtrip.test.d.ts +1 -1
  50. package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +1 -1
  51. package/dist/__tests__/collect-transient-skip.test.d.ts +1 -2
  52. package/dist/__tests__/collect-transient-skip.test.d.ts.map +1 -1
  53. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts +2 -0
  54. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts +2 -0
  56. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts.map +1 -0
  57. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts +2 -0
  58. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts.map +1 -0
  59. package/dist/__tests__/draw-published.d.ts +2 -2
  60. package/dist/__tests__/draw-published.d.ts.map +1 -1
  61. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
  62. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
  63. package/dist/__tests__/errors.unit.test.d.ts +2 -0
  64. package/dist/__tests__/errors.unit.test.d.ts.map +1 -0
  65. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts +2 -0
  66. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts.map +1 -0
  67. package/dist/__tests__/fetch-binary-decompress.test.d.ts +2 -0
  68. package/dist/__tests__/fetch-binary-decompress.test.d.ts.map +1 -0
  69. package/dist/__tests__/four-path-compression.integration.test.d.ts +2 -0
  70. package/dist/__tests__/four-path-compression.integration.test.d.ts.map +1 -0
  71. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts +2 -0
  72. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts.map +1 -0
  73. package/dist/__tests__/guid-for-asset.unit.test.d.ts +2 -0
  74. package/dist/__tests__/guid-for-asset.unit.test.d.ts.map +1 -0
  75. package/dist/__tests__/handle-migration.test.d.ts +2 -0
  76. package/dist/__tests__/handle-migration.test.d.ts.map +1 -0
  77. package/dist/__tests__/helpers/register-runtime-components.d.ts.map +1 -1
  78. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts +2 -0
  79. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts.map +1 -0
  80. package/dist/__tests__/host-custom-kind-contract.test.d.ts +2 -0
  81. package/dist/__tests__/host-custom-kind-contract.test.d.ts.map +1 -0
  82. package/dist/__tests__/inspect-name.test.d.ts +2 -0
  83. package/dist/__tests__/inspect-name.test.d.ts.map +1 -0
  84. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts +2 -0
  85. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts.map +1 -0
  86. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts +2 -0
  87. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts.map +1 -0
  88. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts +2 -0
  89. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts.map +1 -0
  90. package/dist/__tests__/loader-extract-graceful.test.d.ts +2 -0
  91. package/dist/__tests__/loader-extract-graceful.test.d.ts.map +1 -0
  92. package/dist/__tests__/loader-name-survival.test.d.ts +2 -0
  93. package/dist/__tests__/loader-name-survival.test.d.ts.map +1 -0
  94. package/dist/__tests__/mesh-bin-contract.test.d.ts +2 -0
  95. package/dist/__tests__/mesh-bin-contract.test.d.ts.map +1 -0
  96. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts +2 -0
  97. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts.map +1 -0
  98. package/dist/__tests__/mesh-bin.test.d.ts +2 -0
  99. package/dist/__tests__/mesh-bin.test.d.ts.map +1 -0
  100. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts +2 -0
  101. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts.map +1 -0
  102. package/dist/__tests__/new-kind-refs-contract.test.d.ts +2 -0
  103. package/dist/__tests__/new-kind-refs-contract.test.d.ts.map +1 -0
  104. package/dist/__tests__/package-promotion.test.d.ts +2 -0
  105. package/dist/__tests__/package-promotion.test.d.ts.map +1 -0
  106. package/dist/__tests__/package-rename.test.d.ts +2 -0
  107. package/dist/__tests__/package-rename.test.d.ts.map +1 -0
  108. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +1 -1
  109. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +1 -1
  110. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +1 -1
  111. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -1
  112. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts +10 -0
  113. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts.map +1 -0
  114. package/dist/__tests__/render-system-extract.unit.test.d.ts +2 -0
  115. package/dist/__tests__/render-system-extract.unit.test.d.ts.map +1 -0
  116. package/dist/__tests__/renderer-test-utils.d.ts +10 -0
  117. package/dist/__tests__/renderer-test-utils.d.ts.map +1 -0
  118. package/dist/__tests__/renderer.test-d.d.ts +2 -0
  119. package/dist/__tests__/renderer.test-d.d.ts.map +1 -0
  120. package/dist/__tests__/resolve-asset-handle-err.test.d.ts +2 -0
  121. package/dist/__tests__/resolve-asset-handle-err.test.d.ts.map +1 -0
  122. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
  123. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
  124. package/dist/__tests__/resolveName-fallback.test.d.ts +2 -0
  125. package/dist/__tests__/resolveName-fallback.test.d.ts.map +1 -0
  126. package/dist/__tests__/resolveName-null-package.test.d.ts +2 -0
  127. package/dist/__tests__/resolveName-null-package.test.d.ts.map +1 -0
  128. package/dist/__tests__/resolveName-unified-entry.test.d.ts +2 -0
  129. package/dist/__tests__/resolveName-unified-entry.test.d.ts.map +1 -0
  130. package/dist/__tests__/resolveName.test.d.ts +2 -0
  131. package/dist/__tests__/resolveName.test.d.ts.map +1 -0
  132. package/dist/__tests__/roots-to-scene-asset.test.d.ts +1 -1
  133. package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +1 -1
  134. package/dist/__tests__/roundtrip-primitive.test.d.ts +2 -0
  135. package/dist/__tests__/roundtrip-primitive.test.d.ts.map +1 -0
  136. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts +2 -0
  137. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts.map +1 -0
  138. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts +2 -0
  139. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts.map +1 -0
  140. package/dist/__tests__/scene-mount-fixed-point.test.d.ts +2 -0
  141. package/dist/__tests__/scene-mount-fixed-point.test.d.ts.map +1 -0
  142. package/dist/__tests__/scene-mount-roundtrip.test.d.ts +2 -0
  143. package/dist/__tests__/scene-mount-roundtrip.test.d.ts.map +1 -0
  144. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts +2 -0
  145. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts.map +1 -0
  146. package/dist/__tests__/scene-sugar-instantiate.test.d.ts +2 -0
  147. package/dist/__tests__/scene-sugar-instantiate.test.d.ts.map +1 -0
  148. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts +2 -0
  149. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts.map +1 -0
  150. package/dist/__tests__/serialize-scene-asset.test.d.ts +1 -1
  151. package/dist/__tests__/serialize-scene-asset.test.d.ts.map +1 -1
  152. package/dist/__tests__/template-game-default-api-contract.test.d.ts +2 -0
  153. package/dist/__tests__/template-game-default-api-contract.test.d.ts.map +1 -0
  154. package/dist/__tests__/tileset-asset-validate.test.d.ts +2 -0
  155. package/dist/__tests__/tileset-asset-validate.test.d.ts.map +1 -0
  156. package/dist/__tests__/transcode-fallback.unit.test.d.ts +2 -0
  157. package/dist/__tests__/transcode-fallback.unit.test.d.ts.map +1 -0
  158. package/dist/__tests__/transient-runtime-behavior.test.d.ts +2 -0
  159. package/dist/__tests__/transient-runtime-behavior.test.d.ts.map +1 -0
  160. package/dist/__tests__/video-loader-consumption.test.d.ts +2 -0
  161. package/dist/__tests__/video-loader-consumption.test.d.ts.map +1 -0
  162. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts +2 -0
  163. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts.map +1 -0
  164. package/dist/backend-selection.d.ts +13 -0
  165. package/dist/backend-selection.d.ts.map +1 -0
  166. package/dist/collect-scene-asset.d.ts +7 -4
  167. package/dist/collect-scene-asset.d.ts.map +1 -1
  168. package/dist/createRenderer.d.ts +14 -2
  169. package/dist/createRenderer.d.ts.map +1 -1
  170. package/dist/errors/environment.d.ts +1 -1
  171. package/dist/errors/environment.d.ts.map +1 -1
  172. package/dist/index.d.ts +20 -82
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.mjs +107 -108
  175. package/dist/index.mjs.map +1 -1
  176. package/dist/renderer-host.d.ts +9 -0
  177. package/dist/renderer-host.d.ts.map +1 -0
  178. package/dist/renderer-host.mjs +62 -0
  179. package/dist/renderer-host.mjs.map +1 -0
  180. package/dist/scene-instances/index.d.ts +2 -0
  181. package/dist/scene-instances/index.d.ts.map +1 -0
  182. package/dist/scene-utils/mount-override-fold.d.ts +1 -2
  183. package/dist/scene-utils/mount-override-fold.d.ts.map +1 -1
  184. package/dist/systems/sprite-animation-tick.d.ts +1 -1
  185. package/dist/systems/sprite-animation-tick.d.ts.map +1 -1
  186. package/dist/systems/transparent-sort.d.ts +1 -2
  187. package/dist/systems/transparent-sort.d.ts.map +1 -1
  188. package/dist/tilemap-register-validate.d.ts.map +1 -1
  189. package/package.json +34 -33
  190. package/src/__tests__/active-camera.unit.test.ts +19 -9
  191. package/src/__tests__/animation-graph-collect-roundtrip.test.ts +213 -0
  192. package/src/__tests__/animation-graph-serialize.unit.test.ts +171 -0
  193. package/src/__tests__/append-injection.test.ts +1 -1
  194. package/src/__tests__/asset-brand-and-name-retirement.test.ts +102 -0
  195. package/src/__tests__/asset-error-exhaustive.test-d.ts +62 -0
  196. package/src/__tests__/asset-registry-guid-reverse.test.ts +608 -0
  197. package/src/__tests__/asset-registry-hdr-equirect.test.ts +78 -0
  198. package/src/__tests__/asset-registry-mesh-pack-payload.dawn.test.ts +232 -0
  199. package/src/__tests__/asset-registry-mounts.test.ts +806 -0
  200. package/src/__tests__/asset-registry.browser.test.ts +81 -0
  201. package/src/__tests__/asset-registry.dawn.test.ts +94 -0
  202. package/src/__tests__/asset-registry.listCatalog.test.ts +170 -0
  203. package/src/__tests__/asset-registry.mesh-bin.test.ts +316 -0
  204. package/src/__tests__/asset-registry.pack-cache.test.ts +969 -0
  205. package/src/__tests__/asset-registry.raw-container-failfast.test.ts +225 -0
  206. package/src/__tests__/asset-registry.recursive.spec.ts +1397 -0
  207. package/src/__tests__/asset-registry.unit.test.ts +1030 -0
  208. package/src/__tests__/asset.unit.test.ts +7107 -0
  209. package/src/__tests__/audio-load-by-guid.unit.test.ts +126 -0
  210. package/src/__tests__/backend-selection.integration.test.ts +11 -0
  211. package/src/__tests__/basis-catalog-dispatch.integration.test.ts +320 -0
  212. package/src/__tests__/bind-group-cache-keying.test.ts +4 -4
  213. package/src/__tests__/block-upload-math.unit.test.ts +2 -2
  214. package/src/__tests__/builtin-asset-registry.unit.test.ts +112 -0
  215. package/src/__tests__/builtin-shader-register-e2e.test.ts +1 -1
  216. package/src/__tests__/cache-false-eviction.test.ts +2 -1
  217. package/src/__tests__/cache-isolation-matrix.test.ts +2 -1
  218. package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +5 -6
  219. package/src/__tests__/clamp-to-last.e2e.browser.test.ts +29 -19
  220. package/src/__tests__/collect-scene-asset.test.ts +49 -52
  221. package/src/__tests__/collect-scene-mount-collapse.test.ts +391 -0
  222. package/src/__tests__/collect-subtree.unit.test.ts +1 -2
  223. package/src/__tests__/collect-transient-children-absent.test.ts +24 -10
  224. package/src/__tests__/collect-transient-roundtrip.test.ts +44 -20
  225. package/src/__tests__/collect-transient-skip.test.ts +24 -13
  226. package/src/__tests__/components.test-d.ts +1 -6
  227. package/src/__tests__/components.unit.test.ts +20 -19
  228. package/src/__tests__/composite-skybox-cross-world.browser.test.ts +59 -27
  229. package/src/__tests__/compressed-texture-physical-extent.integration.test.ts +139 -0
  230. package/src/__tests__/create-renderer-assembly.integration.test.ts +42 -29
  231. package/src/__tests__/createRenderer-dispose.test.ts +35 -402
  232. package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +25 -30
  233. package/src/__tests__/createRenderer.unit.test.ts +1 -1
  234. package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +27 -63
  235. package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +56 -47
  236. package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +49 -29
  237. package/src/__tests__/dawn/instances-shadow.dawn.test.ts +26 -15
  238. package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +13 -14
  239. package/src/__tests__/dawn/material-alpha.dawn.test.ts +23 -31
  240. package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +24 -9
  241. package/src/__tests__/dawn/{mesh-update.dawn.test.ts → mesh-update-dawn.test.ts} +42 -134
  242. package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +14 -7
  243. package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +16 -28
  244. package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +23 -39
  245. package/src/__tests__/dawn/upload-texture.dawn.test.ts +198 -0
  246. package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +12 -14
  247. package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +27 -22
  248. package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +25 -28
  249. package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +10 -11
  250. package/src/__tests__/demo-sortscope-migration.unit.test.ts +5 -5
  251. package/src/__tests__/derive-bgl-integration.test.ts +34 -44
  252. package/src/__tests__/derive-render-data-skin.unit.test.ts +1 -1
  253. package/src/__tests__/draw-published.ts +11 -4
  254. package/src/__tests__/dynamic-texture-store.unit.test.ts +190 -0
  255. package/src/__tests__/equirect-bc6h.integration.test.ts +144 -21
  256. package/src/__tests__/errors.unit.test.ts +1227 -0
  257. package/src/__tests__/extract-frames-graceful-degradation.test.ts +3 -7
  258. package/src/__tests__/extract-frames-merge.test.ts +35 -22
  259. package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +5 -16
  260. package/src/__tests__/extract-skin-mismatch.unit.test.ts +322 -0
  261. package/src/__tests__/fetch-binary-decompress.test.ts +356 -0
  262. package/src/__tests__/four-path-compression.integration.test.ts +395 -0
  263. package/src/__tests__/frame-targets-shadow-regression.unit.test.ts +1 -1
  264. package/src/__tests__/fullscreen-feature-host.dawn.test.ts +80 -0
  265. package/src/__tests__/fullscreen-post-bgl-depth.test.ts +4 -2
  266. package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +3 -3
  267. package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +39 -23
  268. package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +4 -2
  269. package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +28 -17
  270. package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +29 -18
  271. package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +16 -12
  272. package/src/__tests__/geometry.unit.test.ts +525 -159
  273. package/src/__tests__/glyph-tilemap-worldid.test.ts +1 -1
  274. package/src/__tests__/gpu-resource-cow-survivor.test.ts +6 -4
  275. package/src/__tests__/guid-for-asset.unit.test.ts +102 -0
  276. package/src/__tests__/handle-migration.test.ts +136 -0
  277. package/src/__tests__/helpers/register-runtime-components.ts +4 -2
  278. package/src/__tests__/helpers/register-scene-components.ts +1 -1
  279. package/src/__tests__/host-custom-kind-contract.test-d.ts +47 -0
  280. package/src/__tests__/host-custom-kind-contract.test.ts +578 -0
  281. package/src/__tests__/inspect-name.test.ts +139 -0
  282. package/src/__tests__/instances.test-d.ts +1 -1
  283. package/src/__tests__/instantiate-mount-deferred-wiring.test.ts +112 -0
  284. package/src/__tests__/light-casters-9-light.browser.test.ts +73 -76
  285. package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +7 -10
  286. package/src/__tests__/light-snapshot.test-d.ts +2 -2
  287. package/src/__tests__/lights-vec-negative.unit.test.ts +1 -1
  288. package/src/__tests__/lights.unit.test.ts +31 -511
  289. package/src/__tests__/loadbyguid-payload.unit.test.ts +117 -0
  290. package/src/__tests__/loadbyguid-texture-intern.unit.test.ts +213 -0
  291. package/src/__tests__/loader-extract-graceful.test.ts +146 -0
  292. package/src/__tests__/loader-name-survival.test.ts +213 -0
  293. package/src/__tests__/m3-vec-negative.unit.test.ts +3 -2
  294. package/src/__tests__/material-texture-uv-scale.unit.test.ts +101 -31
  295. package/src/__tests__/materials.unit.test.ts +10 -27
  296. package/src/__tests__/mesh-bin-contract.test.ts +28 -0
  297. package/src/__tests__/mesh-bin-skin-roundtrip.unit.test.ts +149 -0
  298. package/src/__tests__/mesh-bin.test.ts +38 -0
  299. package/src/__tests__/mesh-loader-skin-contract.unit.test.ts +120 -0
  300. package/src/__tests__/mesh-ssbo-grow.unit.test.ts +3 -3
  301. package/src/__tests__/mip-gate.unit.test.ts +1 -1
  302. package/src/__tests__/msaa-sprite-pixel-diff.dawn.test.ts +29 -68
  303. package/src/__tests__/new-kind-refs-contract.test.ts +132 -0
  304. package/src/__tests__/node-shims.d.ts +4 -6
  305. package/src/__tests__/package-promotion.test.ts +88 -0
  306. package/src/__tests__/package-rename.test.ts +103 -0
  307. package/src/__tests__/pass-selector.unit.test.ts +2 -2
  308. package/src/__tests__/pbr-pipeline.unit.test.ts +21 -25
  309. package/src/__tests__/pipeline-builder-msaa.unit.test.ts +6 -9
  310. package/src/__tests__/pipeline-cache-keying.unit.test.ts +6 -9
  311. package/src/__tests__/pipeline-spec.test.ts +16 -177
  312. package/src/__tests__/pipeline.unit.test.ts +154 -1693
  313. package/src/__tests__/point-light-shadow.dawn.test.ts +33 -42
  314. package/src/__tests__/point-light-shadow.unit.test.ts +19 -60
  315. package/src/__tests__/post-process-error-codes.unit.test.ts +4 -1
  316. package/src/__tests__/post-process-params-component.unit.test.ts +1 -1
  317. package/src/__tests__/post-process-params-extract.unit.test.ts +2 -5
  318. package/src/__tests__/postprocess-camera-consistency.test.ts +4 -7
  319. package/src/__tests__/profiler-assembly.integration.test.ts +1 -1
  320. package/src/__tests__/propagate-transforms.dawn.test.ts +12 -11
  321. package/src/__tests__/record-worldid-isolation.test.ts +7 -29
  322. package/src/__tests__/recover-error-exhaustive.test-d.ts +1 -1
  323. package/src/__tests__/render-error-exhaustive.test-d.ts +117 -71
  324. package/src/__tests__/render-feature-assembly.test-d.ts +20 -9
  325. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +8 -6
  326. package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +65 -559
  327. package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +57 -544
  328. package/src/__tests__/render-feature-prepared-graphics.fixture.ts +104 -0
  329. package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +40 -248
  330. package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +83 -340
  331. package/src/__tests__/render-feature-recover.integration.test.ts +9 -49
  332. package/src/__tests__/render-feature-runtime-surface.test-d.ts +17 -20
  333. package/src/__tests__/render-schema-consumer.integration.test.ts +20 -13
  334. package/src/__tests__/render-schema-owner-boundary.unit.test.ts +2 -6
  335. package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +5 -5
  336. package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +16 -31
  337. package/src/__tests__/render-system-extract.test.ts +36 -51
  338. package/src/__tests__/render-system-extract.unit.test.ts +360 -0
  339. package/src/__tests__/render-system-fold-bucket.unit.test.ts +3 -5
  340. package/src/__tests__/render-system-fold-fallback.unit.test.ts +6 -3
  341. package/src/__tests__/render-system-fold-material.unit.test.ts +3 -5
  342. package/src/__tests__/render-system-fold-metrics.unit.test.ts +5 -5
  343. package/src/__tests__/render-system-fold-modegate.unit.test.ts +6 -6
  344. package/src/__tests__/render-system-fold.dawn.test.ts +7 -5
  345. package/src/__tests__/render-system-mega.test.ts +292 -190
  346. package/src/__tests__/render-system-owner-split-contract.test.ts +10 -32
  347. package/src/__tests__/render-system-record-multi-material-textureview.test.ts +59 -45
  348. package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +23 -29
  349. package/src/__tests__/render-system-record.test.ts +398 -235
  350. package/src/__tests__/render-system-record.unit.test.ts +25 -26
  351. package/src/__tests__/render-system-skin-bg.unit.test.ts +8 -12
  352. package/src/__tests__/renderer-consumer.test-d.ts +16 -3
  353. package/src/__tests__/renderer-health.unit.test.ts +26 -916
  354. package/src/__tests__/renderer-lifecycle.integration.test.ts +19 -6
  355. package/src/__tests__/renderer-recover.unit.test.ts +49 -1069
  356. package/src/__tests__/renderer-result.test-d.ts +19 -9
  357. package/src/__tests__/renderer-surface.unit.test.ts +3 -5
  358. package/src/__tests__/renderer-test-utils.ts +56 -0
  359. package/src/__tests__/renderer.test-d.ts +61 -0
  360. package/src/__tests__/resolve-asset-handle-err.test.ts +111 -0
  361. package/src/__tests__/resolve-asset-handle.unit.test.ts +64 -0
  362. package/src/__tests__/resolve-depth-only-view.test.ts +1 -1
  363. package/src/__tests__/resolveName-fallback.test.ts +64 -0
  364. package/src/__tests__/resolveName-null-package.test.ts +38 -0
  365. package/src/__tests__/resolveName-unified-entry.test.ts +65 -0
  366. package/src/__tests__/resolveName.test.ts +64 -0
  367. package/src/__tests__/rhi-null-command-flow.unit.test.ts +56 -260
  368. package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +41 -169
  369. package/src/__tests__/roots-to-scene-asset.test.ts +199 -93
  370. package/src/__tests__/roundtrip-primitive.test.ts +351 -0
  371. package/src/__tests__/scene-bare-guid-refs-instantiate.test.ts +123 -0
  372. package/src/__tests__/scene-equirect-roundtrip.test.ts +103 -16
  373. package/src/__tests__/scene-instance-authoring.integration.test.ts +8 -0
  374. package/src/__tests__/scene-instance-bridge.integration.test.ts +1 -1
  375. package/src/__tests__/scene-instance-component.test.ts +1 -1
  376. package/src/__tests__/scene-mount-fixed-point.test.ts +257 -0
  377. package/src/__tests__/scene-mount-roundtrip.test.ts +987 -0
  378. package/src/__tests__/scene-mount-wrapper-roundtrip.test.ts +202 -0
  379. package/src/__tests__/scene-sugar-instantiate.test.ts +324 -0
  380. package/src/__tests__/serialize-mounts-roundtrip.test.ts +533 -0
  381. package/src/__tests__/serialize-scene-asset.test.ts +219 -22
  382. package/src/__tests__/shadow-caster-empty-schema.test.ts +3 -3
  383. package/src/__tests__/shadow-csm-cascade-loadop.test.ts +37 -17
  384. package/src/__tests__/shadow-csm-component.test.ts +3 -5
  385. package/src/__tests__/shadow-csm-extract.test.ts +2 -100
  386. package/src/__tests__/shadow-csm-orthoz.test.ts +2 -16
  387. package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +19 -14
  388. package/src/__tests__/shadow-csm-tile-consistency.test.ts +32 -26
  389. package/src/__tests__/shadow-csm-ubo.dawn.test.ts +8 -49
  390. package/src/__tests__/shadow-csm-ubo.test.ts +3 -25
  391. package/src/__tests__/shadow-csm-viewport.browser.test.ts +1 -1
  392. package/src/__tests__/shadow-fields-observable.dawn.test.ts +67 -56
  393. package/src/__tests__/shadow-m1.dawn.test.ts +8 -9
  394. package/src/__tests__/shadow-mesh-ssbo-order.test.ts +11 -27
  395. package/src/__tests__/skin-errors.unit.test.ts +1 -1
  396. package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +7 -5
  397. package/src/__tests__/skylight-lazy-projection.test.ts +36 -15
  398. package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +5 -5
  399. package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +47 -64
  400. package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +15 -14
  401. package/src/__tests__/sprite-lit-extract-branch.test.ts +1 -1
  402. package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +1 -1
  403. package/src/__tests__/ssao-bgl.test.ts +16 -9
  404. package/src/__tests__/ssao-buffers.test.ts +2 -2
  405. package/src/__tests__/ssao-data.test.ts +2 -2
  406. package/src/__tests__/ssao-errors.test.ts +1 -1
  407. package/src/__tests__/ssao-passes.test.ts +68 -392
  408. package/src/__tests__/ssao-pipelines.test.ts +1 -1
  409. package/src/__tests__/ssao-uniform-layout.test.ts +8 -6
  410. package/src/__tests__/stencil-outline-pixel.dawn.test.ts +25 -17
  411. package/src/__tests__/swap-chain-format.unit.test.ts +5 -7
  412. package/src/__tests__/systems.unit.test.ts +536 -1326
  413. package/src/__tests__/template-game-default-api-contract.test.ts +362 -0
  414. package/src/__tests__/text.unit.test.ts +56 -33
  415. package/src/__tests__/tilemap-childed-despawn.test.ts +8 -14
  416. package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +8 -12
  417. package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +2 -1
  418. package/src/__tests__/tilemap-chunk-extract.test.ts +13 -17
  419. package/src/__tests__/tilemap-dirty-rebuild.test.ts +7 -11
  420. package/src/__tests__/tilemap-material-cache.test.ts +8 -13
  421. package/src/__tests__/tilemap-multi-atlas.test.ts +12 -32
  422. package/src/__tests__/tilemap-owner-boundary.unit.test.ts +5 -2
  423. package/src/__tests__/tilemap-region-pack.test.ts +8 -12
  424. package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +8 -12
  425. package/src/__tests__/tilemap-uv-inset.test.ts +11 -14
  426. package/src/__tests__/tilemap-validate.test.ts +1 -1
  427. package/src/__tests__/tileset-asset-validate.test.ts +638 -0
  428. package/src/__tests__/transcode-fallback.unit.test.ts +207 -0
  429. package/src/__tests__/transform-hierarchy-pixel-diff.dawn.test.ts +36 -28
  430. package/src/__tests__/transient-fields-collect.test.ts +28 -21
  431. package/src/__tests__/transient-runtime-behavior.test.ts +227 -0
  432. package/src/__tests__/transparent-sort-tilemap-sprite-interleave.test.ts +4 -4
  433. package/src/__tests__/variant-selection.unit.test.ts +1 -1
  434. package/src/__tests__/video-extract-bindgroup.dawn.test.ts +89 -136
  435. package/src/__tests__/video-loader-consumption.test.ts +86 -0
  436. package/src/__tests__/video-loader-smoke.dawn.test.ts +60 -0
  437. package/src/__tests__/view-ubo-layout.browser.test.ts +0 -22
  438. package/src/__tests__/world-entity-key.test.ts +1 -1
  439. package/src/__tests__/world-scene-despawn.test.ts +1 -1
  440. package/src/__tests__/world-scene-instantiate.test.ts +2 -36
  441. package/src/__tests__/world-scene-nested.test.ts +1 -1
  442. package/src/__tests__/world-scene-override.test.ts +1 -1
  443. package/src/backend-selection.ts +69 -0
  444. package/src/collect-scene-asset.ts +35 -23
  445. package/src/components/__tests__/camera.test-d.ts +1 -1
  446. package/src/components/__tests__/camera.test.ts +1 -1
  447. package/src/components/__tests__/sprite-animation.test-d.ts +2 -2
  448. package/src/components/__tests__/tile-layer.test-d.ts +1 -1
  449. package/src/components/__tests__/tile-layer.unit.test.ts +2 -2
  450. package/src/createRenderer.ts +24 -36
  451. package/src/errors/environment.ts +1 -1
  452. package/src/index.ts +51 -113
  453. package/src/renderer-host.ts +33 -0
  454. package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +1 -1
  455. package/src/scene-instances/index.ts +4 -0
  456. package/src/scene-utils/mount-override-fold.ts +3 -7
  457. package/src/systems/__tests__/transparent-sort.bench.ts +3 -3
  458. package/src/systems/sprite-animation-tick.ts +1 -1
  459. package/src/systems/transparent-sort.ts +38 -38
  460. package/src/tilemap-register-validate.ts +4 -4
  461. package/dist/__tests__/bind-group-cache-binding.test.d.ts +0 -2
  462. package/dist/__tests__/bind-group-cache-binding.test.d.ts.map +0 -1
  463. package/dist/__tests__/bind-group-cache-frame.test.d.ts +0 -2
  464. package/dist/__tests__/bind-group-cache-frame.test.d.ts.map +0 -1
  465. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts +0 -2
  466. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts.map +0 -1
  467. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts +0 -2
  468. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts.map +0 -1
  469. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts +0 -2
  470. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts.map +0 -1
  471. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts +0 -2
  472. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts.map +0 -1
  473. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts +0 -2
  474. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts.map +0 -1
  475. package/dist/__tests__/fog-producer-manifest.d.ts +0 -131
  476. package/dist/__tests__/fog-producer-manifest.d.ts.map +0 -1
  477. package/dist/__tests__/fog-producer-pixel-probe.d.ts +0 -42
  478. package/dist/__tests__/fog-producer-pixel-probe.d.ts.map +0 -1
  479. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts +0 -2
  480. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts.map +0 -1
  481. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts +0 -2
  482. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts.map +0 -1
  483. package/dist/__tests__/fog-producer-real-fixture.d.ts +0 -5
  484. package/dist/__tests__/fog-producer-real-fixture.d.ts.map +0 -1
  485. package/dist/__tests__/fog-producer-vfx-effect.d.ts +0 -3
  486. package/dist/__tests__/fog-producer-vfx-effect.d.ts.map +0 -1
  487. package/dist/__tests__/fog-scene-asset.integration.test.d.ts +0 -2
  488. package/dist/__tests__/fog-scene-asset.integration.test.d.ts.map +0 -1
  489. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts +0 -2
  490. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts.map +0 -1
  491. package/dist/__tests__/gpu-resource.test.d.ts +0 -2
  492. package/dist/__tests__/gpu-resource.test.d.ts.map +0 -1
  493. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts +0 -2
  494. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts.map +0 -1
  495. package/dist/__tests__/hdrp-buffers.unit.test.d.ts +0 -2
  496. package/dist/__tests__/hdrp-buffers.unit.test.d.ts.map +0 -1
  497. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts +0 -2
  498. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts.map +0 -1
  499. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts +0 -2
  500. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts.map +0 -1
  501. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts +0 -2
  502. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts.map +0 -1
  503. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts +0 -2
  504. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts.map +0 -1
  505. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts +0 -2
  506. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts.map +0 -1
  507. package/dist/__tests__/helpers/primitive-world.d.ts +0 -8
  508. package/dist/__tests__/helpers/primitive-world.d.ts.map +0 -1
  509. package/dist/__tests__/helpers/render-asset-port.d.ts +0 -15
  510. package/dist/__tests__/helpers/render-asset-port.d.ts.map +0 -1
  511. package/dist/__tests__/helpers/scene-asset-port.d.ts +0 -9
  512. package/dist/__tests__/helpers/scene-asset-port.d.ts.map +0 -1
  513. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts +0 -2
  514. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts.map +0 -1
  515. package/dist/__tests__/pipeline-layout-selection.test.d.ts +0 -2
  516. package/dist/__tests__/pipeline-layout-selection.test.d.ts.map +0 -1
  517. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts +0 -2
  518. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts.map +0 -1
  519. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts +0 -2
  520. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts.map +0 -1
  521. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts +0 -2
  522. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts.map +0 -1
  523. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts +0 -2
  524. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts.map +0 -1
  525. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts +0 -2
  526. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts.map +0 -1
  527. package/dist/__tests__/shadow-csm-pssm.test.d.ts +0 -2
  528. package/dist/__tests__/shadow-csm-pssm.test.d.ts.map +0 -1
  529. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts +0 -2
  530. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts.map +0 -1
  531. package/dist/__tests__/shadow-csm-viewport.test.d.ts +0 -2
  532. package/dist/__tests__/shadow-csm-viewport.test.d.ts.map +0 -1
  533. package/dist/__tests__/shadow-m2.dawn.test.d.ts +0 -2
  534. package/dist/__tests__/shadow-m2.dawn.test.d.ts.map +0 -1
  535. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts +0 -2
  536. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts.map +0 -1
  537. package/dist/__tests__/shadow-m3-calibrate.d.ts +0 -83
  538. package/dist/__tests__/shadow-m3-calibrate.d.ts.map +0 -1
  539. package/dist/__tests__/shadow-m3.dawn.test.d.ts +0 -2
  540. package/dist/__tests__/shadow-m3.dawn.test.d.ts.map +0 -1
  541. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts +0 -2
  542. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts.map +0 -1
  543. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts +0 -2
  544. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts.map +0 -1
  545. package/dist/__tests__/temporal-off-path.unit.test.d.ts +0 -2
  546. package/dist/__tests__/temporal-off-path.unit.test.d.ts.map +0 -1
  547. package/dist/__tests__/video-cache-regression.unit.test.d.ts +0 -2
  548. package/dist/__tests__/video-cache-regression.unit.test.d.ts.map +0 -1
  549. package/dist/asset-kind.d.ts +0 -4
  550. package/dist/asset-kind.d.ts.map +0 -1
  551. package/dist/errors/sprite-animation.d.ts +0 -3
  552. package/dist/errors/sprite-animation.d.ts.map +0 -1
  553. package/dist/scene-asset-port.d.ts +0 -17
  554. package/dist/scene-asset-port.d.ts.map +0 -1
  555. package/dist/scene-collect-errors.d.ts +0 -22
  556. package/dist/scene-collect-errors.d.ts.map +0 -1
  557. package/dist/shadow-m3-calibrate.d.ts +0 -40
  558. package/dist/shadow-m3-calibrate.d.ts.map +0 -1
  559. package/src/__tests__/bind-group-cache-binding.test.ts +0 -2513
  560. package/src/__tests__/bind-group-cache-frame.test.ts +0 -1511
  561. package/src/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.ts +0 -204
  562. package/src/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.ts +0 -297
  563. package/src/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.ts +0 -271
  564. package/src/__tests__/dispatch-fullscreen-pass-params.unit.test.ts +0 -321
  565. package/src/__tests__/fog-producer-manifest.ts +0 -162
  566. package/src/__tests__/fog-producer-pixel-probe.ts +0 -263
  567. package/src/__tests__/fog-producer-pixel.browser.test.ts +0 -26
  568. package/src/__tests__/fog-producer-pixel.dawn.test.ts +0 -55
  569. package/src/__tests__/fog-producer-real-fixture.ts +0 -805
  570. package/src/__tests__/fog-producer-vfx-effect.ts +0 -272
  571. package/src/__tests__/fog-scene-asset.integration.test.ts +0 -123
  572. package/src/__tests__/gpu-resource-store-cubemap-status.test.ts +0 -207
  573. package/src/__tests__/gpu-resource.test.ts +0 -1206
  574. package/src/__tests__/hdrp-bgl-slots.browser.test.ts +0 -50
  575. package/src/__tests__/hdrp-buffers.unit.test.ts +0 -70
  576. package/src/__tests__/hdrp-execute-filter.unit.test.ts +0 -200
  577. package/src/__tests__/hdrp-gbuffer-attachments.browser.test.ts +0 -64
  578. package/src/__tests__/hdrp-pipeline-asset-type.test-d.ts +0 -139
  579. package/src/__tests__/hdrp-ssao-boundary.test.ts +0 -237
  580. package/src/__tests__/hdrp-ssao-falsification.test.ts +0 -289
  581. package/src/__tests__/helpers/primitive-world.ts +0 -91
  582. package/src/__tests__/helpers/render-asset-port.ts +0 -65
  583. package/src/__tests__/helpers/scene-asset-port.ts +0 -23
  584. package/src/__tests__/material-derived-coordinates.integration.test.ts +0 -100
  585. package/src/__tests__/pipeline-layout-selection.test.ts +0 -298
  586. package/src/__tests__/post-process-reads-narrowing.test-d.ts +0 -52
  587. package/src/__tests__/post-process-register-roundtrip.dawn.test.ts +0 -230
  588. package/src/__tests__/render-feature-zero-feature.browser.test.ts +0 -152
  589. package/src/__tests__/render-pipeline-trivial.dawn.test.ts +0 -525
  590. package/src/__tests__/shadow-csm-caster-membership.test.ts +0 -232
  591. package/src/__tests__/shadow-csm-pssm.test.ts +0 -142
  592. package/src/__tests__/shadow-csm-temporal.browser.test.ts +0 -145
  593. package/src/__tests__/shadow-csm-viewport.test.ts +0 -74
  594. package/src/__tests__/shadow-m2.dawn.test.ts +0 -394
  595. package/src/__tests__/shadow-m3-calibrate-run.dawn.test.ts +0 -248
  596. package/src/__tests__/shadow-m3-calibrate.ts +0 -203
  597. package/src/__tests__/shadow-m3.dawn.test.ts +0 -288
  598. package/src/__tests__/shadow-probe-control-flow.dawn.test.ts +0 -264
  599. package/src/__tests__/shadow-quality-metrics.dawn.test.ts +0 -324
  600. package/src/__tests__/temporal-off-path.unit.test.ts +0 -69
  601. package/src/__tests__/video-cache-regression.unit.test.ts +0 -186
  602. package/src/asset-kind.ts +0 -7
  603. package/src/errors/sprite-animation.ts +0 -5
  604. package/src/scene-asset-port.ts +0 -32
  605. package/src/scene-collect-errors.ts +0 -30
  606. package/src/shadow-m3-calibrate.ts +0 -171
@@ -1,271 +1,31 @@
1
1
  // @forgeax/engine-runtime/__tests__/ssao-passes.test.ts -
2
- // SSAO pass topology test (M3 / w13).
2
+ // SSAO record-owner tests (M8 / w35-w46).
3
3
  // feat-20260612-hdrp-ssao.
4
4
  //
5
- // plan-strategy D-2: exactly 2 pass (ssao-calc + ssao-blur).
6
- // requirements: half-res, r8unorm transient color targets.
7
- //
8
- // Tests:
9
- // (a) addSsaoPasses wires 2 pass nodes into an isolated RenderGraph
10
- // (b) pass names are 'ssao-calc' and 'ssao-blur'
11
- // (c) ssao-calc reads gbuf0 + hdrDepth, writes ssaoRaw
12
- // (d) ssao-blur reads ssaoRaw, writes ssaoBlurred
13
- // (e) graph compiles without errors with valid caps + g-buffer producer
14
- // (f) ssao-calc comes before ssao-blur in topological order
5
+ // The tests invoke recordSsaoCalcPass/recordSsaoBlurPass through a minimal
6
+ // typed graph fixture and keep the GPU dispatch/binding predicates intact.
15
7
 
16
- import type {
17
- _InternalRenderPipelineContext,
18
- RenderPipelineContext,
19
- RenderSystemRuntime,
20
- } from '@forgeax/engine-render/internal';
8
+ import { RenderGraph } from '@forgeax/engine-render-graph';
9
+ import type { RhiDevice } from '@forgeax/engine-rhi';
10
+ import { describe, expect, it, vi } from 'vitest';
21
11
  import {
22
- addSsaoPasses,
23
12
  recordBloomBlurHPass,
24
13
  recordBloomBlurVPass,
25
14
  recordBloomBrightPass,
26
15
  recordBloomCompositePass,
27
16
  recordFxaaPass,
28
17
  recordSkyboxPass,
29
- } from '@forgeax/engine-render/internal';
30
- import { RenderGraph } from '@forgeax/engine-render-graph';
31
- import type { RhiCaps, RhiDevice } from '@forgeax/engine-rhi';
32
- import { describe, expect, it, vi } from 'vitest';
33
-
34
- function mockRuntime(capsOverride: Partial<RhiCaps> = {}): RenderSystemRuntime {
35
- const errorRegistry = {
36
- fire: vi.fn(),
37
- listeners: new Set(),
38
- addEventListener: vi.fn(),
39
- removeEventListener: vi.fn(),
40
- };
41
-
42
- const device = {
43
- caps: {
44
- backendKind: 'webgpu' as const,
45
- storageBuffer: true,
46
- float32Filterable: true,
47
- maxColorAttachments: 8,
48
- maxStorageBuffersPerShaderStage: 4,
49
- ...capsOverride,
50
- },
51
- createBuffer: vi.fn().mockReturnValue({
52
- ok: true,
53
- value: { label: 'mock-buffer' },
54
- }),
55
- createTexture: vi.fn().mockReturnValue({
56
- ok: true,
57
- value: { label: 'mock-tex' },
58
- }),
59
- createTextureView: vi.fn().mockReturnValue({
60
- ok: true,
61
- value: { label: 'mock-tex-view' },
62
- }),
63
- createSampler: vi.fn().mockReturnValue({
64
- ok: true,
65
- value: { label: 'mock-sampler' },
66
- }),
67
- createBindGroupLayout: vi.fn().mockReturnValue({
68
- ok: true,
69
- value: { label: 'mock-bgl' },
70
- }),
71
- queue: {
72
- writeBuffer: vi.fn().mockReturnValue({ ok: true, value: undefined }),
73
- writeTexture: vi.fn().mockReturnValue({ ok: true, value: undefined }),
74
- },
75
- } as unknown as RhiDevice;
76
-
77
- return {
78
- device,
79
- errorRegistry,
80
- shaderCache: { get: vi.fn() },
81
- } as unknown as RenderSystemRuntime;
82
- }
83
-
84
- function mockCtx(runtime: RenderSystemRuntime): RenderPipelineContext {
85
- return {
86
- runtime,
87
- assets: { get: vi.fn(), register: vi.fn() },
88
- store: { ensureResident: vi.fn(), getTextureView: vi.fn() },
89
- pipelineState: {},
90
- encoder: {},
91
- view: {},
92
- clear: [0, 0, 0, 1],
93
- targetW: 800,
94
- targetH: 600,
95
- currentTexture: {},
96
- camera: {},
97
- validated: [],
98
- validatedOrdered: [],
99
- viewBindGroup: null,
100
- meshBindGroup: null,
101
- frameState: { perFrameGraph: null, isHdrpActive: true },
102
- dispatchCounts: {},
103
- bindGroupCounts: {},
104
- skylight: undefined,
105
- skylightCount: 0,
106
- skybox: undefined,
107
- msaaActive: false,
108
- geometryColorResolveView: null,
109
- ldrSpriteColorView: null,
110
- } as unknown as RenderPipelineContext;
111
- }
112
-
113
- /**
114
- * Declares the minimal HDRP g-buffer targets + half-swapchain SSAO
115
- * targets that addSsaoPasses expects. Also adds a producer 'g-buffer'
116
- * pass that writes gbuf0 + hdrDepth so the compile dangling-read
117
- * validation passes.
118
- */
119
- function setupGraph(graph: RenderGraph<RenderPipelineContext>): void {
120
- graph.addColorTarget('gbuf0', {
121
- format: 'rgba16float',
122
- size: 'swapchain',
123
- sample: 1,
124
- });
125
- graph.addColorTarget('hdrDepth', {
126
- format: 'depth24plus-stencil8',
127
- size: 'swapchain',
128
- sample: 1,
129
- });
130
- graph.addColorTarget('ssaoRaw', {
131
- format: 'r8unorm',
132
- size: 'half-swapchain',
133
- sample: 1,
134
- });
135
- graph.addColorTarget('ssaoBlurred', {
136
- format: 'r8unorm',
137
- size: 'half-swapchain',
138
- sample: 1,
139
- });
140
- }
141
-
142
- describe('addSsaoPasses topology (M3 / w13)', () => {
143
- it('(a) wires 2 pass nodes: ssao-calc + ssao-blur', () => {
144
- const runtime = mockRuntime();
145
- const ctx = mockCtx(runtime);
146
- const graph = new RenderGraph<RenderPipelineContext>();
147
- setupGraph(graph);
148
-
149
- addSsaoPasses(graph, {
150
- gbuf0: 'gbuf0',
151
- hdrDepth: 'hdrDepth',
152
- ssaoRaw: 'ssaoRaw',
153
- ssaoBlurred: 'ssaoBlurred',
154
- ctx,
155
- });
156
-
157
- const passes = graph.listPasses();
158
- const passNames = passes.map((p) => p.name);
159
-
160
- expect(passNames).toContain('ssao-calc');
161
- expect(passNames).toContain('ssao-blur');
162
- const ssaoPassNames = passNames.filter((n) => n.startsWith('ssao-'));
163
- expect(ssaoPassNames).toHaveLength(2);
164
- });
165
-
166
- it('(b) ssao-calc reads gbuf0 + hdrDepth, writes ssaoRaw', () => {
167
- const runtime = mockRuntime();
168
- const ctx = mockCtx(runtime);
169
- const graph = new RenderGraph<RenderPipelineContext>();
170
- setupGraph(graph);
171
-
172
- addSsaoPasses(graph, {
173
- gbuf0: 'gbuf0',
174
- hdrDepth: 'hdrDepth',
175
- ssaoRaw: 'ssaoRaw',
176
- ssaoBlurred: 'ssaoBlurred',
177
- ctx,
178
- });
179
-
180
- const passes = graph.listPasses();
181
- const calcPass = passes.find((p) => p.name === 'ssao-calc');
182
- expect(calcPass).toBeDefined();
183
- if (!calcPass) return;
184
-
185
- expect(calcPass.reads).toContain('gbuf0');
186
- expect(calcPass.reads).toContain('hdrDepth');
187
- expect(calcPass.reads).toHaveLength(2);
188
- expect(calcPass.writes).toContain('ssaoRaw');
189
- expect(calcPass.writes).toHaveLength(1);
190
- });
191
-
192
- it('(c) ssao-blur reads ssaoRaw, writes ssaoBlurred', () => {
193
- const runtime = mockRuntime();
194
- const ctx = mockCtx(runtime);
195
- const graph = new RenderGraph<RenderPipelineContext>();
196
- setupGraph(graph);
197
-
198
- addSsaoPasses(graph, {
199
- gbuf0: 'gbuf0',
200
- hdrDepth: 'hdrDepth',
201
- ssaoRaw: 'ssaoRaw',
202
- ssaoBlurred: 'ssaoBlurred',
203
- ctx,
204
- });
205
-
206
- const passes = graph.listPasses();
207
- const blurPass = passes.find((p) => p.name === 'ssao-blur');
208
- expect(blurPass).toBeDefined();
209
- if (!blurPass) return;
210
-
211
- expect(blurPass.reads).toContain('ssaoRaw');
212
- expect(blurPass.writes).toContain('ssaoBlurred');
213
- expect(blurPass.writes).toHaveLength(1);
214
- });
215
-
216
- it('(d) graph compiles with valid caps + producer g-buffer pass', () => {
217
- const runtime = mockRuntime();
218
- const ctx = mockCtx(runtime);
219
- const graph = new RenderGraph<RenderPipelineContext>();
220
- setupGraph(graph);
221
-
222
- // Producer pass: g-buffer writes gbuf0 + hdrDepth so ssao-calc's reads
223
- // have a valid writer (compile dangling-read validation).
224
- graph.addPass('g-buffer', {
225
- reads: [],
226
- writes: ['gbuf0', 'hdrDepth'],
227
- });
228
-
229
- addSsaoPasses(graph, {
230
- gbuf0: 'gbuf0',
231
- hdrDepth: 'hdrDepth',
232
- ssaoRaw: 'ssaoRaw',
233
- ssaoBlurred: 'ssaoBlurred',
234
- ctx,
235
- });
236
-
237
- // Verify the compile succeeds (proves topology + resources are valid)
238
- const compileResult = graph.compile({
239
- backendKind: runtime.device.caps.backendKind,
240
- caps: runtime.device.caps,
241
- device: runtime.device,
242
- });
243
- expect(compileResult.ok).toBe(true);
244
- });
245
-
246
- it('(e) ssao-calc comes before ssao-blur in topological order', () => {
247
- const runtime = mockRuntime();
248
- const ctx = mockCtx(runtime);
249
- const graph = new RenderGraph<RenderPipelineContext>();
250
- setupGraph(graph);
251
-
252
- addSsaoPasses(graph, {
253
- gbuf0: 'gbuf0',
254
- hdrDepth: 'hdrDepth',
255
- ssaoRaw: 'ssaoRaw',
256
- ssaoBlurred: 'ssaoBlurred',
257
- ctx,
258
- });
18
+ } from '../../../render/src/record/skybox-post-pass';
19
+ import type { RenderPipelineContext } from '../../../render/src/render-contract';
20
+ import {
21
+ recordSsaoBlurPass,
22
+ recordSsaoCalcPass,
23
+ } from '../../../render/src/render-graph-primitives';
24
+ import type {
25
+ _InternalRenderPipelineContext,
26
+ RenderSystemRuntime,
27
+ } from '../../../render/src/render-system';
259
28
 
260
- const passes = graph.listPasses();
261
- const calcIdx = passes.findIndex((p) => p.name === 'ssao-calc');
262
- const blurIdx = passes.findIndex((p) => p.name === 'ssao-blur');
263
- expect(calcIdx).toBeGreaterThanOrEqual(0);
264
- expect(blurIdx).toBeGreaterThanOrEqual(0);
265
- // calc must come before blur (calc writes ssaoRaw, blur reads ssaoRaw)
266
- expect(calcIdx).toBeLessThan(blurIdx);
267
- });
268
- });
269
29
  // ── M8 / w35-w36-w46 GPU dispatch + intensity write RED tests ───────────────
270
30
  //
271
31
  // plan-strategy §D-A: record closures must call setPipeline + setBindGroup + draw(3,1,0,0).
@@ -516,6 +276,37 @@ function setupGraphForDispatch(graph: RenderGraph<RenderPipelineContext>): void
516
276
  });
517
277
  }
518
278
 
279
+ function addSsaoRecordPasses(
280
+ graph: RenderGraph<RenderPipelineContext>,
281
+ _ctx: RenderPipelineContext,
282
+ ): void {
283
+ graph.addPass('ssao-calc', {
284
+ reads: ['gbuf0', 'hdrDepth'],
285
+ writes: ['ssaoRaw'],
286
+ execute: (c, resolveCtx) =>
287
+ recordSsaoCalcPass(
288
+ c as _InternalRenderPipelineContext,
289
+ resolveCtx,
290
+ 'ssaoRaw',
291
+ 'gbuf0',
292
+ 'hdrDepth',
293
+ ),
294
+ });
295
+ graph.addPass('ssao-blur', {
296
+ reads: ['ssaoRaw', 'gbuf0', 'hdrDepth'],
297
+ writes: ['ssaoBlurred'],
298
+ execute: (c, resolveCtx) =>
299
+ recordSsaoBlurPass(
300
+ c as _InternalRenderPipelineContext,
301
+ resolveCtx,
302
+ 'ssaoBlurred',
303
+ 'ssaoRaw',
304
+ 'gbuf0',
305
+ 'hdrDepth',
306
+ ),
307
+ });
308
+ }
309
+
519
310
  describe('recordSsaoCalcPass GPU dispatch (M8 / w35 — RED)', () => {
520
311
  it('(g) recordSsaoCalcPass calls setPipeline(ssaoCalcPipeline) once per frame', () => {
521
312
  const calcPipeline = { __label: 'ssao-calc-pipeline' };
@@ -523,13 +314,7 @@ describe('recordSsaoCalcPass GPU dispatch (M8 / w35 — RED)', () => {
523
314
 
524
315
  const graph = new RenderGraph<RenderPipelineContext>();
525
316
  setupGraphForDispatch(graph);
526
- addSsaoPasses(graph, {
527
- gbuf0: 'gbuf0',
528
- hdrDepth: 'hdrDepth',
529
- ssaoRaw: 'ssaoRaw',
530
- ssaoBlurred: 'ssaoBlurred',
531
- ctx,
532
- });
317
+ addSsaoRecordPasses(graph, ctx);
533
318
 
534
319
  const execute = findPassExecute(graph, 'ssao-calc');
535
320
  expect(execute).toBeDefined();
@@ -558,13 +343,7 @@ describe('recordSsaoCalcPass GPU dispatch (M8 / w35 — RED)', () => {
558
343
 
559
344
  const graph = new RenderGraph<RenderPipelineContext>();
560
345
  setupGraphForDispatch(graph);
561
- addSsaoPasses(graph, {
562
- gbuf0: 'gbuf0',
563
- hdrDepth: 'hdrDepth',
564
- ssaoRaw: 'ssaoRaw',
565
- ssaoBlurred: 'ssaoBlurred',
566
- ctx,
567
- });
346
+ addSsaoRecordPasses(graph, ctx);
568
347
 
569
348
  const execute = findPassExecute(graph, 'ssao-calc');
570
349
  if (!execute) return;
@@ -599,13 +378,7 @@ describe('recordSsaoCalcPass GPU dispatch (M8 / w35 — RED)', () => {
599
378
 
600
379
  const graph = new RenderGraph<RenderPipelineContext>();
601
380
  setupGraphForDispatch(graph);
602
- addSsaoPasses(graph, {
603
- gbuf0: 'gbuf0',
604
- hdrDepth: 'hdrDepth',
605
- ssaoRaw: 'ssaoRaw',
606
- ssaoBlurred: 'ssaoBlurred',
607
- ctx,
608
- });
381
+ addSsaoRecordPasses(graph, ctx);
609
382
 
610
383
  const execute = findPassExecute(graph, 'ssao-calc');
611
384
  if (!execute) return;
@@ -638,13 +411,7 @@ describe('recordSsaoCalcPass GPU dispatch (M8 / w35 — RED)', () => {
638
411
 
639
412
  const graph = new RenderGraph<RenderPipelineContext>();
640
413
  setupGraphForDispatch(graph);
641
- addSsaoPasses(graph, {
642
- gbuf0: 'gbuf0',
643
- hdrDepth: 'hdrDepth',
644
- ssaoRaw: 'ssaoRaw',
645
- ssaoBlurred: 'ssaoBlurred',
646
- ctx,
647
- });
414
+ addSsaoRecordPasses(graph, ctx);
648
415
 
649
416
  const execute = findPassExecute(graph, 'ssao-calc');
650
417
  if (!execute) return;
@@ -672,13 +439,7 @@ describe('recordSsaoBlurPass GPU dispatch + ssaoRaw input (M8 / w36 — RED)', (
672
439
 
673
440
  const graph = new RenderGraph<RenderPipelineContext>();
674
441
  setupGraphForDispatch(graph);
675
- addSsaoPasses(graph, {
676
- gbuf0: 'gbuf0',
677
- hdrDepth: 'hdrDepth',
678
- ssaoRaw: 'ssaoRaw',
679
- ssaoBlurred: 'ssaoBlurred',
680
- ctx,
681
- });
442
+ addSsaoRecordPasses(graph, ctx);
682
443
 
683
444
  const execute = findPassExecute(graph, 'ssao-blur');
684
445
  if (!execute) return;
@@ -709,13 +470,7 @@ describe('recordSsaoBlurPass GPU dispatch + ssaoRaw input (M8 / w36 — RED)', (
709
470
 
710
471
  const graph = new RenderGraph<RenderPipelineContext>();
711
472
  setupGraphForDispatch(graph);
712
- addSsaoPasses(graph, {
713
- gbuf0: 'gbuf0',
714
- hdrDepth: 'hdrDepth',
715
- ssaoRaw: 'ssaoRaw',
716
- ssaoBlurred: 'ssaoBlurred',
717
- ctx,
718
- });
473
+ addSsaoRecordPasses(graph, ctx);
719
474
 
720
475
  const execute = findPassExecute(graph, 'ssao-blur');
721
476
  if (!execute) return;
@@ -746,13 +501,7 @@ describe('recordSsaoBlurPass GPU dispatch + ssaoRaw input (M8 / w36 — RED)', (
746
501
 
747
502
  const graph = new RenderGraph<RenderPipelineContext>();
748
503
  setupGraphForDispatch(graph);
749
- addSsaoPasses(graph, {
750
- gbuf0: 'gbuf0',
751
- hdrDepth: 'hdrDepth',
752
- ssaoRaw: 'ssaoRaw',
753
- ssaoBlurred: 'ssaoBlurred',
754
- ctx,
755
- });
504
+ addSsaoRecordPasses(graph, ctx);
756
505
 
757
506
  const execute = findPassExecute(graph, 'ssao-blur');
758
507
  if (!execute) return;
@@ -791,13 +540,7 @@ describe('recordSsaoBlurPass GPU dispatch + ssaoRaw input (M8 / w36 — RED)', (
791
540
 
792
541
  const graph = new RenderGraph<RenderPipelineContext>();
793
542
  setupGraphForDispatch(graph);
794
- addSsaoPasses(graph, {
795
- gbuf0: 'gbuf0',
796
- hdrDepth: 'hdrDepth',
797
- ssaoRaw: 'ssaoRaw',
798
- ssaoBlurred: 'ssaoBlurred',
799
- ctx,
800
- });
543
+ addSsaoRecordPasses(graph, ctx);
801
544
 
802
545
  const execute = findPassExecute(graph, 'ssao-blur');
803
546
  if (!execute) return;
@@ -835,13 +578,7 @@ describe('recordSsaoCalcPass per-frame intensity write (M8 / w46 — RED)', () =
835
578
 
836
579
  const graph = new RenderGraph<RenderPipelineContext>();
837
580
  setupGraphForDispatch(graph);
838
- addSsaoPasses(graph, {
839
- gbuf0: 'gbuf0',
840
- hdrDepth: 'hdrDepth',
841
- ssaoRaw: 'ssaoRaw',
842
- ssaoBlurred: 'ssaoBlurred',
843
- ctx,
844
- });
581
+ addSsaoRecordPasses(graph, ctx);
845
582
 
846
583
  const execute = findPassExecute(graph, 'ssao-calc');
847
584
  if (!execute) return;
@@ -868,68 +605,21 @@ describe('recordSsaoCalcPass per-frame intensity write (M8 / w46 — RED)', () =
868
605
  (ssaoUniformWrites[0]?.data as Float32Array).byteOffset,
869
606
  64,
870
607
  );
871
- // intensityPad starts at float index 48 (offset 192). x/y/z carry the
872
- // default intensity/radius/bias and w remains padding.
608
+ // intensityPad starts at float index 48 (offset 192). The spy supplies
609
+ // only enabled+intensity, so the parameter authority contributes the
610
+ // documented radius/bias defaults.
873
611
  expect(data[48]).toBe(1.0);
874
612
  expect(data[49]).toBe(0.5);
875
- expect(data[50]).toBeCloseTo(0.025, 5);
613
+ expect(data[50]).toBeCloseTo(0.025, 6);
876
614
  expect(data[51]).toBe(0);
877
615
  });
878
616
 
879
- it('(o2) calc pass carries explicit radius and bias through the uniform', () => {
880
- const { ctx, spy } = makeDispatchSpyCtx();
881
-
882
- const graph = new RenderGraph<RenderPipelineContext>();
883
- setupGraphForDispatch(graph);
884
- addSsaoPasses(graph, {
885
- gbuf0: 'gbuf0',
886
- hdrDepth: 'hdrDepth',
887
- ssaoRaw: 'ssaoRaw',
888
- ssaoBlurred: 'ssaoBlurred',
889
- params: { radius: 1.25, bias: 0.75, intensity: 0.4 },
890
- ctx,
891
- });
892
-
893
- const execute = findPassExecute(graph, 'ssao-calc');
894
- if (!execute) return;
895
-
896
- execute(ctx, {
897
- resolve: (n: string) =>
898
- n === 'ssaoRaw'
899
- ? { __label: 'ssaoRawView' }
900
- : n === 'gbuf0'
901
- ? { __label: 'gbuf0View' }
902
- : n === 'hdrDepth'
903
- ? { __label: 'hdrDepthView' }
904
- : undefined,
905
- });
906
-
907
- const writes = spy.writeBufferCalls.filter(
908
- (call) => (call.data as ArrayBufferView).byteLength === 256,
909
- );
910
- expect(writes).toHaveLength(1);
911
- const data = new Float32Array(
912
- (writes[0]?.data as Float32Array).buffer,
913
- (writes[0]?.data as Float32Array).byteOffset,
914
- 64,
915
- );
916
- expect(data[48]).toBeCloseTo(0.4, 5);
917
- expect(data[49]).toBe(1.25);
918
- expect(data[50]).toBe(0.75);
919
- });
920
-
921
617
  it('(p) calc pass writeBuffer count is 1 per frame (single 256B transaction)', () => {
922
618
  const { ctx, spy } = makeDispatchSpyCtx();
923
619
 
924
620
  const graph = new RenderGraph<RenderPipelineContext>();
925
621
  setupGraphForDispatch(graph);
926
- addSsaoPasses(graph, {
927
- gbuf0: 'gbuf0',
928
- hdrDepth: 'hdrDepth',
929
- ssaoRaw: 'ssaoRaw',
930
- ssaoBlurred: 'ssaoBlurred',
931
- ctx,
932
- });
622
+ addSsaoRecordPasses(graph, ctx);
933
623
 
934
624
  const execute = findPassExecute(graph, 'ssao-calc');
935
625
  if (!execute) return;
@@ -1088,6 +778,10 @@ describe('post-process bindgroup identity cache (issue #670)', () => {
1088
778
  views.bloomBlurV,
1089
779
  );
1090
780
  expect(bindGroupCreates[5]?.entries[0]?.resource.value).toBe(views.cubemap);
781
+ expect(bindGroupCreates[5]?.entries[2]?.resource.value).toEqual({
782
+ buffer: ctx.pipelineState.viewUniformBuffer,
783
+ size: 960,
784
+ });
1091
785
 
1092
786
  recordAll();
1093
787
  expect(bindGroupCreates).toHaveLength(6);
@@ -1122,13 +816,7 @@ describe('bindgroup resize invalidation (R-BGCACHE)', () => {
1122
816
  const { ctx, spy } = makeDispatchSpyCtx();
1123
817
  const graph = new RenderGraph<RenderPipelineContext>();
1124
818
  setupGraphForDispatch(graph);
1125
- addSsaoPasses(graph, {
1126
- gbuf0: 'gbuf0',
1127
- hdrDepth: 'hdrDepth',
1128
- ssaoRaw: 'ssaoRaw',
1129
- ssaoBlurred: 'ssaoBlurred',
1130
- ctx,
1131
- });
819
+ addSsaoRecordPasses(graph, ctx);
1132
820
  const execute = findPassExecute(graph, 'ssao-calc');
1133
821
  if (!execute) throw new Error('ssao-calc pass missing');
1134
822
 
@@ -1164,13 +852,7 @@ describe('bindgroup resize invalidation (R-BGCACHE)', () => {
1164
852
  const { ctx, spy } = makeDispatchSpyCtx();
1165
853
  const graph = new RenderGraph<RenderPipelineContext>();
1166
854
  setupGraphForDispatch(graph);
1167
- addSsaoPasses(graph, {
1168
- gbuf0: 'gbuf0',
1169
- hdrDepth: 'hdrDepth',
1170
- ssaoRaw: 'ssaoRaw',
1171
- ssaoBlurred: 'ssaoBlurred',
1172
- ctx,
1173
- });
855
+ addSsaoRecordPasses(graph, ctx);
1174
856
  const execute = findPassExecute(graph, 'ssao-calc');
1175
857
  if (!execute) throw new Error('ssao-calc pass missing');
1176
858
 
@@ -1193,13 +875,7 @@ describe('bindgroup resize invalidation (R-BGCACHE)', () => {
1193
875
  const { ctx, spy } = makeDispatchSpyCtx();
1194
876
  const graph = new RenderGraph<RenderPipelineContext>();
1195
877
  setupGraphForDispatch(graph);
1196
- addSsaoPasses(graph, {
1197
- gbuf0: 'gbuf0',
1198
- hdrDepth: 'hdrDepth',
1199
- ssaoRaw: 'ssaoRaw',
1200
- ssaoBlurred: 'ssaoBlurred',
1201
- ctx,
1202
- });
878
+ addSsaoRecordPasses(graph, ctx);
1203
879
  const execute = findPassExecute(graph, 'ssao-blur');
1204
880
  if (!execute) throw new Error('ssao-blur pass missing');
1205
881
 
@@ -107,7 +107,7 @@ describe('SSAO RenderPipeline PSO descriptor assertions (w24 — RED)', () => {
107
107
 
108
108
  it('(g1) renderer BGL keeps the kernel binding uniform', () => {
109
109
  const factory = readFileSync(
110
- fileURLToPath(new URL('../../../render/src/renderer/renderer-factory.ts', import.meta.url)),
110
+ fileURLToPath(new URL('../../../render/src/assembly/factory.ts', import.meta.url)),
111
111
  'utf8',
112
112
  );
113
113
  const ssaoBgl = factory.slice(factory.indexOf("label: 'ssao-bgl'"));
@@ -5,16 +5,18 @@
5
5
  // - view matrix at offsets 0..15 (float indices).
6
6
  // - projection matrix at offsets 16..31.
7
7
  // - inverseProjection matrix at offsets 32..47.
8
- // - intensityPad vec4 at offsets 48..51 (x = intensity, y = radius,
9
- // z = bias, w = padding).
8
+ // - intensityPad vec4 at offsets 48..51 (x = intensity, y = radius, z = bias, w = padding).
10
9
  // - Matches plan-strategy D-1 + D-C: host write order aligns with WGSL
11
10
  // struct declaration; intensity scalar carried at end of UBO.
12
11
  // - SSAO uniform is separate from View UBO (plan-strategy D-1 invariant).
13
12
  //
14
13
  // AC-03 anchor: uniform byte-layout matches WGSL struct.
15
14
 
16
- import { SSAO_UNIFORM_BYTES, SSAO_UNIFORM_INTENSITY_OFFSET } from '@forgeax/engine-render/internal';
17
15
  import { describe, expect, it } from 'vitest';
16
+ import {
17
+ SSAO_UNIFORM_BYTES,
18
+ SSAO_UNIFORM_INTENSITY_OFFSET,
19
+ } from '../../../render/src/ssao-buffers';
18
20
 
19
21
  const FLOATS_PER_MAT4 = 16;
20
22
  const MAT4_COUNT = 3;
@@ -147,16 +149,16 @@ describe('SSAO uniform layout', () => {
147
149
  expect(SSAO_UNIFORM_INTENSITY_OFFSET / 4).toBe(INTENSITY_PAD_OFFSET);
148
150
  });
149
151
 
150
- it('w30 — intensity/radius/bias write reads back from one vec4', () => {
152
+ it('w30 — intensity write 1.0 reads back 1.0', () => {
151
153
  const payload = new Float32Array(64); // 256 bytes
152
154
  payload[INTENSITY_PAD_OFFSET] = 1.0;
153
155
  payload[INTENSITY_PAD_OFFSET + 1] = 0.5;
154
156
  payload[INTENSITY_PAD_OFFSET + 2] = 0.025;
157
+ // The vec4 padding must not bleed into the matrices.
155
158
  payload[INTENSITY_PAD_OFFSET + 3] = 0;
156
159
  expect(payload[INTENSITY_PAD_OFFSET]).toBe(1.0);
157
160
  expect(payload[INTENSITY_PAD_OFFSET + 1]).toBe(0.5);
158
- expect(payload[INTENSITY_PAD_OFFSET + 2]).toBeCloseTo(0.025, 5);
159
- expect(payload[INTENSITY_PAD_OFFSET + 3]).toBe(0);
161
+ expect(payload[INTENSITY_PAD_OFFSET + 2]).toBeCloseTo(0.025, 6);
160
162
  expect(payload.byteLength).toBe(256);
161
163
  });
162
164