@woosh/meep-engine 3.45.0 → 3.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/assert.d.ts.map +1 -1
  4. package/src/core/assert.js +5 -1
  5. package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
  6. package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
  7. package/src/core/binary/hash/XXH128Hash.js +4 -55
  8. package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
  9. package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
  10. package/src/core/binary/hash/XXH3_SECRET.js +4 -25
  11. package/src/core/binary/hash/crc32.d.ts +1 -15
  12. package/src/core/binary/hash/crc32.d.ts.map +1 -1
  13. package/src/core/binary/hash/crc32.js +4 -96
  14. package/src/core/binary/hash/xxh3_128.d.ts +1 -9
  15. package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
  16. package/src/core/binary/hash/xxh3_128.js +4 -341
  17. package/src/core/binary/hash/xxh3_64.d.ts +1 -8
  18. package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
  19. package/src/core/binary/hash/xxh3_64.js +4 -241
  20. package/src/core/binary/hash/xxh3_common.d.ts +1 -223
  21. package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
  22. package/src/core/binary/hash/xxh3_common.js +90 -476
  23. package/src/core/collection/array/combine_hash.d.ts +6 -0
  24. package/src/core/collection/array/combine_hash.d.ts.map +1 -1
  25. package/src/core/collection/array/combine_hash.js +6 -0
  26. package/src/core/function/FunctionCompiler.js +2 -2
  27. package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
  28. package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
  29. package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
  30. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
  31. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
  32. package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
  33. package/src/core/geom/ConicRay.js +2 -2
  34. package/src/core/geom/Vector4.d.ts.map +1 -1
  35. package/src/core/geom/Vector4.js +8 -5
  36. package/src/core/math/hash/XXH128Hash.d.ts +38 -0
  37. package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
  38. package/src/core/math/hash/XXH128Hash.js +55 -0
  39. package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
  40. package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
  41. package/src/core/math/hash/XXH3_SECRET.js +25 -0
  42. package/src/core/math/hash/crc32.d.ts +16 -0
  43. package/src/core/math/hash/crc32.d.ts.map +1 -0
  44. package/src/core/math/hash/crc32.js +96 -0
  45. package/src/core/math/hash/xxh3_128.d.ts +10 -0
  46. package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
  47. package/src/core/math/hash/xxh3_128.js +341 -0
  48. package/src/core/math/hash/xxh3_64.d.ts +9 -0
  49. package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
  50. package/src/core/math/hash/xxh3_64.js +241 -0
  51. package/src/core/math/hash/xxh3_common.d.ts +224 -0
  52. package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
  53. package/src/core/math/hash/xxh3_common.js +476 -0
  54. package/src/core/math/lookup/ParameterLookupTable.js +2 -2
  55. package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
  56. package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
  57. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
  58. package/src/engine/asset/AssetDescription.js +2 -2
  59. package/src/engine/ecs/animation/Animation.js +2 -2
  60. package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
  61. package/src/engine/ecs/animation/AnimationClip.js +7 -5
  62. package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
  63. package/src/engine/ecs/gui/GUIElement.js +7 -5
  64. package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
  65. package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
  66. package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
  67. package/src/engine/ecs/transform/Transform64.d.ts +1 -1
  68. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  69. package/src/engine/ecs/transform/Transform64.js +5 -4
  70. package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
  71. package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
  72. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
  73. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
  74. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
  75. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
  76. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
  77. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
  78. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
  79. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  80. package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
  81. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
  82. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
  83. package/src/engine/graphics3/ParticipatingMedia.js +204 -204
  84. package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
  85. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  86. package/src/engine/graphics3/animation/AnimationClips.js +5 -0
  87. package/src/engine/grid/obstacle/GridObstacle.js +2 -2
  88. package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
  89. package/src/engine/interpolation/Interpolated.js +2 -2
  90. package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
  91. package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
  92. package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
  93. package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
  94. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  95. package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
  96. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  97. package/src/engine/physics/fluid/FluidField.js +7 -5
  98. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  99. package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
  100. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
  101. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
  102. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  103. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
  104. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  105. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
  106. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  107. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
  108. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  109. package/src/engine/sound/ecs/audio/AudioEmitter.js +12 -7
  110. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  111. package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
  112. package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
  113. package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
  114. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
  115. package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
  116. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
  117. package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
  118. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
  119. package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
  120. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  121. package/src/engine/sound/sopra/definition/EventDescription.js +23 -13
  122. package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
  123. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
  124. package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
  125. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
  126. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
  127. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
  128. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
  129. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
  130. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
  131. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
  132. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
  133. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
  134. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
  135. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
  136. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  137. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +7 -5
  138. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  139. package/src/engine/sound/sopra/definition/effect/EqEffect.js +8 -5
  140. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +2 -2
  141. package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
  142. package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
  143. package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
  144. package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
  145. package/src/format/image/png/PNGReader.js +644 -644
  146. package/src/format/image/png/crc32.d.ts +1 -1
  147. package/src/format/image/png/crc32.js +7 -8
  148. package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
  149. package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
  150. package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
  151. package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
  152. package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
  153. package/src/shade/descriptor/blend/BlendComponent.js +2 -2
  154. package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
  155. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
  156. package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
  157. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
  158. package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
  159. package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
  160. package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
  161. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
  162. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
  163. package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
  164. package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
  165. package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
  166. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  167. package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
  168. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  169. package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
  170. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  171. package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
  172. package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
  173. package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
  174. package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
  175. package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
  176. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  177. package/src/shade/renderer/camera/Camera.js +2 -2
  178. package/src/shade/renderer/geometry/Attribute.js +2 -2
  179. package/src/shade/renderer/geometry/Geometry.js +2 -2
  180. package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
  181. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
  182. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
  183. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
  184. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
  185. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
  186. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  187. package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
  188. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
  189. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
  190. package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
  191. package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
  192. package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
  193. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  194. package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
  195. package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
  196. package/src/shade/renderer/texture/ShadeTexture.js +17 -10
  197. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
  198. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
  199. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
  200. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  201. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
  202. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
  203. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
  204. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
  205. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
  206. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  207. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
  208. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
  209. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  210. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
  211. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
  212. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
  213. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
  214. package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
  215. package/src/view/common/HTMLElementCacheKey.js +4 -3
  216. package/src/view/minimap/MinimapMarker.js +2 -2
@@ -1,194 +1,197 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { combine_hash } from "../../../core/collection/array/combine_hash.js";
3
- import { isArrayEqualStrict } from "../../../core/collection/array/isArrayEqualStrict.js";
4
- import { number_format_by_thousands } from "../../../core/primitives/numbers/number_format_by_thousands.js";
5
- import {
6
- ResourceDescriptor
7
- } from "../../../engine/graphics/render/frame_graph/resource/ResourceDescriptor.js";
8
- import { decode_bitmask_enum } from "../decode_bitmask_enum.js";
9
-
10
-
11
- export class BufferResourceDescriptor extends ResourceDescriptor {
12
- /**
13
- * In bytes
14
- * @type {number}
15
- */
16
- size = 0;
17
-
18
- /**
19
- * Minimize the number of usage flags per-resource.
20
- * The fewer flags you use - the more efficient the access will be.
21
- * The driver can happily allow you the full set of flags - but the memory access will typically be much slower compared to just a few needed flags.
22
- * @see GPUBufferUsage
23
- * @type {number}
24
- */
25
- usage = 0;
26
-
27
- /**
28
- * Range of the buffer that needs to be cleared (reset to 0)
29
- * Make sure to have a `GPUBufferUsage.COPY_DST` usage flag set if you want to clear the buffer
30
- */
31
- ensure_cleared = new Uint32Array(2);
32
-
33
- toString() {
34
- return `Buffer{ size = ${number_format_by_thousands(this.size)}, usage = ${decode_bitmask_enum(this.usage, GPUBufferUsage).join(" | ")} }`
35
- }
36
-
37
- get type() {
38
- return "buffer";
39
- }
40
-
41
- /**
42
- *
43
- * @param {BufferResourceDescriptor} other
44
- */
45
- copy(other) {
46
- this.size = other.size;
47
- this.usage = other.usage;
48
- this.ensure_cleared[0] = other.ensure_cleared[0];
49
- this.ensure_cleared[1] = other.ensure_cleared[1];
50
- }
51
-
52
- /**
53
- *
54
- * @return {BufferResourceDescriptor}
55
- */
56
- clone() {
57
- const r = new BufferResourceDescriptor();
58
-
59
- r.copy(this);
60
-
61
- return r;
62
- }
63
-
64
- hash() {
65
- // XOR is symmetric, so it maps (size, usage) and (usage, size) onto one value, and it left
66
- // `ensure_cleared` out entirely although `equals` compares it — two descriptors that are
67
- // not equal sharing a bucket, which is how a texture ends up being probed with a buffer.
68
- return combine_hash(
69
- this.size,
70
- this.usage,
71
- this.ensure_cleared[0],
72
- this.ensure_cleared[1]
73
- );
74
- }
75
-
76
- equals(other) {
77
- return super.equals(other)
78
- && this.size === other.size
79
- && this.usage === other.usage
80
- && isArrayEqualStrict(this.ensure_cleared, other.ensure_cleared)
81
- ;
82
- }
83
-
84
- /**
85
- *
86
- * @param {BufferResourceDescriptor} other
87
- * @return {number}
88
- */
89
- compare(other) {
90
- if (other.type !== this.type) {
91
- return super.compare(other);
92
- }
93
-
94
- const d_size = this.size - other.size;
95
-
96
- if (d_size !== 0) {
97
- return d_size;
98
- }
99
-
100
- const d_usage = this.usage - other.usage;
101
-
102
- if (d_usage !== 0) {
103
- return d_usage;
104
- }
105
-
106
- return 0;
107
- }
108
-
109
- /**
110
- *
111
- * @param {GPUBuffer} gpu_buffer
112
- * @returns {BufferResourceDescriptor}
113
- */
114
- static fromBuffer(gpu_buffer) {
115
- assert.defined(gpu_buffer, 'gpu_buffer');
116
-
117
- const r = new BufferResourceDescriptor();
118
-
119
- r.usage = gpu_buffer.usage;
120
- r.size = gpu_buffer.size;
121
-
122
- return r;
123
- }
124
-
125
- /**
126
- * Shortcut to create a buffer that is cleared to 0 for the entire size.
127
- * If you don't need the buffer to be cleared, use {@link BufferResourceDescriptor.from} instead.
128
- *
129
- *
130
- * @param {number} size
131
- * @param {GPUBufferUsage|number} usage
132
- * @returns {BufferResourceDescriptor}
133
- */
134
- static empty(size, usage) {
135
- return BufferResourceDescriptor.from(
136
- size,
137
- usage,
138
- 0,
139
- size
140
- );
141
- }
142
-
143
- /**
144
- *
145
- * @param {number} size
146
- * @param {GPUBufferUsage|number} usage will automatically add `GPUBufferUsage.COPY_DST` if `clear_size > 0`
147
- * @param {number} [clear_offset]
148
- * @param {number} [clear_size]
149
- * @returns {BufferResourceDescriptor}
150
- */
151
- static from(
152
- size,
153
- usage,
154
- clear_offset = 0,
155
- clear_size = 0
156
- ) {
157
-
158
- assert.isNonNegativeInteger(size, 'size');
159
- assert.isNonNegativeInteger(usage, 'usage');
160
- assert.notEqual(usage, 0, 'usage may not be 0');
161
- assert.isNonNegativeInteger(clear_offset, 'clear_offset');
162
- assert.isNonNegativeInteger(clear_size, 'clear_size');
163
-
164
- assert.lessThanOrEqual(clear_offset + clear_size, size, 'clear region is out of bounds');
165
-
166
- // spec requires 4 byte alignment: https://www.w3.org/TR/webgpu/#dom-gpucommandencoder-clearbuffer
167
- assert.equal(clear_offset % 4, 0, 'offset must be a multiple of 4');
168
- assert.equal(clear_size % 4, 0, 'size must be a multiple of 4');
169
-
170
- const r = new BufferResourceDescriptor();
171
-
172
- r.size = size;
173
- r.usage = usage;
174
-
175
- r.ensure_cleared[0] = clear_offset;
176
- r.ensure_cleared[1] = clear_size;
177
-
178
- if (clear_size > 0) {
179
- // requesting buffer to be cleared, this requires COPY_DST to actually fulfill
180
- // automatically add it in case it was missing
181
- // "buffer.usage contains COPY_DST", spec https://www.w3.org/TR/webgpu/#dom-gpucommandencoder-clearbuffer
182
- r.usage |= GPUBufferUsage.COPY_DST;
183
- }
184
-
185
-
186
- return r;
187
- }
188
- }
189
-
190
- /**
191
- * Type check shortcut
192
- * @type {boolean}
193
- */
1
+ import { assert } from "../../../core/assert.js";
2
+ import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
3
+ import { hash_mix3 } from "../../../core/math/hash/hash_mix3.js";
4
+ import { isArrayEqualStrict } from "../../../core/collection/array/isArrayEqualStrict.js";
5
+ import { number_format_by_thousands } from "../../../core/primitives/numbers/number_format_by_thousands.js";
6
+ import {
7
+ ResourceDescriptor
8
+ } from "../../../engine/graphics/render/frame_graph/resource/ResourceDescriptor.js";
9
+ import { decode_bitmask_enum } from "../decode_bitmask_enum.js";
10
+
11
+
12
+ export class BufferResourceDescriptor extends ResourceDescriptor {
13
+ /**
14
+ * In bytes
15
+ * @type {number}
16
+ */
17
+ size = 0;
18
+
19
+ /**
20
+ * Minimize the number of usage flags per-resource.
21
+ * The fewer flags you use - the more efficient the access will be.
22
+ * The driver can happily allow you the full set of flags - but the memory access will typically be much slower compared to just a few needed flags.
23
+ * @see GPUBufferUsage
24
+ * @type {number}
25
+ */
26
+ usage = 0;
27
+
28
+ /**
29
+ * Range of the buffer that needs to be cleared (reset to 0)
30
+ * Make sure to have a `GPUBufferUsage.COPY_DST` usage flag set if you want to clear the buffer
31
+ */
32
+ ensure_cleared = new Uint32Array(2);
33
+
34
+ toString() {
35
+ return `Buffer{ size = ${number_format_by_thousands(this.size)}, usage = ${decode_bitmask_enum(this.usage, GPUBufferUsage).join(" | ")} }`
36
+ }
37
+
38
+ get type() {
39
+ return "buffer";
40
+ }
41
+
42
+ /**
43
+ *
44
+ * @param {BufferResourceDescriptor} other
45
+ */
46
+ copy(other) {
47
+ this.size = other.size;
48
+ this.usage = other.usage;
49
+ this.ensure_cleared[0] = other.ensure_cleared[0];
50
+ this.ensure_cleared[1] = other.ensure_cleared[1];
51
+ }
52
+
53
+ /**
54
+ *
55
+ * @return {BufferResourceDescriptor}
56
+ */
57
+ clone() {
58
+ const r = new BufferResourceDescriptor();
59
+
60
+ r.copy(this);
61
+
62
+ return r;
63
+ }
64
+
65
+ hash() {
66
+ // XOR is symmetric, so it maps (size, usage) and (usage, size) onto one value, and it left
67
+ // `ensure_cleared` out entirely although `equals` compares it — two descriptors that are
68
+ // not equal sharing a bucket, which is how a texture ends up being probed with a buffer.
69
+ return hash_mix2(
70
+ hash_mix3(
71
+ this.size,
72
+ this.usage,
73
+ this.ensure_cleared[0]
74
+ ),
75
+ this.ensure_cleared[1]
76
+ );
77
+ }
78
+
79
+ equals(other) {
80
+ return super.equals(other)
81
+ && this.size === other.size
82
+ && this.usage === other.usage
83
+ && isArrayEqualStrict(this.ensure_cleared, other.ensure_cleared)
84
+ ;
85
+ }
86
+
87
+ /**
88
+ *
89
+ * @param {BufferResourceDescriptor} other
90
+ * @return {number}
91
+ */
92
+ compare(other) {
93
+ if (other.type !== this.type) {
94
+ return super.compare(other);
95
+ }
96
+
97
+ const d_size = this.size - other.size;
98
+
99
+ if (d_size !== 0) {
100
+ return d_size;
101
+ }
102
+
103
+ const d_usage = this.usage - other.usage;
104
+
105
+ if (d_usage !== 0) {
106
+ return d_usage;
107
+ }
108
+
109
+ return 0;
110
+ }
111
+
112
+ /**
113
+ *
114
+ * @param {GPUBuffer} gpu_buffer
115
+ * @returns {BufferResourceDescriptor}
116
+ */
117
+ static fromBuffer(gpu_buffer) {
118
+ assert.defined(gpu_buffer, 'gpu_buffer');
119
+
120
+ const r = new BufferResourceDescriptor();
121
+
122
+ r.usage = gpu_buffer.usage;
123
+ r.size = gpu_buffer.size;
124
+
125
+ return r;
126
+ }
127
+
128
+ /**
129
+ * Shortcut to create a buffer that is cleared to 0 for the entire size.
130
+ * If you don't need the buffer to be cleared, use {@link BufferResourceDescriptor.from} instead.
131
+ *
132
+ *
133
+ * @param {number} size
134
+ * @param {GPUBufferUsage|number} usage
135
+ * @returns {BufferResourceDescriptor}
136
+ */
137
+ static empty(size, usage) {
138
+ return BufferResourceDescriptor.from(
139
+ size,
140
+ usage,
141
+ 0,
142
+ size
143
+ );
144
+ }
145
+
146
+ /**
147
+ *
148
+ * @param {number} size
149
+ * @param {GPUBufferUsage|number} usage will automatically add `GPUBufferUsage.COPY_DST` if `clear_size > 0`
150
+ * @param {number} [clear_offset]
151
+ * @param {number} [clear_size]
152
+ * @returns {BufferResourceDescriptor}
153
+ */
154
+ static from(
155
+ size,
156
+ usage,
157
+ clear_offset = 0,
158
+ clear_size = 0
159
+ ) {
160
+
161
+ assert.isNonNegativeInteger(size, 'size');
162
+ assert.isNonNegativeInteger(usage, 'usage');
163
+ assert.notEqual(usage, 0, 'usage may not be 0');
164
+ assert.isNonNegativeInteger(clear_offset, 'clear_offset');
165
+ assert.isNonNegativeInteger(clear_size, 'clear_size');
166
+
167
+ assert.lessThanOrEqual(clear_offset + clear_size, size, 'clear region is out of bounds');
168
+
169
+ // spec requires 4 byte alignment: https://www.w3.org/TR/webgpu/#dom-gpucommandencoder-clearbuffer
170
+ assert.equal(clear_offset % 4, 0, 'offset must be a multiple of 4');
171
+ assert.equal(clear_size % 4, 0, 'size must be a multiple of 4');
172
+
173
+ const r = new BufferResourceDescriptor();
174
+
175
+ r.size = size;
176
+ r.usage = usage;
177
+
178
+ r.ensure_cleared[0] = clear_offset;
179
+ r.ensure_cleared[1] = clear_size;
180
+
181
+ if (clear_size > 0) {
182
+ // requesting buffer to be cleared, this requires COPY_DST to actually fulfill
183
+ // automatically add it in case it was missing
184
+ // "buffer.usage contains COPY_DST", spec https://www.w3.org/TR/webgpu/#dom-gpucommandencoder-clearbuffer
185
+ r.usage |= GPUBufferUsage.COPY_DST;
186
+ }
187
+
188
+
189
+ return r;
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Type check shortcut
195
+ * @type {boolean}
196
+ */
194
197
  BufferResourceDescriptor.prototype.isBufferResourceDescriptor = true;
@@ -1 +1 @@
1
- {"version":3,"file":"TextureResourceDescriptor.d.ts","sourceRoot":"","sources":["../../../../../src/shade/device/graph/TextureResourceDescriptor.js"],"names":[],"mappings":";;;sCAgBU,MAAM;;;;;AAOhB;IAmCI;;;;;;;;;OASG;IACH;QAP6B,UAAU,EAA5B,MAAM,EAAE;QAC6B,SAAS,GAA9C,sBAAoB,MAAM;QACO,MAAM,EAAvC,mBAAiB,MAAM;QACe,KAAK,GAA3C,uBAAqB,MAAM;QACT,UAAU,GAA5B,OAAO;QACL,yBAAyB,CAkCrC;IAED;;;;OAIG;IACH,yCAFa,yBAAyB,CAoBrC;IArGD;;;;;;;;;OASG;IACH,mBAFU,uBAAuB,GAAC,MAAM,CAEyB;IAGjE,yBAAyC;IACzC,oBAAgB;IAEhB,sBAAkB;IAElB;;;OAGG;IACH,WAFU,sBAAoB,MAAM,CAEpB;IAEhB;;OAEG;IACH,QAFU,MAAM,mBAAiB,CAEX;IAEtB;;OAEG;IACH,OAFU,MAAM,uBAAqB,CAEG;IAsFxC;;;;OAIG;IACH,cAHW,yBAAyB,GACvB,OAAO,CAuBnB;CAKJ;mCArKM,4EAA4E"}
1
+ {"version":3,"file":"TextureResourceDescriptor.d.ts","sourceRoot":"","sources":["../../../../../src/shade/device/graph/TextureResourceDescriptor.js"],"names":[],"mappings":";;;sCAiBU,MAAM;;;;;AAOhB;IAmCI;;;;;;;;;OASG;IACH;QAP6B,UAAU,EAA5B,MAAM,EAAE;QAC6B,SAAS,GAA9C,sBAAoB,MAAM;QACO,MAAM,EAAvC,mBAAiB,MAAM;QACe,KAAK,GAA3C,uBAAqB,MAAM;QACT,UAAU,GAA5B,OAAO;QACL,yBAAyB,CAkCrC;IAED;;;;OAIG;IACH,yCAFa,yBAAyB,CAoBrC;IArGD;;;;;;;;;OASG;IACH,mBAFU,uBAAuB,GAAC,MAAM,CAEyB;IAGjE,yBAAyC;IACzC,oBAAgB;IAEhB,sBAAkB;IAElB;;;OAGG;IACH,WAFU,sBAAoB,MAAM,CAEpB;IAEhB;;OAEG;IACH,QAFU,MAAM,mBAAiB,CAEX;IAEtB;;OAEG;IACH,OAFU,MAAM,uBAAqB,CAEG;IA0FxC;;;;OAIG;IACH,cAHW,yBAAyB,GACvB,OAAO,CAuBnB;CAKJ;mCAzKM,4EAA4E"}