Vulkan: Enable robust buffer access if validation is on

Bug: dawn:480
Change-Id: Id145fab2fe24b70a063c3cc1f75f0a565635abf8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/24182
Commit-Queue: Idan Raiter <idanr@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_native/Device.cpp b/src/dawn_native/Device.cpp
index adc75fc..79c441e 100644
--- a/src/dawn_native/Device.cpp
+++ b/src/dawn_native/Device.cpp
@@ -832,6 +832,10 @@
         return !IsToggleEnabled(Toggle::SkipValidation);
     }
 
+    bool DeviceBase::IsRobustnessEnabled() const {
+        return !IsToggleEnabled(Toggle::DisableRobustness);
+    }
+
     size_t DeviceBase::GetLazyClearCountForTesting() {
         return mLazyClearCountForTesting;
     }
diff --git a/src/dawn_native/Device.h b/src/dawn_native/Device.h
index a513796..bcea26f 100644
--- a/src/dawn_native/Device.h
+++ b/src/dawn_native/Device.h
@@ -216,6 +216,7 @@
         bool IsExtensionEnabled(Extension extension) const;
         bool IsToggleEnabled(Toggle toggle) const;
         bool IsValidationEnabled() const;
+        bool IsRobustnessEnabled() const;
         size_t GetLazyClearCountForTesting();
         void IncrementLazyClearCountForTesting();
         size_t GetDeprecationWarningCountForTesting();
diff --git a/src/dawn_native/Toggles.cpp b/src/dawn_native/Toggles.cpp
index b4ec0db..9eb526a 100644
--- a/src/dawn_native/Toggles.cpp
+++ b/src/dawn_native/Toggles.cpp
@@ -131,6 +131,8 @@
             {Toggle::UseDXC,
              {"use_dxc", "Use DXC instead of FXC for compiling HLSL",
               "https://crbug.com/dawn/402"}},
+            {Toggle::DisableRobustness,
+             {"disable_robustness", "Disable robust buffer access", "https://crbug.com/dawn/480"}},
         }};
 
     }  // anonymous namespace
diff --git a/src/dawn_native/Toggles.h b/src/dawn_native/Toggles.h
index 18a26a9..1e7e3e3 100644
--- a/src/dawn_native/Toggles.h
+++ b/src/dawn_native/Toggles.h
@@ -42,6 +42,7 @@
         DisableBaseInstance,
         UseD3D12SmallShaderVisibleHeapForTesting,
         UseDXC,
+        DisableRobustness,
 
         EnumCount,
         InvalidEnum = EnumCount,
diff --git a/src/dawn_native/vulkan/DeviceVk.cpp b/src/dawn_native/vulkan/DeviceVk.cpp
index 921dd73..2415b49 100644
--- a/src/dawn_native/vulkan/DeviceVk.cpp
+++ b/src/dawn_native/vulkan/DeviceVk.cpp
@@ -299,6 +299,10 @@
         // Always require fragmentStoresAndAtomics because it is required by end2end tests.
         usedKnobs.features.fragmentStoresAndAtomics = VK_TRUE;
 
+        if (IsRobustnessEnabled()) {
+            usedKnobs.features.robustBufferAccess = VK_TRUE;
+        }
+
         if (mDeviceInfo.HasExt(DeviceExt::SubgroupSizeControl)) {
             ASSERT(usedKnobs.HasExt(DeviceExt::SubgroupSizeControl));