Vulkan: Fix texture barriers for readonly storage.

One of the helper methods to compute texture barriers didn't handle the
kReadOnlyStorage usage, which made barriers issued too small.

Issue was caught by running
StorageTextureZeroInitTests.ReadonlyStorageTextureClearsToZeroInRenderPass
with the Vulkan barrier validation enabled.

Also renames kReadonlyStorageTexture to kReadOnlyStorageTexture for
consistency.

Bug: dawn:635
Change-Id: I6e6027c380672dcdaea789c811665536b446003e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38101
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_native/ProgrammablePassEncoder.cpp b/src/dawn_native/ProgrammablePassEncoder.cpp
index 2076296..ec29c51 100644
--- a/src/dawn_native/ProgrammablePassEncoder.cpp
+++ b/src/dawn_native/ProgrammablePassEncoder.cpp
@@ -63,7 +63,7 @@
                         TextureViewBase* view = group->GetBindingAsTextureView(bindingIndex);
                         switch (bindingInfo.storageTexture.access) {
                             case wgpu::StorageTextureAccess::ReadOnly:
-                                usageTracker->TextureViewUsedAs(view, kReadonlyStorageTexture);
+                                usageTracker->TextureViewUsedAs(view, kReadOnlyStorageTexture);
                                 break;
                             case wgpu::StorageTextureAccess::WriteOnly:
                                 usageTracker->TextureViewUsedAs(view, wgpu::TextureUsage::Storage);
diff --git a/src/dawn_native/Texture.cpp b/src/dawn_native/Texture.cpp
index 310829a..bba6bce 100644
--- a/src/dawn_native/Texture.cpp
+++ b/src/dawn_native/Texture.cpp
@@ -365,7 +365,7 @@
         // Add readonly storage usage if the texture has a storage usage. The validation rules in
         // ValidatePassResourceUsage will make sure we don't use both at the same time.
         if (mUsage & wgpu::TextureUsage::Storage) {
-            mUsage |= kReadonlyStorageTexture;
+            mUsage |= kReadOnlyStorageTexture;
         }
     }
 
diff --git a/src/dawn_native/Texture.h b/src/dawn_native/Texture.h
index 18c3e78..52cfa06 100644
--- a/src/dawn_native/Texture.h
+++ b/src/dawn_native/Texture.h
@@ -39,7 +39,7 @@
     bool IsValidSampleCount(uint32_t sampleCount);
 
     static constexpr wgpu::TextureUsage kReadOnlyTextureUsages =
-        wgpu::TextureUsage::CopySrc | wgpu::TextureUsage::Sampled | kReadonlyStorageTexture;
+        wgpu::TextureUsage::CopySrc | wgpu::TextureUsage::Sampled | kReadOnlyStorageTexture;
 
     static constexpr wgpu::TextureUsage kWritableTextureUsages =
         wgpu::TextureUsage::CopyDst | wgpu::TextureUsage::Storage |
diff --git a/src/dawn_native/d3d12/CommandBufferD3D12.cpp b/src/dawn_native/d3d12/CommandBufferD3D12.cpp
index 623d9fc..2ccf956 100644
--- a/src/dawn_native/d3d12/CommandBufferD3D12.cpp
+++ b/src/dawn_native/d3d12/CommandBufferD3D12.cpp
@@ -280,7 +280,7 @@
                                 wgpu::TextureUsage usage;
                                 switch (bindingInfo.storageTexture.access) {
                                     case wgpu::StorageTextureAccess::ReadOnly:
-                                        usage = kReadonlyStorageTexture;
+                                        usage = kReadOnlyStorageTexture;
                                         break;
                                     case wgpu::StorageTextureAccess::WriteOnly:
                                         usage = wgpu::TextureUsage::Storage;
diff --git a/src/dawn_native/d3d12/TextureD3D12.cpp b/src/dawn_native/d3d12/TextureD3D12.cpp
index 675577d..bf4c87d 100644
--- a/src/dawn_native/d3d12/TextureD3D12.cpp
+++ b/src/dawn_native/d3d12/TextureD3D12.cpp
@@ -49,7 +49,7 @@
             if (usage & wgpu::TextureUsage::CopyDst) {
                 resourceState |= D3D12_RESOURCE_STATE_COPY_DEST;
             }
-            if (usage & (wgpu::TextureUsage::Sampled | kReadonlyStorageTexture)) {
+            if (usage & (wgpu::TextureUsage::Sampled | kReadOnlyStorageTexture)) {
                 resourceState |= (D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE |
                                   D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
             }
diff --git a/src/dawn_native/dawn_platform.h b/src/dawn_native/dawn_platform.h
index 19d47e8..4591c0f 100644
--- a/src/dawn_native/dawn_platform.h
+++ b/src/dawn_native/dawn_platform.h
@@ -27,7 +27,7 @@
     // (readonly storage texture usage) for render pass resource tracking
     static constexpr wgpu::BufferUsage kReadOnlyStorageBuffer =
         static_cast<wgpu::BufferUsage>(0x80000000);
-    static constexpr wgpu::TextureUsage kReadonlyStorageTexture =
+    static constexpr wgpu::TextureUsage kReadOnlyStorageTexture =
         static_cast<wgpu::TextureUsage>(0x80000000);
 
     // Add an extra texture usage for textures that will be presented, for use in backends
diff --git a/src/dawn_native/vulkan/TextureVk.cpp b/src/dawn_native/vulkan/TextureVk.cpp
index 81b3d3b..d71437a 100644
--- a/src/dawn_native/vulkan/TextureVk.cpp
+++ b/src/dawn_native/vulkan/TextureVk.cpp
@@ -71,6 +71,9 @@
             if (usage & wgpu::TextureUsage::Storage) {
                 flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
             }
+            if (usage & kReadOnlyStorageTexture) {
+                flags |= VK_ACCESS_SHADER_READ_BIT;
+            }
             if (usage & wgpu::TextureUsage::RenderAttachment) {
                 if (format.HasDepthOrStencil()) {
                     flags |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
@@ -128,7 +131,7 @@
                 // and store operations on storage images can only be done on the images in
                 // VK_IMAGE_LAYOUT_GENERAL layout.
                 case wgpu::TextureUsage::Storage:
-                case kReadonlyStorageTexture:
+                case kReadOnlyStorageTexture:
                     return VK_IMAGE_LAYOUT_GENERAL;
                 case wgpu::TextureUsage::RenderAttachment:
                     if (format.HasDepthOrStencil()) {
@@ -156,7 +159,7 @@
             if (usage & (wgpu::TextureUsage::CopySrc | wgpu::TextureUsage::CopyDst)) {
                 flags |= VK_PIPELINE_STAGE_TRANSFER_BIT;
             }
-            if (usage & (wgpu::TextureUsage::Sampled | kReadonlyStorageTexture)) {
+            if (usage & (wgpu::TextureUsage::Sampled | kReadOnlyStorageTexture)) {
                 // TODO(cwallez@chromium.org): Only transition to the usage we care about to avoid
                 // introducing FS -> VS dependencies that would prevent parallelization on tiler
                 // GPUs
@@ -392,7 +395,7 @@
         if (usage & wgpu::TextureUsage::Sampled) {
             flags |= VK_IMAGE_USAGE_SAMPLED_BIT;
         }
-        if (usage & wgpu::TextureUsage::Storage) {
+        if (usage & (wgpu::TextureUsage::Storage | kReadOnlyStorageTexture)) {
             flags |= VK_IMAGE_USAGE_STORAGE_BIT;
         }
         if (usage & wgpu::TextureUsage::RenderAttachment) {
diff --git a/src/tests/white_box/InternalResourceUsageTests.cpp b/src/tests/white_box/InternalResourceUsageTests.cpp
index 438222f..5dff5ff 100644
--- a/src/tests/white_box/InternalResourceUsageTests.cpp
+++ b/src/tests/white_box/InternalResourceUsageTests.cpp
@@ -38,7 +38,7 @@
     wgpu::TextureDescriptor descriptor;
     descriptor.format = wgpu::TextureFormat::RGBA8Unorm;
     descriptor.size = {1, 1, 1};
-    descriptor.usage = dawn_native::kReadonlyStorageTexture;
+    descriptor.usage = dawn_native::kReadOnlyStorageTexture;
     ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
 }