Support and pack unbounded binding numbers in the BGL
Also fixes a bug where we weren't validating duplicating
bindings in the shader, and where dynamic offset validation
could be incorrectly fetching the wrong bindings.
Bug: dawn:354
Change-Id: I93178c34eb4d43119e8b9de5738ae4596e9277cd
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/17240
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/opengl/PipelineLayoutGL.cpp b/src/dawn_native/opengl/PipelineLayoutGL.cpp
index 18fd4f2..7048d5e 100644
--- a/src/dawn_native/opengl/PipelineLayoutGL.cpp
+++ b/src/dawn_native/opengl/PipelineLayoutGL.cpp
@@ -28,30 +28,28 @@
GLuint ssboIndex = 0;
for (uint32_t group : IterateBitSet(GetBindGroupLayoutsMask())) {
- const auto& groupInfo = GetBindGroupLayout(group)->GetBindingInfo();
+ const BindGroupLayoutBase::LayoutBindingInfo& groupInfo =
+ GetBindGroupLayout(group)->GetBindingInfo();
- for (size_t binding = 0; binding < kMaxBindingsPerGroup; ++binding) {
- if (!groupInfo.mask[binding]) {
- continue;
- }
-
- switch (groupInfo.types[binding]) {
+ for (BindingIndex bindingIndex = 0; bindingIndex < groupInfo.bindingCount;
+ ++bindingIndex) {
+ switch (groupInfo.types[bindingIndex]) {
case wgpu::BindingType::UniformBuffer:
- mIndexInfo[group][binding] = uboIndex;
+ mIndexInfo[group][bindingIndex] = uboIndex;
uboIndex++;
break;
case wgpu::BindingType::Sampler:
- mIndexInfo[group][binding] = samplerIndex;
+ mIndexInfo[group][bindingIndex] = samplerIndex;
samplerIndex++;
break;
case wgpu::BindingType::SampledTexture:
- mIndexInfo[group][binding] = sampledTextureIndex;
+ mIndexInfo[group][bindingIndex] = sampledTextureIndex;
sampledTextureIndex++;
break;
case wgpu::BindingType::StorageBuffer:
case wgpu::BindingType::ReadonlyStorageBuffer:
- mIndexInfo[group][binding] = ssboIndex;
+ mIndexInfo[group][bindingIndex] = ssboIndex;
ssboIndex++;
break;