[dawn][native] Add BindGroupBase::GetBindingAsBuffer

This can be used when we don't need the size/offset (which are stored
separately in the BindGroup). This happens a bunch in validation code
that considers the whole buffer as a single subresource.

Bug: None
Change-Id: I1771168b0bd28cc44d6b626a1f72dc65bd711f73
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/258074
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/BindGroup.cpp b/src/dawn/native/BindGroup.cpp
index be0dd95..3f1f120 100644
--- a/src/dawn/native/BindGroup.cpp
+++ b/src/dawn/native/BindGroup.cpp
@@ -868,15 +868,13 @@
     return mBindingData.unverifiedBufferSizes;
 }
 
-BufferBinding BindGroupBase::GetBindingAsBufferBinding(BindingIndex bindingIndex) {
+BufferBase* BindGroupBase::GetBindingAsBuffer(BindingIndex bindingIndex) {
     DAWN_ASSERT(!IsError());
     const BindGroupLayoutInternalBase* layout = GetLayout();
     DAWN_ASSERT(bindingIndex < layout->GetBindingCount());
     DAWN_ASSERT(std::holds_alternative<BufferBindingInfo>(
         layout->GetBindingInfo(bindingIndex).bindingLayout));
-    BufferBase* buffer = static_cast<BufferBase*>(mBindingData.bindings[bindingIndex].Get());
-    return {buffer, mBindingData.bufferData[bindingIndex].offset,
-            mBindingData.bufferData[bindingIndex].size};
+    return static_cast<BufferBase*>(mBindingData.bindings[bindingIndex].Get());
 }
 
 SamplerBase* BindGroupBase::GetBindingAsSampler(BindingIndex bindingIndex) const {
@@ -901,6 +899,12 @@
     return static_cast<TextureViewBase*>(mBindingData.bindings[bindingIndex].Get());
 }
 
+BufferBinding BindGroupBase::GetBindingAsBufferBinding(BindingIndex bindingIndex) {
+    DAWN_ASSERT(!IsError());
+    return {GetBindingAsBuffer(bindingIndex), mBindingData.bufferData[bindingIndex].offset,
+            mBindingData.bufferData[bindingIndex].size};
+}
+
 const std::vector<Ref<ExternalTextureBase>>& BindGroupBase::GetBoundExternalTextures() const {
     return mBoundExternalTextures;
 }
diff --git a/src/dawn/native/BindGroup.h b/src/dawn/native/BindGroup.h
index 082469d..53cff95 100644
--- a/src/dawn/native/BindGroup.h
+++ b/src/dawn/native/BindGroup.h
@@ -70,9 +70,11 @@
     BindGroupLayoutInternalBase* GetLayout();
     const BindGroupLayoutInternalBase* GetLayout() const;
 
-    BufferBinding GetBindingAsBufferBinding(BindingIndex bindingIndex);
+    // Getters for static bindings.
+    BufferBase* GetBindingAsBuffer(BindingIndex bindingIndex);
     SamplerBase* GetBindingAsSampler(BindingIndex bindingIndex) const;
     TextureViewBase* GetBindingAsTextureView(BindingIndex bindingIndex);
+    BufferBinding GetBindingAsBufferBinding(BindingIndex bindingIndex);
     const ityp::span<uint32_t, uint64_t>& GetUnverifiedBufferSizes() const;
     const std::vector<Ref<ExternalTextureBase>>& GetBoundExternalTextures() const;
 
diff --git a/src/dawn/native/CommandBufferStateTracker.cpp b/src/dawn/native/CommandBufferStateTracker.cpp
index db590cf..809ac5a 100644
--- a/src/dawn/native/CommandBufferStateTracker.cpp
+++ b/src/dawn/native/CommandBufferStateTracker.cpp
@@ -669,11 +669,9 @@
                             std::numeric_limits<uint32_t>::max());
 
                 const auto& bindingInfo = mBindgroups[i]->GetLayout()->GetBindingInfo(bindingIndex);
-                const BufferBinding& bufferBinding =
-                    mBindgroups[i]->GetBindingAsBufferBinding(bindingIndex);
+                const BufferBase* buffer = mBindgroups[i]->GetBindingAsBuffer(bindingIndex);
 
                 BindingNumber bindingNumber = bindingInfo.binding;
-                const BufferBase* buffer = bufferBinding.buffer;
 
                 uint64_t bufferSize =
                     mBindgroups[i]->GetUnverifiedBufferSizes()[packedIndex.value()];
@@ -704,9 +702,7 @@
                 mBindgroups[a.e0.bindGroupIndex], a.e0.bindGroupIndex, a.e0.bindingIndex,
                 mBindgroups[a.e1.bindGroupIndex], a.e1.bindGroupIndex, a.e1.bindingIndex,
                 a.e0.offset, a.e0.size, a.e1.offset, a.e1.size,
-                mBindgroups[a.e0.bindGroupIndex]
-                    ->GetBindingAsBufferBinding(a.e0.bindingIndex)
-                    .buffer);
+                mBindgroups[a.e0.bindGroupIndex]->GetBindingAsBuffer(a.e0.bindingIndex));
         } else {
             DAWN_ASSERT(std::holds_alternative<TextureAliasing>(result));
             const auto& a = std::get<TextureAliasing>(result);
diff --git a/src/dawn/native/PassResourceUsageTracker.cpp b/src/dawn/native/PassResourceUsageTracker.cpp
index 192a710..7be797f 100644
--- a/src/dawn/native/PassResourceUsageTracker.cpp
+++ b/src/dawn/native/PassResourceUsageTracker.cpp
@@ -132,7 +132,7 @@
                 DAWN_UNREACHABLE();
         }
 
-        BufferBase* buffer = group->GetBindingAsBufferBinding(i).buffer;
+        BufferBase* buffer = group->GetBindingAsBuffer(i);
         BufferUsedAs(buffer, usage, bindingInfo.visibility);
     }
 
@@ -229,7 +229,7 @@
     const auto* layout = group->GetLayout();
 
     for (BindingIndex i : layout->GetBufferIndices()) {
-        mUsage.referencedBuffers.insert(group->GetBindingAsBufferBinding(i).buffer);
+        mUsage.referencedBuffers.insert(group->GetBindingAsBuffer(i));
     }
 
     for (BindingIndex i : layout->GetTextureIndices()) {