diff --git a/rpcs3/Emu/RSX/VK/vkutils/device.cpp b/rpcs3/Emu/RSX/VK/vkutils/device.cpp index aa326982f6..ca707a4381 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/device.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/device.cpp @@ -752,7 +752,16 @@ namespace vk device_fault_info.pNext = const_cast(device.pNext); device_fault_info.deviceFault = VK_TRUE; device_fault_info.deviceFaultVendorBinary = VK_FALSE; - device_fault_info.pNext = &device_fault_info; + device.pNext = &device_fault_info; + } + + VkPhysicalDeviceConditionalRenderingFeaturesEXT conditional_rendering_info{}; + if (pgpu->optional_features_support.conditional_rendering) + { + conditional_rendering_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT; + conditional_rendering_info.pNext = const_cast(device.pNext); + conditional_rendering_info.conditionalRendering = VK_TRUE; + device.pNext = &conditional_rendering_info; } if (auto error = vkCreateDevice(*pgpu, &device, nullptr, &dev)) diff --git a/rpcs3/Emu/RSX/VK/vkutils/shared.cpp b/rpcs3/Emu/RSX/VK/vkutils/shared.cpp index 16bc0066ae..b63bf89ec5 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/shared.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/shared.cpp @@ -29,37 +29,24 @@ namespace vk std::vector vendor_binary_data; std::string fault_description; -#ifdef _MSC_VER - __try + // Retrieve sizes + g_render_device->_vkGetDeviceFaultInfoEXT(*g_render_device, &fault_counts, nullptr); + + // Resize arrays and fill + address_info.resize(fault_counts.addressInfoCount); + vendor_info.resize(fault_counts.vendorInfoCount); + vendor_binary_data.resize(fault_counts.vendorBinarySize); + + VkDeviceFaultInfoEXT fault_info { -#endif - // Retrieve sizes - g_render_device->_vkGetDeviceFaultInfoEXT(*g_render_device, &fault_counts, nullptr); - - // Resize arrays and fill - address_info.resize(fault_counts.addressInfoCount); - vendor_info.resize(fault_counts.vendorInfoCount); - vendor_binary_data.resize(fault_counts.vendorBinarySize); - - VkDeviceFaultInfoEXT fault_info - { - .sType = VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT, - .pAddressInfos = address_info.data(), - .pVendorInfos = vendor_info.data(), - .pVendorBinaryData = vendor_binary_data.data() - }; - g_render_device->_vkGetDeviceFaultInfoEXT(*g_render_device, &fault_counts, &fault_info); - - fault_description = fault_info.description; -#ifdef _MSC_VER - } - __except (EXCEPTION_EXECUTE_HANDLER) - { - rsx_log.error("Driver crashed retrieving extended crash information. Are you running on an NVIDIA card?"); - return "Extended fault information is not available. The driver crashed when retrieving the details."; - } -#endif + .sType = VK_STRUCTURE_TYPE_DEVICE_FAULT_INFO_EXT, + .pAddressInfos = address_info.data(), + .pVendorInfos = vendor_info.data(), + .pVendorBinaryData = vendor_binary_data.data() + }; + g_render_device->_vkGetDeviceFaultInfoEXT(*g_render_device, &fault_counts, &fault_info); + fault_description = fault_info.description; std::string fault_message = fmt::format( "Device Fault Information:\n" "Fault Summary:\n"