From a37f62124dd8eb108bda5374a84e8a52becb8043 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 18 Nov 2022 13:16:20 +0000 Subject: [PATCH] Test integer texture loads in D3D shader debugging --- .../demos/d3d11/d3d11_shader_debug_zoo.cpp | 20 ++++++++++++--- .../demos/d3d12/d3d12_shader_debug_zoo.cpp | 25 +++++++++++++------ 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/util/test/demos/d3d11/d3d11_shader_debug_zoo.cpp b/util/test/demos/d3d11/d3d11_shader_debug_zoo.cpp index 0df58c2e6..838416d07 100644 --- a/util/test/demos/d3d11/d3d11_shader_debug_zoo.cpp +++ b/util/test/demos/d3d11/d3d11_shader_debug_zoo.cpp @@ -107,6 +107,8 @@ StructuredBuffer structrotest : register(t2); Texture2D dimtex : register(t3); Texture2DMS dimtexms : register(t4); Texture2D smiley : register(t5); +Texture2D smileyint : register(t6); +Texture2D smileyuint : register(t7); RWByteAddressBuffer byterwtest : register(u1); RWStructuredBuffer structrwtest : register(u2); @@ -728,6 +730,16 @@ float4 main(v2f IN) : SV_Target0 float2 uv = posone * float2(0.55f, 0.48f); return smiley.Sample(linearwrap, uv, int2(4, 3)); } + if(IN.tri == 89) + { + float2 uv = posone * float2(1.81f, 0.48f); + return smileyint.Load(int3(uv*16,0)); + } + if(IN.tri == 90) + { + float2 uv = posone * float2(1.81f, 0.48f); + return smileyuint.Load(int3(uv*16,0)); + } return float4(0.4f, 0.4f, 0.4f, 0.4f); } @@ -1015,13 +1027,15 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 LoadXPM(SmileyTexture, rgba8); ID3D11Texture2DPtr smiley = - MakeTexture(DXGI_FORMAT_R8G8B8A8_UNORM, rgba8.width, rgba8.height).SRV(); - ID3D11ShaderResourceViewPtr smileysrv = MakeSRV(smiley); + MakeTexture(DXGI_FORMAT_R8G8B8A8_TYPELESS, rgba8.width, rgba8.height).SRV(); + ID3D11ShaderResourceViewPtr smileysrv = MakeSRV(smiley).Format(DXGI_FORMAT_R8G8B8A8_UNORM); + ID3D11ShaderResourceViewPtr smileyintsrv = MakeSRV(smiley).Format(DXGI_FORMAT_R8G8B8A8_SINT); + ID3D11ShaderResourceViewPtr smileyuintsrv = MakeSRV(smiley).Format(DXGI_FORMAT_R8G8B8A8_UINT); ctx->UpdateSubresource(smiley, 0, NULL, rgba8.data.data(), rgba8.width * sizeof(uint32_t), 0); ID3D11ShaderResourceView *srvs[] = { - srv, rawsrv, structsrv, testSRV, msSRV, smileysrv, + srv, rawsrv, structsrv, testSRV, msSRV, smileysrv, smileyintsrv, smileyuintsrv, }; ctx->PSSetShaderResources(0, ARRAY_COUNT(srvs), srvs); diff --git a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp index c5aef6d67..736d490cd 100644 --- a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp @@ -157,6 +157,8 @@ StructuredBuffer structrotest : register(t2); Texture2D dimtex : register(t3); Texture2DMS dimtexms : register(t4); Texture2D smiley : register(t5); +Texture2D smileyint : register(t6); +Texture2D smileyuint : register(t7); RWByteAddressBuffer byterwtest : register(u1); RWStructuredBuffer structrwtest : register(u2); @@ -735,6 +737,11 @@ float4 main(v2f IN) : SV_Target0 dimtex_edge.GetDimensions(z, width, height, numLevels); return float4(max(1,width), max(1,height), numLevels, 0.0f); } + if(IN.tri == 81) + { + float2 uv = posone * float2(0.55f, 0.48f); + return smileyint.Load(int3(uv*16,0)); + } return float4(0.4f, 0.4f, 0.4f, 0.4f); } @@ -851,7 +858,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 ID3D12RootSignaturePtr sig = MakeSig( { - tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 6, 0), + tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 8, 0), tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1, 2, 10), tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 100, 5, 20), tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4, 3, 30), @@ -882,7 +889,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 .RTV() .InitialState(D3D12_RESOURCE_STATE_RENDER_TARGET); D3D12_CPU_DESCRIPTOR_HANDLE fltRTV = MakeRTV(fltTex).CreateCPU(0); - D3D12_GPU_DESCRIPTOR_HANDLE fltSRV = MakeSRV(fltTex).CreateGPU(7); + D3D12_GPU_DESCRIPTOR_HANDLE fltSRV = MakeSRV(fltTex).CreateGPU(8); float triWidth = 8.0f / float(texDim); @@ -945,7 +952,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 Texture rgba8; LoadXPM(SmileyTexture, rgba8); - ID3D12ResourcePtr smiley = MakeTexture(DXGI_FORMAT_R8G8B8A8_UNORM, 48, 48) + ID3D12ResourcePtr smiley = MakeTexture(DXGI_FORMAT_R8G8B8A8_TYPELESS, 48, 48) .Mips(1) .InitialState(D3D12_RESOURCE_STATE_COPY_DEST); @@ -1014,7 +1021,9 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 GPUSync(); } - MakeSRV(smiley).CreateGPU(5); + MakeSRV(smiley).Format(DXGI_FORMAT_R8G8B8A8_UNORM).CreateGPU(5); + MakeSRV(smiley).Format(DXGI_FORMAT_R8G8B8A8_SINT).CreateGPU(6); + MakeSRV(smiley).Format(DXGI_FORMAT_R8G8B8A8_UINT).CreateGPU(7); ID3D12ResourcePtr rawBuf2 = MakeBuffer().Size(1024).UAV(); D3D12ViewCreator uavView1 = @@ -1065,8 +1074,8 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 // need to create non-structured version for clearing uavView2 = MakeUAV(structBuf2).Format(DXGI_FORMAT_R32_UINT); - uav2cpu = uavView2.CreateClearCPU(8); - uav2gpu = uavView2.CreateGPU(8); + uav2cpu = uavView2.CreateClearCPU(9); + uav2gpu = uavView2.CreateGPU(9); // Create resources for MSAA draw ID3DBlobPtr vsmsaablob = Compile(D3DDefaultVertex, "main", "vs_5_0"); @@ -1093,7 +1102,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 psblob = Compile(pixelBlit, "main", "ps_5_0"); ID3D12RootSignaturePtr blitSig = MakeSig({ constParam(D3D12_SHADER_VISIBILITY_PIXEL, 0, 0, 1), - tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 1, 7), + tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 1, 8), }); ID3D12PipelineStatePtr blitpso = MakePSO().RootSig(blitSig).VS(vsblob).PS(psblob); @@ -1101,7 +1110,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 psblob = Compile(vertexSamplePS, "main", "ps_5_0"); ID3D12RootSignaturePtr vertexSampleSig = MakeSig( { - tableParam(D3D12_SHADER_VISIBILITY_VERTEX, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 1, 7), + tableParam(D3D12_SHADER_VISIBILITY_VERTEX, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 1, 8), }, D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS); ID3D12PipelineStatePtr vertexSamplePSO = MakePSO().RootSig(vertexSampleSig).VS(vsblob).PS(psblob);