PixelShaderGen: Move constant multiplication to constant generation.
No need to do this within the shader per pixel if it can be done once.
This commit is contained in:
parent
94098a50c2
commit
10e4f7e7bf
|
@ -467,7 +467,7 @@ static T GeneratePixelShader(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType)
|
||||||
{
|
{
|
||||||
out.Write("uv%d.xy", i);
|
out.Write("uv%d.xy", i);
|
||||||
}
|
}
|
||||||
out.Write(" * " I_TEXDIMS"[%d].zw * 128.0);\n", i);
|
out.Write(" * " I_TEXDIMS"[%d].zw);\n", i);
|
||||||
// TODO: S24 overflows here?
|
// TODO: S24 overflows here?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -501,7 +501,7 @@ static T GeneratePixelShader(DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType)
|
||||||
out.Write("\ttempcoord = int2(0, 0);\n");
|
out.Write("\ttempcoord = int2(0, 0);\n");
|
||||||
|
|
||||||
out.Write("\tint3 iindtex%d = ", i);
|
out.Write("\tint3 iindtex%d = ", i);
|
||||||
SampleTexture<T>(out, "(float2(tempcoord)/128.0)", "abg", texmap, ApiType);
|
SampleTexture<T>(out, "float2(tempcoord)", "abg", texmap, ApiType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -836,7 +836,7 @@ static void WriteStage(T& out, pixel_shader_uid_data* uid_data, int n, API_TYPE
|
||||||
uid_data->SetTevindrefTexmap(i, texmap);
|
uid_data->SetTevindrefTexmap(i, texmap);
|
||||||
|
|
||||||
out.Write("\ttextemp = ");
|
out.Write("\ttextemp = ");
|
||||||
SampleTexture<T>(out, "(float2(tevcoord.xy)/128.0)", texswap, texmap, ApiType);
|
SampleTexture<T>(out, "(tevcoord.xy)", texswap, texmap, ApiType);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -137,13 +137,16 @@ void PixelShaderManager::SetDestAlpha()
|
||||||
|
|
||||||
void PixelShaderManager::SetTexDims(int texmapid, u32 width, u32 height)
|
void PixelShaderManager::SetTexDims(int texmapid, u32 width, u32 height)
|
||||||
{
|
{
|
||||||
|
float rwidth = 1.0f / (width * 128.0f);
|
||||||
|
float rheight = 1.0f / (height * 128.0f);
|
||||||
|
|
||||||
// TODO: move this check out to callee. There we could just call this function on texture changes
|
// TODO: move this check out to callee. There we could just call this function on texture changes
|
||||||
// or better, use textureSize() in glsl
|
// or better, use textureSize() in glsl
|
||||||
if (constants.texdims[texmapid][0] != 1.0f/width || constants.texdims[texmapid][1] != 1.0f/height)
|
if (constants.texdims[texmapid][0] != rwidth || constants.texdims[texmapid][1] != rheight)
|
||||||
dirty = true;
|
dirty = true;
|
||||||
|
|
||||||
constants.texdims[texmapid][0] = 1.0f/width;
|
constants.texdims[texmapid][0] = rwidth;
|
||||||
constants.texdims[texmapid][1] = 1.0f/height;
|
constants.texdims[texmapid][1] = rheight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelShaderManager::SetZTextureBias()
|
void PixelShaderManager::SetZTextureBias()
|
||||||
|
@ -238,8 +241,8 @@ void PixelShaderManager::SetZTextureTypeChanged()
|
||||||
void PixelShaderManager::SetTexCoordChanged(u8 texmapid)
|
void PixelShaderManager::SetTexCoordChanged(u8 texmapid)
|
||||||
{
|
{
|
||||||
TCoordInfo& tc = bpmem.texcoords[texmapid];
|
TCoordInfo& tc = bpmem.texcoords[texmapid];
|
||||||
constants.texdims[texmapid][2] = (float)(tc.s.scale_minus_1 + 1);
|
constants.texdims[texmapid][2] = (float)(tc.s.scale_minus_1 + 1) * 128.0f;
|
||||||
constants.texdims[texmapid][3] = (float)(tc.t.scale_minus_1 + 1);
|
constants.texdims[texmapid][3] = (float)(tc.t.scale_minus_1 + 1) * 128.0f;
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue