mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
ShaderGen: Remove host state from shader uids
This commit is contained in:
@ -26,11 +26,6 @@ VertexShaderUid GetVertexShaderUid()
|
||||
|
||||
uid_data->numTexGens = xfmem.numTexGen.numTexGens;
|
||||
uid_data->components = VertexLoaderManager::g_current_components;
|
||||
uid_data->pixel_lighting = g_ActiveConfig.bEnablePixelLighting;
|
||||
uid_data->vertex_rounding =
|
||||
g_ActiveConfig.bVertexRounding && g_ActiveConfig.iEFBScale != SCALE_1X;
|
||||
uid_data->msaa = g_ActiveConfig.iMultisamples > 1;
|
||||
uid_data->ssaa = g_ActiveConfig.iMultisamples > 1 && g_ActiveConfig.bSSAA;
|
||||
uid_data->numColorChans = xfmem.numChan.numColorChans;
|
||||
|
||||
GetLightingShaderUid(uid_data->lighting);
|
||||
@ -84,6 +79,12 @@ VertexShaderUid GetVertexShaderUid()
|
||||
ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_data* uid_data)
|
||||
{
|
||||
ShaderCode out;
|
||||
|
||||
const bool per_pixel_lighting = g_ActiveConfig.bEnablePixelLighting;
|
||||
const bool msaa = g_ActiveConfig.IsMSAAEnabled();
|
||||
const bool ssaa = g_ActiveConfig.IsSSAAEnabled();
|
||||
const bool vertex_rounding = g_ActiveConfig.UseVertexRounding();
|
||||
|
||||
out.Write("%s", s_lighting_struct);
|
||||
|
||||
// uniforms
|
||||
@ -96,7 +97,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_da
|
||||
out.Write("};\n");
|
||||
|
||||
out.Write("struct VS_OUTPUT {\n");
|
||||
GenerateVSOutputMembers(out, api_type, uid_data->numTexGens, uid_data->pixel_lighting, "");
|
||||
GenerateVSOutputMembers(out, api_type, uid_data->numTexGens, per_pixel_lighting, "");
|
||||
out.Write("};\n");
|
||||
|
||||
if (api_type == APIType::OpenGL || api_type == APIType::Vulkan)
|
||||
@ -130,9 +131,8 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_da
|
||||
if (g_ActiveConfig.backend_info.bSupportsGeometryShaders || api_type == APIType::Vulkan)
|
||||
{
|
||||
out.Write("VARYING_LOCATION(0) out VertexData {\n");
|
||||
GenerateVSOutputMembers(
|
||||
out, api_type, uid_data->numTexGens, uid_data->pixel_lighting,
|
||||
GetInterpolationQualifier(uid_data->msaa, uid_data->ssaa, true, false));
|
||||
GenerateVSOutputMembers(out, api_type, uid_data->numTexGens, per_pixel_lighting,
|
||||
GetInterpolationQualifier(msaa, ssaa, true, false));
|
||||
out.Write("} vs;\n");
|
||||
}
|
||||
else
|
||||
@ -142,23 +142,17 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_da
|
||||
{
|
||||
if (i < uid_data->numTexGens)
|
||||
{
|
||||
out.Write("%s out float3 uv%u;\n",
|
||||
GetInterpolationQualifier(uid_data->msaa, uid_data->ssaa), i);
|
||||
out.Write("%s out float3 uv%u;\n", GetInterpolationQualifier(msaa, ssaa), i);
|
||||
}
|
||||
}
|
||||
out.Write("%s out float4 clipPos;\n",
|
||||
GetInterpolationQualifier(uid_data->msaa, uid_data->ssaa));
|
||||
if (uid_data->pixel_lighting)
|
||||
out.Write("%s out float4 clipPos;\n", GetInterpolationQualifier(msaa, ssaa));
|
||||
if (per_pixel_lighting)
|
||||
{
|
||||
out.Write("%s out float3 Normal;\n",
|
||||
GetInterpolationQualifier(uid_data->msaa, uid_data->ssaa));
|
||||
out.Write("%s out float3 WorldPos;\n",
|
||||
GetInterpolationQualifier(uid_data->msaa, uid_data->ssaa));
|
||||
out.Write("%s out float3 Normal;\n", GetInterpolationQualifier(msaa, ssaa));
|
||||
out.Write("%s out float3 WorldPos;\n", GetInterpolationQualifier(msaa, ssaa));
|
||||
}
|
||||
out.Write("%s out float4 colors_0;\n",
|
||||
GetInterpolationQualifier(uid_data->msaa, uid_data->ssaa));
|
||||
out.Write("%s out float4 colors_1;\n",
|
||||
GetInterpolationQualifier(uid_data->msaa, uid_data->ssaa));
|
||||
out.Write("%s out float4 colors_0;\n", GetInterpolationQualifier(msaa, ssaa));
|
||||
out.Write("%s out float4 colors_1;\n", GetInterpolationQualifier(msaa, ssaa));
|
||||
}
|
||||
|
||||
out.Write("void main()\n{\n");
|
||||
@ -406,7 +400,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_da
|
||||
// clipPos/w needs to be done in pixel shader, not here
|
||||
out.Write("o.clipPos = o.pos;\n");
|
||||
|
||||
if (uid_data->pixel_lighting)
|
||||
if (per_pixel_lighting)
|
||||
{
|
||||
out.Write("o.Normal = _norm0;\n");
|
||||
out.Write("o.WorldPos = pos.xyz;\n");
|
||||
@ -466,7 +460,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_da
|
||||
// get rasterized correctly.
|
||||
out.Write("o.pos.xy = o.pos.xy - o.pos.w * " I_PIXELCENTERCORRECTION ".xy;\n");
|
||||
|
||||
if (uid_data->vertex_rounding)
|
||||
if (vertex_rounding)
|
||||
{
|
||||
// By now our position is in clip space
|
||||
// however, higher resolutions than the Wii outputs
|
||||
@ -493,7 +487,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_da
|
||||
{
|
||||
if (g_ActiveConfig.backend_info.bSupportsGeometryShaders || api_type == APIType::Vulkan)
|
||||
{
|
||||
AssignVSOutputMembers(out, "vs", "o", uid_data->numTexGens, uid_data->pixel_lighting);
|
||||
AssignVSOutputMembers(out, "vs", "o", uid_data->numTexGens, per_pixel_lighting);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -502,7 +496,7 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const vertex_shader_uid_da
|
||||
for (unsigned int i = 0; i < uid_data->numTexGens; ++i)
|
||||
out.Write("uv%d.xyz = o.tex%d;\n", i, i);
|
||||
out.Write("clipPos = o.clipPos;\n");
|
||||
if (uid_data->pixel_lighting)
|
||||
if (per_pixel_lighting)
|
||||
{
|
||||
out.Write("Normal = o.Normal;\n");
|
||||
out.Write("WorldPos = o.WorldPos;\n");
|
||||
|
Reference in New Issue
Block a user