Browse Source

[TEST] Depth clip bugs + tessellation

vk-experiments8
CamilleLaVey 2 weeks ago
parent
commit
c394eef32e
  1. 8
      src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
  2. 15
      src/video_core/vulkan_common/vulkan_device.cpp

8
src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

@ -167,6 +167,7 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span<const Shader::IR::Program> program
} }
const Shader::Stage stage{program.stage}; const Shader::Stage stage{program.stage};
const bool has_geometry{key.unique_hashes[4] != 0 && !programs[4].is_geometry_passthrough}; 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 bool gl_ndc{key.state.ndc_minus_one_to_one != 0};
const float point_size{std::bit_cast<float>(key.state.point_size)}; const float point_size{std::bit_cast<float>(key.state.point_size)};
switch (stage) { switch (stage) {
@ -185,7 +186,9 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span<const Shader::IR::Program> program
LOG_WARNING(Render_Vulkan, "XFB requested in pipeline key but device lacks VK_EXT_transform_feedback; ignoring XFB decorations"); 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) { if (key.state.dynamic_vertex_input) {
for (size_t index = 0; index < Maxwell::NumVertexAttributes; ++index) { for (size_t index = 0; index < Maxwell::NumVertexAttributes; ++index) {
@ -224,6 +227,9 @@ Shader::RuntimeInfo MakeRuntimeInfo(std::span<const Shader::IR::Program> program
ASSERT(false); ASSERT(false);
return Shader::TessSpacing::Equal; return Shader::TessSpacing::Equal;
}(); }();
if (!has_geometry) {
info.convert_depth_mode = gl_ndc;
}
break; break;
case Shader::Stage::Geometry: case Shader::Stage::Geometry:
if (program.output_topology == Shader::OutputTopology::PointList) { if (program.output_topology == Shader::OutputTopology::PointList) {

15
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); VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME);
LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken shader float controls."); LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken shader float controls.");
RemoveExtension(extensions.shader_float_controls, VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME); 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."); LOG_WARNING(Render_Vulkan, "Qualcomm drivers have broken workgroup memory explicit layout.");
RemoveExtensionFeature(extensions.workgroup_memory_explicit_layout, RemoveExtensionFeature(extensions.workgroup_memory_explicit_layout,
features.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, RemoveExtensionFeature(extensions.conservative_rasterization,
features.conservative_rasterization, features.conservative_rasterization,
VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME); 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) #if defined(__ANDROID__) && defined(ARCHITECTURE_arm64)
// BCn patching only safe on Android 9+ (API 28+). Older versions crash on driver load. // BCn patching only safe on Android 9+ (API 28+). Older versions crash on driver load.

Loading…
Cancel
Save