From 9c29ae6393afe7979f2d1d8019979a45e61187d8 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 29 Apr 2021 16:50:12 +0100 Subject: [PATCH] Check for SRV/UAV typed access to 16-bit types * This is possible on D3D11 but only with certain cap bits, it's simpler to test on D3D12 and the DXBC debugger will go through the same path for both. --- .../demos/d3d12/d3d12_shader_debug_zoo.cpp | 27 ++++++++++++++++--- util/test/demos/d3d12/d3d12_test.cpp | 2 +- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp index 2190196b2..e7c20aff5 100644 --- a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp @@ -165,6 +165,9 @@ Texture2D unboundsrv2 : register(t101); RWBuffer unbounduav1 : register(u4); RWTexture2D unbounduav2 : register(u5); +RWBuffer narrowtypeduav : register(u6); +Buffer narrowtypedsrv : register(t102); + SamplerState linearclamp : register(s0); float4 main(v2f IN) : SV_Target0 @@ -681,6 +684,16 @@ float4 main(v2f IN) : SV_Target0 unbounduav2[int2(0, 1)] = 1.234f; return unbounduav2[int2(0, 1)].xxxx; } + if(IN.tri == 74) + { + return float4(narrowtypedsrv[1], narrowtypedsrv[2], narrowtypedsrv[3], narrowtypedsrv[4]); + } + if(IN.tri == 75) + { + narrowtypeduav[13] = 555.0f; + narrowtypeduav[14] = 888.0f; + return float4(narrowtypeduav[11], narrowtypeduav[12], narrowtypeduav[13], narrowtypeduav[14]); + } return float4(0.4f, 0.4f, 0.4f, 0.4f); } @@ -760,7 +773,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 5, 0), tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1, 2, 5), 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, 2, 24), + tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4, 3, 30), }, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT, 1, &staticSamp); @@ -838,6 +851,14 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 D3D12_CPU_DESCRIPTOR_HANDLE uav1cpu = uavView1.CreateClearCPU(5); D3D12_GPU_DESCRIPTOR_HANDLE uav1gpu = uavView1.CreateGPU(5); + uint16_t narrowdata[32]; + for(size_t i = 0; i < ARRAY_COUNT(narrowdata); i++) + narrowdata[i] = MakeHalf(float(i)); + + ID3D12ResourcePtr narrowtypedbuf = MakeBuffer().UAV().Data(narrowdata); + MakeSRV(narrowtypedbuf).Format(DXGI_FORMAT_R16_FLOAT).CreateGPU(22); + MakeUAV(narrowtypedbuf).Format(DXGI_FORMAT_R16_FLOAT).CreateGPU(32); + float structdata[220]; for(int i = 0; i < 220; i++) structdata[i] = float(i); @@ -936,7 +957,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 uavdesc.Buffer.NumElements = 10; cpu = m_CBVUAVSRV->GetCPUDescriptorHandleForHeapStart(); - cpu.ptr += inc * 24; + cpu.ptr += inc * 30; dev->CreateUnorderedAccessView(NULL, NULL, &uavdesc, cpu); } @@ -946,7 +967,7 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0 uavdesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; cpu = m_CBVUAVSRV->GetCPUDescriptorHandleForHeapStart(); - cpu.ptr += inc * 25; + cpu.ptr += inc * 31; dev->CreateUnorderedAccessView(NULL, NULL, &uavdesc, cpu); } diff --git a/util/test/demos/d3d12/d3d12_test.cpp b/util/test/demos/d3d12/d3d12_test.cpp index c595fe800..6d1260452 100644 --- a/util/test/demos/d3d12/d3d12_test.cpp +++ b/util/test/demos/d3d12/d3d12_test.cpp @@ -376,7 +376,7 @@ bool D3D12GraphicsTest::Init() desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; CHECK_HR(dev->CreateDescriptorHeap(&desc, __uuidof(ID3D12DescriptorHeap), (void **)&m_Clear)); - m_CBVUAVSRV->SetName(L"UAV clear heap"); + m_Clear->SetName(L"UAV clear heap"); } {