mirror of https://github.com/PCSX2/pcsx2.git
gsdx-ogl: don't use extra shader for sprite hack
Atst == 2 && sprite_hack is equivalent to Atst == 1 It frees a bit in the shader selector, and reduces shader combinations.
This commit is contained in:
parent
b490085214
commit
1addae1993
|
@ -626,7 +626,6 @@ GLuint GSDeviceOGL::CompilePS(PSSelector sel)
|
||||||
+ format("#define PS_LTF %d\n", sel.ltf)
|
+ format("#define PS_LTF %d\n", sel.ltf)
|
||||||
+ format("#define PS_COLCLIP %d\n", sel.colclip)
|
+ format("#define PS_COLCLIP %d\n", sel.colclip)
|
||||||
+ format("#define PS_DATE %d\n", sel.date)
|
+ format("#define PS_DATE %d\n", sel.date)
|
||||||
+ format("#define PS_SPRITEHACK %d\n", sel.spritehack)
|
|
||||||
+ format("#define PS_TCOFFSETHACK %d\n", sel.tcoffsethack)
|
+ format("#define PS_TCOFFSETHACK %d\n", sel.tcoffsethack)
|
||||||
//+ format("#define PS_POINT_SAMPLER %d\n", sel.point_sampler)
|
//+ format("#define PS_POINT_SAMPLER %d\n", sel.point_sampler)
|
||||||
+ format("#define PS_IIP %d\n", sel.iip)
|
+ format("#define PS_IIP %d\n", sel.iip)
|
||||||
|
|
|
@ -305,7 +305,6 @@ class GSDeviceOGL : public GSDevice
|
||||||
uint32 fba:1;
|
uint32 fba:1;
|
||||||
uint32 aout:1;
|
uint32 aout:1;
|
||||||
uint32 date:3;
|
uint32 date:3;
|
||||||
uint32 spritehack:1;
|
|
||||||
uint32 tcoffsethack:1;
|
uint32 tcoffsethack:1;
|
||||||
//uint32 point_sampler:1; Not tested, so keep the bit for blend
|
//uint32 point_sampler:1; Not tested, so keep the bit for blend
|
||||||
uint32 iip:1;
|
uint32 iip:1;
|
||||||
|
@ -319,14 +318,14 @@ class GSDeviceOGL : public GSDevice
|
||||||
uint32 wmt:2;
|
uint32 wmt:2;
|
||||||
uint32 ltf:1;
|
uint32 ltf:1;
|
||||||
|
|
||||||
uint32 _free:3;
|
uint32 _free:4;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32 key;
|
uint32 key;
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME is the & useful ?
|
// FIXME is the & useful ?
|
||||||
operator uint32() {return key & 0x1fffffff;}
|
operator uint32() {return key & 0x0fffffff;}
|
||||||
|
|
||||||
PSSelector() : key(0) {}
|
PSSelector() : key(0) {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -447,6 +447,8 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
|
|
||||||
// By default don't use texture
|
// By default don't use texture
|
||||||
ps_sel.tfx = 4;
|
ps_sel.tfx = 4;
|
||||||
|
bool spritehack = false;
|
||||||
|
int atst = ps_sel.atst;
|
||||||
|
|
||||||
if(tex)
|
if(tex)
|
||||||
{
|
{
|
||||||
|
@ -464,7 +466,7 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
ps_sel.tfx = context->TEX0.TFX;
|
ps_sel.tfx = context->TEX0.TFX;
|
||||||
ps_sel.tcc = context->TEX0.TCC;
|
ps_sel.tcc = context->TEX0.TCC;
|
||||||
ps_sel.ltf = bilinear && !simple_sample;
|
ps_sel.ltf = bilinear && !simple_sample;
|
||||||
ps_sel.spritehack = tex->m_spritehack_t;
|
spritehack = tex->m_spritehack_t;
|
||||||
// FIXME the ati is currently disabled on the shader. I need to find a .gs to test that we got same
|
// FIXME the ati is currently disabled on the shader. I need to find a .gs to test that we got same
|
||||||
// bug on opengl
|
// bug on opengl
|
||||||
// FIXME for the moment disable it on subroutine (it will kill my perf for nothings)
|
// FIXME for the moment disable it on subroutine (it will kill my perf for nothings)
|
||||||
|
@ -518,6 +520,10 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
dev->PSSetShaderResource(0, tex->m_texture);
|
dev->PSSetShaderResource(0, tex->m_texture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (spritehack && (ps_sel.atst == 2)) {
|
||||||
|
ps_sel.atst = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WARNING: setup of the program must be done first. So you can setup
|
// WARNING: setup of the program must be done first. So you can setup
|
||||||
|
@ -603,7 +609,10 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
||||||
|
|
||||||
static const uint32 iatst[] = {1, 0, 5, 6, 7, 2, 3, 4};
|
static const uint32 iatst[] = {1, 0, 5, 6, 7, 2, 3, 4};
|
||||||
|
|
||||||
ps_sel.atst = iatst[ps_sel.atst];
|
ps_sel.atst = iatst[atst];
|
||||||
|
if (spritehack && (ps_sel.atst == 2)) {
|
||||||
|
ps_sel.atst = 1;
|
||||||
|
}
|
||||||
|
|
||||||
dev->SetupPS(ps_sel);
|
dev->SetupPS(ps_sel);
|
||||||
|
|
||||||
|
|
|
@ -325,7 +325,7 @@ void atst(vec4 c)
|
||||||
discard;
|
discard;
|
||||||
#elif (PS_ATST == 1) // always
|
#elif (PS_ATST == 1) // always
|
||||||
// nothing to do
|
// nothing to do
|
||||||
#elif (PS_ATST == 2) && (PS_SPRITEHACK == 0) // l
|
#elif (PS_ATST == 2) // l
|
||||||
if ((AREF - a - 0.5f) < 0.0f)
|
if ((AREF - a - 0.5f) < 0.0f)
|
||||||
discard;
|
discard;
|
||||||
#elif (PS_ATST == 3 ) // le
|
#elif (PS_ATST == 3 ) // le
|
||||||
|
|
|
@ -1046,7 +1046,7 @@ static const char* tfx_fs_all_glsl =
|
||||||
" discard;\n"
|
" discard;\n"
|
||||||
"#elif (PS_ATST == 1) // always\n"
|
"#elif (PS_ATST == 1) // always\n"
|
||||||
" // nothing to do\n"
|
" // nothing to do\n"
|
||||||
"#elif (PS_ATST == 2) && (PS_SPRITEHACK == 0) // l\n"
|
"#elif (PS_ATST == 2) // l\n"
|
||||||
" if ((AREF - a - 0.5f) < 0.0f)\n"
|
" if ((AREF - a - 0.5f) < 0.0f)\n"
|
||||||
" discard;\n"
|
" discard;\n"
|
||||||
"#elif (PS_ATST == 3 ) // le\n"
|
"#elif (PS_ATST == 3 ) // le\n"
|
||||||
|
|
Loading…
Reference in New Issue