float3 fColor0 : register(c0);
float3 fColor1 : register(c1);
float fChroma : register(c2);
float3 fGamma : register(c3);
float3 fMulti : register(c4);
float3 fShift : register(c5);
float3 fBloom : register(c6);
float2 fBlur : register(c7);
static const float3 fLuminance = {0.298912, 0.586611, 0.114478};
sampler sRT : register(s0);

float4 Color(float2 tex : TEXCOORD0) : COLOR0
{
	float3 result;
	result = tex2D(sRT, tex).rgb * (1.0 + fColor0 + fColor1);
	result = (result - dot(result, fLuminance)) * fChroma + dot(result, fLuminance);
	result = (pow(result, fGamma) - 0.5) * fMulti + 0.5 + fShift;
	return float4(result, 1.0);
}

float4 Press(float2 tex : TEXCOORD0) : COLOR0
{
	float3 result = {0.0, 0.0, 0.0};
/*	result += tex2D(sRT, tex + float2(-1.5, -1.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2(-0.5, -1.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 0.5, -1.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 1.5, -1.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2(-1.5, -0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2(-0.5, -0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 0.5, -0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 1.5, -0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2(-1.5,  0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2(-0.5,  0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 0.5,  0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 1.5,  0.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2(-1.5,  1.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2(-0.5,  1.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 0.5,  1.5) * fBlur).rgb;
	result += tex2D(sRT, tex + float2( 1.5,  1.5) * fBlur).rgb;*/
	result = max(max(max(max(tex2D(sRT, tex + float2(-1.5, -1.5) * fBlur).rgb, tex2D(sRT, tex + float2(-0.5, -1.5) * fBlur).rgb),
		max(tex2D(sRT, tex + float2( 0.5, -1.5) * fBlur).rgb, tex2D(sRT, tex + float2( 1.5, -1.5) * fBlur).rgb)),
		max(max(tex2D(sRT, tex + float2(-1.5, -0.5) * fBlur).rgb, tex2D(sRT, tex + float2(-0.5, -0.5) * fBlur).rgb),
		max(tex2D(sRT, tex + float2( 0.5, -0.5) * fBlur).rgb, tex2D(sRT, tex + float2( 1.5, -0.5) * fBlur).rgb))),
		max(max(max(tex2D(sRT, tex + float2(-1.5,  0.5) * fBlur).rgb, tex2D(sRT, tex + float2(-0.5,  0.5) * fBlur).rgb),
		max(tex2D(sRT, tex + float2( 0.5,  0.5) * fBlur).rgb, tex2D(sRT, tex + float2( 1.5,  0.5) * fBlur).rgb)),
		max(max(tex2D(sRT, tex + float2(-1.5,  1.5) * fBlur).rgb, tex2D(sRT, tex + float2(-0.5,  1.5) * fBlur).rgb),
		max(tex2D(sRT, tex + float2( 0.5,  1.5) * fBlur).rgb, tex2D(sRT, tex + float2( 1.5,  1.5) * fBlur).rgb))));
	result = result * (1.0 + fColor0 + fColor1);
	result = (result - dot(result, fLuminance)) * fChroma + dot(result, fLuminance);
	result = (pow(result, fGamma) - 0.5) * fMulti + 0.5 + fShift;
	result = (result - dot(result, fLuminance)) * fBloom.y + dot(result, fLuminance);
	result = max(result + fBloom.x, float3(0.0, 0.0, 0.0));
	return float4(result, 1.0);
}

float4 Bloom(float2 tex : TEXCOORD0) : COLOR0
{
	float3 result = {0.0, 0.0, 0.0};
	result += tex2D(sRT, tex + float2(-20.0, -20.0) * fBlur).rgb * 0.01222;
	result += tex2D(sRT, tex + float2(-16.0, -16.0) * fBlur).rgb * 0.02783;
	result += tex2D(sRT, tex + float2(-12.0, -12.0) * fBlur).rgb * 0.06559;
	result += tex2D(sRT, tex + float2( -8.0,  -8.0) * fBlur).rgb * 0.12098;
	result += tex2D(sRT, tex + float2( -4.0,  -4.0) * fBlur).rgb * 0.17467;
	result += tex2D(sRT, tex + float2(  0.0,   0.0) * fBlur).rgb * 0.19741;
	result += tex2D(sRT, tex + float2(  4.0,   4.0) * fBlur).rgb * 0.17467;
	result += tex2D(sRT, tex + float2(  8.0,   8.0) * fBlur).rgb * 0.12098;
	result += tex2D(sRT, tex + float2( 12.0,  12.0) * fBlur).rgb * 0.06559;
	result += tex2D(sRT, tex + float2( 16.0,  16.0) * fBlur).rgb * 0.02783;
	result += tex2D(sRT, tex + float2( 20.0,  20.0) * fBlur).rgb * 0.01222;
	return float4(result * fBloom.z, 1.0);
}

float4 Blend(float2 tex : TEXCOORD0) : COLOR0
{
	return float4(tex2D(sRT, tex).rgb, 1.0);
}
