//========== Copyright (c) Valve Corporation, All rights reserved. ==========//
// blurs colors by averages
// bleeds alpha by max of current vs averages

sampler g_texSampler	: register( s0 );

struct PS_INPUT
{
	float2 uv	: TEXCOORD0;
};

float2 g_vPsTapOffsets[2] : register( c0 );

float4 main( PS_INPUT i ) : COLOR
{
	float4 cOut;

	cOut  = tex2D( g_texSampler, float2( i.uv.x + g_vPsTapOffsets[0].x, i.uv.y + g_vPsTapOffsets[0].y ) );
	cOut += tex2D( g_texSampler, float2( i.uv.x                       , i.uv.y + g_vPsTapOffsets[0].y ) );
	cOut += tex2D( g_texSampler, float2( i.uv.x - g_vPsTapOffsets[0].x, i.uv.y + g_vPsTapOffsets[0].y ) );
	
	cOut += tex2D( g_texSampler, float2( i.uv.x + g_vPsTapOffsets[0].x, i.uv.y                        ) );
	cOut += tex2D( g_texSampler, float2( i.uv.x                       , i.uv.y                        ) );
	cOut += tex2D( g_texSampler, float2( i.uv.x - g_vPsTapOffsets[0].x, i.uv.y                        ) );
	
	cOut += tex2D( g_texSampler, float2( i.uv.x + g_vPsTapOffsets[0].x, i.uv.y - g_vPsTapOffsets[0].y ) );
	cOut += tex2D( g_texSampler, float2( i.uv.x                       , i.uv.y - g_vPsTapOffsets[0].y ) );
	cOut += tex2D( g_texSampler, float2( i.uv.x - g_vPsTapOffsets[0].x, i.uv.y - g_vPsTapOffsets[0].y ) );
	
	cOut *= (1.0f/9.0f);

	cOut.a = max( cOut.a * 1.0f, tex2D( g_texSampler, i.uv ).a ); //never reduce alpha, only increase it
	return saturate( cOut );
}