@woosh/meep-engine 3.12.0 → 3.13.0

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 (285) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  3. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  4. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  5. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  6. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  7. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  8. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  9. package/src/shade/RENDERER_CONTRACT.md +2 -1
  10. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  11. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  12. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  13. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
  14. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  15. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  16. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  17. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  18. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  19. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  20. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  21. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  22. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  23. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  24. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  25. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  26. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  27. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  28. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  29. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  30. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  31. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  32. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  33. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  34. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  35. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  39. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  40. package/src/shade/renderer/Renderer.d.ts +0 -6
  41. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  42. package/src/shade/renderer/Renderer.js +0 -29
  43. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  44. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  45. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  46. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  47. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  49. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  51. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  58. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  60. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  61. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  62. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  63. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  64. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  65. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  66. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  68. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  70. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  71. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  72. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  73. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  74. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  75. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  76. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  77. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  78. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  79. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  80. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  81. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  82. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  83. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  85. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  87. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  88. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  89. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  90. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  91. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  92. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  93. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  94. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  96. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  98. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  104. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  106. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  108. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  109. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  110. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  111. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  113. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  114. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  117. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  118. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  119. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  120. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  121. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  122. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  124. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  126. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  127. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  128. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  129. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  130. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  132. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  133. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  134. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  135. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  136. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  137. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  138. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  139. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  140. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  142. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/graph_particles.js +5 -3
  144. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  145. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  147. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  149. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  151. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  153. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  154. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  155. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  156. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  157. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  158. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  159. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  160. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  161. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  162. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  163. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  164. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  165. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  166. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  168. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  176. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  186. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  188. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  190. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  192. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  194. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  196. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  198. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  199. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  200. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  201. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  202. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  203. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  205. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  207. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  209. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  211. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  213. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  215. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  216. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  217. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  218. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  219. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  220. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  222. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  224. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  225. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  226. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  227. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  228. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  229. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  230. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  231. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  232. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  233. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  235. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  237. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  239. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  240. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  241. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  242. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  243. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  244. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  245. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  246. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  247. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  248. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  249. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  250. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  251. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  252. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
  253. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  254. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  255. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  256. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  257. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  258. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  260. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  261. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  262. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  263. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  264. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  265. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  266. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  267. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  268. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  269. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  270. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  271. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  272. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  273. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  274. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  275. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  276. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  277. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  278. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  279. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  280. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  281. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  282. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  283. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  284. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  285. package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
@@ -22,6 +22,10 @@ export const ACCUMULATING_RT_UNIFORMS_STRUCT = WebGPUStruct.from({
22
22
  alpha: f32,
23
23
  });
24
24
 
25
+ // per-dispatch, 24 bytes, read-only: immediate data rather than a uniform buffer. camera and the
26
+ // material table beside it are scene state and stay bound.
27
+ resources.setImmediate("settings", ACCUMULATING_RT_UNIFORMS_STRUCT);
28
+
25
29
  sr_create_group_RTX(resources);
26
30
 
27
31
  resources.createGroup()
@@ -33,7 +37,6 @@ resources.createGroup()
33
37
  .addTexture("tEnvironment", "unfilterable-float", "2d");
34
38
 
35
39
  resources.createGroup()
36
- .addUniform("settings", ACCUMULATING_RT_UNIFORMS_STRUCT)
37
40
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
38
41
  .addTexture("history_texture", "unfilterable-float", "2d")
39
42
  .addStorageTexture("output_texture", "rgba32float", "2d", "write-only");
@@ -1 +1 @@
1
- {"version":3,"file":"shader_bloom_mix.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/bloom/shader_bloom_mix.js"],"names":[],"mappings":"AAsCA,2CAYG;4BA/CyB,6BAA6B"}
1
+ {"version":3,"file":"shader_bloom_mix.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/bloom/shader_bloom_mix.js"],"names":[],"mappings":"AAwCA,2CAYG;4BAjDyB,6BAA6B"}
@@ -12,11 +12,13 @@ const BLOOM_SETTINGS_STRUCT = WebGPUStruct.from({
12
12
  })
13
13
 
14
14
  const resources = new ShaderResourceSetDescriptor();
15
+
16
+ // per-pass, four bytes, read-only: immediate data rather than a uniform buffer
17
+ resources.setImmediate("settings", BLOOM_SETTINGS_STRUCT);
15
18
  resources.createGroup()
16
19
  .addTexture("tBloom", "float")
17
20
  .addTexture("tSource")
18
21
  .addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
19
- .addUniform("settings", BLOOM_SETTINGS_STRUCT)
20
22
  ;
21
23
 
22
24
  const body = CodeChunk.from(
@@ -1 +1 @@
1
- {"version":3,"file":"shader_ffx_rcas.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/cas/shader_ffx_rcas.js"],"names":[],"mappings":"AA6GA,0CAKG;4BAhHyB,6BAA6B"}
1
+ {"version":3,"file":"shader_ffx_rcas.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/cas/shader_ffx_rcas.js"],"names":[],"mappings":"AA+GA,0CAKG;4BAlHyB,6BAA6B"}
@@ -8,9 +8,11 @@ import { F32_CONTAINER_STRUCT } from "../../shader/type/F32_CONTAINER_STRUCT.js"
8
8
 
9
9
  const resources = new ShaderResourceSetDescriptor();
10
10
 
11
+ // per-pass, four bytes, read-only: immediate data rather than a uniform buffer holding one f32
12
+ resources.setImmediate("uSharpness", F32_CONTAINER_STRUCT);
13
+
11
14
  resources.createGroup()
12
- .addTexture("tInput")
13
- .addUniform("uSharpness", F32_CONTAINER_STRUCT);
15
+ .addTexture("tInput");
14
16
 
15
17
 
16
18
  const body = CodeChunk.from(
@@ -1,148 +1,148 @@
1
- import { i32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
- import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
4
- import {
5
- chunk_texture_channel_compute_variance_center
6
- } from "../../shader/chunk/texture/chunk_texture_channel_compute_variance_center.js";
7
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
8
- import { ImageShader } from "../../shader/ImageShader.js";
9
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
10
- import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
11
- import { chunk_compute_edge_stopping_weight } from "../../shader/chunk/filter/chunk_compute_edge_stopping_weight.js";
12
-
13
- export const ATORUS_UNIFORMS_STRUCT = WebGPUStruct.from({
14
- step_size: i32
15
- });
16
-
17
- const resources = new ShaderResourceSetDescriptor();
18
-
19
- resources.createGroup()
20
- .addTexture("tInput")
21
- .addTexture("tDepth")
22
- .addTexture("tNormal", "uint");
23
-
24
- resources.createGroup()
25
- .addUniform("settings", ATORUS_UNIFORMS_STRUCT);
26
-
27
- const body = CodeChunk.from(
28
- //language=WGSL
29
- `
30
- const phi_visibility = 4.0;
31
- const phi_normal = 128.0;
32
- const sigma_depth = 1.0;
33
-
34
- @fragment
35
- fn main(
36
- @builtin(position) coord: vec4<f32>,
37
- ) -> @location(0) vec2<f32>{
38
- let ipos = vec2<i32>(coord.xy);
39
- let screen_size = vec2<i32>(textureDimensions(tInput));
40
-
41
- const eps_variance = 1e-10;
42
- const kernel_weights = array<f32,3>( 1.0, 2.0 / 3.0, 1.0 / 6.0 );
43
-
44
- // constant samplers to prevent the compiler from generating code which
45
- // fetches the sampler descriptor from memory for each texture access
46
- let center_visibility = textureLoad(tInput, ipos, 0).rg;
47
-
48
- // variance estimate from per-pixel moments, filtered using 3x3 gaussian blur
49
- let variance = texture_channel_compute_variance_center( ipos, tInput);
50
-
51
- let std_dev = sqrt(max(0.0, eps_variance + variance));
52
-
53
- let phi_visibility = phi_visibility * std_dev;
54
-
55
- // explicitly store/accumulate center pixel with weight 1 to prevent issues
56
- // with the edge-stopping functions
57
- var sum_w_visibility = 1.0;
58
- var sum_visibility = center_visibility;
59
-
60
-
61
- let current_normal = decode_g_buffer_normal(textureLoad(tNormal, ipos, 0).xy);
62
- let center_depth = textureLoad(tDepth, ipos, 0).r;
63
-
64
- const offsets = array< vec2<i32>,8>(
65
- vec2( -1, -1 ),
66
- vec2( 0, -1 ) ,
67
- vec2( 1, -1 ),
68
- vec2( -1, 0 ),
69
- vec2( 1, 0 ),
70
- vec2( -1, 1 ),
71
- vec2( 0, 1 ),
72
- vec2( 1, 1 ),
73
- );
74
-
75
- const num_samples = 8;
76
-
77
- for(var i=0; i< num_samples; i++){
78
- let offset = offsets[i];
79
-
80
- let xx = offset.x;
81
- let yy = offset.y;
82
-
83
- let p = ipos + offset * settings.step_size;
84
- let inside = all(p >= vec2(0, 0)) && all(p < screen_size);
85
-
86
- if(!inside){
87
- continue;
88
- }
89
-
90
- let kernel = kernel_weights[ abs(xx) ] * kernel_weights[ abs(yy) ];
91
-
92
- let sample_visibility = textureLoad(tInput, p, 0).rg;
93
-
94
- let sample_normal = decode_g_buffer_normal(textureLoad(tNormal, p, 0).xy);
95
- let sample_depth = textureLoad(tDepth, p, 0).r;
96
-
97
- // compute the edge-stopping functions
98
- let w = compute_edge_stopping_weight(
99
- center_depth,
100
- sample_depth,
101
- sigma_depth,
102
-
103
- current_normal,
104
- sample_normal,
105
- phi_normal,
106
-
107
- center_visibility.r,
108
- sample_visibility.r,
109
- phi_visibility
110
- );
111
-
112
- let w_visibility = w * kernel;
113
-
114
- // both channels carry moments (E[X], E[X²]) - average linearly so the
115
- // pair remains a valid moment estimate that downstream get_std_dev can interpret.
116
- sum_w_visibility += w_visibility;
117
- sum_visibility += w_visibility * sample_visibility;
118
- }
119
-
120
- // output first two moments
121
- let out_visibility = sum_visibility / sum_w_visibility;
122
-
123
- return out_visibility;
124
- }
125
- `,
126
- [
127
- ATORUS_UNIFORMS_STRUCT.declaration_chunk,
128
- chunk_texture_channel_compute_variance_center,
129
- chunk_decode_g_buffer_normal,
130
- chunk_compute_edge_stopping_weight,
131
- ]);
132
-
133
- /**
134
- * Based on REBLUR paper, a type of Gaussian blur with edge-stopping
135
- * @type {ShaderDescriptor}
136
- */
137
- export const fragment_shader_denoise_ao = ShaderDescriptor.from({
138
- label: "A-torus Denoise",
139
- resources,
140
- body
141
- });
142
-
143
- export const shader_denoise_luminance_spatial = ImageShader.from({
144
- descriptor: fragment_shader_denoise_ao,
145
- targets: [
146
- { format: "rg16float" }
147
- ]
1
+ import { i32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+ import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
4
+ import {
5
+ chunk_texture_channel_compute_variance_center
6
+ } from "../../shader/chunk/texture/chunk_texture_channel_compute_variance_center.js";
7
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
8
+ import { ImageShader } from "../../shader/ImageShader.js";
9
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
10
+ import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
11
+ import { chunk_compute_edge_stopping_weight } from "../../shader/chunk/filter/chunk_compute_edge_stopping_weight.js";
12
+
13
+ export const ATORUS_UNIFORMS_STRUCT = WebGPUStruct.from({
14
+ step_size: i32
15
+ });
16
+
17
+ const resources = new ShaderResourceSetDescriptor();
18
+
19
+ // per-pass, four bytes, read-only: immediate data rather than a uniform buffer
20
+ resources.setImmediate("settings", ATORUS_UNIFORMS_STRUCT);
21
+
22
+ resources.createGroup()
23
+ .addTexture("tInput")
24
+ .addTexture("tDepth")
25
+ .addTexture("tNormal", "uint");
26
+
27
+ const body = CodeChunk.from(
28
+ //language=WGSL
29
+ `
30
+ const phi_visibility = 4.0;
31
+ const phi_normal = 128.0;
32
+ const sigma_depth = 1.0;
33
+
34
+ @fragment
35
+ fn main(
36
+ @builtin(position) coord: vec4<f32>,
37
+ ) -> @location(0) vec2<f32>{
38
+ let ipos = vec2<i32>(coord.xy);
39
+ let screen_size = vec2<i32>(textureDimensions(tInput));
40
+
41
+ const eps_variance = 1e-10;
42
+ const kernel_weights = array<f32,3>( 1.0, 2.0 / 3.0, 1.0 / 6.0 );
43
+
44
+ // constant samplers to prevent the compiler from generating code which
45
+ // fetches the sampler descriptor from memory for each texture access
46
+ let center_visibility = textureLoad(tInput, ipos, 0).rg;
47
+
48
+ // variance estimate from per-pixel moments, filtered using 3x3 gaussian blur
49
+ let variance = texture_channel_compute_variance_center( ipos, tInput);
50
+
51
+ let std_dev = sqrt(max(0.0, eps_variance + variance));
52
+
53
+ let phi_visibility = phi_visibility * std_dev;
54
+
55
+ // explicitly store/accumulate center pixel with weight 1 to prevent issues
56
+ // with the edge-stopping functions
57
+ var sum_w_visibility = 1.0;
58
+ var sum_visibility = center_visibility;
59
+
60
+
61
+ let current_normal = decode_g_buffer_normal(textureLoad(tNormal, ipos, 0).xy);
62
+ let center_depth = textureLoad(tDepth, ipos, 0).r;
63
+
64
+ const offsets = array< vec2<i32>,8>(
65
+ vec2( -1, -1 ),
66
+ vec2( 0, -1 ) ,
67
+ vec2( 1, -1 ),
68
+ vec2( -1, 0 ),
69
+ vec2( 1, 0 ),
70
+ vec2( -1, 1 ),
71
+ vec2( 0, 1 ),
72
+ vec2( 1, 1 ),
73
+ );
74
+
75
+ const num_samples = 8;
76
+
77
+ for(var i=0; i< num_samples; i++){
78
+ let offset = offsets[i];
79
+
80
+ let xx = offset.x;
81
+ let yy = offset.y;
82
+
83
+ let p = ipos + offset * settings.step_size;
84
+ let inside = all(p >= vec2(0, 0)) && all(p < screen_size);
85
+
86
+ if(!inside){
87
+ continue;
88
+ }
89
+
90
+ let kernel = kernel_weights[ abs(xx) ] * kernel_weights[ abs(yy) ];
91
+
92
+ let sample_visibility = textureLoad(tInput, p, 0).rg;
93
+
94
+ let sample_normal = decode_g_buffer_normal(textureLoad(tNormal, p, 0).xy);
95
+ let sample_depth = textureLoad(tDepth, p, 0).r;
96
+
97
+ // compute the edge-stopping functions
98
+ let w = compute_edge_stopping_weight(
99
+ center_depth,
100
+ sample_depth,
101
+ sigma_depth,
102
+
103
+ current_normal,
104
+ sample_normal,
105
+ phi_normal,
106
+
107
+ center_visibility.r,
108
+ sample_visibility.r,
109
+ phi_visibility
110
+ );
111
+
112
+ let w_visibility = w * kernel;
113
+
114
+ // both channels carry moments (E[X], E[X²]) - average linearly so the
115
+ // pair remains a valid moment estimate that downstream get_std_dev can interpret.
116
+ sum_w_visibility += w_visibility;
117
+ sum_visibility += w_visibility * sample_visibility;
118
+ }
119
+
120
+ // output first two moments
121
+ let out_visibility = sum_visibility / sum_w_visibility;
122
+
123
+ return out_visibility;
124
+ }
125
+ `,
126
+ [
127
+ ATORUS_UNIFORMS_STRUCT.declaration_chunk,
128
+ chunk_texture_channel_compute_variance_center,
129
+ chunk_decode_g_buffer_normal,
130
+ chunk_compute_edge_stopping_weight,
131
+ ]);
132
+
133
+ /**
134
+ * Based on REBLUR paper, a type of Gaussian blur with edge-stopping
135
+ * @type {ShaderDescriptor}
136
+ */
137
+ export const fragment_shader_denoise_ao = ShaderDescriptor.from({
138
+ label: "A-torus Denoise",
139
+ resources,
140
+ body
141
+ });
142
+
143
+ export const shader_denoise_luminance_spatial = ImageShader.from({
144
+ descriptor: fragment_shader_denoise_ao,
145
+ targets: [
146
+ { format: "rg16float" }
147
+ ]
148
148
  })
@@ -1 +1 @@
1
- {"version":3,"file":"graph_atorus_denoise_luma.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;GAUG;AACH,kJAFa,MAAM,CA6FlB"}
1
+ {"version":3,"file":"graph_atorus_denoise_luma.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;GAUG;AACH,kJAFa,MAAM,CA+FlB"}
@@ -1,120 +1,122 @@
1
- import { assert } from "../../../../core/assert.js";
2
- import { TextureViewDescriptor } from "../../../descriptor/texture/TextureViewDescriptor.js";
3
- import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
4
- import { create_full_quad_pipeline_descriptor } from "../../shader/fullscreen/create_full_quad_pipeline_descriptor.js";
5
- import { ATORUS_UNIFORMS_STRUCT, fragment_shader_denoise_ao } from "./fragment_shader_denoise_ao.js";
6
-
7
- const render_pipeline_descriptor_denoise = create_full_quad_pipeline_descriptor({
8
- label: "A-torus Denoise",
9
- fragment_code: fragment_shader_denoise_ao.source,
10
- layout: fragment_shader_denoise_ao.resources.generatePipelineLayout(GPUShaderStage.FRAGMENT),
11
- targets: [
12
- {
13
- format: "rg16float"
14
- }
15
- ]
16
- });
17
-
18
- /**
19
- *
20
- * @param {FrameGraph} graph
21
- * @param {number} input_luma
22
- * @param {number} input_depth
23
- * @param {number} input_normal
24
- * @param {number} [iterations]
25
- * @param {number} input_mip_level what mip level to read input resources at, needed for denoising half-resolution render targets
26
- * @param {number[]} resolution
27
- * @returns {number}
28
- */
29
- export function graph_atorus_denoise_luma({
30
- graph,
31
- input_luma = -1,
32
- input_depth = -1,
33
- input_normal = -1,
34
- iterations = 3,
35
- input_mip_level = 0,
36
- resolution
37
- }) {
38
-
39
- assert.isNonNegativeInteger(input_mip_level, 'input_mip_level');
40
-
41
- let input = input_luma;
42
-
43
- for (let i = 0; i < iterations; i++) {
44
-
45
- const denoise_data = {};
46
-
47
- const denoise_iteration = i;
48
-
49
- /**
50
- *
51
- * @param data
52
- * @param {FramePassResources} resources
53
- * @param {GraphicsExecutionContext} context
54
- */
55
- function pass_denoise(data, resources, context) {
56
-
57
- const texture_depth = resources.get(data.input_depth);
58
- const texture_normal = resources.get(data.input_normal);
59
- const texture_luminance = resources.get(data.input_luminance);
60
-
61
- const output = resources.get(data.output);
62
-
63
- const encoder = context.encoder;
64
-
65
- const buffer_settings = encoder.allocateTransientValueBuffer(
66
- ATORUS_UNIFORMS_STRUCT,
67
- {
68
- // with 3 iterations this gives us step sizes of: 1, 2, 4
69
- // this is based on AMD's shadow denoiser presentation
70
- step_size: 1 << denoise_iteration,
71
- },
72
- GPUBufferUsage.UNIFORM
73
- );
74
-
75
- const input_view_descriptor = TextureViewDescriptor.from({
76
- baseMipLevel: input_mip_level,
77
- mipLevelCount: 1
78
- });
79
-
80
- const pass = encoder.constructRenderPass({
81
- pipeline: render_pipeline_descriptor_denoise,
82
- bindings: fragment_shader_denoise_ao.resources.generateBindings({
83
- tInput: texture_luminance.obtainView(),
84
- tDepth: texture_depth.obtainView(input_view_descriptor),
85
- tNormal: texture_normal.obtainView(input_view_descriptor),
86
- settings: buffer_settings
87
- }),
88
- colorAttachments: [
89
- {
90
- loadOp: "clear",
91
- storeOp: "store",
92
- clearValue: [0, 0, 0, 0],
93
- view: output.obtainView()
94
- }
95
- ]
96
- });
97
-
98
- pass.draw(3);
99
-
100
- pass.end();
101
- }
102
-
103
- const denoise_builder = graph.add(`Spatial Denoise ${(i + 1)}/${iterations}`, denoise_data, pass_denoise);
104
-
105
- denoise_data.input_depth = denoise_builder.read(input_depth);
106
- denoise_data.input_normal = denoise_builder.read(input_normal);
107
- denoise_data.input_luminance = denoise_builder.read(input);
108
-
109
- input = denoise_builder.create("denoised", TextureResourceDescriptor.from({
110
- resolution: resolution,
111
- usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,
112
- format: "rg16float",
113
- }));
114
-
115
- denoise_data.output = input;
116
-
117
- }
118
-
119
- return input;
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { TextureViewDescriptor } from "../../../descriptor/texture/TextureViewDescriptor.js";
3
+ import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
4
+ import { create_full_quad_pipeline_descriptor } from "../../shader/fullscreen/create_full_quad_pipeline_descriptor.js";
5
+ import { fragment_shader_denoise_ao } from "./fragment_shader_denoise_ao.js";
6
+
7
+ const render_pipeline_descriptor_denoise = create_full_quad_pipeline_descriptor({
8
+ label: "A-torus Denoise",
9
+ fragment_code: fragment_shader_denoise_ao.source,
10
+ layout: fragment_shader_denoise_ao.resources.generatePipelineLayout(GPUShaderStage.FRAGMENT),
11
+ targets: [
12
+ {
13
+ format: "rg16float"
14
+ }
15
+ ]
16
+ });
17
+
18
+ /**
19
+ *
20
+ * @param {FrameGraph} graph
21
+ * @param {number} input_luma
22
+ * @param {number} input_depth
23
+ * @param {number} input_normal
24
+ * @param {number} [iterations]
25
+ * @param {number} input_mip_level what mip level to read input resources at, needed for denoising half-resolution render targets
26
+ * @param {number[]} resolution
27
+ * @returns {number}
28
+ */
29
+ export function graph_atorus_denoise_luma({
30
+ graph,
31
+ input_luma = -1,
32
+ input_depth = -1,
33
+ input_normal = -1,
34
+ iterations = 3,
35
+ input_mip_level = 0,
36
+ resolution
37
+ }) {
38
+
39
+ assert.isNonNegativeInteger(input_mip_level, 'input_mip_level');
40
+
41
+ let input = input_luma;
42
+
43
+ for (let i = 0; i < iterations; i++) {
44
+
45
+ const denoise_data = {};
46
+
47
+ const denoise_iteration = i;
48
+
49
+ /**
50
+ *
51
+ * @param data
52
+ * @param {FramePassResources} resources
53
+ * @param {GraphicsExecutionContext} context
54
+ */
55
+ function pass_denoise(data, resources, context) {
56
+
57
+ const texture_depth = resources.get(data.input_depth);
58
+ const texture_normal = resources.get(data.input_normal);
59
+ const texture_luminance = resources.get(data.input_luminance);
60
+
61
+ const output = resources.get(data.output);
62
+
63
+ const encoder = context.encoder;
64
+
65
+ const input_view_descriptor = TextureViewDescriptor.from({
66
+ baseMipLevel: input_mip_level,
67
+ mipLevelCount: 1
68
+ });
69
+
70
+ const bindings = {
71
+ tInput: texture_luminance.obtainView(),
72
+ tDepth: texture_depth.obtainView(input_view_descriptor),
73
+ tNormal: texture_normal.obtainView(input_view_descriptor),
74
+ settings: {
75
+ // with 3 iterations this gives us step sizes of: 1, 2, 4
76
+ // this is based on AMD's shadow denoiser presentation
77
+ step_size: 1 << denoise_iteration,
78
+ },
79
+ };
80
+
81
+ const resource_set = fragment_shader_denoise_ao.resources;
82
+
83
+ const pass = encoder.constructRenderPass({
84
+ pipeline: render_pipeline_descriptor_denoise,
85
+ bindings: resource_set.generateBindings(bindings),
86
+ // this pass is built by hand rather than through ImageShader.draw, so the immediate
87
+ // `settings` has to be written here — the pipeline layout above already declares
88
+ // its size, and a pass whose slots were never written is refused
89
+ immediate: encoder.writeImmediate(resource_set, bindings),
90
+ colorAttachments: [
91
+ {
92
+ loadOp: "clear",
93
+ storeOp: "store",
94
+ clearValue: [0, 0, 0, 0],
95
+ view: output.obtainView()
96
+ }
97
+ ]
98
+ });
99
+
100
+ pass.draw(3);
101
+
102
+ pass.end();
103
+ }
104
+
105
+ const denoise_builder = graph.add(`Spatial Denoise ${(i + 1)}/${iterations}`, denoise_data, pass_denoise);
106
+
107
+ denoise_data.input_depth = denoise_builder.read(input_depth);
108
+ denoise_data.input_normal = denoise_builder.read(input_normal);
109
+ denoise_data.input_luminance = denoise_builder.read(input);
110
+
111
+ input = denoise_builder.create("denoised", TextureResourceDescriptor.from({
112
+ resolution: resolution,
113
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,
114
+ format: "rg16float",
115
+ }));
116
+
117
+ denoise_data.output = input;
118
+
119
+ }
120
+
121
+ return input;
120
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"graph_postprocess_dof2.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH;IAb4B,KAAK;IACT,WAAW,EAAxB,MAAM;IACO,KAAK,EAAlB,MAAM;IACiB,MAAM,EAA7B,YAAU,MAAM;IACH,SAAS,EAAtB,MAAM;IACS,UAAU,EAAzB,MAAM,EAAE;IACK,QAAQ,EAArB,MAAM;IACS,IAAI,GAAnB,OAAO;IACS,oBAAoB;IACpB,mBAAmB;IACtB,gBAAgB,EAA7B,MAAM;IACJ,MAAM,CAsJlB"}
1
+ {"version":3,"file":"graph_postprocess_dof2.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH;IAb4B,KAAK;IACT,WAAW,EAAxB,MAAM;IACO,KAAK,EAAlB,MAAM;IACiB,MAAM,EAA7B,YAAU,MAAM;IACH,SAAS,EAAtB,MAAM;IACS,UAAU,EAAzB,MAAM,EAAE;IACK,QAAQ,EAArB,MAAM;IACS,IAAI,GAAnB,OAAO;IACS,oBAAoB;IACpB,mBAAmB;IACtB,gBAAgB,EAA7B,MAAM;IACJ,MAAM,CAsJlB"}
@@ -1,7 +1,6 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
2
  import { graph_image_pass } from "../../../shader/graph/graph_image_pass.js";
3
3
  import { graph_import_buffer } from "../../../shader/graph/graph_import_buffer.js";
4
- import { DOF_AUTOFOCUS_PARAMS_STRUCT } from "../DOF_AUTOFOCUS_PARAMS_STRUCT.js";
5
4
  import { shader_dof_autofocus } from "../shader_dof_autofocus.js";
6
5
  import { DOF2_TILE_SIZE } from "./DOF2_CONFIG.js";
7
6
  import { shader_dof2_gather_far } from "./shader_dof2_gather_far.js";
@@ -76,7 +75,7 @@ export function graph_postprocess_dof2({
76
75
  const af_data = {};
77
76
  const af_execute = (data, resources, context) => {
78
77
  const encoder = context.encoder;
79
- const params_buffer = encoder.allocateTransientValueBuffer(DOF_AUTOFOCUS_PARAMS_STRUCT, autofocus_params);
78
+ const params_buffer = autofocus_params;
80
79
 
81
80
  shader_dof_autofocus.dispatch({
82
81
  encoder,
@@ -1 +1 @@
1
- {"version":3,"file":"shader_dof2_gather_far.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js"],"names":[],"mappings":"AAsHA;;;;;;;;;;;GAWG;AACH,qCAFU,WAAW,CAWlB;4BAvIyB,gCAAgC"}
1
+ {"version":3,"file":"shader_dof2_gather_far.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js"],"names":[],"mappings":"AAyHA;;;;;;;;;;;GAWG;AACH,qCAFU,WAAW,CAWlB;4BA1IyB,gCAAgC"}
@@ -14,6 +14,10 @@ import { DOF2_SETTINGS_STRUCT } from "./DOF2_SETTINGS_STRUCT.js";
14
14
  import { DOF2_FIELD_FORMAT } from "./DOF2_TEXTURE_FORMAT.js";
15
15
 
16
16
  const resources = new ShaderResourceSetDescriptor();
17
+
18
+ // per-pass, under 64 bytes, read-only: immediate data rather than a uniform buffer. focus_state
19
+ // beside it stays bound — the autofocus pass writes it on the GPU, so there is no CPU value.
20
+ resources.setImmediate("dof", DOF2_SETTINGS_STRUCT);
17
21
  resources.createGroup()
18
22
  // Half-res far field (colour.rgb, far CoC magnitude in .a) from setup.
19
23
  .addTexture("tFar", "float")
@@ -23,7 +27,6 @@ resources.createGroup()
23
27
  .addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
24
28
  // Spatio-temporal blue noise (NVIDIA STBN) for the aperture phase.
25
29
  .addTexture("tSTBN_vec2", "unfilterable-float", "3d")
26
- .addUniform("dof", DOF2_SETTINGS_STRUCT)
27
30
  ;
28
31
 
29
32
  const body = CodeChunk.from(