From 3a8c2ae328a03c3d71209e371ea6f3b2fe5de251 Mon Sep 17 00:00:00 2001 From: lat9nq Date: Thu, 19 May 2022 20:05:37 -0400 Subject: vulkan_device: Workaround extension bug A bug occurs in yuzu when VK_KHR_workgroup_memory_explicit_layout is available but 16-bit integers are not supported in the host driver. Disable usage of the extension when this case arises. --- src/video_core/vulkan_common/vulkan_device.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/video_core/vulkan_common/vulkan_device.cpp') diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 7b2ca8046..58d0c6a93 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -566,7 +566,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR } VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR workgroup_layout; - if (khr_workgroup_memory_explicit_layout) { + if (khr_workgroup_memory_explicit_layout && is_shader_int16_supported) { workgroup_layout = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR, @@ -577,6 +577,11 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR .workgroupMemoryExplicitLayout16BitAccess = VK_TRUE, }; SetNext(next, workgroup_layout); + } else if (khr_workgroup_memory_explicit_layout) { + // TODO(lat9nq): Find a proper fix for this + LOG_WARNING(Render_Vulkan, "Disabling VK_KHR_workgroup_memory_explicit_layout due to a " + "yuzu bug when host driver does not support 16-bit integers"); + khr_workgroup_memory_explicit_layout = false; } VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR executable_properties; -- cgit v1.2.3