Revert "Vulkan: Allow setting multiple `MemoryKind` bits"

This reverts commit a8f733807cbf72ebab8baecbda359ca4413d00c7.

Reason for revert: Breaking CTS roll on Ci only bot. https://ci.chromium.org/ui/p/chromium/builders/try/linux-dawn-nvidia-1660-exp-rel/1157/overview

Can you please add the `Include-Ci-Only-Tests: true` footer when relanding to run on the CI only bot?

Original change's description:
> Vulkan: Allow setting multiple `MemoryKind` bits
>
> This patch allows setting multiple MemoryKind bits in one MemoryKind
> value and replaces MemoryKind::Opaque with MemoryKind::DeviceLocal as
> a preparation of the implementation of BufferMapExtendedUsage on
> Vulkan.
>
> Bug: 386255678
> Change-Id: I68f77de15d8267ae985d49f73497410fb08fbd49
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/227697
> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
> Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 386255678
Change-Id: I218a6f8426bfae726c3cce6209f77068be66e5e8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/229454
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/dawn/native/vulkan/BufferVk.cpp b/src/dawn/native/vulkan/BufferVk.cpp
index 558a7c5..c789fd3 100644
--- a/src/dawn/native/vulkan/BufferVk.cpp
+++ b/src/dawn/native/vulkan/BufferVk.cpp
@@ -235,9 +235,9 @@
 
     MemoryKind requestKind = MemoryKind::Linear;
     if (GetInternalUsage() & wgpu::BufferUsage::MapRead) {
-        requestKind |= MemoryKind::ReadMappable;
+        requestKind = MemoryKind::LinearReadMappable;
     } else if (GetInternalUsage() & wgpu::BufferUsage::MapWrite) {
-        requestKind |= MemoryKind::WriteMappable;
+        requestKind = MemoryKind::LinearWriteMappable;
     }
     DAWN_TRY_ASSIGN(mMemoryAllocation,
                     device->GetResourceMemoryAllocator()->Allocate(requirements, requestKind));
@@ -330,13 +330,13 @@
         requirements.memoryTypeBits &= hostPointerProperties.memoryTypeBits;
     }
 
-    MemoryKind requestKind = MemoryKind::Linear;
+    MemoryKind requestKind;
     if (GetInternalUsage() & wgpu::BufferUsage::MapRead) {
-        requestKind |= MemoryKind::ReadMappable;
+        requestKind = MemoryKind::LinearReadMappable;
     } else if (GetInternalUsage() & wgpu::BufferUsage::MapWrite) {
-        requestKind |= MemoryKind::WriteMappable;
+        requestKind = MemoryKind::LinearWriteMappable;
     } else {
-        requestKind |= MemoryKind::DeviceLocal;
+        requestKind = MemoryKind::Linear;
     }
 
     int memoryTypeIndex =
diff --git a/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.cpp b/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.cpp
index 48e5473..0cf9204 100644
--- a/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.cpp
+++ b/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.cpp
@@ -54,7 +54,19 @@
 constexpr uint64_t kBuddyHeapsSize = 2 * kMaxSizeForSubAllocation;
 
 bool IsMemoryKindMappable(MemoryKind memoryKind) {
-    return memoryKind & (MemoryKind::ReadMappable | MemoryKind::WriteMappable);
+    switch (memoryKind) {
+        case MemoryKind::LinearReadMappable:
+        case MemoryKind::LinearWriteMappable:
+            return true;
+
+        case MemoryKind::LazilyAllocated:
+        case MemoryKind::Linear:
+        case MemoryKind::Opaque:
+            return false;
+
+        default:
+            DAWN_UNREACHABLE();
+    }
 }
 
 }  // anonymous namespace
@@ -280,12 +292,6 @@
             continue;
         }
 
-        // DEVICE_LOCAL_BIT must be set when MemoryKind::DeviceLocal is required.
-        if ((kind & MemoryKind::DeviceLocal) &&
-            (info.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) == 0) {
-            continue;
-        }
-
         // Found the first candidate memory type
         if (bestType == -1) {
             bestType = static_cast<int>(i);
@@ -326,7 +332,7 @@
             info.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
         bool bestHostCached =
             info.memoryTypes[bestType].propertyFlags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
-        if ((kind & MemoryKind::ReadMappable) && currentHostCached != bestHostCached) {
+        if (kind == MemoryKind::LinearReadMappable && currentHostCached != bestHostCached) {
             if (currentHostCached) {
                 bestType = static_cast<int>(i);
             }
diff --git a/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.h b/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.h
index 93df422..8703dc1 100644
--- a/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.h
+++ b/src/dawn/native/vulkan/ResourceMemoryAllocatorVk.h
@@ -43,14 +43,14 @@
 
 class Device;
 
-// Each bit of MemoryKind represents a kind of memory that influence the result of the allocation.
-// For example, to take into account mappability and Vulkan's bufferImageGranularity.
-enum class MemoryKind : uint8_t {
-    LazilyAllocated = 1,
-    Linear = 2,
-    DeviceLocal = 4,
-    ReadMappable = 8,
-    WriteMappable = 16,
+// Various kinds of memory that influence the result of the allocation. For example, to take
+// into account mappability and Vulkan's bufferImageGranularity.
+enum class MemoryKind {
+    LazilyAllocated,
+    Linear,
+    LinearReadMappable,
+    LinearWriteMappable,
+    Opaque,
 };
 
 class ResourceMemoryAllocator {
@@ -80,12 +80,4 @@
 
 }  // namespace dawn::native::vulkan
 
-namespace wgpu {
-template <>
-struct IsWGPUBitmask<dawn::native::vulkan::MemoryKind> {
-    static constexpr bool enable = true;
-};
-
-}  // namespace wgpu
-
 #endif  // SRC_DAWN_NATIVE_VULKAN_RESOURCEMEMORYALLOCATORVK_H_
diff --git a/src/dawn/native/vulkan/SharedTextureMemoryVk.cpp b/src/dawn/native/vulkan/SharedTextureMemoryVk.cpp
index 67e2887..4bf68bd 100644
--- a/src/dawn/native/vulkan/SharedTextureMemoryVk.cpp
+++ b/src/dawn/native/vulkan/SharedTextureMemoryVk.cpp
@@ -439,7 +439,7 @@
     // import's constraint.
     memoryRequirements.memoryTypeBits &= fdProperties.memoryTypeBits;
     int memoryTypeIndex = device->GetResourceMemoryAllocator()->FindBestTypeIndex(
-        memoryRequirements, MemoryKind::DeviceLocal);
+        memoryRequirements, MemoryKind::Opaque);
     DAWN_INVALID_IF(memoryTypeIndex == -1, "Unable to find an appropriate memory type for import.");
 
     SystemHandle memoryFD;
@@ -669,7 +669,7 @@
         VkMemoryRequirements memoryRequirements;
         memoryRequirements.memoryTypeBits = bufferProperties.memoryTypeBits;
         int memoryTypeIndex = device->GetResourceMemoryAllocator()->FindBestTypeIndex(
-            memoryRequirements, MemoryKind::DeviceLocal);
+            memoryRequirements, MemoryKind::Opaque);
         DAWN_INVALID_IF(memoryTypeIndex == -1,
                         "Unable to find an appropriate memory type for import.");
 
diff --git a/src/dawn/native/vulkan/TextureVk.cpp b/src/dawn/native/vulkan/TextureVk.cpp
index 9861608..2cabce5 100644
--- a/src/dawn/native/vulkan/TextureVk.cpp
+++ b/src/dawn/native/vulkan/TextureVk.cpp
@@ -1382,7 +1382,7 @@
         (GetInternalUsage() & (wgpu::TextureUsage::CopyDst | wgpu::TextureUsage::RenderAttachment));
     auto memoryKind = (GetInternalUsage() & wgpu::TextureUsage::TransientAttachment)
                           ? MemoryKind::LazilyAllocated
-                          : MemoryKind::DeviceLocal;
+                          : MemoryKind::Opaque;
     DAWN_TRY_ASSIGN(mMemoryAllocation, device->GetResourceMemoryAllocator()->Allocate(
                                            requirements, memoryKind, forceDisableSubAllocation));
 
diff --git a/src/dawn/native/vulkan/external_memory/MemoryServiceImplementationDmaBuf.cpp b/src/dawn/native/vulkan/external_memory/MemoryServiceImplementationDmaBuf.cpp
index d02ebe3..9178027 100644
--- a/src/dawn/native/vulkan/external_memory/MemoryServiceImplementationDmaBuf.cpp
+++ b/src/dawn/native/vulkan/external_memory/MemoryServiceImplementationDmaBuf.cpp
@@ -264,7 +264,7 @@
         // import's constraint.
         memoryRequirements.memoryTypeBits &= fdProperties.memoryTypeBits;
         int memoryTypeIndex = mDevice->GetResourceMemoryAllocator()->FindBestTypeIndex(
-            memoryRequirements, MemoryKind::DeviceLocal);
+            memoryRequirements, MemoryKind::Opaque);
         DAWN_INVALID_IF(memoryTypeIndex == -1,
                         "Unable to find an appropriate memory type for import.");
 
diff --git a/src/dawn/tests/white_box/SharedTextureMemoryTests_opaquefd.cpp b/src/dawn/tests/white_box/SharedTextureMemoryTests_opaquefd.cpp
index 71d313a..407057c 100644
--- a/src/dawn/tests/white_box/SharedTextureMemoryTests_opaquefd.cpp
+++ b/src/dawn/tests/white_box/SharedTextureMemoryTests_opaquefd.cpp
@@ -84,7 +84,7 @@
     deviceVk->fn.GetImageMemoryRequirements(deviceVk->GetVkDevice(), vkImage, &requirements);
 
     int bestType = deviceVk->GetResourceMemoryAllocator()->FindBestTypeIndex(
-        requirements, native::vulkan::MemoryKind::DeviceLocal);
+        requirements, native::vulkan::MemoryKind::Opaque);
     EXPECT_GE(bestType, 0);
 
     VkMemoryDedicatedAllocateInfo dedicatedInfo;
diff --git a/src/dawn/tests/white_box/VulkanImageWrappingTests_OpaqueFD.cpp b/src/dawn/tests/white_box/VulkanImageWrappingTests_OpaqueFD.cpp
index 97042cc..cd16976 100644
--- a/src/dawn/tests/white_box/VulkanImageWrappingTests_OpaqueFD.cpp
+++ b/src/dawn/tests/white_box/VulkanImageWrappingTests_OpaqueFD.cpp
@@ -230,7 +230,7 @@
         deviceVk->fn.GetImageMemoryRequirements(deviceVk->GetVkDevice(), handle, &requirements);
 
         int bestType = deviceVk->GetResourceMemoryAllocator()->FindBestTypeIndex(
-            requirements, MemoryKind::DeviceLocal);
+            requirements, MemoryKind::Opaque);
 
         VkMemoryAllocateInfo allocateInfo;
         allocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;