Merge the tex "ubershader" uniforms into one for convenience

This commit is contained in:
Henrik Rydgård 2023-05-09 18:47:13 +02:00
parent ebd36a4369
commit bb6d696a84
6 changed files with 14 additions and 19 deletions

View file

@ -264,8 +264,7 @@ bool GenerateFragmentShader(const FShaderID &id, char *buffer, const ShaderLangu
if (texFunc == GE_TEXFUNC_BLEND) {
WRITE(p, "float3 u_texenv : register(c%i);\n", CONST_PS_TEXENV);
}
WRITE(p, "float u_texNoAlpha : register(c%i);\n", CONST_PS_TEX_NO_ALPHA);
WRITE(p, "float u_texMul : register(c%i);\n", CONST_PS_TEX_MUL);
WRITE(p, "float2 u_texNoAlphaMul : register(c%i);\n", CONST_PS_TEX_NO_ALPHA_MUL);
}
if (enableFog) {
WRITE(p, "float3 u_fogcolor : register(c%i);\n", CONST_PS_FOGCOLOR);
@ -364,8 +363,7 @@ bool GenerateFragmentShader(const FShaderID &id, char *buffer, const ShaderLangu
WRITE(p, "uniform sampler2D tex;\n");
}
*uniformMask |= DIRTY_TEX_ALPHA_MUL;
WRITE(p, "uniform float u_texNoAlpha;\n");
WRITE(p, "uniform float u_texMul;\n");
WRITE(p, "uniform vec2 u_texNoAlphaMul;\n");
}
if (readFramebufferTex) {
@ -844,7 +842,7 @@ bool GenerateFragmentShader(const FShaderID &id, char *buffer, const ShaderLangu
WRITE(p, " vec4 p = v_color0;\n");
if (texFunc != GE_TEXFUNC_REPLACE) {
WRITE(p, " t.a = max(t.a, u_texNoAlpha);\n");
WRITE(p, " t.a = max(t.a, u_texNoAlphaMul.x);\n");
}
switch (texFunc) {
@ -859,7 +857,7 @@ bool GenerateFragmentShader(const FShaderID &id, char *buffer, const ShaderLangu
break;
case GE_TEXFUNC_REPLACE:
WRITE(p, " vec4 r = t;\n");
WRITE(p, " r.a = mix(r.a, p.a, u_texNoAlpha);\n");
WRITE(p, " r.a = mix(r.a, p.a, u_texNoAlphaMul.x);\n");
WRITE(p, " vec4 v = r%s;\n", secondary);
break;
case GE_TEXFUNC_ADD:
@ -879,9 +877,9 @@ bool GenerateFragmentShader(const FShaderID &id, char *buffer, const ShaderLangu
// We only need a clamp if the color will be further processed. Otherwise the hardware color conversion will clamp for us.
if (enableFog || enableColorTest || replaceBlend != REPLACE_BLEND_NO || simulateLogicOpType != LOGICOPTYPE_NORMAL || colorWriteMask || blueToAlpha) {
WRITE(p, " v.rgb = clamp(v.rgb * u_texMul, 0.0, 1.0);\n");
WRITE(p, " v.rgb = clamp(v.rgb * u_texNoAlphaMul.y, 0.0, 1.0);\n");
} else {
WRITE(p, " v.rgb *= u_texMul;\n");
WRITE(p, " v.rgb *= u_texNoAlphaMul.y;\n");
}
} else {
// No texture mapping

View file

@ -36,8 +36,7 @@ struct FShaderID;
#define CONST_PS_TEXCLAMP 8
#define CONST_PS_TEXCLAMPOFF 9
#define CONST_PS_MIPBIAS 10
#define CONST_PS_TEX_NO_ALPHA 11
#define CONST_PS_TEX_MUL 12
#define CONST_PS_TEX_NO_ALPHA_MUL 11
// For stencil upload
#define BCONST_PS_STENCILVALUE 13

View file

@ -66,7 +66,7 @@ R"( mat4 u_proj;
vec4 u_texclamp;
vec2 u_texclampoff;
vec2 u_fogcoef;
float u_texNoAlpha; float u_texMul; float pad1; float pad2;
vec2 u_texNoAlphaMul; float pad1; float pad2;
)";
// 512 bytes. Would like to shrink more. Some colors only have 8-bit precision and we expand

View file

@ -291,8 +291,8 @@ void ShaderManagerDX9::PSUpdateUniforms(u64 dirtyUniforms) {
doTextureAlpha = false;
}
// NOTE: Reversed value, more efficient in shader.
PSSetFloat(CONST_PS_TEX_NO_ALPHA, doTextureAlpha ? 0.0f : 1.0f);
PSSetFloat(CONST_PS_TEX_MUL, gstate.isColorDoublingEnabled() ? 2.0f : 1.0f);
float noAlphaMul[2] = { doTextureAlpha ? 0.0f : 1.0f, gstate.isColorDoublingEnabled() ? 2.0f : 1.0f };
PSSetFloatArray(CONST_PS_TEX_NO_ALPHA_MUL, noAlphaMul, 2);
}
if (dirtyUniforms & DIRTY_SHADERBLEND) {
PSSetColorUniform3(CONST_PS_BLENDFIXA, gstate.getFixA());

View file

@ -154,8 +154,7 @@ LinkedShader::LinkedShader(GLRenderManager *render, VShaderID VSID, Shader *vs,
queries.push_back({ &u_uvscaleoffset, "u_uvscaleoffset" });
queries.push_back({ &u_texclamp, "u_texclamp" });
queries.push_back({ &u_texclampoff, "u_texclampoff" });
queries.push_back({ &u_texNoAlpha, "u_texNoAlpha" });
queries.push_back({ &u_texMul, "u_texMul" });
queries.push_back({ &u_texNoAlphaMul, "u_texNoAlphaMul" });
queries.push_back({ &u_lightControl, "u_lightControl" });
for (int i = 0; i < 4; i++) {
@ -466,8 +465,8 @@ void LinkedShader::UpdateUniforms(const ShaderID &vsid, bool useBufferedRenderin
if (gstate_c.textureFullAlpha && gstate.getTextureFunction() != GE_TEXFUNC_REPLACE) {
doTextureAlpha = false;
}
render_->SetUniformF1(&u_texNoAlpha, doTextureAlpha ? 0.0f : 1.0f);
render_->SetUniformF1(&u_texMul, gstate.isColorDoublingEnabled() ? 2.0f : 1.0f);
float noAlphaMul[2] = { doTextureAlpha ? 0.0f : 1.0f, gstate.isColorDoublingEnabled() ? 2.0f : 1.0f };
render_->SetUniformF(&u_texNoAlphaMul, 2, noAlphaMul);
}
if (dirty & DIRTY_ALPHACOLORREF) {
if (shaderLanguage.bitwiseOps) {

View file

@ -102,8 +102,7 @@ public:
int u_uvscaleoffset;
int u_texclamp;
int u_texclampoff;
int u_texNoAlpha;
int u_texMul;
int u_texNoAlphaMul;
// Lighting
int u_lightControl;