Merge "Enable robustBufferAccess with robustBufferAccess2" into main

GitOrigin-RevId: 2bea6db10244b1feac2494c9feec5946b0a4f3a1
Change-Id: Iaacb7ed50307a59e15f2d21030644e675bbc5a7e
diff --git a/host/vulkan/VkCommonOperations.cpp b/host/vulkan/VkCommonOperations.cpp
index 5b304fc..07c2510 100644
--- a/host/vulkan/VkCommonOperations.cpp
+++ b/host/vulkan/VkCommonOperations.cpp
@@ -1455,6 +1455,12 @@
         INFO("Enabling VK_EXT_robustness2 (%d %d %d).", r2features.robustBufferAccess2,
              r2features.robustImageAccess2, r2features.nullDescriptor);
         vk_append_struct(&deviceCiChain, &r2features);
+
+        // vkCreateDevice() - VUID-04000: If robustBufferAccess2 is enabled then robustBufferAccess
+        // must be enabled.
+        if (r2features.robustBufferAccess2) {
+            physicalDeviceFeatures.features.robustBufferAccess = VK_TRUE;
+        }
     }
 
     ivk->vkCreateDevice(emulation->mPhysicalDevice, &dCi, nullptr, &emulation->mDevice);
diff --git a/host/vulkan/VkDecoderGlobalState.cpp b/host/vulkan/VkDecoderGlobalState.cpp
index 69ce78a..f79a06d 100644
--- a/host/vulkan/VkDecoderGlobalState.cpp
+++ b/host/vulkan/VkDecoderGlobalState.cpp
@@ -1822,10 +1822,12 @@
             }
         }
 
-        VkPhysicalDeviceRobustness2FeaturesEXT modifiedRobustness2features;
         const auto r2features = m_vkEmulation->getRobustness2Features();
-        if (r2features && vk_find_struct<VkPhysicalDeviceRobustness2FeaturesEXT>(
-                                       &createInfoFiltered) == nullptr) {
+        const bool forceEnableRobustness =
+            r2features &&
+            (vk_find_struct<VkPhysicalDeviceRobustness2FeaturesEXT>(&createInfoFiltered) == nullptr);
+        VkPhysicalDeviceRobustness2FeaturesEXT modifiedRobustness2features;
+        if (forceEnableRobustness) {
             VERBOSE("Force-enabling VK_EXT_robustness2 on device creation.");
             updatedDeviceExtensions.push_back(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME);
             modifiedRobustness2features = *r2features;
@@ -1875,6 +1877,12 @@
             if (emulateTextureAstc) {
                 feature->textureCompressionASTC_LDR = VK_FALSE;
             }
+
+            // vkCreateDevice() - VUID-04000: If robustBufferAccess2 is enabled then
+            // robustBufferAccess must be enabled.
+            if (forceEnableRobustness && modifiedRobustness2features.robustBufferAccess2) {
+                feature->robustBufferAccess = VK_TRUE;
+            }
         }
 
         if (auto* ycbcrFeatures = vk_find_struct<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(