/**
 * @ Version: SCREEN SPACE SHADERS - UPDATE 22
 * @ Description: Bloom - Upsample
 * @ Modified time: 2024-10-26 10:26
 * @ Author: https://www.moddb.com/members/ascii1457
 * @ Mod: https://www.moddb.com/mods/stalker-anomaly/addons/screen-space-shaders
 */

//#include "common.h"
#include "screenspace_common.h"

Texture2D s_downsample;

uniform float4 blur_setup; // Buffer Res [ x:width | y:height | z:scale | w:offset size ]

float4 main ( p_screen I ) : SV_Target
{
	float2 PixelSize = (1.0f / blur_setup.xy) * blur_setup.w;

	const float2 Coords[9] = {
		float2( -PixelSize.x,  PixelSize.y ), float2(  0.0f,  PixelSize.y ), 
		float2(  PixelSize.x,  PixelSize.y ), float2( -PixelSize.x,  0.0f ), 
		float2(  0.0f,  0.0f ), float2(  PixelSize.x,  0.0f ),
		float2( -PixelSize.x, -PixelSize.y ), float2(  0.0f, -PixelSize.y ), 
		float2(  PixelSize.x, -PixelSize.y )
	};

	float4 Color = 0;

	for( int i = 0; i < 9; i++ )
	{
		Color += s_bloom.Sample(smp_rtlinear, I.tc0 + Coords[i]);
	}
	
	Color += s_downsample.Sample(smp_rtlinear, I.tc0 + Coords[1]);
	Color += s_downsample.Sample(smp_rtlinear, I.tc0 + Coords[3]);
	Color += s_downsample.Sample(smp_rtlinear, I.tc0 + Coords[5]);
	Color += s_downsample.Sample(smp_rtlinear, I.tc0 + Coords[7]);

	Color /= 13;

	return saturate(Color);
}