@woosh/meep-engine 3.12.0 → 3.13.1

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 (301) hide show
  1. package/package.json +1 -1
  2. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  3. package/src/core/geom/3d/shape/ConvexHullShape3D.js +41 -25
  4. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  5. package/src/core/geom/3d/shape/PosedShape3D.js +7 -2
  6. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  7. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  8. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  9. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  10. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  11. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  12. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  13. package/src/shade/RENDERER_CONTRACT.md +2 -1
  14. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  15. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  16. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  17. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +755 -0
  18. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  19. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  20. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  21. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  22. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  23. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  24. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  25. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  26. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  27. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  28. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  29. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  30. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  31. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  32. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  33. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  34. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  35. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  39. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  40. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  41. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  42. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  43. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  44. package/src/shade/renderer/Renderer.d.ts +0 -6
  45. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  46. package/src/shade/renderer/Renderer.js +0 -29
  47. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  49. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  51. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  58. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  60. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  61. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  62. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  63. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  64. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  65. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  66. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  68. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  70. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  71. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  72. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  73. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  74. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  75. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  76. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  77. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  78. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  79. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  80. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  81. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  82. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  83. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  85. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  87. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  88. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  89. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  90. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  91. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  92. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  93. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  94. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  96. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  98. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  104. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  106. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  108. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  109. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  110. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  111. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  113. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  114. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  117. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  118. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  119. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  120. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  121. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  122. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  124. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  126. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  127. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  128. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  129. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  130. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  132. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  133. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  134. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  135. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  136. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  137. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  138. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  139. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  140. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  142. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  143. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  144. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  145. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  146. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  147. package/src/shade/renderer/particles/graph_particles.js +5 -3
  148. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  149. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  151. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  153. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  155. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  157. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  158. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  159. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  160. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  161. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  162. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  163. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  164. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  165. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  166. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  168. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  176. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  186. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  188. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  190. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  192. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  194. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  196. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  198. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  200. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  201. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  202. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  203. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  205. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  207. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  209. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  211. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  213. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  215. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  216. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  217. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  218. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  219. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  220. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  222. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  224. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  225. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  226. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  227. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  228. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  229. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  230. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  231. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  232. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  233. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  235. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  237. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  239. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  240. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  241. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  242. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  243. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  244. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  245. package/src/shade/renderer/scene/Mesh.d.ts.map +1 -1
  246. package/src/shade/renderer/scene/Mesh.js +4 -6
  247. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  248. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  249. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  250. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  251. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  252. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  253. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  254. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  255. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  256. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  257. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +16 -7
  258. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1342 -1326
  260. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +13 -0
  261. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  262. package/src/shade/renderer/shadow/map/Shadowmap.js +14 -0
  263. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts +79 -0
  264. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -0
  265. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +196 -0
  266. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts +91 -0
  267. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts.map +1 -0
  268. package/src/shade/renderer/shadow/map/ShadowmapRegistry.js +156 -0
  269. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  270. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  271. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  272. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  273. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  274. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  275. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  276. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  277. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  278. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  279. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  280. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  281. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  282. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  283. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  284. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  285. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  286. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  287. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  288. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  289. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  290. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  291. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  292. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  293. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  294. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  295. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  296. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  297. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  298. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  299. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  300. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  301. 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(