From e17efb1d8dcff32e7db915a53dc95df0bf329692 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 27 Jul 2017 01:01:25 +1000 Subject: [PATCH] ShaderGen: Use consistent variable names for texture coordinates --- .../VideoBackends/OGL/ProgramShaderCache.cpp | 6 +-- Source/Core/VideoBackends/OGL/RasterFont.cpp | 4 +- Source/Core/VideoCommon/PixelShaderGen.cpp | 14 ++---- Source/Core/VideoCommon/UberShaderVertex.cpp | 47 ++++++++++--------- Source/Core/VideoCommon/VertexShaderGen.cpp | 30 ++++++------ 5 files changed, 49 insertions(+), 52 deletions(-) diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index e26fae7d4b..6cdc240ce6 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -143,8 +143,8 @@ void SHADER::SetProgramBindings(bool is_compute) glBindAttribLocation(glprogid, SHADER_POSMTX_ATTRIB, "posmtx"); - glBindAttribLocation(glprogid, SHADER_COLOR0_ATTRIB, "color0"); - glBindAttribLocation(glprogid, SHADER_COLOR1_ATTRIB, "color1"); + glBindAttribLocation(glprogid, SHADER_COLOR0_ATTRIB, "rawcolor0"); + glBindAttribLocation(glprogid, SHADER_COLOR1_ATTRIB, "rawcolor1"); glBindAttribLocation(glprogid, SHADER_NORM0_ATTRIB, "rawnorm0"); glBindAttribLocation(glprogid, SHADER_NORM1_ATTRIB, "rawnorm1"); @@ -153,7 +153,7 @@ void SHADER::SetProgramBindings(bool is_compute) for (int i = 0; i < 8; i++) { - std::string attrib_name = StringFromFormat("tex%d", i); + std::string attrib_name = StringFromFormat("rawtex%d", i); glBindAttribLocation(glprogid, SHADER_TEXTURE0_ATTRIB + i, attrib_name.c_str()); } } diff --git a/Source/Core/VideoBackends/OGL/RasterFont.cpp b/Source/Core/VideoBackends/OGL/RasterFont.cpp index 61cae75e11..9ab8647ce9 100644 --- a/Source/Core/VideoBackends/OGL/RasterFont.cpp +++ b/Source/Core/VideoBackends/OGL/RasterFont.cpp @@ -119,11 +119,11 @@ static const u8 rasters[CHARACTER_COUNT][CHARACTER_HEIGHT] = { static const char* s_vertexShaderSrc = "uniform vec2 charSize;\n" "uniform vec2 offset;" "in vec2 rawpos;\n" - "in vec2 tex0;\n" + "in vec2 rawtex0;\n" "out vec2 uv0;\n" "void main(void) {\n" " gl_Position = vec4(rawpos + offset,0,1);\n" - " uv0 = tex0 * charSize;\n" + " uv0 = rawtex0 * charSize;\n" "}\n"; static const char* s_fragmentShaderSrc = "SAMPLER_BINDING(8) uniform sampler2D samp8;\n" diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index 61e8f92531..43dba06263 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -562,7 +562,7 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host // Let's set up attributes for (unsigned int i = 0; i < uid_data->genMode_numtexgens; ++i) { - out.Write("%s in float3 uv%d;\n", GetInterpolationQualifier(msaa, ssaa), i); + out.Write("%s in float3 tex%d;\n", GetInterpolationQualifier(msaa, ssaa), i); } out.Write("%s in float4 clipPos;\n", GetInterpolationQualifier(msaa, ssaa)); if (per_pixel_lighting) @@ -573,13 +573,6 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host } out.Write("void main()\n{\n"); - - if (host_config.backend_geometry_shaders || ApiType == APIType::Vulkan) - { - for (unsigned int i = 0; i < uid_data->genMode_numtexgens; ++i) - out.Write("\tfloat3 uv%d = tex%d;\n", i, i); - } - out.Write("\tfloat4 rawpos = gl_FragCoord;\n"); } else // D3D @@ -595,7 +588,8 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host // compute window position if needed because binding semantic WPOS is not widely supported for (unsigned int i = 0; i < uid_data->genMode_numtexgens; ++i) - out.Write(",\n in %s float3 uv%d : TEXCOORD%d", GetInterpolationQualifier(msaa, ssaa), i, i); + out.Write(",\n in %s float3 tex%d : TEXCOORD%d", GetInterpolationQualifier(msaa, ssaa), i, + i); out.Write(",\n in %s float4 clipPos : TEXCOORD%d", GetInterpolationQualifier(msaa, ssaa), uid_data->genMode_numtexgens); if (per_pixel_lighting) @@ -658,7 +652,7 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host for (unsigned int i = 0; i < uid_data->genMode_numtexgens; ++i) { out.Write("\tint2 fixpoint_uv%d = int2(", i); - out.Write("(uv%d.z == 0.0 ? uv%d.xy : uv%d.xy / uv%d.z)", i, i, i, i); + out.Write("(tex%d.z == 0.0 ? tex%d.xy : tex%d.xy / tex%d.z)", i, i, i, i); out.Write(" * " I_TEXDIMS "[%d].zw);\n", i); // TODO: S24 overflows here? } diff --git a/Source/Core/VideoCommon/UberShaderVertex.cpp b/Source/Core/VideoCommon/UberShaderVertex.cpp index d8ccdb9935..fbc2815035 100644 --- a/Source/Core/VideoCommon/UberShaderVertex.cpp +++ b/Source/Core/VideoCommon/UberShaderVertex.cpp @@ -113,10 +113,10 @@ ShaderCode GenVertexShader(APIType ApiType, const ShaderHostConfig& host_config, out.Write("ATTRIBUTE_LOCATION(%d) in float3 rawnorm0;\n", SHADER_NORM0_ATTRIB); out.Write("ATTRIBUTE_LOCATION(%d) in float3 rawnorm1;\n", SHADER_NORM1_ATTRIB); out.Write("ATTRIBUTE_LOCATION(%d) in float3 rawnorm2;\n", SHADER_NORM2_ATTRIB); - out.Write("ATTRIBUTE_LOCATION(%d) in float4 color0;\n", SHADER_COLOR0_ATTRIB); - out.Write("ATTRIBUTE_LOCATION(%d) in float4 color1;\n", SHADER_COLOR1_ATTRIB); + out.Write("ATTRIBUTE_LOCATION(%d) in float4 rawcolor0;\n", SHADER_COLOR0_ATTRIB); + out.Write("ATTRIBUTE_LOCATION(%d) in float4 rawcolor1;\n", SHADER_COLOR1_ATTRIB); for (int i = 0; i < 8; ++i) - out.Write("ATTRIBUTE_LOCATION(%d) in float3 tex%d;\n", SHADER_TEXTURE0_ATTRIB + i, i); + out.Write("ATTRIBUTE_LOCATION(%d) in float3 rawtex%d;\n", SHADER_TEXTURE0_ATTRIB + i, i); // We need to always use output blocks for Vulkan, but geometry shaders are also optional. if (host_config.backend_geometry_shaders || ApiType == APIType::Vulkan) @@ -130,7 +130,7 @@ ShaderCode GenVertexShader(APIType ApiType, const ShaderHostConfig& host_config, { // Let's set up attributes for (u32 i = 0; i < numTexgen; ++i) - out.Write("%s out float3 uv%u;\n", GetInterpolationQualifier(msaa, ssaa), i); + out.Write("%s out float3 tex%u;\n", GetInterpolationQualifier(msaa, ssaa), i); out.Write("%s out float4 clipPos;\n", GetInterpolationQualifier(msaa, ssaa)); if (per_pixel_lighting) @@ -152,10 +152,10 @@ ShaderCode GenVertexShader(APIType ApiType, const ShaderHostConfig& host_config, out.Write(" float3 rawnorm0 : NORMAL0,\n"); out.Write(" float3 rawnorm1 : NORMAL1,\n"); out.Write(" float3 rawnorm2 : NORMAL2,\n"); - out.Write(" float4 color0 : COLOR0,\n"); - out.Write(" float4 color1 : COLOR1,\n"); + out.Write(" float4 rawcolor0 : COLOR0,\n"); + out.Write(" float4 rawcolor1 : COLOR1,\n"); for (int i = 0; i < 8; ++i) - out.Write(" float3 tex%d : TEXCOORD%d,\n", i, i); + out.Write(" float3 rawtex%d : TEXCOORD%d,\n", i, i); out.Write(" uint posmtx : BLENDINDICES,\n"); out.Write(" float4 rawpos : POSITION) {\n"); } @@ -307,7 +307,7 @@ ShaderCode GenVertexShader(APIType ApiType, const ShaderHostConfig& host_config, // TODO: Pass interface blocks between shader stages even if geometry shaders // are not supported, however that will require at least OpenGL 3.2 support. for (u32 i = 0; i < numTexgen; ++i) - out.Write("uv%d.xyz = o.tex%d;\n", i, i); + out.Write("tex%d.xyz = o.tex%d;\n", i, i); out.Write("clipPos = o.clipPos;\n"); out.Write("colors_0 = o.colors_0;\n"); out.Write("colors_1 = o.colors_1;\n"); @@ -337,12 +337,12 @@ ShaderCode GenVertexShader(APIType ApiType, const ShaderHostConfig& host_config, void GenVertexShaderLighting(APIType ApiType, ShaderCode& out) { out.Write("if ((components & %uu) != 0u) // VB_HAS_COL0\n", VB_HAS_COL0); - out.Write(" o.colors_0 = color0;\n" + out.Write(" o.colors_0 = rawcolor0;\n" "else\n" " o.colors_0 = float4(1.0, 1.0, 1.0, 1.0);\n" "\n"); out.Write("if ((components & %uu) != 0u) // VB_HAS_COL1\n", VB_HAS_COL1); - out.Write(" o.colors_1 = color1;\n" + out.Write(" o.colors_1 = rawcolor1;\n" "else\n" " o.colors_1 = float4(1.0, 1.0, 1.0, 1.0);\n" "\n"); @@ -358,9 +358,10 @@ void GenVertexShaderLighting(APIType ApiType, ShaderCode& out) out.Write(" if (%s != 0u) {\n", BitfieldExtract("colorreg", LitChannel().matsource).c_str()); out.Write(" if ((components & (%uu << chan)) != 0u) // VB_HAS_COL0\n", VB_HAS_COL0); - out.Write(" mat.xyz = int3(round(((chan == 0u) ? color0.xyz : color1.xyz) * 255.0));\n"); + out.Write( + " mat.xyz = int3(round(((chan == 0u) ? rawcolor0.xyz : rawcolor1.xyz) * 255.0));\n"); out.Write(" else if ((components & %uu) != 0u) // VB_HAS_COLO0\n", VB_HAS_COL0); - out.Write(" mat.xyz = int3(round(color0.xyz * 255.0));\n" + out.Write(" mat.xyz = int3(round(rawcolor0.xyz * 255.0));\n" " else\n" " mat.xyz = int3(255, 255, 255);\n" " }\n" @@ -368,9 +369,9 @@ void GenVertexShaderLighting(APIType ApiType, ShaderCode& out) out.Write(" if (%s != 0u) {\n", BitfieldExtract("alphareg", LitChannel().matsource).c_str()); out.Write(" if ((components & (%uu << chan)) != 0u) // VB_HAS_COL0\n", VB_HAS_COL0); - out.Write(" mat.w = int(round(((chan == 0u) ? color0.w : color1.w) * 255.0));\n"); + out.Write(" mat.w = int(round(((chan == 0u) ? rawcolor0.w : rawcolor1.w) * 255.0));\n"); out.Write(" else if ((components & %uu) != 0u) // VB_HAS_COLO0\n", VB_HAS_COL0); - out.Write(" mat.w = int(round(color0.w * 255.0));\n" + out.Write(" mat.w = int(round(rawcolor0.w * 255.0));\n" " else\n" " mat.w = 255;\n" " } else {\n" @@ -382,9 +383,10 @@ void GenVertexShaderLighting(APIType ApiType, ShaderCode& out) BitfieldExtract("colorreg", LitChannel().enablelighting).c_str()); out.Write(" if (%s != 0u) {\n", BitfieldExtract("colorreg", LitChannel().ambsource).c_str()); out.Write(" if ((components & (%uu << chan)) != 0u) // VB_HAS_COL0\n", VB_HAS_COL0); - out.Write(" lacc.xyz = int3(round(((chan == 0u) ? color0.xyz : color1.xyz) * 255.0));\n"); + out.Write( + " lacc.xyz = int3(round(((chan == 0u) ? rawcolor0.xyz : rawcolor1.xyz) * 255.0));\n"); out.Write(" else if ((components & %uu) != 0u) // VB_HAS_COLO0\n", VB_HAS_COL0); - out.Write(" lacc.xyz = int3(round(color0.xyz * 255.0));\n" + out.Write(" lacc.xyz = int3(round(rawcolor0.xyz * 255.0));\n" " else\n" " lacc.xyz = int3(255, 255, 255);\n" " } else {\n" @@ -410,9 +412,9 @@ void GenVertexShaderLighting(APIType ApiType, ShaderCode& out) BitfieldExtract("alphareg", LitChannel().enablelighting).c_str()); out.Write(" if (%s != 0u) {\n", BitfieldExtract("alphareg", LitChannel().ambsource).c_str()); out.Write(" if ((components & (%uu << chan)) != 0u) // VB_HAS_COL0\n", VB_HAS_COL0); - out.Write(" lacc.w = int(round(((chan == 0u) ? color0.w : color1.w) * 255.0));\n"); + out.Write(" lacc.w = int(round(((chan == 0u) ? rawcolor0.w : rawcolor1.w) * 255.0));\n"); out.Write(" else if ((components & %uu) != 0u) // VB_HAS_COLO0\n", VB_HAS_COL0); - out.Write(" lacc.w = int(round(color0.w * 255.0));\n" + out.Write(" lacc.w = int(round(rawcolor0.w * 255.0));\n" " else\n" " lacc.w = 255;\n" " } else {\n" @@ -488,9 +490,10 @@ void GenVertexShaderTexGens(APIType ApiType, u32 numTexgen, ShaderCode& out) for (u32 i = 0; i < 8; i++) { out.Write(" case %uu: // XF_SRCTEX%u_INROW\n", XF_SRCTEX0_INROW + i, i); - out.Write(" coord = ((components & %uu /* VB_HAS_UV%u */) != 0u) ? float4(tex%u.x, tex%u.y, " - "1.0, 1.0) : coord;\n", - VB_HAS_UV0 << i, i, i, i); + out.Write( + " coord = ((components & %uu /* VB_HAS_UV%u */) != 0u) ? float4(rawtex%u.x, rawtex%u.y, " + "1.0, 1.0) : coord;\n", + VB_HAS_UV0 << i, i, i, i); out.Write(" break;\n\n"); } out.Write(" }\n"); @@ -541,7 +544,7 @@ void GenVertexShaderTexGens(APIType ApiType, u32 numTexgen, ShaderCode& out) " int tmp = 0;\n" " switch (texgen) {\n"); for (u32 i = 0; i < numTexgen; i++) - out.Write(" case %uu: tmp = int(tex%u.z); break;\n", i, i); + out.Write(" case %uu: tmp = int(rawtex%u.z); break;\n", i, i); out.Write(" }\n" "\n"); out.Write(" if (%s == %uu) {\n", diff --git a/Source/Core/VideoCommon/VertexShaderGen.cpp b/Source/Core/VideoCommon/VertexShaderGen.cpp index 2ee9532254..a02f801896 100644 --- a/Source/Core/VideoCommon/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/VertexShaderGen.cpp @@ -114,16 +114,16 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho out.Write("ATTRIBUTE_LOCATION(%d) in float3 rawnorm2;\n", SHADER_NORM2_ATTRIB); if (uid_data->components & VB_HAS_COL0) - out.Write("ATTRIBUTE_LOCATION(%d) in float4 color0;\n", SHADER_COLOR0_ATTRIB); + out.Write("ATTRIBUTE_LOCATION(%d) in float4 rawcolor0;\n", SHADER_COLOR0_ATTRIB); if (uid_data->components & VB_HAS_COL1) - out.Write("ATTRIBUTE_LOCATION(%d) in float4 color1;\n", SHADER_COLOR1_ATTRIB); + out.Write("ATTRIBUTE_LOCATION(%d) in float4 rawcolor1;\n", SHADER_COLOR1_ATTRIB); for (int i = 0; i < 8; ++i) { u32 hastexmtx = (uid_data->components & (VB_HAS_TEXMTXIDX0 << i)); if ((uid_data->components & (VB_HAS_UV0 << i)) || hastexmtx) { - out.Write("ATTRIBUTE_LOCATION(%d) in float%d tex%d;\n", SHADER_TEXTURE0_ATTRIB + i, + out.Write("ATTRIBUTE_LOCATION(%d) in float%d rawtex%d;\n", SHADER_TEXTURE0_ATTRIB + i, hastexmtx ? 3 : 2, i); } } @@ -143,7 +143,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho { if (i < uid_data->numTexGens) { - out.Write("%s out float3 uv%u;\n", GetInterpolationQualifier(msaa, ssaa), i); + out.Write("%s out float3 tex%u;\n", GetInterpolationQualifier(msaa, ssaa), i); } } out.Write("%s out float4 clipPos;\n", GetInterpolationQualifier(msaa, ssaa)); @@ -170,14 +170,14 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho if (uid_data->components & VB_HAS_NRM2) out.Write(" float3 rawnorm2 : NORMAL2,\n"); if (uid_data->components & VB_HAS_COL0) - out.Write(" float4 color0 : COLOR0,\n"); + out.Write(" float4 rawcolor0 : COLOR0,\n"); if (uid_data->components & VB_HAS_COL1) - out.Write(" float4 color1 : COLOR1,\n"); + out.Write(" float4 rawcolor1 : COLOR1,\n"); for (int i = 0; i < 8; ++i) { u32 hastexmtx = (uid_data->components & (VB_HAS_TEXMTXIDX0 << i)); if ((uid_data->components & (VB_HAS_UV0 << i)) || hastexmtx) - out.Write(" float%d tex%d : TEXCOORD%d,\n", hastexmtx ? 3 : 2, i, i); + out.Write(" float%d rawtex%d : TEXCOORD%d,\n", hastexmtx ? 3 : 2, i, i); } if (uid_data->components & VB_HAS_POSMTXIDX) out.Write(" uint4 posmtx : BLENDINDICES,\n"); @@ -242,18 +242,18 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho if (uid_data->numColorChans == 0) { if (uid_data->components & VB_HAS_COL0) - out.Write("o.colors_0 = color0;\n"); + out.Write("o.colors_0 = rawcolor0;\n"); else out.Write("o.colors_0 = float4(1.0, 1.0, 1.0, 1.0);\n"); } GenerateLightingShaderCode(out, uid_data->lighting, uid_data->components, uid_data->numColorChans, - "color", "o.colors_"); + "rawcolor", "o.colors_"); if (uid_data->numColorChans < 2) { if (uid_data->components & VB_HAS_COL1) - out.Write("o.colors_1 = color1;\n"); + out.Write("o.colors_1 = rawcolor1;\n"); else out.Write("o.colors_1 = o.colors_0;\n"); } @@ -296,7 +296,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho default: _assert_(texinfo.sourcerow <= XF_SRCTEX7_INROW); if (uid_data->components & (VB_HAS_UV0 << (texinfo.sourcerow - XF_SRCTEX0_INROW))) - out.Write("coord = float4(tex%d.x, tex%d.y, 1.0, 1.0);\n", + out.Write("coord = float4(rawtex%d.x, rawtex%d.y, 1.0, 1.0);\n", texinfo.sourcerow - XF_SRCTEX0_INROW, texinfo.sourcerow - XF_SRCTEX0_INROW); break; } @@ -338,7 +338,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho default: if (uid_data->components & (VB_HAS_TEXMTXIDX0 << i)) { - out.Write("int tmp = int(tex%d.z);\n", i); + out.Write("int tmp = int(rawtex%d.z);\n", i); if (((uid_data->texMtxInfo_n_projection >> i) & 1) == XF_TEXPROJ_STQ) out.Write("o.tex%d.xyz = float3(dot(coord, " I_TRANSFORMMATRICES "[tmp]), dot(coord, " I_TRANSFORMMATRICES @@ -407,10 +407,10 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho out.Write("o.WorldPos = pos.xyz;\n"); if (uid_data->components & VB_HAS_COL0) - out.Write("o.colors_0 = color0;\n"); + out.Write("o.colors_0 = rawcolor0;\n"); if (uid_data->components & VB_HAS_COL1) - out.Write("o.colors_1 = color1;\n"); + out.Write("o.colors_1 = rawcolor1;\n"); } // If we can disable the incorrect depth clipping planes using depth clamping, then we can do @@ -495,7 +495,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho // TODO: Pass interface blocks between shader stages even if geometry shaders // are not supported, however that will require at least OpenGL 3.2 support. for (unsigned int i = 0; i < uid_data->numTexGens; ++i) - out.Write("uv%d.xyz = o.tex%d;\n", i, i); + out.Write("tex%d.xyz = o.tex%d;\n", i, i); out.Write("clipPos = o.clipPos;\n"); if (per_pixel_lighting) {