@woosh/meep-engine 3.11.1 → 3.11.3

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 (225) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  4. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +294 -290
  5. package/src/engine/graphics3/ParticipatingMedia.d.ts +111 -0
  6. package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -0
  7. package/src/engine/graphics3/ParticipatingMedia.js +203 -0
  8. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +34 -0
  9. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -0
  10. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +73 -0
  11. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +87 -0
  12. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -0
  13. package/src/engine/graphics3/ParticipatingMediaSystem3.js +184 -0
  14. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  15. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
  16. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
  17. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
  18. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
  19. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  20. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
  21. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
  22. package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
  23. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  24. package/src/shade/device/ShadeGPUCommandContext.js +994 -940
  25. package/src/shade/device/immediate_data_supported.d.ts +33 -0
  26. package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
  27. package/src/shade/device/immediate_data_supported.js +53 -0
  28. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
  29. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
  30. package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
  31. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
  32. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
  33. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
  34. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  35. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
  36. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
  37. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
  38. package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
  39. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
  40. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  41. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
  42. package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
  43. package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
  44. package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
  45. package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
  46. package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
  47. package/src/shade/playground/volumetrics_froxel/README.md +104 -1
  48. package/src/shade/playground/volumetrics_froxel/index.html +20 -1
  49. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  50. package/src/shade/playground/volumetrics_froxel/main.js +298 -0
  51. package/src/shade/playground/volumetrics_froxel/measure.d.ts +119 -0
  52. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -0
  53. package/src/shade/playground/volumetrics_froxel/measure.js +559 -0
  54. package/src/shade/renderer/GraphicsContext.d.ts +9 -2
  55. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  56. package/src/shade/renderer/GraphicsContext.js +13 -1
  57. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  58. package/src/shade/renderer/Renderer.js +22 -18
  59. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  60. package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
  61. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
  62. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
  63. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
  64. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
  65. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
  66. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
  67. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
  68. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  69. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
  70. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
  71. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
  72. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
  73. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
  74. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  75. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
  76. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
  77. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  78. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
  79. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
  80. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  81. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
  82. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
  83. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
  84. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
  85. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
  86. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
  87. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
  88. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
  89. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
  90. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
  91. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
  92. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  93. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +165 -84
  94. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  95. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
  96. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  97. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
  98. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  99. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +6 -2
  100. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  101. package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
  102. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  103. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  104. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
  105. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
  106. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  107. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
  108. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  109. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
  110. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  111. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
  112. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  113. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
  114. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  115. package/src/shade/renderer/shader/ComputeShader.js +6 -2
  116. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  117. package/src/shade/renderer/shader/ImageShader.js +4 -1
  118. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  119. package/src/shade/renderer/shader/ShaderDescriptor.js +26 -0
  120. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
  121. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
  122. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
  123. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
  124. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
  125. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
  126. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
  127. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
  128. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
  129. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
  130. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
  131. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
  132. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
  133. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
  134. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
  135. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
  136. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
  137. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
  138. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
  139. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
  140. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
  141. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
  142. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
  143. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
  144. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  145. package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
  146. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
  147. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
  148. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
  149. package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
  150. package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
  151. package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
  152. package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
  153. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
  154. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
  155. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
  156. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  157. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
  158. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
  159. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
  160. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
  161. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
  162. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  163. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
  164. package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
  165. package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
  166. package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
  167. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts +14 -13
  168. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
  169. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +133 -129
  170. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
  171. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
  172. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  173. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +480 -315
  174. package/src/shade/renderer/volumetrics/NOTES.md +887 -8
  175. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +5 -0
  176. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  177. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +21 -2
  178. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +26 -0
  179. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
  180. package/src/shade/renderer/volumetrics/SceneVolumetrics.js +64 -21
  181. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.d.ts.map +1 -1
  182. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.js +84 -28
  183. package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.d.ts +98 -0
  184. package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.d.ts.map +1 -0
  185. package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.js +111 -0
  186. package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts +84 -0
  187. package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts.map +1 -0
  188. package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.js +252 -0
  189. package/src/shade/renderer/volumetrics/chunk_integrate_optical_depth.js +75 -75
  190. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.d.ts +43 -0
  191. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.d.ts.map +1 -0
  192. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -0
  193. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +20 -0
  194. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -0
  195. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +48 -0
  196. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts +38 -0
  197. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -0
  198. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +130 -0
  199. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +18 -3
  200. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  201. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +193 -70
  202. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +16 -0
  203. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  204. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +83 -15
  205. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  206. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +29 -18
  207. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
  208. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +58 -0
  209. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -0
  210. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +290 -0
  211. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +25 -0
  212. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
  213. package/src/shade/wgsl/emulator/CPUBitmapData.js +33 -0
  214. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +2228 -2215
  215. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  216. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +210 -2
  217. package/src/shade/wgsl/emulator/cpu_texture_gather.d.ts +69 -0
  218. package/src/shade/wgsl/emulator/cpu_texture_gather.d.ts.map +1 -0
  219. package/src/shade/wgsl/emulator/cpu_texture_gather.js +148 -0
  220. package/src/shade/wgsl/emulator/cpu_texture_sample.d.ts +16 -0
  221. package/src/shade/wgsl/emulator/cpu_texture_sample.d.ts.map +1 -1
  222. package/src/shade/wgsl/emulator/cpu_texture_sample.js +176 -172
  223. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
  224. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
  225. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
@@ -1,5 +1,3 @@
1
- export const PUSH_CONSTANTS: WebGPUStruct;
2
1
  export const shader_read_out_bucket: ComputeShader;
3
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
4
2
  import { ComputeShader } from "../../shader/ComputeShader.js";
5
3
  //# sourceMappingURL=shader_read_out_bucket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader_read_out_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js"],"names":[],"mappings":"AAcA,0CAEG;AAoCH,mDAKE;6BAxD2B,mCAAmC;8BAIlC,+BAA+B"}
1
+ {"version":3,"file":"shader_read_out_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js"],"names":[],"mappings":"AAqDA,mDAKE;8BArD4B,+BAA+B"}
@@ -1,58 +1,59 @@
1
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
- import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
4
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
- import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
6
- import { ComputeShader } from "../../shader/ComputeShader.js";
7
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
8
- import {
9
- RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ
10
- } from "../expand/bucket/RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ.js";
11
-
12
-
13
- const resources = new ShaderResourceSetDescriptor();
14
-
15
- export const PUSH_CONSTANTS = WebGPUStruct.from({
16
- bucket_id: u32,
17
- });
18
-
19
- resources.createGroup()
20
- .addUniform("settings", PUSH_CONSTANTS);
21
-
22
- resources.createGroup()
23
- .addStorageBuffer("input", RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ)
24
- .addStorageBuffer("output", COLLECTION_U32_STRUCT_READ, true)
25
-
26
- const body = CodeChunk.from(
27
- //language=WGSL
28
- `
29
- @compute @workgroup_size(${COMPUTE_SHADER_DEFAULT_GROUP_SIZE})
30
- fn main(@builtin(global_invocation_id) global_id : vec3<u32>){
31
-
32
- let input_index = global_id.x;
33
-
34
- let bucket_header = input.headers[settings.bucket_id];
35
- let bucket_size = bucket_header.count;
36
-
37
- if(input_index == 0){
38
- output.count = bucket_size;
39
- }
40
-
41
- if(input_index >= bucket_size){
42
- return;
43
- }
44
-
45
- // just copy
46
- let mesh_index = input.elements[input_index + bucket_header.offset];
47
-
48
- output.elements[input_index] = mesh_index;
49
- }
50
- `
51
- );
52
-
53
- export const shader_read_out_bucket = ComputeShader.from({
54
- label: 'Read out bucket',
55
- resources,
56
- body,
57
- group_size: [COMPUTE_SHADER_DEFAULT_GROUP_SIZE]
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+ import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
4
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
6
+ import { ComputeShader } from "../../shader/ComputeShader.js";
7
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import {
9
+ RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ
10
+ } from "../expand/bucket/RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ.js";
11
+
12
+
13
+ const resources = new ShaderResourceSetDescriptor();
14
+
15
+ const PUSH_CONSTANTS = WebGPUStruct.from({
16
+ bucket_id: u32,
17
+ });
18
+
19
+ // per-dispatch, four bytes, read-only: immediate data rather than a pooled buffer, a staging copy
20
+ // and a bind group of its own
21
+ resources.setImmediate("settings", PUSH_CONSTANTS);
22
+
23
+ resources.createGroup()
24
+ .addStorageBuffer("input", RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_READ)
25
+ .addStorageBuffer("output", COLLECTION_U32_STRUCT_READ, true)
26
+
27
+ const body = CodeChunk.from(
28
+ //language=WGSL
29
+ `
30
+ @compute @workgroup_size(${COMPUTE_SHADER_DEFAULT_GROUP_SIZE})
31
+ fn main(@builtin(global_invocation_id) global_id : vec3<u32>){
32
+
33
+ let input_index = global_id.x;
34
+
35
+ let bucket_header = input.headers[settings.bucket_id];
36
+ let bucket_size = bucket_header.count;
37
+
38
+ if(input_index == 0){
39
+ output.count = bucket_size;
40
+ }
41
+
42
+ if(input_index >= bucket_size){
43
+ return;
44
+ }
45
+
46
+ // just copy
47
+ let mesh_index = input.elements[input_index + bucket_header.offset];
48
+
49
+ output.elements[input_index] = mesh_index;
50
+ }
51
+ `
52
+ );
53
+
54
+ export const shader_read_out_bucket = ComputeShader.from({
55
+ label: 'Read out bucket',
56
+ resources,
57
+ body,
58
+ group_size: [COMPUTE_SHADER_DEFAULT_GROUP_SIZE]
58
59
  })
@@ -1 +1 @@
1
- {"version":3,"file":"graph_expand_meshes_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH,gJA2IC"}
1
+ {"version":3,"file":"graph_expand_meshes_to_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH,gJA+IC"}
@@ -1,12 +1,12 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
2
  import { BufferResourceDescriptor } from "../../../../device/graph/BufferResourceDescriptor.js";
3
- import { graph_prefix_scan_csdldf } from "../../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
4
- import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
5
- import { graph_compute_pass } from "../../../shader/graph/compute/graph_compute_pass.js";
6
3
  import {
7
4
  graph_build_indirect_dispatch_command,
8
5
  INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
9
6
  } from "../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
7
+ import { graph_prefix_scan_csdldf } from "../../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
8
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
9
+ import { graph_compute_pass } from "../../../shader/graph/compute/graph_compute_pass.js";
10
10
 
11
11
  import { RasterizationCollectionType } from "../RasterizationCollectionType.js";
12
12
  import { shader_increment_count_by_prefix_sum } from "./shader_increment_count_by_prefix_sum.js";
@@ -36,6 +36,8 @@ export function graph_expand_meshes_to_meshlets({
36
36
  assert.defined(limits, 'limits');
37
37
  assert.defined(scene, 'scene');
38
38
 
39
+ graph.push_scope("expand meshes to meshlets");
40
+
39
41
  const stage_1_command = graph_build_indirect_dispatch_command(graph, input_meshes, COMPUTE_SHADER_DEFAULT_GROUP_SIZE);
40
42
 
41
43
  const count_meshlets_data = {};
@@ -162,5 +164,7 @@ export function graph_expand_meshes_to_meshlets({
162
164
  }
163
165
  });
164
166
 
167
+ graph.pop_scope();
168
+
165
169
  return output;
166
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,sGAFa,MAAM,CA+DlB"}
1
+ {"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,sGAFa,MAAM,CA2DlB"}
@@ -1,82 +1,78 @@
1
- import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
2
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
- import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
4
- import {
5
- build_indirect_compute_dispatch_command,
6
- INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
- } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
- import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
9
- import { PUSH_CONSTANTS, shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
10
-
11
- /**
12
- * Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
13
- * Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
14
- *
15
- * @param {FrameGraph} graph
16
- * @param {number} buckets bucket-sorted meshes resource ID
17
- * @param {number} bucket_id
18
- * @param {GPUCollectionLimits} limits
19
- * @returns {number} resource ID of extracted mesh list
20
- */
21
- export function graph_extract_meshes_from_bucket({
22
- graph,
23
- buckets,
24
- bucket_id,
25
- limits,
26
- }) {
27
-
28
- /**
29
- *
30
- * @param data
31
- * @param {FramePassResources} resources
32
- * @param {GraphicsExecutionContext} context
33
- */
34
- function execute(data, resources, context) {
35
- const encoder = context.encoder;
36
-
37
- const buckets = resources.get(data.buckets);
38
- const output = resources.get(data.output);
39
- const command = resources.get(data.command);
40
-
41
- const bucket_id = data.bucket_id;
42
-
43
- build_indirect_compute_dispatch_command(
44
- COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
45
- encoder,
46
- buckets,
47
- // the bucketed buffer header consists of pairs of u32 values (count,offset)
48
- bucket_id * (u32.size * 2),
49
- command,
50
- 0
51
- );
52
-
53
- const settings = encoder.allocateTransientValueBuffer(PUSH_CONSTANTS, {
54
- bucket_id,
55
- });
56
-
57
- shader_read_out_bucket.dispatchIndirect({
58
- encoder,
59
- command,
60
- bindings: {
61
- settings,
62
- input: buckets,
63
- output,
64
- }
65
- });
66
- }
67
-
68
- const data = {};
69
-
70
- const pass = graph.add("extract meshes from bucket", data, execute);
71
-
72
- data.buckets = pass.read(buckets);
73
- data.bucket_id = bucket_id;
74
- data.command = pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
75
- data.output = pass.create("output", BufferResourceDescriptor.from(
76
- limits.compute_buffer_size(RasterizationCollectionType.Meshes),
77
- GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
78
- 0, 16 // clear count
79
- ));
80
-
81
- return data.output;
1
+ import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
2
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
4
+ import {
5
+ build_indirect_compute_dispatch_command,
6
+ INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
7
+ } from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
8
+ import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
9
+ import { shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
10
+
11
+ /**
12
+ * Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
13
+ * Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
14
+ *
15
+ * @param {FrameGraph} graph
16
+ * @param {number} buckets bucket-sorted meshes resource ID
17
+ * @param {number} bucket_id
18
+ * @param {GPUCollectionLimits} limits
19
+ * @returns {number} resource ID of extracted mesh list
20
+ */
21
+ export function graph_extract_meshes_from_bucket({
22
+ graph,
23
+ buckets,
24
+ bucket_id,
25
+ limits,
26
+ }) {
27
+
28
+ /**
29
+ *
30
+ * @param data
31
+ * @param {FramePassResources} resources
32
+ * @param {GraphicsExecutionContext} context
33
+ */
34
+ function execute(data, resources, context) {
35
+ const encoder = context.encoder;
36
+
37
+ const buckets = resources.get(data.buckets);
38
+ const output = resources.get(data.output);
39
+ const command = resources.get(data.command);
40
+
41
+ const bucket_id = data.bucket_id;
42
+
43
+ build_indirect_compute_dispatch_command(
44
+ COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
45
+ encoder,
46
+ buckets,
47
+ // the bucketed buffer header consists of pairs of u32 values (count,offset)
48
+ bucket_id * (u32.size * 2),
49
+ command,
50
+ 0
51
+ );
52
+
53
+ shader_read_out_bucket.dispatchIndirect({
54
+ encoder,
55
+ command,
56
+ bindings: {
57
+ settings: { bucket_id },
58
+ input: buckets,
59
+ output,
60
+ }
61
+ });
62
+ }
63
+
64
+ const data = {};
65
+
66
+ const pass = graph.add("extract meshes from bucket", data, execute);
67
+
68
+ data.buckets = pass.read(buckets);
69
+ data.bucket_id = bucket_id;
70
+ data.command = pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
71
+ data.output = pass.create("output", BufferResourceDescriptor.from(
72
+ limits.compute_buffer_size(RasterizationCollectionType.Meshes),
73
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
74
+ 0, 16 // clear count
75
+ ));
76
+
77
+ return data.output;
82
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_scene.js"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,4EAFa,MAAM,CAwLlB"}
1
+ {"version":3,"file":"graph_rasterize_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_scene.js"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,4EAFa,MAAM,CA4LlB"}
@@ -4,10 +4,10 @@ import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
4
4
  import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
5
5
  import { graph_import_texture } from "../../shader/graph/graph_import_texture.js";
6
6
  import { graph_record_stat } from "../../util/graph_record_stat.js";
7
+ import { graph_mesh_frustum_cull } from "../compute/graph_mesh_frustum_cull.js";
7
8
  import { rasterization_material_bucket } from "../expand/bucket/chunk_rasterization_material_bucket.js";
8
9
  import { graph_meshes_classify_buckets } from "../expand/bucket/mesh/graph_meshes_classify_buckets.js";
9
10
  import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
10
- import { graph_mesh_frustum_cull } from "../compute/graph_mesh_frustum_cull.js";
11
11
  import { graph_rasterize_meshes_alpha_tested } from "../native/graph_rasterize_meshes_alpha_tested.js";
12
12
  import { graph_rasterize_partial_opaque } from "./graph_rasterize_partial_opaque.js";
13
13
  import { graph_rasterize_remaining_opaque } from "./graph_rasterize_remaining_opaque.js";
@@ -32,6 +32,8 @@ export function graph_rasterize_scene({
32
32
 
33
33
  assert.defined(limits, 'limits');
34
34
 
35
+ graph.push_scope("rasterize scene");
36
+
35
37
  const view_ctx = job.view_ctx;
36
38
  const viewport = job.viewport;
37
39
 
@@ -203,5 +205,7 @@ export function graph_rasterize_scene({
203
205
  }
204
206
  }
205
207
 
208
+ graph.pop_scope();
209
+
206
210
  return gr_render_buckets;
207
211
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ComputeShader.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/shader/ComputeShader.js"],"names":[],"mappings":"AAMA;IA0EI;;;;;;;OAOG;IACH,sDANW,MAAM,GAIJ,aAAa,CAiCzB;IAtDD;;;OAGG;IACH,wBAFW,gBAAgB,EAW1B;IA5DD;;;OAGG;IACH,0CAEC;IASD;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,mCAEC;IA0DD;;;;;OAKG;IACH,oFAoBC;IAED;;;;;;;;;OASG;IACH,mFA4BC;IAED;;;;;;;OAOG;IACH,4GAyCC;IAED;;;;;;OAMG;IACH,+FAsCC;IAGL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;;CANtC;0CA7RyC,gEAAgE;iCACzE,uBAAuB"}
1
+ {"version":3,"file":"ComputeShader.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/shader/ComputeShader.js"],"names":[],"mappings":"AAMA;IA2EI;;;;;;;OAOG;IACH,sDANW,MAAM,GAIJ,aAAa,CAiCzB;IAvDD;;;OAGG;IACH,wBAFW,gBAAgB,EAY1B;IA7DD;;;OAGG;IACH,0CAEC;IASD;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;OAGG;IACH,mCAEC;IA2DD;;;;;OAKG;IACH,oFAuBC;IAED;;;;;;;;;OASG;IACH,mFA4BC;IAED;;;;;;;OAOG;IACH,4GAyCC;IAED;;;;;;OAMG;IACH,+FAsCC;IAGL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;;CANtC;0CAjSyC,gEAAgE;iCACzE,uBAAuB"}
@@ -73,7 +73,8 @@ export class ComputeShader {
73
73
  this.#pipeline = ComputePipelineDescriptor.simplified({
74
74
  label: descriptor.label,
75
75
  code: descriptor.compile(),
76
- bindings: descriptor.resources.generateBindingsArray()
76
+ bindings: descriptor.resources.generateBindingsArray(),
77
+ immediate_size: descriptor.resources.immediateSize
77
78
  });
78
79
 
79
80
  }
@@ -141,9 +142,12 @@ export class ComputeShader {
141
142
 
142
143
  const gpu_bindings = resources.generateBindings(bindings, encoder);
143
144
 
145
+ const immediate = encoder.writeImmediate(resources, bindings);
146
+
144
147
  return encoder.constructComputePass({
145
148
  pipeline: this.#pipeline,
146
- bindings: gpu_bindings
149
+ bindings: gpu_bindings,
150
+ immediate
147
151
  });
148
152
  }
149
153
 
@@ -1 +1 @@
1
- {"version":3,"file":"ImageShader.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/shader/ImageShader.js"],"names":[],"mappings":"AAQA;;GAEG;AACH;IAyGI;;;;;;OAMG;IACH,uEAFa,WAAW,CAavB;IAlFD;;;;;OAKG;IACH,sEAuDC;IAhGD;;;OAGG;IACH,mCAEC;IAED;;;OAGG;IACH,cAFU,MAAM,EAAE,EAAE,CAEF;IAOlB;;;OAGG;IACH,yCAEC;IAED;;;OAGG;IACH,6BAEC;IAsFD;;;;;;;;;OASG;IACH,6HAmEC;;CACJ"}
1
+ {"version":3,"file":"ImageShader.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/shader/ImageShader.js"],"names":[],"mappings":"AAQA;;GAEG;AACH;IAyGI;;;;;;OAMG;IACH,uEAFa,WAAW,CAavB;IAlFD;;;;;OAKG;IACH,sEAuDC;IAhGD;;;OAGG;IACH,mCAEC;IAED;;;OAGG;IACH,cAFU,MAAM,EAAE,EAAE,CAEF;IAOlB;;;OAGG;IACH,yCAEC;IAED;;;OAGG;IACH,6BAEC;IAsFD;;;;;;;;;OASG;IACH,6HAsEC;;CACJ"}
@@ -165,6 +165,8 @@ export class ImageShader {
165
165
 
166
166
  const resolved_bindings = shader_descriptor.resources.generateBindings(bindings, encoder);
167
167
 
168
+ const immediate = encoder.writeImmediate(shader_descriptor.resources, bindings);
169
+
168
170
  encoder.pushDebugGroup(shader_descriptor.label);
169
171
 
170
172
  let pipeline = this.#pipeline;
@@ -179,7 +181,8 @@ export class ImageShader {
179
181
  pipeline,
180
182
  bindings: resolved_bindings,
181
183
  colorAttachments,
182
- depthStencilAttachment
184
+ depthStencilAttachment,
185
+ immediate
183
186
  });
184
187
 
185
188
  if (viewport !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderDescriptor.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/shader/ShaderDescriptor.js"],"names":[],"mappings":"AAIA;IAiHI;;;;;OAKG;IACH,yCAJW,MAAM,oBAwBhB;IApID;;;OAGG;IACH,oBAEC;IAOD;;;OAGG;IACH,6CAEC;IAaD;;;OAGG;IACH,0CAEC;IAED;;;OAGG;IACH,WAFY,MAAM,CAyBjB;IAED;;;OAGG;IACH,iDAWC;IAED;;;;;OAKG;IACH,0CAHa,OAAO,CAenB;;CA6BJ;4CA9I2C,2CAA2C"}
1
+ {"version":3,"file":"ShaderDescriptor.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/shader/ShaderDescriptor.js"],"names":[],"mappings":"AAIA;IA2II;;;;;OAKG;IACH,yCAJW,MAAM,oBAwBhB;IA9JD;;;OAGG;IACH,oBAEC;IAOD;;;OAGG;IACH,6CAEC;IAaD;;;OAGG;IACH,0CAEC;IAED;;;OAGG;IACH,WAFY,MAAM,CAiCjB;IAED;;;OAGG;IACH,iDA6BC;IAED;;;;;OAKG;IACH,0CAHa,OAAO,CAenB;;CA6BJ;4CAxK2C,2CAA2C"}
@@ -70,6 +70,14 @@ export class ShaderDescriptor {
70
70
  for (const extension of extensions) {
71
71
  result_parts.unshift(`enable ${extension};`);
72
72
  }
73
+
74
+ // Language extensions take `requires`, not `enable`, and are not GPUFeatureNames — so they
75
+ // are not folded into `#features`, which `validate_gpu_features` checks against
76
+ // `device.features`. Looking `immediate_address_space` up there would never find it.
77
+ for (const language_extension of compiled.language_extensions) {
78
+ result_parts.unshift(`requires ${language_extension};`);
79
+ }
80
+
73
81
  result_parts.push(compiled.text);
74
82
 
75
83
  this.#features = Object.freeze(extensions);
@@ -92,6 +100,24 @@ export class ShaderDescriptor {
92
100
  }
93
101
  }
94
102
 
103
+ {
104
+ // immediate data budget. Not a device floor — a browser without immediates still starts
105
+ // and still renders; it just cannot run *this* shader. Saying so by name beats the
106
+ // shader-creation error a device would otherwise raise, which names neither the shader
107
+ // nor the feature.
108
+ const required = this.resources.immediateSize;
109
+
110
+ if (required > 0) {
111
+ const limit = device.limits.maxImmediateSize ?? 0;
112
+
113
+ if (limit < required) {
114
+ throw new Error(
115
+ `Shader '${this.label}' needs ${required} bytes of immediate data and this device offers ${limit}. Immediate data is an optional capability — check immediate_data_supported() and pick a shader variant that uses a uniform buffer instead.`
116
+ );
117
+ }
118
+ }
119
+ }
120
+
95
121
  this.validate_gpu_features(device);
96
122
  }
97
123
 
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The two sphere radii the atmosphere is bounded by, as f32.
3
+ *
4
+ * `PLANET_RADIUS` and `ATMOSPHERE_HEIGHT` carry no type suffix, so they are AbstractInt.
5
+ * That converts silently wherever it is used directly in an f32 expression, but binding one
6
+ * to an un-annotated `let` materialises it to i32 — which then neither mixes with f32 nor
7
+ * holds the square of a planetary radius, since 6478000^2 is four orders of magnitude past
8
+ * what an i32 can represent. Anything that needs a radius as a value rather than as a term
9
+ * takes it from here.
10
+ *
11
+ * The squares are what the ray/sphere quadratics actually want, and as module-scope consts
12
+ * they are folded once rather than recomputed per invocation.
13
+ *
14
+ * @type {CodeChunk}
15
+ */
16
+ export const ATMOSPHERE_RADII_DECLARATION: CodeChunk;
17
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
18
+ //# sourceMappingURL=ATMOSPHERE_RADII_DECLARATION.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ATMOSPHERE_RADII_DECLARATION.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,2CAFU,SAAS,CAcjB;0BA/BwB,6BAA6B"}
@@ -0,0 +1,32 @@
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { ATMOSPHERE_HEIGHT_DECLARATION } from "./ATMOSPHERE_HEIGHT_DECLARATION.js";
3
+ import { PLANET_RADIUS_DECLARATION } from "./PLANET_RADIUS_DECLARATION.js";
4
+
5
+ /**
6
+ * The two sphere radii the atmosphere is bounded by, as f32.
7
+ *
8
+ * `PLANET_RADIUS` and `ATMOSPHERE_HEIGHT` carry no type suffix, so they are AbstractInt.
9
+ * That converts silently wherever it is used directly in an f32 expression, but binding one
10
+ * to an un-annotated `let` materialises it to i32 — which then neither mixes with f32 nor
11
+ * holds the square of a planetary radius, since 6478000^2 is four orders of magnitude past
12
+ * what an i32 can represent. Anything that needs a radius as a value rather than as a term
13
+ * takes it from here.
14
+ *
15
+ * The squares are what the ray/sphere quadratics actually want, and as module-scope consts
16
+ * they are folded once rather than recomputed per invocation.
17
+ *
18
+ * @type {CodeChunk}
19
+ */
20
+ export const ATMOSPHERE_RADII_DECLARATION = CodeChunk.from(
21
+ //language=WGSL
22
+ `
23
+ const ATMOSPHERE_GROUND_RADIUS = f32(PLANET_RADIUS);
24
+ const ATMOSPHERE_TOP_RADIUS = f32(PLANET_RADIUS) + f32(ATMOSPHERE_HEIGHT);
25
+
26
+ const ATMOSPHERE_GROUND_RADIUS_SQUARED = ATMOSPHERE_GROUND_RADIUS * ATMOSPHERE_GROUND_RADIUS;
27
+ const ATMOSPHERE_TOP_RADIUS_SQUARED = ATMOSPHERE_TOP_RADIUS * ATMOSPHERE_TOP_RADIUS;
28
+ `, [
29
+ PLANET_RADIUS_DECLARATION,
30
+ ATMOSPHERE_HEIGHT_DECLARATION,
31
+ ]
32
+ );
@@ -1,3 +1,10 @@
1
+ /**
2
+ * The dependency is load-bearing rather than tidiness: without it the emitted module's
3
+ * ordering was whatever else happened to pull PLANET_RADIUS_DECLARATION in first, and a
4
+ * closure where nothing did put this line above the constant it reads.
5
+ *
6
+ * @type {CodeChunk}
7
+ */
1
8
  export const PLANET_CENTER_DECLARATION: CodeChunk;
2
9
  import { CodeChunk } from "../../compiler/CodeChunk.js";
3
10
  //# sourceMappingURL=PLANET_CENTER_DECLARATION.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PLANET_CENTER_DECLARATION.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js"],"names":[],"mappings":"AAEA,kDAGE;0BALwB,6BAA6B"}
1
+ {"version":3,"file":"PLANET_CENTER_DECLARATION.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wCAFU,SAAS,CAQjB;0BAhBwB,6BAA6B"}
@@ -1,6 +1,17 @@
1
- import { CodeChunk } from "../../compiler/CodeChunk.js";
2
-
3
- export const PLANET_CENTER_DECLARATION = CodeChunk.from(
4
- //language=WGSL
5
- `const PLANET_CENTER = vec3(0.0, -PLANET_RADIUS, 0.0);`
6
- );
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { PLANET_RADIUS_DECLARATION } from "./PLANET_RADIUS_DECLARATION.js";
3
+
4
+ /**
5
+ * The dependency is load-bearing rather than tidiness: without it the emitted module's
6
+ * ordering was whatever else happened to pull PLANET_RADIUS_DECLARATION in first, and a
7
+ * closure where nothing did put this line above the constant it reads.
8
+ *
9
+ * @type {CodeChunk}
10
+ */
11
+ export const PLANET_CENTER_DECLARATION = CodeChunk.from(
12
+ //language=WGSL
13
+ `const PLANET_CENTER = vec3(0.0, -PLANET_RADIUS, 0.0);`,
14
+ [
15
+ PLANET_RADIUS_DECLARATION
16
+ ]
17
+ );
@@ -0,0 +1,21 @@
1
+ /**
2
+ * How far a ray inside the atmosphere may be marched, and whether it ends on the surface.
3
+ *
4
+ * The ground and the atmosphere shell are concentric on the planet and the ray is shared, so
5
+ * one quadratic setup serves both intersections — only the radius term differs. Calling a
6
+ * general sphere-intersection routine twice instead recomputes the ray-origin offset and all
7
+ * three dot products for the second sphere, and re-derives a leading coefficient that is 1
8
+ * for a unit direction.
9
+ *
10
+ * `origin_rel` is relative to the planet centre and assumed to be inside the atmosphere and
11
+ * at or above the surface, which is what makes the shell's far root the exit point.
12
+ * `ray_direction` must be normalised.
13
+ *
14
+ * `ground_distance` is negative when the ray never meets the surface, which includes looking
15
+ * up from above it: both roots are behind the origin there.
16
+ *
17
+ * @type {CodeChunk}
18
+ */
19
+ export const chunk_atmosphere_ray_bounds: CodeChunk;
20
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
21
+ //# sourceMappingURL=chunk_atmosphere_ray_bounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_atmosphere_ray_bounds.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,0CAFU,SAAS,CAiDjB;0BApEwB,6BAA6B"}