Add structs for VK_KHR_vulkan_memory_model
While SwiftShader does not support this extension, it is core in Vulkan
1.2. So we must properly process the structures it adds.
Bug: b/176819536
Change-Id: Ib4e0334d9224581b2541f89b356e7bef5f138d30
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/51490
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Sean Risser <srisser@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Commit-Queue: Sean Risser <srisser@google.com>
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index 8a1b138..a342d6e 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -262,6 +262,14 @@
}
template<typename T>
+static void getPhysicalDeviceVulkanMemoryModelFeatures(T *features)
+{
+ features->vulkanMemoryModel = VK_FALSE;
+ features->vulkanMemoryModelDeviceScope = VK_FALSE;
+ features->vulkanMemoryModelAvailabilityVisibilityChains = VK_FALSE;
+}
+
+template<typename T>
static void getPhysicalDeviceVulkan12Features(T *features)
{
features->samplerMirrorClampToEdge = VK_FALSE;
@@ -284,9 +292,7 @@
features->bufferDeviceAddress = VK_FALSE;
features->bufferDeviceAddressCaptureReplay = VK_FALSE;
features->bufferDeviceAddressMultiDevice = VK_FALSE;
- features->vulkanMemoryModel = VK_FALSE;
- features->vulkanMemoryModelDeviceScope = VK_FALSE;
- features->vulkanMemoryModelAvailabilityVisibilityChains = VK_FALSE;
+ getPhysicalDeviceVulkanMemoryModelFeatures(features);
features->shaderOutputViewportIndex = VK_FALSE;
features->shaderOutputLayer = VK_FALSE;
features->subgroupBroadcastDynamicId = VK_TRUE;
@@ -357,6 +363,9 @@
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
getPhysicalDeviceUniformBufferStandardLayoutFeatures(reinterpret_cast<VkPhysicalDeviceUniformBufferStandardLayoutFeatures *>(curExtension));
break;
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
+ getPhysicalDeviceVulkanMemoryModelFeatures(reinterpret_cast<VkPhysicalDeviceVulkanMemoryModelFeatures *>(curExtension));
+ break;
default:
LOG_TRAP("curExtension->pNext->sType = %s", vk::Stringify(curExtension->sType).c_str());
break;