diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 70436cf1c..3ec6058a8 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -485,7 +485,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 485 | loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); | 485 | loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); |
| 486 | } | 486 | } |
| 487 | } | 487 | } |
| 488 | if (extensions.extended_dynamic_state2 && (is_radv || is_qualcomm)) { | 488 | if (extensions.extended_dynamic_state2 && is_radv) { |
| 489 | const u32 version = (properties.properties.driverVersion << 3) >> 3; | 489 | const u32 version = (properties.properties.driverVersion << 3) >> 3; |
| 490 | if (version < VK_MAKE_API_VERSION(0, 22, 3, 1)) { | 490 | if (version < VK_MAKE_API_VERSION(0, 22, 3, 1)) { |
| 491 | LOG_WARNING( | 491 | LOG_WARNING( |
| @@ -498,6 +498,15 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 498 | loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); | 498 | loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); |
| 499 | } | 499 | } |
| 500 | } | 500 | } |
| 501 | if (extensions.extended_dynamic_state2 && is_s8gen2) { | ||
| 502 | // Qualcomm S8gen2 drivers do not properly support extended_dynamic_state2. | ||
| 503 | LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken VK_EXT_extended_dynamic_state2"); | ||
| 504 | features.extended_dynamic_state2.extendedDynamicState2 = false; | ||
| 505 | features.extended_dynamic_state2.extendedDynamicState2LogicOp = false; | ||
| 506 | features.extended_dynamic_state2.extendedDynamicState2PatchControlPoints = false; | ||
| 507 | extensions.extended_dynamic_state2 = false; | ||
| 508 | loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); | ||
| 509 | } | ||
| 501 | if (extensions.extended_dynamic_state3 && is_radv) { | 510 | if (extensions.extended_dynamic_state3 && is_radv) { |
| 502 | LOG_WARNING(Render_Vulkan, "RADV has broken extendedDynamicState3ColorBlendEquation"); | 511 | LOG_WARNING(Render_Vulkan, "RADV has broken extendedDynamicState3ColorBlendEquation"); |
| 503 | features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; | 512 | features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; |
| @@ -512,8 +521,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 512 | dynamic_state3_enables = false; | 521 | dynamic_state3_enables = false; |
| 513 | } | 522 | } |
| 514 | } | 523 | } |
| 515 | if (extensions.vertex_input_dynamic_state && (is_radv || is_qualcomm)) { | 524 | if (extensions.vertex_input_dynamic_state && is_radv) { |
| 516 | // Qualcomm S8gen2 drivers do not properly support vertex_input_dynamic_state. | ||
| 517 | // TODO(ameerj): Blacklist only offending driver versions | 525 | // TODO(ameerj): Blacklist only offending driver versions |
| 518 | // TODO(ameerj): Confirm if RDNA1 is affected | 526 | // TODO(ameerj): Confirm if RDNA1 is affected |
| 519 | const bool is_rdna2 = | 527 | const bool is_rdna2 = |
| @@ -526,6 +534,14 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 526 | loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); | 534 | loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); |
| 527 | } | 535 | } |
| 528 | } | 536 | } |
| 537 | if (extensions.vertex_input_dynamic_state && is_s8gen2) { | ||
| 538 | // Qualcomm S8gen2 drivers do not properly support vertex_input_dynamic_state. | ||
| 539 | LOG_WARNING(Render_Vulkan, | ||
| 540 | "Qualcomm drivers have broken VK_EXT_vertex_input_dynamic_state"); | ||
| 541 | features.vertex_input_dynamic_state.vertexInputDynamicState = false; | ||
| 542 | extensions.vertex_input_dynamic_state = false; | ||
| 543 | loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); | ||
| 544 | } | ||
| 529 | 545 | ||
| 530 | sets_per_pool = 64; | 546 | sets_per_pool = 64; |
| 531 | if (is_amd_driver) { | 547 | if (is_amd_driver) { |