//Pixel Shader for TEV stages //4 TEV stages, 2 texgens, 0 IND stages sampler samp0 : register(s0); sampler samp1 : register(s1); sampler samp2 : register(s2); sampler samp3 : register(s3); sampler samp4 : register(s4); sampler samp5 : register(s5); sampler samp6 : register(s6); sampler samp7 : register(s7); Texture2D Tex0 : register(t0); Texture2D Tex1 : register(t1); Texture2D Tex2 : register(t2); Texture2D Tex3 : register(t3); Texture2D Tex4 : register(t4); Texture2D Tex5 : register(t5); Texture2D Tex6 : register(t6); Texture2D Tex7 : register(t7); uniform float4 color[4] : register(c0); uniform float4 k[4] : register(c4); uniform float4 alphaRef[1] : register(c8); uniform float4 texdim[8] : register(c9); uniform float4 czbias[2] : register(c17); uniform float4 cindscale[2] : register(c19); uniform float4 cindmtx[6] : register(c21); uniform float4 cfog[3] : register(c27); uniform float4 cPLights[40] : register(c30); uniform float4 cPmtrl[4] : register(c70); void main( out float4 ocol0 : SV_Target0, in float4 rawpos : SV_Position, in centroid float4 colors_0 : COLOR0, in centroid float4 colors_1 : COLOR1, in centroid float3 uv0 : TEXCOORD0, in centroid float3 uv1 : TEXCOORD1, in centroid float4 clipPos : TEXCOORD2 ) { float4 c0 = color[1], c1 = color[2], c2 = color[3], prev = float4(0.0f, 0.0f, 0.0f, 0.0f), textemp = float4(0.0f, 0.0f, 0.0f, 0.0f), rastemp = float4(0.0f, 0.0f, 0.0f, 0.0f), konsttemp = float4(0.0f, 0.0f, 0.0f, 0.0f); float3 comp16 = float3(1.0f, 255.0f, 0.0f), comp24 = float3(1.0f, 255.0f, 255.0f*255.0f); float alphabump=0.0f; float3 tevcoord=float3(0.0f, 0.0f, 0.0f); float2 wrappedcoord=float2(0.0f,0.0f), tempcoord=float2(0.0f,0.0f); float4 cc0=float4(0.0f,0.0f,0.0f,0.0f), cc1=float4(0.0f,0.0f,0.0f,0.0f); float4 cc2=float4(0.0f,0.0f,0.0f,0.0f), cprev=float4(0.0f,0.0f,0.0f,0.0f); float4 crastemp=float4(0.0f,0.0f,0.0f,0.0f),ckonsttemp=float4(0.0f,0.0f,0.0f,0.0f); clipPos = float4(rawpos.x, rawpos.y, clipPos.z, clipPos.w); if (uv0.z != 0.0f) uv0.xy = uv0.xy / uv0.z; uv0.xy = uv0.xy * texdim[0].zw; if (uv1.z != 0.0f) uv1.xy = uv1.xy / uv1.z; uv1.xy = uv1.xy * texdim[1].zw; // TEV stage 0 textemp = float4(1.0f, 1.0f, 1.0f, 1.0f); konsttemp = float4(k[2].bbb, ERROR8); ckonsttemp = frac(konsttemp * (255.0f/256.0f)) * (256.0f/255.0f); cprev = prev; cc0 = frac(c0 * (255.0f/256.0f)) * (256.0f/255.0f); cc1 = frac(c1 * (255.0f/256.0f)) * (256.0f/255.0f); // color combine c1.rgb = (konsttemp.rgb) + (max(sign((cc0.rgb).rgb - (textemp.aaa).rgb - (0.25f/255.0f)), float3(0.0f, 0.0f, 0.0f)) * (cc1.aaa)); // alpha combine c2.a = clamp( konsttemp.a + (abs(dot(cprev.rgb, comp16) - dot(float4(0.0f, 0.0f, 0.0f, 0.0f).rgb, comp16)) < (0.5f/255.0f) ? cc0.a : 0.0f), 0.0f, 1.0f); // TEV done // TEV stage 1 tevcoord.xy = uv0.xy; textemp = Tex0.Sample(samp0,tevcoord.xy * texdim[0].xy).aaaa; cprev = prev; // color combine prev.rgb = (prev.rgb)+(cprev.rgb); // alpha combine prev.a = prev.a+cprev.a; // TEV done // TEV stage 2 tevcoord.xy = uv0.xy; textemp = Tex0.Sample(samp0,tevcoord.xy * texdim[0].xy).aaaa; cprev = frac(prev * (255.0f/256.0f)) * (256.0f/255.0f); // color combine prev.rgb = (prev.rgb)+(cprev.rgb); // alpha combine prev.a = c0.a+cprev.a; // TEV done // TEV stage 3 tevcoord.xy = uv0.xy; textemp = Tex0.Sample(samp0,tevcoord.xy * texdim[0].xy).aaaa; cprev = frac(prev * (255.0f/256.0f)) * (256.0f/255.0f); // color combine prev.rgb = (prev.rgb)+(cprev.rgb); // alpha combine c2.a = clamp(c0.a+cprev.a, 0.0f, 1.0f); // TEV done prev.a = c2.a; prev = frac(prev * (255.0f/256.0f)) * (256.0f/255.0f); float zCoord = rawpos.z; ocol0 = prev; }