diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 8e60368406..b53fa84626 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -167,6 +167,7 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span program } const Shader::Stage stage{program.stage}; const bool has_geometry{key.unique_hashes[4] != 0 && !programs[4].is_geometry_passthrough}; + const bool has_tessellation{key.unique_hashes[3] != 0}; const bool gl_ndc{key.state.ndc_minus_one_to_one != 0}; const float point_size{std::bit_cast(key.state.point_size)}; switch (stage) { @@ -185,7 +186,9 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span program LOG_WARNING(Render_Vulkan, "XFB requested in pipeline key but device lacks VK_EXT_transform_feedback; ignoring XFB decorations"); } } - info.convert_depth_mode = gl_ndc; + if (!has_tessellation) { + info.convert_depth_mode = gl_ndc; + } } if (key.state.dynamic_vertex_input) { for (size_t index = 0; index < Maxwell::NumVertexAttributes; ++index) { @@ -224,6 +227,9 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span program ASSERT(false); return Shader::TessSpacing::Equal; }(); + if (!has_geometry) { + info.convert_depth_mode = gl_ndc; + } break; case Shader::Stage::Geometry: if (program.output_topology == Shader::OutputTopology::PointList) { diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index a68fce040f..7e36206fa8 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -517,12 +517,6 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME); LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken shader float controls."); RemoveExtension(extensions.shader_float_controls, VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME); - LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken shader atomic int64."); - RemoveExtensionFeature(extensions.shader_atomic_int64, features.shader_atomic_int64, - VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME); - features.shader_atomic_int64.shaderBufferInt64Atomics = false; - features.shader_atomic_int64.shaderSharedInt64Atomics = false; - features.features.shaderInt64 = false; LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken workgroup memory explicit layout."); RemoveExtensionFeature(extensions.workgroup_memory_explicit_layout, features.workgroup_memory_explicit_layout, @@ -531,6 +525,15 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR RemoveExtensionFeature(extensions.conservative_rasterization, features.conservative_rasterization, VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME); + LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken depth clip control."); + RemoveExtensionFeature(extensions.depth_clip_control, features.depth_clip_control, + VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME); + LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken shader atomic int64."); + RemoveExtensionFeature(extensions.shader_atomic_int64, features.shader_atomic_int64, + VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME); + features.shader_atomic_int64.shaderBufferInt64Atomics = false; + features.shader_atomic_int64.shaderSharedInt64Atomics = false; + features.features.shaderInt64 = false; #if defined(__ANDROID__) && defined(ARCHITECTURE_arm64) // BCn patching only safe on Android 9+ (API 28+). Older versions crash on driver load.