From ad69e791ad43dfe8f1032cc1859c63d4ffb3c99e Mon Sep 17 00:00:00 2001 From: Steve Karolewics Date: Fri, 7 Feb 2020 09:17:54 -0800 Subject: [PATCH] Add CBV support to D3D12ViewCreator --- util/test/demos/d3d12/d3d12_helpers.cpp | 30 ++++++++++++++++++++++++- util/test/demos/d3d12/d3d12_helpers.h | 5 +++++ util/test/demos/d3d12/d3d12_test.h | 5 +++++ util/test/demos/dx/d3d_helpers.h | 1 + 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/util/test/demos/d3d12/d3d12_helpers.cpp b/util/test/demos/d3d12/d3d12_helpers.cpp index 707a5d6cf..4d7e07fbc 100644 --- a/util/test/demos/d3d12/d3d12_helpers.cpp +++ b/util/test/demos/d3d12/d3d12_helpers.cpp @@ -385,7 +385,12 @@ D3D12ViewCreator::D3D12ViewCreator(D3D12GraphicsTest *test, ID3D12DescriptorHeap Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; - if(dim == D3D12_RESOURCE_DIMENSION_BUFFER) + if(m_Type == ViewType::CBV) + { + desc.cbv.BufferLocation = m_Res->GetGPUVirtualAddress(); + desc.cbv.SizeInBytes = 0; + } + else if(dim == D3D12_RESOURCE_DIMENSION_BUFFER) { SetupDescriptors(viewType, ResourceType::Buffer); } @@ -665,6 +670,24 @@ D3D12ViewCreator &D3D12ViewCreator::Format(DXGI_FORMAT f) return *this; } +D3D12ViewCreator &D3D12ViewCreator::Offset(UINT offset) +{ + if(m_Type == ViewType::CBV) + desc.cbv.BufferLocation += offset; + else + TEST_ERROR("This view & resource doesn't support SizeBytes"); + return *this; +} + +D3D12ViewCreator &D3D12ViewCreator::SizeBytes(UINT size) +{ + if(m_Type == ViewType::CBV) + desc.cbv.SizeInBytes = size; + else + TEST_ERROR("This view & resource doesn't support SizeBytes"); + return *this; +} + D3D12ViewCreator &D3D12ViewCreator::FirstElement(UINT el) { if(firstElement) @@ -780,6 +803,11 @@ D3D12_CPU_DESCRIPTOR_HANDLE D3D12ViewCreator::CreateCPU(ID3D12DescriptorHeap *he cpu.ptr += increment[D3D12_DESCRIPTOR_HEAP_TYPE_RTV] * descriptor; m_Test->dev->CreateRenderTargetView(m_Res, &desc.rtv, cpu); } + else if(m_Type == ViewType::CBV) + { + cpu.ptr += increment[D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV] * descriptor; + m_Test->dev->CreateConstantBufferView(&desc.cbv, cpu); + } else if(m_Type == ViewType::SRV) { if(desc.uav.ViewDimension == D3D12_SRV_DIMENSION_BUFFER) diff --git a/util/test/demos/d3d12/d3d12_helpers.h b/util/test/demos/d3d12/d3d12_helpers.h index 7a0bcb445..321dcc009 100644 --- a/util/test/demos/d3d12/d3d12_helpers.h +++ b/util/test/demos/d3d12/d3d12_helpers.h @@ -178,6 +178,10 @@ public: // common params D3D12ViewCreator &Format(DXGI_FORMAT format); + // cbv params + D3D12ViewCreator &Offset(UINT offset); + D3D12ViewCreator &SizeBytes(UINT size); + // buffer params D3D12ViewCreator &FirstElement(UINT el); D3D12ViewCreator &NumElements(UINT num); @@ -232,6 +236,7 @@ private: // resource type union { + D3D12_CONSTANT_BUFFER_VIEW_DESC cbv; D3D12_SHADER_RESOURCE_VIEW_DESC srv; D3D12_RENDER_TARGET_VIEW_DESC rtv; D3D12_DEPTH_STENCIL_VIEW_DESC dsv; diff --git a/util/test/demos/d3d12/d3d12_test.h b/util/test/demos/d3d12/d3d12_test.h index b5167cef4..c37496084 100644 --- a/util/test/demos/d3d12/d3d12_test.h +++ b/util/test/demos/d3d12/d3d12_test.h @@ -104,6 +104,11 @@ struct D3D12GraphicsTest : public GraphicsTest return D3D12TextureCreator(this, format, width, height, depth); } + template + D3D12ViewCreator MakeCBV(T res) + { + return D3D12ViewCreator(this, m_CBVUAVSRV, NULL, ViewType::CBV, res); + } template D3D12ViewCreator MakeSRV(T res) { diff --git a/util/test/demos/dx/d3d_helpers.h b/util/test/demos/dx/d3d_helpers.h index 33b62ba2c..c7dcf2e70 100644 --- a/util/test/demos/dx/d3d_helpers.h +++ b/util/test/demos/dx/d3d_helpers.h @@ -65,4 +65,5 @@ enum class ViewType RTV, DSV, UAV, + CBV, };