diff options
-rw-r--r-- | hlsl/bloom.fx | 49 | ||||
-rw-r--r-- | hlsl/yiq_decode.fx | 19 | ||||
-rw-r--r-- | hlsl/yiq_encode.fx | 12 | ||||
-rw-r--r-- | src/osd/windows/d3dhlsl.c | 11 |
4 files changed, 38 insertions, 53 deletions
diff --git a/hlsl/bloom.fx b/hlsl/bloom.fx index 83f87a2961d..dbdb13868b3 100644 --- a/hlsl/bloom.fx +++ b/hlsl/bloom.fx @@ -143,12 +143,7 @@ struct VS_OUTPUT { float4 Position : POSITION; float4 Color : COLOR0; - float4 TexCoord01 : TEXCOORD0; - float4 TexCoord23 : TEXCOORD1; - float4 TexCoord45 : TEXCOORD2; - float4 TexCoord67 : TEXCOORD3; - float4 TexCoord89 : TEXCOORD4; - float2 TexCoordA : TEXCOORD5; + float2 TexCoord : TEXCOORD0; }; struct VS_INPUT @@ -162,12 +157,7 @@ struct VS_INPUT struct PS_INPUT { float4 Color : COLOR0; - float4 TexCoord01 : TEXCOORD0; - float4 TexCoord23 : TEXCOORD1; - float4 TexCoord45 : TEXCOORD2; - float4 TexCoord67 : TEXCOORD3; - float4 TexCoord89 : TEXCOORD4; - float2 TexCoordA : TEXCOORD5; + float2 TexCoord : TEXCOORD0; }; //----------------------------------------------------------------------------- @@ -188,18 +178,7 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.Position.xy *= float2(2.0f, 2.0f); Output.Color = Input.Color; float2 inversePixel = 1.0f / TargetSize; - float2 TexCoord = Input.Position.xy * inversePixel + float2(0.5f, 0.5f) * inversePixel; - Output.TexCoord01.xy = TexCoord - inversePixel; - Output.TexCoord01.zw = (((TexCoord - inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.5f; - Output.TexCoord23.xy = (((TexCoord - inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.25f; - Output.TexCoord23.zw = (((TexCoord - inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.125f; - Output.TexCoord45.xy = (((TexCoord - inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.0625f; - Output.TexCoord45.zw = (((TexCoord - inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.03125f; - Output.TexCoord67.xy = (((TexCoord - inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.015625f; - Output.TexCoord67.zw = (((TexCoord + inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.0078125f; - Output.TexCoord89.xy = (((TexCoord + inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.00390625f; - Output.TexCoord89.zw = (((TexCoord + inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.001953125f; - Output.TexCoordA = (((TexCoord + inversePixel) - 0.5f) * 1.00f + 0.5f) * 1.0f;//0.0009765625f; + Output.TexCoord = Input.Position.xy * inversePixel - float2(0.5f, 0.5f) * inversePixel; return Output; } @@ -214,17 +193,17 @@ uniform float3 Level89AWeight; float4 ps_main(PS_INPUT Input) : COLOR { - float3 texel0 = tex2D(DiffuseSampler0, Input.TexCoord01.xy).rgb; - float3 texel1 = tex2D(DiffuseSampler1, Input.TexCoord01.zw).rgb; - float3 texel2 = tex2D(DiffuseSampler2, Input.TexCoord23.xy).rgb; - float3 texel3 = tex2D(DiffuseSampler3, Input.TexCoord23.zw).rgb; - float3 texel4 = tex2D(DiffuseSampler4, Input.TexCoord45.xy).rgb; - float3 texel5 = tex2D(DiffuseSampler5, Input.TexCoord45.zw).rgb; - float3 texel6 = tex2D(DiffuseSampler6, Input.TexCoord67.xy).rgb; - float3 texel7 = tex2D(DiffuseSampler7, Input.TexCoord67.zw).rgb; - float3 texel8 = tex2D(DiffuseSampler8, Input.TexCoord89.xy).rgb; - float3 texel9 = tex2D(DiffuseSampler9, Input.TexCoord89.zw).rgb; - float3 texelA = tex2D(DiffuseSamplerA, Input.TexCoordA).rgb; + float3 texel0 = tex2D(DiffuseSampler0, Input.TexCoord).rgb; + float3 texel1 = tex2D(DiffuseSampler1, Input.TexCoord).rgb; + float3 texel2 = tex2D(DiffuseSampler2, Input.TexCoord).rgb; + float3 texel3 = tex2D(DiffuseSampler3, Input.TexCoord).rgb; + float3 texel4 = tex2D(DiffuseSampler4, Input.TexCoord).rgb; + float3 texel5 = tex2D(DiffuseSampler5, Input.TexCoord).rgb; + float3 texel6 = tex2D(DiffuseSampler6, Input.TexCoord).rgb; + float3 texel7 = tex2D(DiffuseSampler7, Input.TexCoord).rgb; + float3 texel8 = tex2D(DiffuseSampler8, Input.TexCoord).rgb; + float3 texel9 = tex2D(DiffuseSampler9, Input.TexCoord).rgb; + float3 texelA = tex2D(DiffuseSamplerA, Input.TexCoord).rgb; texel0 = texel0 * Level0123Weight.x; texel1 = texel1 * Level0123Weight.y; diff --git a/hlsl/yiq_decode.fx b/hlsl/yiq_decode.fx index afbdb98e528..c1caa631f14 100644 --- a/hlsl/yiq_decode.fx +++ b/hlsl/yiq_decode.fx @@ -58,7 +58,8 @@ struct PS_INPUT uniform float TargetWidth; uniform float TargetHeight; -uniform float2 RawDims; +uniform float RawWidth; +uniform float RawHeight; uniform float WidthRatio; uniform float HeightRatio; @@ -75,7 +76,7 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.Position.y -= 0.5f; Output.Position *= float4(2.0f, 2.0f, 1.0f, 1.0f); Output.Coord0.xy = Input.TexCoord; - Output.Coord0.zw = float2(1.0f / RawDims.x, 0.0f); + Output.Coord0.zw = float2(1.0f / RawWidth, 0.0f); return Output; } @@ -98,6 +99,8 @@ uniform float QFreqResponse = 0.6f; float4 ps_main(PS_INPUT Input) : COLOR { + float2 RawDims = float2(RawWidth, RawHeight); + float4 BaseTexel = tex2D(DiffuseSampler, Input.Coord0.xy + 0.5f / RawDims); // YIQ convolution: N coefficients each @@ -107,11 +110,11 @@ float4 ps_main(PS_INPUT Input) : COLOR float MaxC = 2.1183f; float MinC = -1.1183f; float CRange = MaxC - MinC; - float Fc_y1 = (CCValue - NotchHalfWidth) * ScanTime / (RawDims.x * 4.0f / WidthRatio); - float Fc_y2 = (CCValue + NotchHalfWidth) * ScanTime / (RawDims.x * 4.0f / WidthRatio); - float Fc_y3 = YFreqResponse * ScanTime / (RawDims.x * 4.0f / WidthRatio); - float Fc_i = IFreqResponse * ScanTime / (RawDims.x * 4.0f / WidthRatio); - float Fc_q = QFreqResponse * ScanTime / (RawDims.x * 4.0f / WidthRatio); + float Fc_y1 = (CCValue - NotchHalfWidth) * ScanTime / (RawWidth * 4.0f / WidthRatio); + float Fc_y2 = (CCValue + NotchHalfWidth) * ScanTime / (RawWidth * 4.0f / WidthRatio); + float Fc_y3 = YFreqResponse * ScanTime / (RawWidth * 4.0f / WidthRatio); + float Fc_i = IFreqResponse * ScanTime / (RawWidth * 4.0f / WidthRatio); + float Fc_q = QFreqResponse * ScanTime / (RawWidth * 4.0f / WidthRatio); float PI = 3.1415926535897932384626433832795; float PI2 = 2.0f * PI; float PI2Length = PI2 / 82.0f; @@ -124,7 +127,7 @@ float4 ps_main(PS_INPUT Input) : COLOR float4 CoordY = Input.Coord0.y; float2 TexCoord = float2(CoordX.r, CoordY.r); float4 C = tex2D(CompositeSampler, TexCoord + float2(0.625f, 0.4f) / RawDims) * CRange + MinC; - float4 WT = W * (CoordX * WidthRatio + AValue * CoordY * 2.0f * (RawDims.y / HeightRatio) + BValue) + OValue; + float4 WT = W * (CoordX * WidthRatio + AValue * CoordY * 2.0f * (RawHeight / HeightRatio) + BValue) + OValue; float4 SincYIn1 = PI2 * Fc_y1 * n4; float4 SincYIn2 = PI2 * Fc_y2 * n4; diff --git a/hlsl/yiq_encode.fx b/hlsl/yiq_encode.fx index 8793bfbb633..b08f6317ccc 100644 --- a/hlsl/yiq_encode.fx +++ b/hlsl/yiq_encode.fx @@ -55,7 +55,8 @@ uniform float TargetHeight; uniform float2 RawDims; -uniform float2 SizeRatio; +uniform float WidthRatio; +uniform float HeightRatio; VS_OUTPUT vs_main(VS_INPUT Input) { @@ -100,13 +101,12 @@ float4 ps_main(PS_INPUT Input) : COLOR float3 Texel2 = tex2D(DiffuseSampler, Coord2 + TexelOffset).rgb; float3 Texel3 = tex2D(DiffuseSampler, Coord3 + TexelOffset).rgb; - float2 InvSize = 1.0f / SizeRatio; float PI = 3.1415926535897932384626433832795; float W = PI * 2.0f * CCValue * ScanTime; - float T0 = Coord0.x * InvSize.x + AValue * Coord0.y * 2.0f * (RawDims.y / InvSize.y) + BValue; - float T1 = Coord1.x * InvSize.x + AValue * Coord1.y * 2.0f * (RawDims.y / InvSize.y) + BValue; - float T2 = Coord2.x * InvSize.x + AValue * Coord2.y * 2.0f * (RawDims.y / InvSize.y) + BValue; - float T3 = Coord3.x * InvSize.x + AValue * Coord3.y * 2.0f * (RawDims.y / InvSize.y) + BValue; + float T0 = Coord0.x * WidthRatio + AValue * Coord0.y * 2.0f * (RawDims.y / HeightRatio) + BValue; + float T1 = Coord1.x * WidthRatio + AValue * Coord1.y * 2.0f * (RawDims.y / HeightRatio) + BValue; + float T2 = Coord2.x * WidthRatio + AValue * Coord2.y * 2.0f * (RawDims.y / HeightRatio) + BValue; + float T3 = Coord3.x * WidthRatio + AValue * Coord3.y * 2.0f * (RawDims.y / HeightRatio) + BValue; float Y0 = dot(Texel0, float3(0.299f, 0.587f, 0.114f)); float I0 = dot(Texel0, float3(0.595716f, -0.274453f, -0.321263f)); diff --git a/src/osd/windows/d3dhlsl.c b/src/osd/windows/d3dhlsl.c index ff53845498c..61065ae979c 100644 --- a/src/osd/windows/d3dhlsl.c +++ b/src/osd/windows/d3dhlsl.c @@ -1685,7 +1685,8 @@ void shaders::render_quad(poly_info *poly, int vertnum) if(options->params_dirty) { (*d3dintf->effect.set_vector)(curr_effect, "RawDims", 2, &rawdims.c.x); - (*d3dintf->effect.set_vector)(curr_effect, "SizeRatio", 2, &delta.c.x); + (*d3dintf->effect.set_float)(curr_effect, "WidthRatio", 1.0f / delta.c.x); + (*d3dintf->effect.set_float)(curr_effect, "HeightRatio", 1.0f / delta.c.y); (*d3dintf->effect.set_float)(curr_effect, "TargetWidth", (float)d3d->get_width()); (*d3dintf->effect.set_float)(curr_effect, "TargetHeight", (float)d3d->get_height()); (*d3dintf->effect.set_float)(curr_effect, "CCValue", options->yiq_cc); @@ -1723,10 +1724,12 @@ void shaders::render_quad(poly_info *poly, int vertnum) (*d3dintf->effect.set_texture)(curr_effect, "Composite", rt->render_texture[4]); (*d3dintf->effect.set_texture)(curr_effect, "Diffuse", texture->get_finaltex()); - if(options->params_dirty) + if(true)//options->params_dirty) { - (*d3dintf->effect.set_vector)(curr_effect, "RawDims", 2, &rawdims.c.x); - (*d3dintf->effect.set_vector)(curr_effect, "SizeRatio", 2, &delta.c.x); + (*d3dintf->effect.set_float)(curr_effect, "RawWidth", rawdims.c.x); + (*d3dintf->effect.set_float)(curr_effect, "RawHeight", rawdims.c.y); + (*d3dintf->effect.set_float)(curr_effect, "WidthRatio", 1.0f / delta.c.x); + (*d3dintf->effect.set_float)(curr_effect, "HeightRatio", 1.0f / delta.c.y); (*d3dintf->effect.set_float)(curr_effect, "TargetWidth", (float)d3d->get_width()); (*d3dintf->effect.set_float)(curr_effect, "TargetHeight", (float)d3d->get_height()); (*d3dintf->effect.set_float)(curr_effect, "CCValue", options->yiq_cc); |