Home | History | Annotate | Download | only in shaders
      1 Texture3D<float4> TextureF  : register(t0);
      2 Texture3D<uint4>  TextureUI : register(t0);
      3 Texture3D<int4>   TextureI  : register(t0);
      4 
      5 SamplerState      Sampler   : register(s0);
      6 
      7 struct VS_INPUT
      8 {
      9     float2 Position : POSITION;
     10     uint   Layer    : LAYER;
     11     float3 TexCoord : TEXCOORD;
     12 };
     13 
     14 struct VS_OUTPUT
     15 {
     16     float4 Position : SV_POSITION;
     17     uint   Layer    : LAYER;
     18     float3 TexCoord : TEXCOORD;
     19 };
     20 
     21 struct GS_OUTPUT
     22 {
     23     float4 Position : SV_POSITION;
     24     uint   Layer    : SV_RENDERTARGETARRAYINDEX;
     25     float3 TexCoord : TEXCOORD;
     26 };
     27 
     28 VS_OUTPUT VS_Passthrough3D(VS_INPUT input)
     29 {
     30     VS_OUTPUT output;
     31 
     32     output.Position = float4(input.Position, 0.0f, 1.0f);
     33     output.Layer = input.Layer;
     34     output.TexCoord = input.TexCoord;
     35 
     36     return output;
     37 }
     38 
     39 [maxvertexcount(3)]
     40 void GS_Passthrough3D(triangle VS_OUTPUT input[3], inout TriangleStream<GS_OUTPUT> outputStream)
     41 {
     42     GS_OUTPUT output;
     43 
     44     for (int i = 0; i < 3; i++)
     45     {
     46         output.Position = input[i].Position;
     47         output.Layer = input[i].Layer;
     48         output.TexCoord = input[i].TexCoord;
     49 
     50         outputStream.Append(output);
     51     }
     52 }
     53 
     54 float4 PS_PassthroughRGBA3D(GS_OUTPUT input) : SV_TARGET0
     55 {
     56     return TextureF.Sample(Sampler, input.TexCoord).rgba;
     57 }
     58 
     59 uint4 PS_PassthroughRGBA3DUI(GS_OUTPUT input) : SV_TARGET0
     60 {
     61     uint3 size;
     62     TextureUI.GetDimensions(size.x, size.y, size.z);
     63 
     64     return TextureUI.Load(int4(size * input.TexCoord, 0)).rgba;
     65 }
     66 
     67 int4 PS_PassthroughRGBA3DI(GS_OUTPUT input) : SV_TARGET0
     68 {
     69     uint3 size;
     70     TextureI.GetDimensions(size.x, size.y, size.z);
     71 
     72     return TextureI.Load(int4(size * input.TexCoord, 0)).rgba;
     73 }
     74 
     75 float4 PS_PassthroughRGB3D(GS_OUTPUT input) : SV_TARGET0
     76 {
     77     return float4(TextureF.Sample(Sampler, input.TexCoord).rgb, 1.0f);
     78 }
     79 
     80 uint4 PS_PassthroughRGB3DUI(GS_OUTPUT input) : SV_TARGET0
     81 {
     82     uint3 size;
     83     TextureUI.GetDimensions(size.x, size.y, size.z);
     84 
     85     return uint4(TextureUI.Load(int4(size * input.TexCoord, 0)).rgb, 0);
     86 }
     87 
     88 int4 PS_PassthroughRGB3DI(GS_OUTPUT input) : SV_TARGET0
     89 {
     90     uint3 size;
     91     TextureI.GetDimensions(size.x, size.y, size.z);
     92 
     93     return int4(TextureI.Load(int4(size * input.TexCoord, 0)).rgb, 0);
     94 }
     95 
     96 float4 PS_PassthroughRG3D(GS_OUTPUT input) : SV_TARGET0
     97 {
     98     return float4(TextureF.Sample(Sampler, input.TexCoord).rg, 0.0f, 1.0f);
     99 }
    100 
    101 uint4 PS_PassthroughRG3DUI(GS_OUTPUT input) : SV_TARGET0
    102 {
    103     uint3 size;
    104     TextureUI.GetDimensions(size.x, size.y, size.z);
    105 
    106     return uint4(TextureUI.Load(int4(size * input.TexCoord, 0)).rg, 0, 0);
    107 }
    108 
    109 int4 PS_PassthroughRG3DI(GS_OUTPUT input) : SV_TARGET0
    110 {
    111     uint3 size;
    112     TextureI.GetDimensions(size.x, size.y, size.z);
    113 
    114     return int4(TextureI.Load(int4(size * input.TexCoord, 0)).rg, 0, 0);
    115 }
    116 
    117 float4 PS_PassthroughR3D(GS_OUTPUT input) : SV_TARGET0
    118 {
    119     return float4(TextureF.Sample(Sampler, input.TexCoord).r, 0.0f, 0.0f, 1.0f);
    120 }
    121 
    122 uint4 PS_PassthroughR3DUI(GS_OUTPUT input) : SV_TARGET0
    123 {
    124     uint3 size;
    125     TextureUI.GetDimensions(size.x, size.y, size.z);
    126 
    127     return uint4(TextureUI.Load(int4(size * input.TexCoord, 0)).r, 0, 0, 0);
    128 }
    129 
    130 int4 PS_PassthroughR3DI(GS_OUTPUT input) : SV_TARGET0
    131 {
    132     uint3 size;
    133     TextureI.GetDimensions(size.x, size.y, size.z);
    134 
    135     return int4(TextureI.Load(int4(size * input.TexCoord, 0)).r, 0, 0, 0);
    136 }
    137 
    138 float4 PS_PassthroughLum3D(GS_OUTPUT input) : SV_TARGET0
    139 {
    140     return float4(TextureF.Sample(Sampler, input.TexCoord).rrr, 1.0f);
    141 }
    142 
    143 float4 PS_PassthroughLumAlpha3D(GS_OUTPUT input) : SV_TARGET0
    144 {
    145     return TextureF.Sample(Sampler, input.TexCoord).rrra;
    146 }
    147