diff options
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 37 |
2 files changed, 25 insertions, 19 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index e0ab1eaac..07222e603 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -892,10 +892,6 @@ void RasterizerVulkan::UpdateDynamicStates() { | |||
| 892 | UpdateFrontFace(regs); | 892 | UpdateFrontFace(regs); |
| 893 | UpdateStencilOp(regs); | 893 | UpdateStencilOp(regs); |
| 894 | 894 | ||
| 895 | if (device.IsExtVertexInputDynamicStateSupported()) { | ||
| 896 | UpdateVertexInput(regs); | ||
| 897 | } | ||
| 898 | |||
| 899 | if (state_tracker.TouchStateEnable()) { | 895 | if (state_tracker.TouchStateEnable()) { |
| 900 | UpdateDepthBoundsTestEnable(regs); | 896 | UpdateDepthBoundsTestEnable(regs); |
| 901 | UpdateDepthTestEnable(regs); | 897 | UpdateDepthTestEnable(regs); |
| @@ -918,6 +914,9 @@ void RasterizerVulkan::UpdateDynamicStates() { | |||
| 918 | UpdateBlending(regs); | 914 | UpdateBlending(regs); |
| 919 | } | 915 | } |
| 920 | } | 916 | } |
| 917 | if (device.IsExtVertexInputDynamicStateSupported()) { | ||
| 918 | UpdateVertexInput(regs); | ||
| 919 | } | ||
| 921 | } | 920 | } |
| 922 | 921 | ||
| 923 | void RasterizerVulkan::HandleTransformFeedback() { | 922 | void RasterizerVulkan::HandleTransformFeedback() { |
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 188ceeed7..1fda0042d 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -519,10 +519,6 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 519 | LOG_WARNING(Render_Vulkan, "ARM drivers have broken VK_EXT_extended_dynamic_state"); | 519 | LOG_WARNING(Render_Vulkan, "ARM drivers have broken VK_EXT_extended_dynamic_state"); |
| 520 | RemoveExtensionFeature(extensions.extended_dynamic_state, features.extended_dynamic_state, | 520 | RemoveExtensionFeature(extensions.extended_dynamic_state, features.extended_dynamic_state, |
| 521 | VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); | 521 | VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); |
| 522 | |||
| 523 | LOG_WARNING(Render_Vulkan, "ARM drivers have broken VK_EXT_extended_dynamic_state2"); | ||
| 524 | RemoveExtensionFeature(extensions.extended_dynamic_state2, features.extended_dynamic_state2, | ||
| 525 | VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); | ||
| 526 | } | 522 | } |
| 527 | 523 | ||
| 528 | if (is_nvidia) { | 524 | if (is_nvidia) { |
| @@ -611,17 +607,12 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 611 | } | 607 | } |
| 612 | } | 608 | } |
| 613 | if (extensions.vertex_input_dynamic_state && is_qualcomm) { | 609 | if (extensions.vertex_input_dynamic_state && is_qualcomm) { |
| 614 | const u32 version = (properties.properties.driverVersion << 3) >> 3; | 610 | // Qualcomm drivers do not properly support vertex_input_dynamic_state. |
| 615 | if (version >= VK_MAKE_API_VERSION(0, 0, 676, 0) && | 611 | LOG_WARNING(Render_Vulkan, |
| 616 | version < VK_MAKE_API_VERSION(0, 0, 680, 0)) { | 612 | "Qualcomm drivers have broken VK_EXT_vertex_input_dynamic_state"); |
| 617 | // Qualcomm Adreno 7xx drivers do not properly support vertex_input_dynamic_state. | 613 | RemoveExtensionFeature(extensions.vertex_input_dynamic_state, |
| 618 | LOG_WARNING( | 614 | features.vertex_input_dynamic_state, |
| 619 | Render_Vulkan, | 615 | VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); |
| 620 | "Qualcomm Adreno 7xx drivers have broken VK_EXT_vertex_input_dynamic_state"); | ||
| 621 | RemoveExtensionFeature(extensions.vertex_input_dynamic_state, | ||
| 622 | features.vertex_input_dynamic_state, | ||
| 623 | VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); | ||
| 624 | } | ||
| 625 | } | 616 | } |
| 626 | 617 | ||
| 627 | sets_per_pool = 64; | 618 | sets_per_pool = 64; |
| @@ -704,6 +695,22 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||
| 704 | std::min(properties.properties.limits.maxVertexInputBindings, 16U); | 695 | std::min(properties.properties.limits.maxVertexInputBindings, 16U); |
| 705 | } | 696 | } |
| 706 | 697 | ||
| 698 | if (!extensions.extended_dynamic_state && extensions.extended_dynamic_state2) { | ||
| 699 | LOG_INFO(Render_Vulkan, | ||
| 700 | "Removing extendedDynamicState2 due to missing extendedDynamicState"); | ||
| 701 | RemoveExtensionFeature(extensions.extended_dynamic_state2, features.extended_dynamic_state2, | ||
| 702 | VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); | ||
| 703 | } | ||
| 704 | |||
| 705 | if (!extensions.extended_dynamic_state2 && extensions.extended_dynamic_state3) { | ||
| 706 | LOG_INFO(Render_Vulkan, | ||
| 707 | "Removing extendedDynamicState3 due to missing extendedDynamicState2"); | ||
| 708 | RemoveExtensionFeature(extensions.extended_dynamic_state3, features.extended_dynamic_state3, | ||
| 709 | VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME); | ||
| 710 | dynamic_state3_blending = false; | ||
| 711 | dynamic_state3_enables = false; | ||
| 712 | } | ||
| 713 | |||
| 707 | logical = vk::Device::Create(physical, queue_cis, ExtensionListForVulkan(loaded_extensions), | 714 | logical = vk::Device::Create(physical, queue_cis, ExtensionListForVulkan(loaded_extensions), |
| 708 | first_next, dld); | 715 | first_next, dld); |
| 709 | 716 | ||