From b969282b72f1e5267cf4e9af4e6612cb948b2bff Mon Sep 17 00:00:00 2001 From: takayhan-AMD <123373764+takayhan-AMD@users.noreply.github.com> Date: Sat, 12 Aug 2023 11:16:25 +0200 Subject: [PATCH] Remove out-dated hack of AMD driver issue WRT dual-source blending output index. --- Source/Core/VideoCommon/DriverDetails.cpp | 2 -- Source/Core/VideoCommon/DriverDetails.h | 8 -------- Source/Core/VideoCommon/PixelShaderGen.cpp | 11 ++--------- Source/Core/VideoCommon/UberShaderPixel.cpp | 11 ++--------- 4 files changed, 4 insertions(+), 28 deletions(-) diff --git a/Source/Core/VideoCommon/DriverDetails.cpp b/Source/Core/VideoCommon/DriverDetails.cpp index ffd5fa48d7..e217c9d530 100644 --- a/Source/Core/VideoCommon/DriverDetails.cpp +++ b/Source/Core/VideoCommon/DriverDetails.cpp @@ -90,8 +90,6 @@ constexpr BugInfo m_known_bugs[] = { -1.0, true}, {API_OPENGL, OS_ALL, VENDOR_MESA, DRIVER_I965, Family::UNKNOWN, BUG_BROKEN_CLIP_DISTANCE, -1.0, -1.0, true}, - {API_VULKAN, OS_WINDOWS, VENDOR_ATI, DRIVER_ATI, Family::UNKNOWN, - BUG_BROKEN_FRAGMENT_SHADER_INDEX_DECORATION, -1.0, -1.0, true}, {API_OPENGL, OS_WINDOWS, VENDOR_ATI, DRIVER_ATI, Family::UNKNOWN, BUG_BROKEN_DUAL_SOURCE_BLENDING, -1.0, -1.0, true}, {API_OPENGL, OS_OSX, VENDOR_INTEL, DRIVER_INTEL, Family::UNKNOWN, diff --git a/Source/Core/VideoCommon/DriverDetails.h b/Source/Core/VideoCommon/DriverDetails.h index 3e59e576c6..bc5daa8c31 100644 --- a/Source/Core/VideoCommon/DriverDetails.h +++ b/Source/Core/VideoCommon/DriverDetails.h @@ -224,14 +224,6 @@ enum Bug // the gl_ClipDistance inputs from the vertex shader. BUG_BROKEN_CLIP_DISTANCE, - // Bug: Dual-source outputs from fragment shaders are broken on AMD Vulkan drivers - // Started Version: -1 - // Ended Version: -1 - // Fragment shaders that specify dual-source outputs, via layout(location = 0, index = ...) cause - // the driver to fail to create graphics pipelines. The workaround for this is to specify the - // index as a MRT location instead, or omit the binding completely. - BUG_BROKEN_FRAGMENT_SHADER_INDEX_DECORATION, - // Bug: Dual-source outputs from fragment shaders are broken on some drivers. // Started Version: -1 // Ended Version: -1 diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index 57b2113bc3..0b96e49f4a 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -837,21 +837,14 @@ ShaderCode GeneratePixelShaderCode(APIType api_type, const ShaderHostConfig& hos else #endif { - bool has_broken_decoration = - DriverDetails::HasBug(DriverDetails::BUG_BROKEN_FRAGMENT_SHADER_INDEX_DECORATION); - - out.Write("{} {} {} {};\n", - has_broken_decoration ? "FRAGMENT_OUTPUT_LOCATION(0)" : - "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 0)", + out.Write("{} {} {} {};\n", "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 0)", use_framebuffer_fetch ? "FRAGMENT_INOUT" : "out", uid_data->uint_output ? "uvec4" : "vec4", use_framebuffer_fetch ? "real_ocol0" : "ocol0"); if (!uid_data->no_dual_src) { - out.Write("{} out {} ocol1;\n", - has_broken_decoration ? "FRAGMENT_OUTPUT_LOCATION(1)" : - "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 1)", + out.Write("{} out {} ocol1;\n", "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 1)", uid_data->uint_output ? "uvec4" : "vec4"); } } diff --git a/Source/Core/VideoCommon/UberShaderPixel.cpp b/Source/Core/VideoCommon/UberShaderPixel.cpp index 0bf4b3072c..f54e42bf60 100644 --- a/Source/Core/VideoCommon/UberShaderPixel.cpp +++ b/Source/Core/VideoCommon/UberShaderPixel.cpp @@ -106,21 +106,14 @@ ShaderCode GenPixelShader(APIType api_type, const ShaderHostConfig& host_config, else #endif { - bool has_broken_decoration = - DriverDetails::HasBug(DriverDetails::BUG_BROKEN_FRAGMENT_SHADER_INDEX_DECORATION); - - out.Write("{} {} {} {};\n", - has_broken_decoration ? "FRAGMENT_OUTPUT_LOCATION(0)" : - "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 0)", + out.Write("{} {} {} {};\n", "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 0)", use_framebuffer_fetch ? "FRAGMENT_INOUT" : "out", uid_data->uint_output ? "uvec4" : "vec4", use_framebuffer_fetch ? "real_ocol0" : "ocol0"); if (use_dual_source) { - out.Write("{} out {} ocol1;\n", - has_broken_decoration ? "FRAGMENT_OUTPUT_LOCATION(1)" : - "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 1)", + out.Write("{} out {} ocol1;\n", "FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 1)", uid_data->uint_output ? "uvec4" : "vec4"); } }