Implement readonly storage buffer on Metal backend
BUG=dawn:180, dawn:284
Change-Id: I07358e5817faa85a0695a7c44db7b6472307d101
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/14360
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/metal/CommandBufferMTL.mm b/src/dawn_native/metal/CommandBufferMTL.mm
index 38294dd..3f93587 100644
--- a/src/dawn_native/metal/CommandBufferMTL.mm
+++ b/src/dawn_native/metal/CommandBufferMTL.mm
@@ -453,7 +453,8 @@
switch (layout.types[bindingIndex]) {
case wgpu::BindingType::UniformBuffer:
- case wgpu::BindingType::StorageBuffer: {
+ case wgpu::BindingType::StorageBuffer:
+ case wgpu::BindingType::ReadonlyStorageBuffer: {
const BufferBinding& binding =
group->GetBindingAsBufferBinding(bindingIndex);
const id<MTLBuffer> buffer = ToBackend(binding.buffer)->GetMTLBuffer();
@@ -527,7 +528,6 @@
} break;
case wgpu::BindingType::StorageTexture:
- case wgpu::BindingType::ReadonlyStorageBuffer:
UNREACHABLE();
break;
}
diff --git a/src/dawn_native/metal/PipelineLayoutMTL.mm b/src/dawn_native/metal/PipelineLayoutMTL.mm
index dc52891..1d3e220 100644
--- a/src/dawn_native/metal/PipelineLayoutMTL.mm
+++ b/src/dawn_native/metal/PipelineLayoutMTL.mm
@@ -41,6 +41,7 @@
switch (groupInfo.types[binding]) {
case wgpu::BindingType::UniformBuffer:
case wgpu::BindingType::StorageBuffer:
+ case wgpu::BindingType::ReadonlyStorageBuffer:
mIndexInfo[stage][group][binding] = bufferIndex;
bufferIndex++;
break;
@@ -53,7 +54,6 @@
textureIndex++;
break;
case wgpu::BindingType::StorageTexture:
- case wgpu::BindingType::ReadonlyStorageBuffer:
UNREACHABLE();
break;
}
diff --git a/src/tests/end2end/GpuMemorySynchronizationTests.cpp b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
index 69f506b..8bc5b34 100644
--- a/src/tests/end2end/GpuMemorySynchronizationTests.cpp
+++ b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
@@ -688,4 +688,7 @@
EXPECT_PIXEL_RGBA8_EQ(RGBA8::kYellow, renderPass.color, max, max);
}
-DAWN_INSTANTIATE_TEST(MultipleWriteThenMultipleReadTests, D3D12Backend, VulkanBackend);
+DAWN_INSTANTIATE_TEST(MultipleWriteThenMultipleReadTests,
+ D3D12Backend,
+ MetalBackend,
+ VulkanBackend);