diff options
| author | Stenzek <stenzek@gmail.com> | 2017-11-21 18:54:11 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2017-11-22 01:52:18 +1000 |
| commit | efb97598629b96378edd783af82936185d8a99ce (patch) | |
| tree | 6be0e38fd495292ee5f5d63471732164254cccac /Source/Core/VideoCommon/UberShaderVertex.cpp | |
| parent | 18c1bf19cac3b4299c55db35117f1383a5c80318 (diff) | |
LightingShaderGen: Always calculate lighting for both color channels
Cel-damage uses the color from the lighting stage of the vertex pipeline
as texture coordinates, but sets numColorChans to zero.
We now calculate the colors in all cases, but override the color before
writing it from the vertex shader if numColorChans is set to a lower value.
Diffstat (limited to 'Source/Core/VideoCommon/UberShaderVertex.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/UberShaderVertex.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/UberShaderVertex.cpp b/Source/Core/VideoCommon/UberShaderVertex.cpp index ebc9c80f0e..bf24f6afda 100644 --- a/Source/Core/VideoCommon/UberShaderVertex.cpp +++ b/Source/Core/VideoCommon/UberShaderVertex.cpp @@ -171,6 +171,19 @@ ShaderCode GenVertexShader(APIType ApiType, const ShaderHostConfig& host_config, if (numTexgen > 0) GenVertexShaderTexGens(ApiType, numTexgen, out); + out.Write("if (xfmem_numColorChans == 0u) {\n"); + out.Write(" if ((components & %uu) != 0u)\n", VB_HAS_COL0); + out.Write(" o.colors_0 = rawcolor0;\n"); + out.Write(" else\n"); + out.Write(" o.colors_1 = float4(1.0, 1.0, 1.0, 1.0);\n"); + out.Write("}\n"); + out.Write("if (xfmem_numColorChans < 2u) {\n"); + out.Write(" if ((components & %uu) != 0u)\n", VB_HAS_COL1); + out.Write(" o.colors_0 = rawcolor1;\n"); + out.Write(" else\n"); + out.Write(" o.colors_1 = float4(1.0, 1.0, 1.0, 1.0);\n"); + out.Write("}\n"); + // clipPos/w needs to be done in pixel shader, not here out.Write("o.clipPos = o.pos;\n"); |
