1212// . . I . J . .
1313// . K . L . M .
1414// . . . . . . .
15- half3 DownsampleBox13Tap (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize)
15+ half4 DownsampleBox13Tap (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize)
1616{
17- half3 A = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-1.0 , -1.0 )).rgb ;
18- half3 B = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.0 , -1.0 )).rgb ;
19- half3 C = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 1.0 , -1.0 )).rgb ;
20- half3 D = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-0.5 , -0.5 )).rgb ;
21- half3 E = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.5 , -0.5 )).rgb ;
22- half3 F = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-1.0 , 0.0 )).rgb ;
23- half3 G = SAMPLE_TEXTURE2D (tex, samplerTex, uv ).rgb ;
24- half3 H = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 1.0 , 0.0 )).rgb ;
25- half3 I = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-0.5 , 0.5 )).rgb ;
26- half3 J = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.5 , 0.5 )).rgb ;
27- half3 K = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-1.0 , 1.0 )).rgb ;
28- half3 L = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.0 , 1.0 )).rgb ;
29- half3 M = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 1.0 , 1.0 )).rgb ;
17+ half4 A = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-1.0 , -1.0 ));
18+ half4 B = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.0 , -1.0 ));
19+ half4 C = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 1.0 , -1.0 ));
20+ half4 D = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-0.5 , -0.5 ));
21+ half4 E = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.5 , -0.5 ));
22+ half4 F = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-1.0 , 0.0 ));
23+ half4 G = SAMPLE_TEXTURE2D (tex, samplerTex, uv );
24+ half4 H = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 1.0 , 0.0 ));
25+ half4 I = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-0.5 , 0.5 ));
26+ half4 J = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.5 , 0.5 ));
27+ half4 K = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 (-1.0 , 1.0 ));
28+ half4 L = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 0.0 , 1.0 ));
29+ half4 M = SAMPLE_TEXTURE2D (tex, samplerTex, uv + texelSize * float2 ( 1.0 , 1.0 ));
3030
3131 half2 div = (1.0 / 4.0 ) * half2 (0.5 , 0.125 );
3232
33- half3 o = (D + E + I + J) * div.x;
33+ half4 o = (D + E + I + J) * div.x;
3434 o += (A + B + G + F) * div.y;
3535 o += (B + C + H + G) * div.y;
3636 o += (F + G + L + K) * div.y;
@@ -40,50 +40,50 @@ half3 DownsampleBox13Tap(TEXTURE2D_ARGS(tex, samplerTex), float2 uv, float2 texe
4040}
4141
4242// Standard box filtering
43- half3 DownsampleBox4Tap (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize)
43+ half4 DownsampleBox4Tap (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize)
4444{
4545 float4 d = texelSize.xyxy * float4 (-1.0 , -1.0 , 1.0 , 1.0 );
4646
47- half3 s;
48- s = (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xy)).rgb ;
49- s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zy)).rgb ;
50- s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xw)).rgb ;
51- s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zw)).rgb ;
47+ half4 s;
48+ s = (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xy));
49+ s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zy));
50+ s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xw));
51+ s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zw));
5252
5353 return s * (1.0 / 4.0 );
5454}
5555
5656// 9-tap bilinear upsampler (tent filter)
57- half3 UpsampleTent (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize, float sampleScale)
57+ half4 UpsampleTent (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize, float sampleScale)
5858{
5959 float4 d = texelSize.xyxy * float4 (1.0 , 1.0 , -1.0 , 0.0 ) * sampleScale;
6060
61- half3 s;
62- s = SAMPLE_TEXTURE2D (tex, samplerTex, uv - d.xy).rgb ;
63- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv - d.wy).rgb * 2.0 ;
64- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv - d.zy).rgb ;
61+ half4 s;
62+ s = SAMPLE_TEXTURE2D (tex, samplerTex, uv - d.xy);
63+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv - d.wy) * 2.0 ;
64+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv - d.zy);
6565
66- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zw).rgb * 2.0 ;
67- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv ).rgb * 4.0 ;
68- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xw).rgb * 2.0 ;
66+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zw) * 2.0 ;
67+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv ) * 4.0 ;
68+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xw) * 2.0 ;
6969
70- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zy).rgb ;
71- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.wy).rgb * 2.0 ;
72- s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xy).rgb ;
70+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zy);
71+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.wy) * 2.0 ;
72+ s += SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xy);
7373
7474 return s * (1.0 / 16.0 );
7575}
7676
7777// Standard box filtering
78- half3 UpsampleBox (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize, float sampleScale)
78+ half4 UpsampleBox (TEXTURE2D_ARGS (tex, samplerTex), float2 uv, float2 texelSize, float sampleScale)
7979{
8080 float4 d = texelSize.xyxy * float4 (-1.0 , -1.0 , 1.0 , 1.0 ) * (sampleScale * 0.5 );
8181
82- half3 s;
83- s = (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xy)).rgb ;
84- s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zy)).rgb ;
85- s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xw)).rgb ;
86- s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zw)).rgb ;
82+ half4 s;
83+ s = (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xy));
84+ s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zy));
85+ s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.xw));
86+ s += (SAMPLE_TEXTURE2D (tex, samplerTex, uv + d.zw));
8787
8888 return s * (1.0 / 4.0 );
8989}
0 commit comments