PixelShaderGen: Some cleanups.
This commit is contained in:
parent
3c02f227db
commit
9eccd56ef0
|
@ -157,6 +157,11 @@
|
||||||
#define TEVALPHAARG_KONST 6
|
#define TEVALPHAARG_KONST 6
|
||||||
#define TEVALPHAARG_ZERO 7
|
#define TEVALPHAARG_ZERO 7
|
||||||
|
|
||||||
|
#define GX_TEVPREV 0
|
||||||
|
#define GX_TEVREG0 1
|
||||||
|
#define GX_TEVREG1 2
|
||||||
|
#define GX_TEVREG2 3
|
||||||
|
|
||||||
#define ALPHACMP_NEVER 0
|
#define ALPHACMP_NEVER 0
|
||||||
#define ALPHACMP_LESS 1
|
#define ALPHACMP_LESS 1
|
||||||
#define ALPHACMP_EQUAL 2
|
#define ALPHACMP_EQUAL 2
|
||||||
|
|
|
@ -269,7 +269,9 @@ const char *WriteLocation(API_TYPE ApiType)
|
||||||
template<class T>
|
template<class T>
|
||||||
void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components)
|
void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_TYPE ApiType, u32 components)
|
||||||
{
|
{
|
||||||
|
// TODO: Where does this TODO belong again...?
|
||||||
// TODO: Can be optimized if using alpha pass
|
// TODO: Can be optimized if using alpha pass
|
||||||
|
|
||||||
#define SetUidField(name, value) if (&out.GetUidData() != NULL) {out.GetUidData().name = value; };
|
#define SetUidField(name, value) if (&out.GetUidData() != NULL) {out.GetUidData().name = value; };
|
||||||
#define OR_UidField(name, value) if (&out.GetUidData() != NULL) {out.GetUidData().name |= value; };
|
#define OR_UidField(name, value) if (&out.GetUidData() != NULL) {out.GetUidData().name |= value; };
|
||||||
out.SetBuffer(text);
|
out.SetBuffer(text);
|
||||||
|
@ -915,7 +917,6 @@ static void WriteStage(T& out, int n, API_TYPE ApiType)
|
||||||
|| cc.c == TEVCOLORARG_C0 || cc.c == TEVCOLORARG_A0
|
|| cc.c == TEVCOLORARG_C0 || cc.c == TEVCOLORARG_A0
|
||||||
|| ac.a == TEVALPHAARG_A0 || ac.b == TEVALPHAARG_A0 || ac.c == TEVALPHAARG_A0)
|
|| ac.a == TEVALPHAARG_A0 || ac.b == TEVALPHAARG_A0 || ac.c == TEVALPHAARG_A0)
|
||||||
{
|
{
|
||||||
// TODO: WTF?
|
|
||||||
out.SetConstantsUsed(C_COLORS+1,C_COLORS+1);
|
out.SetConstantsUsed(C_COLORS+1,C_COLORS+1);
|
||||||
if(RegisterStates[1].AlphaNeedOverflowControl || RegisterStates[1].ColorNeedOverflowControl)
|
if(RegisterStates[1].AlphaNeedOverflowControl || RegisterStates[1].ColorNeedOverflowControl)
|
||||||
{
|
{
|
||||||
|
@ -971,26 +972,19 @@ static void WriteStage(T& out, int n, API_TYPE ApiType)
|
||||||
RegisterStates[cc.dest].ColorNeedOverflowControl = (cc.clamp == 0);
|
RegisterStates[cc.dest].ColorNeedOverflowControl = (cc.clamp == 0);
|
||||||
RegisterStates[cc.dest].AuxStored = false;
|
RegisterStates[cc.dest].AuxStored = false;
|
||||||
|
|
||||||
/* if (cc.d == TEVCOLORARG_C0 || cc.d == TEVCOLORARG_A0 || ac.d == TEVALPHAARG_A0)
|
if (cc.d == TEVCOLORARG_C0 || cc.d == TEVCOLORARG_A0 || ac.d == TEVALPHAARG_A0)
|
||||||
{
|
|
||||||
out.SetConstantsUsed(C_COLORS+1,C_COLORS+1);
|
out.SetConstantsUsed(C_COLORS+1,C_COLORS+1);
|
||||||
// TODO: 11 bit signed overflow..
|
|
||||||
}
|
|
||||||
if (cc.d == TEVCOLORARG_C1 || cc.d == TEVCOLORARG_A1 || ac.d == TEVALPHAARG_A1)
|
|
||||||
{
|
|
||||||
out.SetConstantsUsed(C_COLORS+2,C_COLORS+2);
|
|
||||||
// TODO: 11 bit signed overflow..
|
|
||||||
}
|
|
||||||
if (cc.d == TEVCOLORARG_C2 || cc.d == TEVCOLORARG_A2 || ac.d == TEVALPHAARG_A2)
|
|
||||||
{
|
|
||||||
out.SetConstantsUsed(C_COLORS+3,C_COLORS+3);
|
|
||||||
// TODO: 11 bit signed overflow..
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// TODO: Are there enums for this?
|
if (cc.d == TEVCOLORARG_C1 || cc.d == TEVCOLORARG_A1 || ac.d == TEVALPHAARG_A1)
|
||||||
if (cc.dest >= 1 && cc.dest <= 3)
|
out.SetConstantsUsed(C_COLORS+2,C_COLORS+2);
|
||||||
|
|
||||||
|
if (cc.d == TEVCOLORARG_C2 || cc.d == TEVCOLORARG_A2 || ac.d == TEVALPHAARG_A2)
|
||||||
|
out.SetConstantsUsed(C_COLORS+3,C_COLORS+3);
|
||||||
|
|
||||||
|
if (cc.dest >= GX_TEVREG0 && cc.dest <= GX_TEVREG2)
|
||||||
out.SetConstantsUsed(C_COLORS+cc.dest, C_COLORS+cc.dest);
|
out.SetConstantsUsed(C_COLORS+cc.dest, C_COLORS+cc.dest);
|
||||||
if (ac.dest >= 1 && ac.dest <= 3)
|
|
||||||
|
if (ac.dest >= GX_TEVREG0 && ac.dest <= GX_TEVREG2)
|
||||||
out.SetConstantsUsed(C_COLORS+ac.dest, C_COLORS+ac.dest);
|
out.SetConstantsUsed(C_COLORS+ac.dest, C_COLORS+ac.dest);
|
||||||
|
|
||||||
out.Write("// color combine\n");
|
out.Write("// color combine\n");
|
||||||
|
@ -1103,14 +1097,14 @@ void SampleTexture(T& out, const char *destination, const char *texcoords, const
|
||||||
|
|
||||||
static const char *tevAlphaFuncsTable[] =
|
static const char *tevAlphaFuncsTable[] =
|
||||||
{
|
{
|
||||||
"(false)", //ALPHACMP_NEVER 0, TODO: Not safe?
|
"(false)", // NEVER
|
||||||
"(prev.a <= %s - (0.25f/255.0f))", //ALPHACMP_LESS 1
|
"(prev.a <= %s - (0.25f/255.0f))", // LESS
|
||||||
"(abs( prev.a - %s ) < (0.5f/255.0f))", //ALPHACMP_EQUAL 2
|
"(abs( prev.a - %s ) < (0.5f/255.0f))", // EQUAL
|
||||||
"(prev.a < %s + (0.25f/255.0f))", //ALPHACMP_LEQUAL 3
|
"(prev.a < %s + (0.25f/255.0f))", // LEQUAL
|
||||||
"(prev.a >= %s + (0.25f/255.0f))", //ALPHACMP_GREATER 4
|
"(prev.a >= %s + (0.25f/255.0f))", // GREATER
|
||||||
"(abs( prev.a - %s ) >= (0.5f/255.0f))", //ALPHACMP_NEQUAL 5
|
"(abs( prev.a - %s ) >= (0.5f/255.0f))", // NEQUAL
|
||||||
"(prev.a > %s - (0.25f/255.0f))", //ALPHACMP_GEQUAL 6
|
"(prev.a > %s - (0.25f/255.0f))", // GEQUAL
|
||||||
"(true)" //ALPHACMP_ALWAYS 7
|
"(true)" // ALWAYS
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *tevAlphaFunclogicTable[] =
|
static const char *tevAlphaFunclogicTable[] =
|
||||||
|
@ -1132,7 +1126,6 @@ static void WriteAlphaTest(T& out, API_TYPE ApiType, DSTALPHA_MODE dstAlphaMode,
|
||||||
|
|
||||||
out.SetConstantsUsed(C_ALPHA, C_ALPHA);
|
out.SetConstantsUsed(C_ALPHA, C_ALPHA);
|
||||||
|
|
||||||
|
|
||||||
// using discard then return works the same in cg and dx9 but not in dx11
|
// using discard then return works the same in cg and dx9 but not in dx11
|
||||||
out.Write("\tif(!( ");
|
out.Write("\tif(!( ");
|
||||||
|
|
||||||
|
|
|
@ -419,6 +419,7 @@ void PixelShaderManager::SetPSTextureDims(int texid)
|
||||||
// This one is high in profiles (0.5%).
|
// This one is high in profiles (0.5%).
|
||||||
// TODO: Move conversion out, only store the raw color value
|
// TODO: Move conversion out, only store the raw color value
|
||||||
// and update it when the shader constant is set, only.
|
// and update it when the shader constant is set, only.
|
||||||
|
// TODO: Conversion should be checked in the context of tev_fixes..
|
||||||
void PixelShaderManager::SetColorChanged(int type, int num, bool high)
|
void PixelShaderManager::SetColorChanged(int type, int num, bool high)
|
||||||
{
|
{
|
||||||
float *pf = &lastRGBAfull[type][num][0];
|
float *pf = &lastRGBAfull[type][num][0];
|
||||||
|
|
Loading…
Reference in New Issue