@ -497,14 +497,14 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
if ( is_qualcomm | | is_turnip ) {
LOG_WARNING ( Render_Vulkan ,
" Qualcomm and Turnip drivers have broken VK_EXT_custom_border_color " ) ;
//RemoveExtensionFeature(extensions.custom_border_color, features.custom_border_color,
//VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME);
RemoveExtensionFeature ( extensions . custom_border_color , features . custom_border_color ,
VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME ) ;
}
if ( is_qualcomm ) {
LOG_WARNING ( Render_Vulkan ,
" Qualcomm drivers have a slow VK_KHR_push_descriptor implementation " ) ;
//RemoveExtension(extensions.push_descriptor, VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
RemoveExtension ( extensions . push_descriptor , VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME ) ;
LOG_WARNING ( Render_Vulkan ,
" Disabling shader float controls and 64-bit integer features on Qualcomm proprietary drivers " ) ;
@ -547,7 +547,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
} else if ( arch < = NvidiaArchitecture : : Arch_Volta ) {
if ( nv_major_version < 527 ) {
LOG_WARNING ( Render_Vulkan , " Volta and older have broken VK_KHR_push_descriptor " ) ;
//RemoveExtension(extensions.push_descriptor, VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
RemoveExtension ( extensions . push_descriptor , VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME ) ;
}
}
if ( nv_major_version > = 510 ) {
@ -561,9 +561,9 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
if ( version < VK_MAKE_API_VERSION ( 0 , 21 , 2 , 0 ) ) {
LOG_WARNING ( Render_Vulkan ,
" RADV versions older than 21.2 have broken VK_EXT_extended_dynamic_state " ) ;
//RemoveExtensionFeature(extensions.extended_dynamic_state,
//features.extended_dynamic_state,
//VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);
RemoveExtensionFeature ( extensions . extended_dynamic_state ,
features . extended_dynamic_state ,
VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME ) ;
}
}
if ( extensions . extended_dynamic_state2 & & is_radv ) {
@ -572,9 +572,9 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
LOG_WARNING (
Render_Vulkan ,
" RADV versions older than 22.3.1 have broken VK_EXT_extended_dynamic_state2 " ) ;
// RemoveExtensionFeature(extensions.extended_dynamic_state2,
// features.extended_dynamic_state2,
// VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
RemoveExtensionFeature ( extensions . extended_dynamic_state2 ,
features . extended_dynamic_state2 ,
VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME ) ;
}
}
if ( extensions . extended_dynamic_state2 & & is_qualcomm ) {
@ -584,23 +584,23 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
// 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 " ) ;
//RemoveExtensionFeature(extensions.extended_dynamic_state2,
//features.extended_dynamic_state2,
//VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);
RemoveExtensionFeature ( extensions . extended_dynamic_state2 ,
features . extended_dynamic_state2 ,
VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME ) ;
}
}
if ( extensions . extended_dynamic_state3 & & is_radv ) {
LOG_WARNING ( Render_Vulkan , " RADV has broken extendedDynamicState3ColorBlendEquation " ) ;
features . extended_dynamic_state3 . extendedDynamicState3ColorBlendEnable = true ;
features . extended_dynamic_state3 . extendedDynamicState3ColorBlendEquation = true ;
dynamic_state3_blending = tru e;
dynamic_state3_blending = fals e;
const u32 version = ( properties . properties . driverVersion < < 3 ) > > 3 ;
if ( version < VK_MAKE_API_VERSION ( 0 , 23 , 1 , 0 ) ) {
LOG_WARNING ( Render_Vulkan ,
" RADV versions older than 23.1.0 have broken depth clamp dynamic state " ) ;
features . extended_dynamic_state3 . extendedDynamicState3DepthClampEnable = true ;
dynamic_state3_enables = tru e;
dynamic_state3_enables = fals e;
}
}
if ( extensions . extended_dynamic_state3 & & ( is_amd_driver | | driver_id = = VK_DRIVER_ID_SAMSUNG_PROPRIETARY ) ) {
@ -609,7 +609,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
" AMD and Samsung drivers have broken extendedDynamicState3ColorBlendEquation " ) ;
features . extended_dynamic_state3 . extendedDynamicState3ColorBlendEnable = true ;
features . extended_dynamic_state3 . extendedDynamicState3ColorBlendEquation = true ;
dynamic_state3_blending = tru e;
dynamic_state3_blending = fals e;
}
if ( extensions . vertex_input_dynamic_state & & is_radv ) {
// TODO(ameerj): Blacklist only offending driver versions
@ -619,18 +619,18 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
if ( is_rdna2 ) {
LOG_WARNING ( Render_Vulkan ,
" RADV has broken VK_EXT_vertex_input_dynamic_state on RDNA2 hardware " ) ;
// RemoveExtensionFeature(extensions.vertex_input_dynamic_state,
// features.vertex_input_dynamic_state,
// VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
RemoveExtensionFeature ( extensions . vertex_input_dynamic_state ,
features . vertex_input_dynamic_state ,
VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME ) ;
}
}
if ( extensions . vertex_input_dynamic_state & & is_qualcomm ) {
// Qualcomm drivers do not properly support vertex_input_dynamic_state.
LOG_WARNING ( Render_Vulkan ,
" Qualcomm drivers have broken VK_EXT_vertex_input_dynamic_state " ) ;
//RemoveExtensionFeature(extensions.vertex_input_dynamic_state,
// features.vertex_input_dynamic_state,
// VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
RemoveExtensionFeature ( extensions . vertex_input_dynamic_state ,
features . vertex_input_dynamic_state ,
VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME ) ;
}
sets_per_pool = 64 ;
@ -664,9 +664,9 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
const u32 version = ( properties . properties . driverVersion < < 3 ) > > 3 ;
if ( version < VK_MAKE_API_VERSION ( 27 , 20 , 100 , 0 ) ) {
LOG_WARNING ( Render_Vulkan , " Intel has broken VK_EXT_vertex_input_dynamic_state " ) ;
//RemoveExtensionFeature(extensions.vertex_input_dynamic_state,
//features.vertex_input_dynamic_state,
//VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);
RemoveExtensionFeature ( extensions . vertex_input_dynamic_state ,
features . vertex_input_dynamic_state ,
VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME ) ;
}
}
if ( features . shader_float16_int8 . shaderFloat16 & & is_intel_windows ) {
@ -693,14 +693,14 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
// mesa/mesa/-/commit/ff91c5ca42bc80aa411cb3fd8f550aa6fdd16bdc
LOG_WARNING ( Render_Vulkan ,
" ANV drivers 22.3.0 to 23.1.0 have broken VK_KHR_push_descriptor " ) ;
//RemoveExtension(extensions.push_descriptor, VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
RemoveExtension ( extensions . push_descriptor , VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME ) ;
}
} else if ( extensions . push_descriptor & & is_nvidia ) {
const auto arch = GetNvidiaArch ( ) ;
if ( arch < = NvidiaArchitecture : : Arch_Pascal ) {
LOG_WARNING ( Render_Vulkan ,
" Pascal and older architectures have broken VK_KHR_push_descriptor " ) ;
//RemoveExtension(extensions.push_descriptor, VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
RemoveExtension ( extensions . push_descriptor , VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME ) ;
}
}
@ -730,8 +730,8 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
" Removing extendedDynamicState3 due to missing extendedDynamicState2 " ) ;
RemoveExtensionFeature ( extensions . extended_dynamic_state3 , features . extended_dynamic_state3 ,
VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME ) ;
dynamic_state3_blending = tru e;
dynamic_state3_enables = tru e;
dynamic_state3_blending = fals e;
dynamic_state3_enables = fals e;
}
// Mesa Intel drivers on UHD 620 have broken EDS causing extreme flickering - unknown if it affects other iGPUs
@ -743,25 +743,6 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
Settings : : values . dyna_state . SetValue ( 0 ) ;
}
if ( Settings : : values . dyna_state . GetValue ( ) = = 0 ) {
must_emulate_scaled_formats = true ;
LOG_INFO ( Render_Vulkan , " Dynamic state is disabled (dyna_state = 0), forcing scaled format emulation ON " ) ;
// Disable dynamic state 1-3 and all extensions
RemoveExtensionFeature ( extensions . custom_border_color , features . custom_border_color , VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME ) ;
RemoveExtensionFeature ( extensions . extended_dynamic_state , features . extended_dynamic_state , VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME ) ;
RemoveExtensionFeature ( extensions . extended_dynamic_state2 , features . extended_dynamic_state2 , VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME ) ;
RemoveExtensionFeature ( extensions . vertex_input_dynamic_state , features . vertex_input_dynamic_state , VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME ) ;
RemoveExtensionFeature ( extensions . extended_dynamic_state3 , features . extended_dynamic_state3 , VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME ) ;
dynamic_state3_blending = false ;
dynamic_state3_enables = false ;
LOG_INFO ( Render_Vulkan , " All dynamic state extensions and features have been disabled " ) ;
} else {
must_emulate_scaled_formats = false ;
LOG_INFO ( Render_Vulkan , " Dynamic state is enabled (dyna_state = 1-3), disabling scaled format emulation " ) ;
}
logical = vk : : Device : : Create ( physical , queue_cis , ExtensionListForVulkan ( loaded_extensions ) , first_next , dld ) ;
graphics_queue = logical . GetQueue ( graphics_family ) ;
@ -1226,7 +1207,7 @@ void Device::RemoveUnsuitableExtensions() {
RemoveExtensionFeatureIfUnsuitable ( extensions . depth_clip_control , features . depth_clip_control ,
VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME ) ;
/* */ // VK_EXT_extended_dynamic_state
// VK_EXT_extended_dynamic_state
extensions . extended_dynamic_state = features . extended_dynamic_state . extendedDynamicState ;
RemoveExtensionFeatureIfUnsuitable ( extensions . extended_dynamic_state ,
features . extended_dynamic_state ,