From c1d87db6fa12cdc95fa5c7775faa49ea24743729 Mon Sep 17 00:00:00 2001 From: OatmealDome Date: Thu, 6 Jan 2022 04:15:07 -0500 Subject: [PATCH] PixelShaderGen: Add support for non-dual source shader blending --- Source/Core/VideoCommon/PixelShaderGen.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index 837001c118..4d0996e814 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -2018,8 +2018,8 @@ static void WriteBlend(ShaderCode& out, const pixel_shader_uid_data* uid_data) "float3(1,1,1);", // ONE "initial_ocol0.rgb;", // DSTCLR "float3(1,1,1) - initial_ocol0.rgb;", // INVDSTCLR - "ocol1.aaa;", // SRCALPHA - "float3(1,1,1) - ocol1.aaa;", // INVSRCALPHA + "src_color.aaa;", // SRCALPHA + "float3(1,1,1) - src_color.aaa;", // INVSRCALPHA "initial_ocol0.aaa;", // DSTALPHA "float3(1,1,1) - initial_ocol0.aaa;", // INVDSTALPHA }; @@ -2028,8 +2028,8 @@ static void WriteBlend(ShaderCode& out, const pixel_shader_uid_data* uid_data) "1.0;", // ONE "initial_ocol0.a;", // DSTCLR "1.0 - initial_ocol0.a;", // INVDSTCLR - "ocol1.a;", // SRCALPHA - "1.0 - ocol1.a;", // INVSRCALPHA + "src_color.a;", // SRCALPHA + "1.0 - src_color.a;", // INVSRCALPHA "initial_ocol0.a;", // DSTALPHA "1.0 - initial_ocol0.a;", // INVDSTALPHA }; @@ -2038,8 +2038,8 @@ static void WriteBlend(ShaderCode& out, const pixel_shader_uid_data* uid_data) "float3(1,1,1);", // ONE "ocol0.rgb;", // SRCCLR "float3(1,1,1) - ocol0.rgb;", // INVSRCCLR - "ocol1.aaa;", // SRCALHA - "float3(1,1,1) - ocol1.aaa;", // INVSRCALPHA + "src_color.aaa;", // SRCALHA + "float3(1,1,1) - src_color.aaa;", // INVSRCALPHA "initial_ocol0.aaa;", // DSTALPHA "float3(1,1,1) - initial_ocol0.aaa;", // INVDSTALPHA }; @@ -2048,12 +2048,14 @@ static void WriteBlend(ShaderCode& out, const pixel_shader_uid_data* uid_data) "1.0;", // ONE "ocol0.a;", // SRCCLR "1.0 - ocol0.a;", // INVSRCCLR - "ocol1.a;", // SRCALPHA - "1.0 - ocol1.a;", // INVSRCALPHA + "src_color.a;", // SRCALPHA + "1.0 - src_color.a;", // INVSRCALPHA "initial_ocol0.a;", // DSTALPHA "1.0 - initial_ocol0.a;", // INVDSTALPHA }; - out.Write("\tfloat4 blend_src;\n"); + out.Write("\tfloat4 src_color = {};\n" + "\tfloat4 blend_src;", + uid_data->useDstAlpha ? "ocol1" : "ocol0"); out.Write("\tblend_src.rgb = {}\n", blend_src_factor[uid_data->blend_src_factor]); out.Write("\tblend_src.a = {}\n", blend_src_factor_alpha[uid_data->blend_src_factor_alpha]); out.Write("\tfloat4 blend_dst;\n");