[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()) {