From 829fc8f0adeaf82d78b695208b24015456d8e52b Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 28 Sep 2016 22:31:39 +0200 Subject: PixelShaderGen: Drop dstAlphaMode constant in shader generation. It is already stored within the UID. --- Source/Core/VideoCommon/PixelShaderGen.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'Source/Core/VideoCommon/PixelShaderGen.cpp') diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index e4227e8280..ae3a52ecf3 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -342,11 +342,10 @@ static void WriteTevRegular(ShaderCode& out, const char* components, int bias, i static void SampleTexture(ShaderCode& out, const char* texcoords, const char* texswap, int texmap, bool stereo, APIType ApiType); static void WriteAlphaTest(ShaderCode& out, const pixel_shader_uid_data* uid_data, APIType ApiType, - DSTALPHA_MODE dstAlphaMode, bool per_pixel_depth); + bool per_pixel_depth); static void WriteFog(ShaderCode& out, const pixel_shader_uid_data* uid_data); -ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, APIType ApiType, - const pixel_shader_uid_data* uid_data) +ShaderCode GeneratePixelShaderCode(APIType ApiType, const pixel_shader_uid_data* uid_data) { ShaderCode out; @@ -515,7 +514,7 @@ ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, APIType ApiType, if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan) { - if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + if (uid_data->dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) { if (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_FRAGMENT_SHADER_INDEX_DECORATION)) { @@ -587,8 +586,9 @@ ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, APIType ApiType, { out.Write("void main(\n"); out.Write(" out float4 ocol0 : SV_Target0,%s%s\n in float4 rawpos : SV_Position,\n", - dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : SV_Target1," : - "", + uid_data->dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? + "\n out float4 ocol1 : SV_Target1," : + "", uid_data->per_pixel_depth ? "\n out float depth : SV_Depth," : ""); out.Write(" in %s float4 colors_0 : COLOR0,\n", @@ -716,7 +716,7 @@ ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, APIType ApiType, // testing result) if (uid_data->Pretest == AlphaTest::UNDETERMINED || (uid_data->Pretest == AlphaTest::FAIL && uid_data->late_ztest)) - WriteAlphaTest(out, uid_data, ApiType, dstAlphaMode, uid_data->per_pixel_depth); + WriteAlphaTest(out, uid_data, ApiType, uid_data->per_pixel_depth); if (uid_data->zfreeze) { @@ -787,7 +787,7 @@ ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, APIType ApiType, out.Write("\tdepth = float(zCoord) / 16777216.0;\n"); } - if (dstAlphaMode == DSTALPHA_ALPHA_PASS) + if (uid_data->dstAlphaMode == DSTALPHA_ALPHA_PASS) { out.SetConstantsUsed(C_ALPHA, C_ALPHA); out.Write("\tocol0 = float4(float3(prev.rgb), float(" I_ALPHA ".a)) / 255.0;\n"); @@ -799,7 +799,7 @@ ShaderCode GeneratePixelShaderCode(DSTALPHA_MODE dstAlphaMode, APIType ApiType, } // Use dual-source color blending to perform dst alpha in a single pass - if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + if (uid_data->dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) { out.SetConstantsUsed(C_ALPHA, C_ALPHA); @@ -1195,7 +1195,7 @@ static const char* tevAlphaFunclogicTable[] = { }; static void WriteAlphaTest(ShaderCode& out, const pixel_shader_uid_data* uid_data, APIType ApiType, - DSTALPHA_MODE dstAlphaMode, bool per_pixel_depth) + bool per_pixel_depth) { static const char* alphaRef[2] = {I_ALPHA ".r", I_ALPHA ".g"}; @@ -1222,7 +1222,7 @@ static void WriteAlphaTest(ShaderCode& out, const pixel_shader_uid_data* uid_dat out.Write(")) {\n"); out.Write("\t\tocol0 = float4(0.0, 0.0, 0.0, 0.0);\n"); - if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) + if (uid_data->dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND) out.Write("\t\tocol1 = float4(0.0, 0.0, 0.0, 0.0);\n"); if (per_pixel_depth) { -- cgit v1.2.3 From 083be0832fb590e131b0d6e6dbbe6ec1fba15fa9 Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 28 Sep 2016 23:31:10 +0200 Subject: LightingShader: Drop xfmem usage. Our shaders must only depend on the UID, not on any global state. --- Source/Core/VideoCommon/PixelShaderGen.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoCommon/PixelShaderGen.cpp') diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index ae3a52ecf3..2929e1cea9 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -207,7 +207,7 @@ PixelShaderUid GetPixelShaderUid(DSTALPHA_MODE dstAlphaMode) // The lighting shader only needs the two color bits of the 23bit component bit array. uid_data->components = (VertexLoaderManager::g_current_components & (VB_HAS_COL0 | VB_HAS_COL1)) >> VB_COL_SHIFT; - ; + uid_data->numColorChans = xfmem.numChan.numColorChans; GetLightingShaderUid(uid_data->lighting); } @@ -649,7 +649,7 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const pixel_shader_uid_data* // out.SetConstantsUsed(C_PLIGHTS, C_PLIGHTS+31); // TODO: Can be optimized further // out.SetConstantsUsed(C_PMATERIALS, C_PMATERIALS+3); GenerateLightingShaderCode(out, uid_data->lighting, uid_data->components << VB_COL_SHIFT, - "colors_", "col"); + uid_data->numColorChans, "colors_", "col"); } // HACK to handle cases where the tex gen is not enabled -- cgit v1.2.3 From 6d2827ff6b781e2d7cbb1b242e23a635ab708050 Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 28 Sep 2016 23:33:51 +0200 Subject: PixelShader: Drop redundant warning. This warning was raised both on UID generation and on shader generation. --- Source/Core/VideoCommon/PixelShaderGen.cpp | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'Source/Core/VideoCommon/PixelShaderGen.cpp') diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index 2929e1cea9..ce63752b86 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -500,17 +500,6 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const pixel_shader_uid_data* out.Write("[earlydepthstencil]\n"); } } - else if (bpmem.UseEarlyDepthTest() && - (uid_data->fast_depth_calc || bpmem.alpha_test.TestResult() == AlphaTest::UNDETERMINED)) - { - static bool warn_once = true; - if (warn_once) - WARN_LOG(VIDEO, "Early z test enabled but not possible to emulate with current " - "configuration. Make sure to enable fast depth calculations. If this message " - "still shows up your hardware isn't able to emulate the feature properly (a " - "GPU with D3D 11.0 / OGL 4.2 support is required)."); - warn_once = false; - } if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan) { -- cgit v1.2.3