diff options
| author | Stenzek <stenzek@gmail.com> | 2019-01-23 18:11:17 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2019-01-23 18:34:22 +1000 |
| commit | 68cb24172b4e76c96f38b7a44d8d5d45e4adc900 (patch) | |
| tree | c2d71004767237e71658ea157b4c0d9e6447f265 /Source/Core/VideoCommon/PixelShaderGen.cpp | |
| parent | 3627ef8a0489765eb10ab29a7988866b52493239 (diff) | |
ShaderGen: Omit some unused varyings when possible
Removes the clipPos varying unless slow-depth is used, and the
clipDistance varyings if geometry shaders are not used.
Diffstat (limited to 'Source/Core/VideoCommon/PixelShaderGen.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/PixelShaderGen.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp index 936dd8e937..ce42363d19 100644 --- a/Source/Core/VideoCommon/PixelShaderGen.cpp +++ b/Source/Core/VideoCommon/PixelShaderGen.cpp @@ -351,7 +351,7 @@ void ClearUnusedPixelShaderUidBits(APIType ApiType, const ShaderHostConfig& host } void WritePixelShaderCommonHeader(ShaderCode& out, APIType ApiType, u32 num_texgens, - bool per_pixel_lighting, bool bounding_box) + const ShaderHostConfig& host_config, bool bounding_box) { // dot product for integer vectors out.Write("int idot(int3 x, int3 y)\n" @@ -430,7 +430,7 @@ void WritePixelShaderCommonHeader(ShaderCode& out, APIType ApiType, u32 num_texg "#define bpmem_tevorder(i) (bpmem_pack2[(i)].x)\n" "#define bpmem_tevksel(i) (bpmem_pack2[(i)].y)\n\n"); - if (per_pixel_lighting) + if (host_config.per_pixel_lighting) { out.Write("%s", s_lighting_struct); @@ -458,7 +458,7 @@ void WritePixelShaderCommonHeader(ShaderCode& out, APIType ApiType, u32 num_texg } out.Write("struct VS_OUTPUT {\n"); - GenerateVSOutputMembers(out, ApiType, num_texgens, per_pixel_lighting, ""); + GenerateVSOutputMembers(out, ApiType, num_texgens, host_config, ""); out.Write("};\n"); } @@ -491,7 +491,7 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host uid_data->genMode_numindstages); // Stuff that is shared between ubershaders and pixelgen. - WritePixelShaderCommonHeader(out, ApiType, uid_data->genMode_numtexgens, per_pixel_lighting, + WritePixelShaderCommonHeader(out, ApiType, uid_data->genMode_numtexgens, host_config, uid_data->bounding_box); if (uid_data->forced_early_z && g_ActiveConfig.backend_info.bSupportsEarlyZ) @@ -591,7 +591,7 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host if (host_config.backend_geometry_shaders || ApiType == APIType::Vulkan) { out.Write("VARYING_LOCATION(0) in VertexData {\n"); - GenerateVSOutputMembers(out, ApiType, uid_data->genMode_numtexgens, per_pixel_lighting, + GenerateVSOutputMembers(out, ApiType, uid_data->genMode_numtexgens, host_config, GetInterpolationQualifier(msaa, ssaa, true, true)); if (stereo) @@ -609,7 +609,8 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host { out.Write("%s in float3 tex%d;\n", GetInterpolationQualifier(msaa, ssaa), i); } - out.Write("%s in float4 clipPos;\n", GetInterpolationQualifier(msaa, ssaa)); + if (!host_config.fast_depth_calc) + out.Write("%s in float4 clipPos;\n", GetInterpolationQualifier(msaa, ssaa)); if (per_pixel_lighting) { out.Write("%s in float3 Normal;\n", GetInterpolationQualifier(msaa, ssaa)); @@ -646,8 +647,11 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host for (unsigned int i = 0; i < uid_data->genMode_numtexgens; ++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 (!host_config.fast_depth_calc) + { + out.Write(",\n in %s float4 clipPos : TEXCOORD%d", GetInterpolationQualifier(msaa, ssaa), + uid_data->genMode_numtexgens); + } if (per_pixel_lighting) { out.Write(",\n in %s float3 Normal : TEXCOORD%d", GetInterpolationQualifier(msaa, ssaa), @@ -655,8 +659,11 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host out.Write(",\n in %s float3 WorldPos : TEXCOORD%d", GetInterpolationQualifier(msaa, ssaa), uid_data->genMode_numtexgens + 2); } - out.Write(",\n in float clipDist0 : SV_ClipDistance0\n"); - out.Write(",\n in float clipDist1 : SV_ClipDistance1\n"); + if (host_config.backend_geometry_shaders) + { + out.Write(",\n in float clipDist0 : SV_ClipDistance0\n"); + out.Write(",\n in float clipDist1 : SV_ClipDistance1\n"); + } if (stereo) out.Write(",\n in uint layer : SV_RenderTargetArrayIndex\n"); out.Write(" ) {\n"); |
