| static const float2 g_Corners[6] = | |
| { | |
| float2(-1.0f, 1.0f), | |
| float2( 1.0f, -1.0f), | |
| float2(-1.0f, -1.0f), | |
| float2(-1.0f, 1.0f), | |
| float2( 1.0f, 1.0f), | |
| float2( 1.0f, -1.0f), | |
| }; | |
| void VS_ResolveDepthStencil(in uint id : SV_VertexID, | |
| out float4 position : SV_Position, | |
| out float2 texCoord : TEXCOORD0) | |
| { | |
| float2 corner = g_Corners[id]; | |
| position = float4(corner.x, corner.y, 0.0f, 1.0f); | |
| texCoord = float2((corner.x + 1.0f) * 0.5f, (-corner.y + 1.0f) * 0.5f); | |
| } | |
| Texture2DMS<float> Depth : register(t0); | |
| Texture2DMS<uint2> Stencil : register(t1); | |
| void PS_ResolveDepth(in float4 position : SV_Position, | |
| in float2 texCoord : TEXCOORD0, | |
| out float depth : SV_Depth) | |
| { | |
| // MS samplers must use Load | |
| uint width, height, samples; | |
| Depth.GetDimensions(width, height, samples); | |
| uint2 coord = uint2(texCoord.x * float(width), texCoord.y * float(height)); | |
| depth = Depth.Load(coord, 0).r; | |
| } | |
| void PS_ResolveDepthStencil(in float4 position : SV_Position, | |
| in float2 texCoord : TEXCOORD0, | |
| out float2 depthStencil : SV_Target0) | |
| { | |
| // MS samplers must use Load | |
| uint width, height, samples; | |
| Depth.GetDimensions(width, height, samples); | |
| uint2 coord = uint2(texCoord.x * float(width), texCoord.y * float(height)); | |
| depthStencil.r = Depth.Load(coord, 0).r; | |
| depthStencil.g = float(Stencil.Load(coord, 0).g); | |
| } | |
| void PS_ResolveStencil(in float4 position : SV_Position, | |
| in float2 texCoord : TEXCOORD0, | |
| out float2 stencil : SV_Target0) | |
| { | |
| // MS samplers must use Load | |
| uint width, height, samples; | |
| Stencil.GetDimensions(width, height, samples); | |
| uint2 coord = uint2(texCoord.x * float(width), texCoord.y * float(height)); | |
| stencil.r = 0.0f; | |
| stencil.g = float(Stencil.Load(coord, 0).g); | |
| } |