summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/shaders/Passthrough3D11.hlsl
blob: c23c9032ec275229468d611de0b3edf8de9c05f2 (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Texture3D<float4> TextureF  : register(t0);
Texture3D<uint4>  TextureUI : register(t0);
Texture3D<int4>   TextureI  : register(t0);

SamplerState      Sampler   : register(s0);

struct VS_INPUT
{
    float2 Position : POSITION;
    uint   Layer    : LAYER;
    float3 TexCoord : TEXCOORD;
};

struct VS_OUTPUT
{
    float4 Position : SV_POSITION;
    uint   Layer    : LAYER;
    float3 TexCoord : TEXCOORD;
};

struct GS_OUTPUT
{
    float4 Position : SV_POSITION;
    uint   Layer    : SV_RENDERTARGETARRAYINDEX;
    float3 TexCoord : TEXCOORD;
};

VS_OUTPUT VS_Passthrough3D(VS_INPUT input)
{
    VS_OUTPUT output;

    output.Position = float4(input.Position, 0.0f, 1.0f);
    output.Layer = input.Layer;
    output.TexCoord = input.TexCoord;

    return output;
}

[maxvertexcount(3)]
void GS_Passthrough3D(triangle VS_OUTPUT input[3], inout TriangleStream<GS_OUTPUT> outputStream)
{
    GS_OUTPUT output;

    for (int i = 0; i < 3; i++)
    {
        output.Position = input[i].Position;
        output.Layer = input[i].Layer;
        output.TexCoord = input[i].TexCoord;

        outputStream.Append(output);
    }
}

float4 PS_PassthroughRGBA3D(GS_OUTPUT input) : SV_TARGET0
{
    return TextureF.Sample(Sampler, input.TexCoord).rgba;
}

uint4 PS_PassthroughRGBA3DUI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureUI.GetDimensions(size.x, size.y, size.z);

    return TextureUI.Load(int4(size * input.TexCoord, 0)).rgba;
}

int4 PS_PassthroughRGBA3DI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureI.GetDimensions(size.x, size.y, size.z);

    return TextureI.Load(int4(size * input.TexCoord, 0)).rgba;
}

float4 PS_PassthroughRGB3D(GS_OUTPUT input) : SV_TARGET0
{
    return float4(TextureF.Sample(Sampler, input.TexCoord).rgb, 1.0f);
}

uint4 PS_PassthroughRGB3DUI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureUI.GetDimensions(size.x, size.y, size.z);

    return uint4(TextureUI.Load(int4(size * input.TexCoord, 0)).rgb, 0);
}

int4 PS_PassthroughRGB3DI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureI.GetDimensions(size.x, size.y, size.z);

    return int4(TextureI.Load(int4(size * input.TexCoord, 0)).rgb, 0);
}

float4 PS_PassthroughRG3D(GS_OUTPUT input) : SV_TARGET0
{
    return float4(TextureF.Sample(Sampler, input.TexCoord).rg, 0.0f, 1.0f);
}

uint4 PS_PassthroughRG3DUI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureUI.GetDimensions(size.x, size.y, size.z);

    return uint4(TextureUI.Load(int4(size * input.TexCoord, 0)).rg, 0, 0);
}

int4 PS_PassthroughRG3DI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureI.GetDimensions(size.x, size.y, size.z);

    return int4(TextureI.Load(int4(size * input.TexCoord, 0)).rg, 0, 0);
}

float4 PS_PassthroughR3D(GS_OUTPUT input) : SV_TARGET0
{
    return float4(TextureF.Sample(Sampler, input.TexCoord).r, 0.0f, 0.0f, 1.0f);
}

uint4 PS_PassthroughR3DUI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureUI.GetDimensions(size.x, size.y, size.z);

    return uint4(TextureUI.Load(int4(size * input.TexCoord, 0)).r, 0, 0, 0);
}

int4 PS_PassthroughR3DI(GS_OUTPUT input) : SV_TARGET0
{
    uint3 size;
    TextureI.GetDimensions(size.x, size.y, size.z);

    return int4(TextureI.Load(int4(size * input.TexCoord, 0)).r, 0, 0, 0);
}

float4 PS_PassthroughLum3D(GS_OUTPUT input) : SV_TARGET0
{
    return float4(TextureF.Sample(Sampler, input.TexCoord).rrr, 1.0f);
}

float4 PS_PassthroughLumAlpha3D(GS_OUTPUT input) : SV_TARGET0
{
    return TextureF.Sample(Sampler, input.TexCoord).rrra;
}