From a05622b37e6f49c7ea485797806cb9b741d1a061 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 8 Jan 2020 12:12:09 +0000 Subject: [PATCH] Force stencil swizzled output to only output green * On some GPUs the stencil output comes in all channels, not just green, and it's unclear if this is legal or not. To be safe just mask out the green we expect. --- util/test/demos/d3d11/d3d11_texture_zoo.cpp | 2 +- util/test/demos/d3d12/d3d12_texture_zoo.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/util/test/demos/d3d11/d3d11_texture_zoo.cpp b/util/test/demos/d3d11/d3d11_texture_zoo.cpp index 8e908b31c..f3a3734d1 100644 --- a/util/test/demos/d3d11/d3d11_texture_zoo.cpp +++ b/util/test/demos/d3d11/d3d11_texture_zoo.cpp @@ -300,7 +300,7 @@ int4 main(float4 pos : SV_Position, uint samp : SV_SampleIndex) : SV_Target0 src.replace(src.find("¶ms"), 7, "0"); if(isStencilOut) - src.replace(src.find("&swizzle"), 8, "zyzz"); + src.replace(src.find("&swizzle"), 8, "zyzz*float4(0,1,0,0)"); else src.replace(src.find("&swizzle"), 8, "xyzw"); diff --git a/util/test/demos/d3d12/d3d12_texture_zoo.cpp b/util/test/demos/d3d12/d3d12_texture_zoo.cpp index 623969b79..c61350f94 100644 --- a/util/test/demos/d3d12/d3d12_texture_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_texture_zoo.cpp @@ -35,7 +35,7 @@ RD_TEST(D3D12_Texture_Zoo, D3D12GraphicsTest) float4 main() : SV_Target0 { - return intex.Load(¶ms); + return intex.Load(¶ms).&swizzle; } )EOSHADER"; @@ -270,9 +270,13 @@ int4 main(float4 pos : SV_Position, uint samp : SV_SampleIndex) : SV_Target0 { static std::map PSOs; + bool isStencilOut = (test.fmt.viewFmt == DXGI_FORMAT_X32_TYPELESS_G8X24_UINT || + test.fmt.viewFmt == DXGI_FORMAT_X24_TYPELESS_G8_UINT); + uint32_t key = uint32_t(test.fmt.cfg.data); key |= test.dim << 6; key |= test.isMSAA ? 0x80000 : 0; + key |= isStencilOut ? 0x100000 : 0; ID3D12PipelineStatePtr ret = PSOs[key]; if(!ret) @@ -298,6 +302,11 @@ int4 main(float4 pos : SV_Position, uint samp : SV_SampleIndex) : SV_Target0 else src.replace(src.find("¶ms"), 7, "0"); + if(isStencilOut) + src.replace(src.find("&swizzle"), 8, "zyzz*float4(0,1,0,0)"); + else + src.replace(src.find("&swizzle"), 8, "xyzw"); + ID3DBlobPtr psblob = Compile(src, "main", "ps_5_0"); ret = PSOs[key] = MakePSO().RootSig(sig).VS(vsblob).PS(psblob).RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});