Skip to content

Commit 6a68496

Browse files
committed
Bug 1880033 - Comply with the spec restriction on binding limits for now. r=webgpu-reviewers,ErichDonGubler
Differential Revision: https://phabricator.services.mozilla.com/D201687
1 parent a2f6450 commit 6a68496

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

gfx/wgpu_bindings/src/server.rs

+19-4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ const MAX_BUFFER_SIZE_U32: u32 = MAX_BUFFER_SIZE as u32;
4646

4747
// Mesa has issues with height/depth that don't fit in a 16 bits signed integers.
4848
const MAX_TEXTURE_EXTENT: u32 = std::i16::MAX as u32;
49+
// We have to restrict the number of bindings for any given resource type so that
50+
// the sum of these limits multiplied by the number of shader stages fits
51+
// maxBindingsPerBindGroup (1000). This restriction is arbitrary and is likely to
52+
// change eventually. See github.com/gpuweb/gpuweb/pull/4484
53+
// For now it's impractical for users to have very large numbers of bindings so this
54+
// limit should not be too restrictive until we add support for a bindless API.
55+
// Then we may have to ignore the spec or get it changed.
56+
const MAX_BINDINGS_PER_RESOURCE_TYPE: u32 = 64;
4957

5058
fn restrict_limits(limits: wgt::Limits) -> wgt::Limits {
5159
wgt::Limits {
@@ -55,12 +63,19 @@ fn restrict_limits(limits: wgt::Limits) -> wgt::Limits {
5563
max_texture_dimension_3d: limits.max_texture_dimension_3d.min(MAX_TEXTURE_EXTENT),
5664
max_sampled_textures_per_shader_stage: limits
5765
.max_sampled_textures_per_shader_stage
58-
.min(256),
59-
max_samplers_per_shader_stage: limits.max_samplers_per_shader_stage.min(256),
66+
.min(MAX_BINDINGS_PER_RESOURCE_TYPE),
67+
max_samplers_per_shader_stage: limits
68+
.max_samplers_per_shader_stage
69+
.min(MAX_BINDINGS_PER_RESOURCE_TYPE),
6070
max_storage_textures_per_shader_stage: limits
6171
.max_storage_textures_per_shader_stage
62-
.min(256),
63-
max_uniform_buffers_per_shader_stage: limits.max_uniform_buffers_per_shader_stage.min(256),
72+
.min(MAX_BINDINGS_PER_RESOURCE_TYPE),
73+
max_uniform_buffers_per_shader_stage: limits
74+
.max_uniform_buffers_per_shader_stage
75+
.min(MAX_BINDINGS_PER_RESOURCE_TYPE),
76+
max_storage_buffers_per_shader_stage: limits
77+
.max_storage_buffers_per_shader_stage
78+
.min(MAX_BINDINGS_PER_RESOURCE_TYPE),
6479
max_uniform_buffer_binding_size: limits
6580
.max_uniform_buffer_binding_size
6681
.min(MAX_BUFFER_SIZE_U32),

0 commit comments

Comments
 (0)