|
@@ -485,7 +485,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
|
|
|
loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
|
|
loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (extensions.extended_dynamic_state2 && (is_radv || is_qualcomm)) {
|
|
|
|
|
|
|
+ if (extensions.extended_dynamic_state2 && is_radv) {
|
|
|
const u32 version = (properties.properties.driverVersion << 3) >> 3;
|
|
const u32 version = (properties.properties.driverVersion << 3) >> 3;
|
|
|
if (version < VK_MAKE_API_VERSION(0, 22, 3, 1)) {
|
|
if (version < VK_MAKE_API_VERSION(0, 22, 3, 1)) {
|
|
|
LOG_WARNING(
|
|
LOG_WARNING(
|
|
@@ -498,6 +498,19 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
|
|
|
loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
|
|
loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ if (extensions.extended_dynamic_state2 && is_qualcomm) {
|
|
|
|
|
+ const u32 version = (properties.properties.driverVersion << 3) >> 3;
|
|
|
|
|
+ if (version >= VK_MAKE_API_VERSION(0, 0, 676, 0)) {
|
|
|
|
|
+ // Qualcomm Adreno 7xx drivers do not properly support extended_dynamic_state2.
|
|
|
|
|
+ LOG_WARNING(Render_Vulkan,
|
|
|
|
|
+ "Qualcomm Adreno 7xx drivers have broken VK_EXT_extended_dynamic_state2");
|
|
|
|
|
+ features.extended_dynamic_state2.extendedDynamicState2 = false;
|
|
|
|
|
+ features.extended_dynamic_state2.extendedDynamicState2LogicOp = false;
|
|
|
|
|
+ features.extended_dynamic_state2.extendedDynamicState2PatchControlPoints = false;
|
|
|
|
|
+ extensions.extended_dynamic_state2 = false;
|
|
|
|
|
+ loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
if (extensions.extended_dynamic_state3 && is_radv) {
|
|
if (extensions.extended_dynamic_state3 && is_radv) {
|
|
|
LOG_WARNING(Render_Vulkan, "RADV has broken extendedDynamicState3ColorBlendEquation");
|
|
LOG_WARNING(Render_Vulkan, "RADV has broken extendedDynamicState3ColorBlendEquation");
|
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false;
|
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false;
|
|
@@ -512,8 +525,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
|
|
|
dynamic_state3_enables = false;
|
|
dynamic_state3_enables = false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (extensions.vertex_input_dynamic_state && (is_radv || is_qualcomm)) {
|
|
|
|
|
- // Qualcomm S8gen2 drivers do not properly support vertex_input_dynamic_state.
|
|
|
|
|
|
|
+ if (extensions.vertex_input_dynamic_state && is_radv) {
|
|
|
// TODO(ameerj): Blacklist only offending driver versions
|
|
// TODO(ameerj): Blacklist only offending driver versions
|
|
|
// TODO(ameerj): Confirm if RDNA1 is affected
|
|
// TODO(ameerj): Confirm if RDNA1 is affected
|
|
|
const bool is_rdna2 =
|
|
const bool is_rdna2 =
|
|
@@ -526,6 +538,18 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
|
|
|
loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
|
|
loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ if (extensions.vertex_input_dynamic_state && is_qualcomm) {
|
|
|
|
|
+ const u32 version = (properties.properties.driverVersion << 3) >> 3;
|
|
|
|
|
+ if (version >= VK_MAKE_API_VERSION(0, 0, 676, 0)) {
|
|
|
|
|
+ // Qualcomm Adreno 7xx drivers do not properly support vertex_input_dynamic_state.
|
|
|
|
|
+ LOG_WARNING(
|
|
|
|
|
+ Render_Vulkan,
|
|
|
|
|
+ "Qualcomm Adreno 7xx drivers have broken VK_EXT_vertex_input_dynamic_state");
|
|
|
|
|
+ features.vertex_input_dynamic_state.vertexInputDynamicState = false;
|
|
|
|
|
+ extensions.vertex_input_dynamic_state = false;
|
|
|
|
|
+ loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
sets_per_pool = 64;
|
|
sets_per_pool = 64;
|
|
|
if (extensions.extended_dynamic_state3 && is_amd_driver &&
|
|
if (extensions.extended_dynamic_state3 && is_amd_driver &&
|