diff options
| author | JMC47 <JMC4789@gmail.com> | 2022-02-28 12:12:52 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-28 12:12:52 -0500 |
| commit | 56a98532e1901471f858751f4f1571069ec6690a (patch) | |
| tree | 24f44a311dd798e0eec02eabab1ee563fc9b6355 /Source/Core/VideoCommon/PixelShaderGen.cpp | |
| parent | aa0ac8399765f89b988a3507c0083c598675f6cf (diff) | |
| parent | 608799f1e454f8473e5709204adb544eac52ddca (diff) | |
Merge pull request #10488 from JosJuice/logic-ops-logic
PixelShaderGen: Check uid_data for use_shader_logic_op
Diffstat (limited to 'Source/Core/VideoCommon/PixelShaderGen.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/PixelShaderGen.cpp | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index ddb03f8e96..18834339f4 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -944,9 +944,9 @@ ShaderCode GeneratePixelShaderCode(APIType api_type, const ShaderHostConfig& hos (!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_DUAL_SOURCE_BLENDING) || uid_data->useDstAlpha); const bool use_shader_blend = - !use_dual_source && (uid_data->useDstAlpha && host_config.backend_shader_framebuffer_fetch); - const bool use_shader_logic_op = - !host_config.backend_logic_op && host_config.backend_shader_framebuffer_fetch; + !use_dual_source && uid_data->useDstAlpha && host_config.backend_shader_framebuffer_fetch; + const bool use_shader_logic_op = !host_config.backend_logic_op && uid_data->logic_op_enable && + host_config.backend_shader_framebuffer_fetch; if (api_type == APIType::OpenGL || api_type == APIType::Vulkan) { @@ -1949,30 +1949,27 @@ static void WriteFog(ShaderCode& out, const pixel_shader_uid_data* uid_data) static void WriteLogicOp(ShaderCode& out, const pixel_shader_uid_data* uid_data) { - if (uid_data->logic_op_enable) - { - static constexpr std::array<const char*, 16> logic_op_mode{ - "int4(0, 0, 0, 0)", // CLEAR - "prev & fb_value", // AND - "prev & ~fb_value", // AND_REVERSE - "prev", // COPY - "~prev & fb_value", // AND_INVERTED - "fb_value", // NOOP - "prev ^ fb_value", // XOR - "prev | fb_value", // OR - "~(prev | fb_value)", // NOR - "~(prev ^ fb_value)", // EQUIV - "~fb_value", // INVERT - "prev | ~fb_value", // OR_REVERSE - "~prev", // COPY_INVERTED - "~prev | fb_value", // OR_INVERTED - "~(prev & fb_value)", // NAND - "int4(255, 255, 255, 255)", // SET - }; + static constexpr std::array<const char*, 16> logic_op_mode{ + "int4(0, 0, 0, 0)", // CLEAR + "prev & fb_value", // AND + "prev & ~fb_value", // AND_REVERSE + "prev", // COPY + "~prev & fb_value", // AND_INVERTED + "fb_value", // NOOP + "prev ^ fb_value", // XOR + "prev | fb_value", // OR + "~(prev | fb_value)", // NOR + "~(prev ^ fb_value)", // EQUIV + "~fb_value", // INVERT + "prev | ~fb_value", // OR_REVERSE + "~prev", // COPY_INVERTED + "~prev | fb_value", // OR_INVERTED + "~(prev & fb_value)", // NAND + "int4(255, 255, 255, 255)", // SET + }; - out.Write("\tint4 fb_value = iround(initial_ocol0 * 255.0);\n"); - out.Write("\tprev = {};\n", logic_op_mode[uid_data->logic_op_mode]); - } + out.Write("\tint4 fb_value = iround(initial_ocol0 * 255.0);\n"); + out.Write("\tprev = {};\n", logic_op_mode[uid_data->logic_op_mode]); } static void WriteColor(ShaderCode& out, APIType api_type, const pixel_shader_uid_data* uid_data, |
