summaryrefslogtreecommitdiffstats
path: root/libvo/d3d_shader_yuv.hlsl
blob: b17e25721030398cd934b80b63ea4571dccd5667 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Compile with:
// fxc.exe /Tps_2_0 /Fhd3d_shader_yuv.h d3d_shader_yuv.hlsl /Vnd3d_shader_yuv
// fxc.exe /Tps_2_0 /Fhd3d_shader_yuv_2ch.h d3d_shader_yuv.hlsl /Vnd3d_shader_yuv_2ch /DUSE_2CH=1

// Be careful with this shader. You can't use constant slots, since we don't
// load the shader with D3DX. All uniform variables are mapped to hardcoded
// constant slots.

sampler2D tex0 : register(s0);
sampler2D tex1 : register(s1);
sampler2D tex2 : register(s2);

uniform float4x4 colormatrix : register(c0);
uniform float2 depth : register(c5);

#ifdef USE_2CH

float1 sample(sampler2D tex, float2 t)
{
    // Sample from A8L8 format as if we sampled a single value from L16.
    // We compute the 2 channel values back into one.
    return dot(tex2D(tex, t).xw, depth);
}

#else

float1 sample(sampler2D tex, float2 t)
{
    return tex2D(tex, t).x;
}

#endif

float4 main(float2 t0 : TEXCOORD0,
            float2 t1 : TEXCOORD1,
            float2 t2 : TEXCOORD2)
            : COLOR
{
    float4 c = float4(sample(tex0, t0),
                      sample(tex1, t1),
                      sample(tex2, t2),
                      1);
    return mul(c, colormatrix);
}