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>(