[dawn][gl] Simplify GenerateArrayLengthFromuniformData By directly iterating over all the buffer bindings. This avoids going from BindingNumber to BindingIndex when it isn't necessary, making a future refactor easier. Bug: 42240282 Change-Id: I31cc99cee9fd828b973106b392e7428be1a6cf76 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/262195 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Loko Kung <lokokung@google.com>
diff --git a/src/dawn/native/opengl/ShaderModuleGL.cpp b/src/dawn/native/opengl/ShaderModuleGL.cpp index 8693f67..a7e33bc 100644 --- a/src/dawn/native/opengl/ShaderModuleGL.cpp +++ b/src/dawn/native/opengl/ShaderModuleGL.cpp
@@ -33,7 +33,6 @@ #include "absl/container/flat_hash_map.h" #include "dawn/common/Enumerator.h" -#include "dawn/common/MatchVariant.h" #include "dawn/native/Adapter.h" #include "dawn/native/BindGroupLayoutInternal.h" #include "dawn/native/CacheRequest.h" @@ -244,38 +243,27 @@ for (BindGroupIndex group : layout->GetBindGroupLayoutsMask()) { const BindGroupLayoutInternalBase* bgl = layout->GetBindGroupLayout(group); - for (const auto& [binding, shaderBindingInfo] : moduleBindingInfo[group]) { - BindingIndex bindingIndex = bgl->GetBindingIndex(binding); - const BindingInfo& bindingInfo = bgl->GetBindingInfo(bindingIndex); - // TODO(crbug.com/408010433): capturing binding directly in lambda is C++20 - // extension in cmake - uint32_t capturedBindingNumber = static_cast<uint32_t>(binding); + for (BindingIndex binding : bgl->GetBufferIndices()) { + const BindingInfo& bindingInfo = bgl->GetBindingInfo(binding); - MatchVariant( - bindingInfo.bindingLayout, - [&](const BufferBindingInfo& bufferBinding) { - switch (bufferBinding.type) { - case wgpu::BufferBindingType::Storage: - case kInternalStorageBufferBinding: - case wgpu::BufferBindingType::ReadOnlyStorage: - case kInternalReadOnlyStorageBufferBinding: { - // Use ssbo index as the indices for the buffer size lookups - // in the array length from uniform transform. - tint::BindingPoint srcBindingPoint = {static_cast<uint32_t>(group), - capturedBindingNumber}; - FlatBindingIndex ssboIndex = indexInfo[group][bindingIndex]; - bindings.array_length_from_uniform.bindpoint_to_size_index.emplace( - srcBindingPoint, uint32_t(ssboIndex)); - break; - } - default: - break; - } - }, - [](const StaticSamplerBindingInfo&) {}, [](const SamplerBindingInfo&) {}, - [](const TextureBindingInfo&) {}, [](const StorageTextureBindingInfo&) {}, - [](const TexelBufferBindingInfo&) {}, [](const InputAttachmentBindingInfo&) {}); + switch (std::get<BufferBindingInfo>(bindingInfo.bindingLayout).type) { + case wgpu::BufferBindingType::Storage: + case kInternalStorageBufferBinding: + case wgpu::BufferBindingType::ReadOnlyStorage: + case kInternalReadOnlyStorageBufferBinding: { + // Use ssbo index as the indices for the buffer size lookups + // in the array length from uniform transform. + tint::BindingPoint srcBindingPoint = {uint32_t(group), + uint32_t(bindingInfo.binding)}; + FlatBindingIndex ssboIndex = indexInfo[group][binding]; + bindings.array_length_from_uniform.bindpoint_to_size_index.emplace( + srcBindingPoint, uint32_t(ssboIndex)); + break; + } + default: + break; + } } }