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