Add `mInternalUsage` to store all internal and external buffer usages

This patch adds `mInternalUsage` to store all internal and external
usages of a `BufferBase` object to align with the way we do on
`TextureBase`.

Bug: chromium:350497225
Change-Id: I7721b732c0fd53765c3c125ecbc6ba22aaf5e240
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/201654
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn/native/Buffer.cpp b/src/dawn/native/Buffer.cpp
index db7a0b4..87123e1 100644
--- a/src/dawn/native/Buffer.cpp
+++ b/src/dawn/native/Buffer.cpp
@@ -467,7 +467,8 @@
 BufferBase::BufferBase(DeviceBase* device, const UnpackedPtr<BufferDescriptor>& descriptor)
     : SharedResource(device, descriptor->label),
       mSize(descriptor->size),
-      mUsage(AddInternalUsages(device, descriptor->usage)),
+      mUsage(descriptor->usage),
+      mInternalUsage(AddInternalUsages(device, descriptor->usage)),
       mState(descriptor.Get<BufferHostMappedPointer>() ? BufferState::HostMappedPersistent
                                                        : BufferState::Unmapped) {
     GetObjectTrackingList()->Track(this);
@@ -479,6 +480,7 @@
     : SharedResource(device, tag, descriptor->label),
       mSize(descriptor->size),
       mUsage(descriptor->usage),
+      mInternalUsage(descriptor->usage),
       mState(descriptor->mappedAtCreation ? BufferState::MappedAtCreation : BufferState::Unmapped) {
     if (descriptor->mappedAtCreation) {
         mMapOffset = 0;
@@ -534,16 +536,16 @@
 
 wgpu::BufferUsage BufferBase::GetUsage() const {
     DAWN_ASSERT(!IsError());
-    return mUsage;
+    return mInternalUsage;
 }
 
 wgpu::BufferUsage BufferBase::GetUsageExternalOnly() const {
     DAWN_ASSERT(!IsError());
-    return GetUsage() & ~kAllInternalBufferUsages;
+    return mUsage;
 }
 
 wgpu::BufferUsage BufferBase::APIGetUsage() const {
-    return mUsage & ~kAllInternalBufferUsages;
+    return mUsage;
 }
 
 wgpu::BufferMapState BufferBase::APIGetMapState() const {
@@ -977,13 +979,13 @@
                     wgpu::MapMode::Write, wgpu::MapMode::Read);
 
     if (mode & wgpu::MapMode::Read) {
-        DAWN_INVALID_IF(!(mUsage & wgpu::BufferUsage::MapRead),
-                        "The buffer usages (%s) do not contain %s.", mUsage,
+        DAWN_INVALID_IF(!(mInternalUsage & wgpu::BufferUsage::MapRead),
+                        "The buffer usages (%s) do not contain %s.", mInternalUsage,
                         wgpu::BufferUsage::MapRead);
     } else {
         DAWN_ASSERT(mode & wgpu::MapMode::Write);
-        DAWN_INVALID_IF(!(mUsage & wgpu::BufferUsage::MapWrite),
-                        "The buffer usages (%s) do not contain %s.", mUsage,
+        DAWN_INVALID_IF(!(mInternalUsage & wgpu::BufferUsage::MapWrite),
+                        "The buffer usages (%s) do not contain %s.", mInternalUsage,
                         wgpu::BufferUsage::MapWrite);
     }
 
diff --git a/src/dawn/native/Buffer.h b/src/dawn/native/Buffer.h
index 24fb24b..066f554 100644
--- a/src/dawn/native/Buffer.h
+++ b/src/dawn/native/Buffer.h
@@ -91,6 +91,8 @@
     // |GetUsageExternalOnly| returns the usage with which the buffer was created using the
     // base WebGPU API. Additional usages may be added for internal state tracking. |GetUsage|
     // returns the union of base usage and the usages added internally.
+    // TODO(chromium:350497225): Rename |GetUsage| to |GetInternalUsage| to align with the same
+    // function in `TextureBase`.
     wgpu::BufferUsage GetUsage() const;
     wgpu::BufferUsage GetUsageExternalOnly() const;
 
@@ -175,6 +177,7 @@
 
     const uint64_t mSize = 0;
     const wgpu::BufferUsage mUsage = wgpu::BufferUsage::None;
+    const wgpu::BufferUsage mInternalUsage = wgpu::BufferUsage::None;
     BufferState mState;
     bool mIsDataInitialized = false;
 
diff --git a/src/dawn/native/dawn_platform.h b/src/dawn/native/dawn_platform.h
index c2efcab..821821d 100644
--- a/src/dawn/native/dawn_platform.h
+++ b/src/dawn/native/dawn_platform.h
@@ -55,12 +55,6 @@
 static constexpr wgpu::BufferUsage kInternalCopySrcBuffer =
     static_cast<wgpu::BufferUsage>(1u << 29);
 
-// TODO(350497225): We should store Buffer's internal and external usage in separate member
-// variables, so that the external usage can be queried directly without bit hacks using this
-// special flag.
-static constexpr wgpu::BufferUsage kAllInternalBufferUsages =
-    kInternalStorageBuffer | kReadOnlyStorageBuffer | kInternalCopySrcBuffer;
-
 // Extra texture usages
 // Usage to denote an extra tag value used in system specific ways.
 //  - Used to store that attachments are used more than once in PassResourceUsageTracker.