PixelShaderGen: Use integer math for rasterizer color.

This commit is contained in:
Tony Wasserka 2013-08-14 16:16:06 +02:00
parent 3ea97f7730
commit ac1c77c392
1 changed files with 16 additions and 16 deletions

View File

@ -132,8 +132,8 @@ static const char *tevCInputTable[] = // CC
"(c2.aaa)", // A2, "(c2.aaa)", // A2,
"(textemp.rgb)", // TEXC, "(textemp.rgb)", // TEXC,
"(textemp.aaa)", // TEXA, "(textemp.aaa)", // TEXA,
"(rastemp.rgb)", // RASC, "(float3(irastemp.rgb)/255.0)", // RASC,
"(rastemp.aaa)", // RASA, "(float3(irastemp.aaa)/255.0)", // RASA,
"float3(1.0, 1.0, 1.0)", // ONE "float3(1.0, 1.0, 1.0)", // ONE
"float3(0.5, 0.5, 0.5)", // HALF "float3(0.5, 0.5, 0.5)", // HALF
"(konsttemp.rgb)", //"konsttemp.rgb", // KONST "(konsttemp.rgb)", //"konsttemp.rgb", // KONST
@ -149,8 +149,8 @@ static const char *tevCInputTable[] = // CC
"(cc2.aaa)", // A2, "(cc2.aaa)", // A2,
"(textemp.rgb)", // TEXC, "(textemp.rgb)", // TEXC,
"(textemp.aaa)", // TEXA, "(textemp.aaa)", // TEXA,
"(crastemp.rgb)", // RASC, "(float3(icrastemp.rgb)/255.0)", // RASC,
"(crastemp.aaa)", // RASA, "(float3(icrastemp.aaa)/255.0)", // RASA,
"float3(1.0, 1.0, 1.0)", // ONE "float3(1.0, 1.0, 1.0)", // ONE
"float3(0.5, 0.5, 0.5)", // HALF "float3(0.5, 0.5, 0.5)", // HALF
"(ckonsttemp.rgb)", //"konsttemp.rgb", // KONST "(ckonsttemp.rgb)", //"konsttemp.rgb", // KONST
@ -165,7 +165,7 @@ static const char *tevAInputTable[] = // CA
"c1", // A1, "c1", // A1,
"c2", // A2, "c2", // A2,
"textemp", // TEXA, "textemp", // TEXA,
"rastemp", // RASA, "(float4(irastemp) / 255.0)", // RASA,
"konsttemp", // KONST, (hw1 had quarter) "konsttemp", // KONST, (hw1 had quarter)
"float4(0.0, 0.0, 0.0, 0.0)", // ZERO "float4(0.0, 0.0, 0.0, 0.0)", // ZERO
///added extra values to map clamped values ///added extra values to map clamped values
@ -174,7 +174,7 @@ static const char *tevAInputTable[] = // CA
"cc1", // A1, "cc1", // A1,
"cc2", // A2, "cc2", // A2,
"textemp", // TEXA, "textemp", // TEXA,
"crastemp", // RASA, "(float4(icrastemp) / 255.0)", // RASA,
"ckonsttemp", // KONST, (hw1 had quarter) "ckonsttemp", // KONST, (hw1 had quarter)
"float4(0.0, 0.0, 0.0, 0.0)", // ZERO "float4(0.0, 0.0, 0.0, 0.0)", // ZERO
"PADERROR5", "PADERROR6", "PADERROR7", "PADERROR8", "PADERROR5", "PADERROR6", "PADERROR7", "PADERROR8",
@ -183,14 +183,14 @@ static const char *tevAInputTable[] = // CA
static const char *tevRasTable[] = static const char *tevRasTable[] =
{ {
"colors_0", "int4(round(colors_0 * 255.0))",
"colors_1", "int4(round(colors_1 * 255.0))",
"ERROR13", //2 "ERROR13", //2
"ERROR14", //3 "ERROR14", //3
"ERROR15", //4 "ERROR15", //4
"float4(alphabump,alphabump,alphabump,alphabump)", // use bump alpha "int4(1,1,1,1) * int(round(alphabump * 255.0))", // use bump alpha
"(float4(alphabump,alphabump,alphabump,alphabump)*(255.0/248.0))", //normalized "int4(1,1,1,1) * int(round(alphabump * 255.0)) * 255 / 248)", //normalized
"float4(0.0, 0.0, 0.0, 0.0)", // zero "int4(0, 0, 0, 0)", // zero
}; };
//static const char *tevTexFunc[] = { "tex2D", "texRECT" }; //static const char *tevTexFunc[] = { "tex2D", "texRECT" };
@ -389,15 +389,15 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T
out.Write(" ) {\n"); out.Write(" ) {\n");
} }
out.Write(" float4 c0 = " I_COLORS"[1], c1 = " I_COLORS"[2], c2 = " I_COLORS"[3], prev = float4(0.0, 0.0, 0.0, 0.0), textemp = float4(0.0, 0.0, 0.0, 0.0), rastemp = float4(0.0, 0.0, 0.0, 0.0), konsttemp = float4(0.0, 0.0, 0.0, 0.0);\n" out.Write(" float4 c0 = " I_COLORS"[1], c1 = " I_COLORS"[2], c2 = " I_COLORS"[3], prev = float4(0.0, 0.0, 0.0, 0.0), textemp = float4(0.0, 0.0, 0.0, 0.0), konsttemp = float4(0.0, 0.0, 0.0, 0.0);\n"
" int4 itextemp = int4(0, 0, 0, 0);\n" " int4 irastemp = int4(0, 0, 0, 0), icrastemp = int4(0, 0, 0, 0), itextemp = int4(0, 0, 0, 0);\n"
" float3 comp16 = float3(1.0, 255.0, 0.0), comp24 = float3(1.0, 255.0, 255.0*255.0);\n" " float3 comp16 = float3(1.0, 255.0, 0.0), comp24 = float3(1.0, 255.0, 255.0*255.0);\n"
" float alphabump=0.0;\n" " float alphabump=0.0;\n"
" float3 tevcoord=float3(0.0, 0.0, 0.0);\n" " float3 tevcoord=float3(0.0, 0.0, 0.0);\n"
" float2 wrappedcoord=float2(0.0,0.0), tempcoord=float2(0.0,0.0);\n" " float2 wrappedcoord=float2(0.0,0.0), tempcoord=float2(0.0,0.0);\n"
" float4 cc0=float4(0.0,0.0,0.0,0.0), cc1=float4(0.0,0.0,0.0,0.0);\n" " float4 cc0=float4(0.0,0.0,0.0,0.0), cc1=float4(0.0,0.0,0.0,0.0);\n"
" float4 cc2=float4(0.0,0.0,0.0,0.0), cprev=float4(0.0,0.0,0.0,0.0);\n" " float4 cc2=float4(0.0,0.0,0.0,0.0), cprev=float4(0.0,0.0,0.0,0.0);\n"
" float4 crastemp=float4(0.0,0.0,0.0,0.0),ckonsttemp=float4(0.0,0.0,0.0,0.0);\n\n"); " float4 ckonsttemp=float4(0.0,0.0,0.0,0.0);\n\n");
if (ApiType == API_OPENGL) if (ApiType == API_OPENGL)
{ {
@ -798,8 +798,8 @@ static inline void WriteStage(T& out, pixel_shader_uid_data& uid_data, int n, AP
uid_data.stagehash[n].tevorders_colorchan = bpmem.tevorders[n / 2].getColorChan(n & 1); uid_data.stagehash[n].tevorders_colorchan = bpmem.tevorders[n / 2].getColorChan(n & 1);
const char *rasswap = swapModeTable[bpmem.combiners[n].alphaC.rswap]; const char *rasswap = swapModeTable[bpmem.combiners[n].alphaC.rswap];
out.Write("rastemp = %s.%s;\n", tevRasTable[bpmem.tevorders[n / 2].getColorChan(n & 1)], rasswap); out.Write("irastemp = %s.%s;\n", tevRasTable[bpmem.tevorders[n / 2].getColorChan(n & 1)], rasswap);
out.Write("crastemp = frac(rastemp * (255.0/256.0)) * (256.0/255.0);\n"); out.Write("icrastemp = irastemp & 0xFF;\n");
} }
uid_data.stagehash[n].tevorders_enable = bpmem.tevorders[n / 2].getEnable(n & 1); uid_data.stagehash[n].tevorders_enable = bpmem.tevorders[n / 2].getEnable(n & 1);