Reland "Implement readonly storage buffer - validation at API side"

This is a reland of 34ac535f02fb8157fde501810ae038914d21b122

Original change's description:
> Implement readonly storage buffer - validation at API side
> 
> This patch adds validation code for API side for readonly storage
> buffer. It also adds unit tests for API validation.
> 
> BUG=dawn:180
> 
> Change-Id: I9a97c5f3aa23e720619d138ca55d7b17f08d64c9
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12620
> Reviewed-by: Austin Eng <enga@chromium.org>
> Commit-Queue: Yunchao He <yunchao.he@intel.com>

Bug: dawn:180
Change-Id: I1e107ff6168279940496317b973f2d8c7c3c6114
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13083
Reviewed-by: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/Buffer.cpp b/src/dawn_native/Buffer.cpp
index 5712bdf..a44e3c2 100644
--- a/src/dawn_native/Buffer.cpp
+++ b/src/dawn_native/Buffer.cpp
@@ -115,6 +115,12 @@
           mSize(descriptor->size),
           mUsage(descriptor->usage),
           mState(BufferState::Unmapped) {
+        // Add readonly storage usage if the buffer has a storage usage. The validation rules in
+        // PassResourceUsageTracker::ValidateUsages will make sure we don't use both at the same
+        // time.
+        if (mUsage & wgpu::BufferUsage::Storage) {
+            mUsage |= kReadOnlyStorage;
+        }
     }
 
     BufferBase::BufferBase(DeviceBase* device, ObjectBase::ErrorTag tag)