Merge pull request #10012 from Pokechu22/thps4-green-sky
UberShaderVertex: Fix Tony Hawk Pro Skater 4
This commit is contained in:
commit
05f86b9f5b
|
@ -215,20 +215,36 @@ ShaderCode GenVertexShader(APIType api_type, const ShaderHostConfig& host_config
|
|||
if (num_texgen > 0)
|
||||
GenVertexShaderTexGens(api_type, num_texgen, out);
|
||||
|
||||
out.Write("// The number of colors available to TEV is determined by numColorChans.\n"
|
||||
"// We have to provide the fields to match the interface, so set to zero\n"
|
||||
"// if it's not enabled.\n");
|
||||
|
||||
const char* color_prefix;
|
||||
if (per_pixel_lighting)
|
||||
{
|
||||
out.Write("\n// Since per-pixel lighting is enabled, the vertex colors are passed through\n"
|
||||
"// unmodified so we can evaluate the lighting in the pixel shader.\n");
|
||||
color_prefix = "vertex_color_";
|
||||
}
|
||||
else
|
||||
{
|
||||
color_prefix = "rawcolor";
|
||||
}
|
||||
|
||||
out.Write("if (xfmem_numColorChans == 0u) {{\n"
|
||||
" if ((components & {}u) != 0u)\n"
|
||||
" o.colors_0 = rawcolor0;\n"
|
||||
" if ((components & {}u) != 0u) // VB_HAS_COL0\n"
|
||||
" o.colors_0 = {}0;\n"
|
||||
" else\n"
|
||||
" o.colors_1 = float4(1.0, 1.0, 1.0, 1.0);\n"
|
||||
" o.colors_0 = float4(1.0, 1.0, 1.0, 1.0);\n"
|
||||
"}}\n",
|
||||
VB_HAS_COL0);
|
||||
out.Write("if (xfmem_numColorChans < 2u) {{\n"
|
||||
" if ((components & {}u) != 0u)\n"
|
||||
" o.colors_0 = rawcolor1;\n"
|
||||
VB_HAS_COL0, color_prefix);
|
||||
out.Write("if (xfmem_numColorChans <= 1u) {{\n"
|
||||
" if ((components & {}u) != 0u) // VB_HAS_COL1\n"
|
||||
" o.colors_1 = {}1;\n"
|
||||
" else\n"
|
||||
" o.colors_1 = float4(1.0, 1.0, 1.0, 1.0);\n"
|
||||
" o.colors_1 = o.colors_0;\n"
|
||||
"}}\n",
|
||||
VB_HAS_COL1);
|
||||
VB_HAS_COL1, color_prefix);
|
||||
|
||||
if (!host_config.fast_depth_calc)
|
||||
{
|
||||
|
@ -239,26 +255,7 @@ ShaderCode GenVertexShader(APIType api_type, const ShaderHostConfig& host_config
|
|||
if (per_pixel_lighting)
|
||||
{
|
||||
out.Write("o.Normal = _norm0;\n"
|
||||
"o.WorldPos = pos.xyz;\n"
|
||||
"// Pass through the vertex colors unmodified so we can evaluate the lighting\n"
|
||||
"// in the same manner.\n");
|
||||
out.Write("if ((components & {}u) != 0u) // VB_HAS_COL0\n"
|
||||
" o.colors_0 = vertex_color_0;\n",
|
||||
VB_HAS_COL0);
|
||||
out.Write("if ((components & {}u) != 0u) // VB_HAS_COL1\n"
|
||||
" o.colors_1 = vertex_color_1;\n",
|
||||
VB_HAS_COL1);
|
||||
}
|
||||
else
|
||||
{
|
||||
out.Write("// The number of colors available to TEV is determined by numColorChans.\n"
|
||||
"// We have to provide the fields to match the interface, so set to zero\n"
|
||||
"// if it's not enabled.\n"
|
||||
"if (xfmem_numColorChans == 0u)\n"
|
||||
" o.colors_0 = float4(0.0, 0.0, 0.0, 0.0);\n"
|
||||
"if (xfmem_numColorChans <= 1u)\n"
|
||||
" o.colors_1 = float4(0.0, 0.0, 0.0, 0.0);\n"
|
||||
"\n");
|
||||
"o.WorldPos = pos.xyz;\n");
|
||||
}
|
||||
|
||||
// If we can disable the incorrect depth clipping planes using depth clamping, then we can do
|
||||
|
|
|
@ -443,19 +443,38 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
|
|||
out.Write("}}\n");
|
||||
}
|
||||
|
||||
// The number of colors available to TEV is determined by numColorChans.
|
||||
// We have to provide the fields to match the interface, so set to zero if it's not enabled.
|
||||
|
||||
// When per-pixel lighting is enabled, the vertex colors are passed through unmodified so we can
|
||||
// evaluate the lighting in the same manner in the pixel shader.
|
||||
if (uid_data->numColorChans == 0)
|
||||
{
|
||||
if ((uid_data->components & VB_HAS_COL0) != 0)
|
||||
out.Write("o.colors_0 = rawcolor0;\n");
|
||||
{
|
||||
if (per_pixel_lighting)
|
||||
out.Write("o.colors_0 = vertex_color_0;\n");
|
||||
else
|
||||
out.Write("o.colors_0 = rawcolor0;\n");
|
||||
}
|
||||
else
|
||||
out.Write("o.colors_0 = float4(1.0, 1.0, 1.0, 1.0);\n");
|
||||
{
|
||||
out.Write("o.colors_0 = float4(0.0, 0.0, 0.0, 0.0);\n");
|
||||
}
|
||||
}
|
||||
if (uid_data->numColorChans < 2)
|
||||
if (uid_data->numColorChans <= 1)
|
||||
{
|
||||
if ((uid_data->components & VB_HAS_COL1) != 0)
|
||||
out.Write("o.colors_1 = rawcolor1;\n");
|
||||
{
|
||||
if (per_pixel_lighting)
|
||||
out.Write("o.colors_1 = vertex_color_1;\n");
|
||||
else
|
||||
out.Write("o.colors_1 = rawcolor1;\n");
|
||||
}
|
||||
else
|
||||
out.Write("o.colors_1 = o.colors_0;\n");
|
||||
{
|
||||
out.Write("o.colors_1 = float4(0.0, 0.0, 0.0, 0.0);\n");
|
||||
}
|
||||
}
|
||||
|
||||
// clipPos/w needs to be done in pixel shader, not here
|
||||
|
@ -466,22 +485,6 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
|
|||
{
|
||||
out.Write("o.Normal = _norm0;\n"
|
||||
"o.WorldPos = pos.xyz;\n");
|
||||
|
||||
// Pass through the vertex colors unmodified so we can evaluate the lighting in the same manner.
|
||||
if ((uid_data->components & VB_HAS_COL0) != 0)
|
||||
out.Write("o.colors_0 = vertex_color_0;\n");
|
||||
|
||||
if ((uid_data->components & VB_HAS_COL1) != 0)
|
||||
out.Write("o.colors_1 = vertex_color_1;\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
// The number of colors available to TEV is determined by numColorChans.
|
||||
// We have to provide the fields to match the interface, so set to zero if it's not enabled.
|
||||
if (uid_data->numColorChans == 0)
|
||||
out.Write("o.colors_0 = float4(0.0, 0.0, 0.0, 0.0);\n");
|
||||
if (uid_data->numColorChans <= 1)
|
||||
out.Write("o.colors_1 = float4(0.0, 0.0, 0.0, 0.0);\n");
|
||||
}
|
||||
|
||||
// If we can disable the incorrect depth clipping planes using depth clamping, then we can do
|
||||
|
|
Loading…
Reference in New Issue