1Buffer<float4> Buffer4F : register(t0); 2Buffer<int4> Buffer4I : register(t0); 3Buffer<uint4> Buffer4UI : register(t0); 4 5struct VS_OUTPUT 6{ 7 float4 position : SV_Position; 8 uint index : TEXCOORD0; 9 uint slice : LAYER; 10}; 11 12struct GS_OUTPUT 13{ 14 float4 position : SV_Position; 15 uint index : TEXCOORD0; 16 uint slice : SV_RenderTargetArrayIndex; 17}; 18 19cbuffer BufferCopyParams : register(b0) 20{ 21 uint FirstPixelOffset; 22 uint PixelsPerRow; 23 uint RowStride; 24 uint RowsPerSlice; 25 float2 PositionOffset; 26 float2 PositionScale; 27 int2 TexLocationOffset; 28 int2 TexLocationScale; 29 uint FirstSlice; 30} 31 32void ComputePositionAndIndex(uint vertexID, out VS_OUTPUT outVertex) 33{ 34 uint PixelsPerSlice = PixelsPerRow * RowsPerSlice; 35 uint SliceStride = RowStride * RowsPerSlice; 36 37 uint slice = vertexID / PixelsPerSlice; 38 uint sliceOffset = slice * PixelsPerSlice; 39 uint row = (vertexID - sliceOffset) / PixelsPerRow; 40 uint col = vertexID - sliceOffset - (row * PixelsPerRow); 41 42 float2 coords = float2(float(col), float(row)); 43 44 outVertex.position = float4(PositionOffset + PositionScale * coords, 0.0f, 1.0f); 45 outVertex.index = FirstPixelOffset + slice * SliceStride + row * RowStride + col; 46 outVertex.slice = FirstSlice + slice; 47} 48 49void VS_BufferToTexture(in uint vertexID : SV_VertexID, out VS_OUTPUT outVertex) 50{ 51 ComputePositionAndIndex(vertexID, outVertex); 52} 53 54[maxvertexcount(1)] 55void GS_BufferToTexture(point VS_OUTPUT inVertex[1], inout PointStream<GS_OUTPUT> outStream) 56{ 57 GS_OUTPUT outVertex; 58 outVertex.position = inVertex[0].position; 59 outVertex.index = inVertex[0].index; 60 outVertex.slice = inVertex[0].slice; 61 outStream.Append(outVertex); 62} 63 64float4 PS_BufferToTexture_4F(in float4 inPosition : SV_Position, in uint inIndex : TEXCOORD0) : SV_Target 65{ 66 return Buffer4F.Load(inIndex); 67} 68 69int4 PS_BufferToTexture_4I(in float4 inPosition : SV_Position, in uint inIndex : TEXCOORD0) : SV_Target 70{ 71 return Buffer4I.Load(inIndex); 72} 73 74uint4 PS_BufferToTexture_4UI(in float4 inPosition : SV_Position, in uint inIndex : TEXCOORD0) : SV_Target 75{ 76 return Buffer4UI.Load(inIndex); 77} 78