aboutsummaryrefslogtreecommitdiff
path: root/demo/d3d12/NvCoDx12DescriptorHeap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'demo/d3d12/NvCoDx12DescriptorHeap.cpp')
-rw-r--r--demo/d3d12/NvCoDx12DescriptorHeap.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/demo/d3d12/NvCoDx12DescriptorHeap.cpp b/demo/d3d12/NvCoDx12DescriptorHeap.cpp
new file mode 100644
index 0000000..acda590
--- /dev/null
+++ b/demo/d3d12/NvCoDx12DescriptorHeap.cpp
@@ -0,0 +1,54 @@
+/* Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+* NVIDIA CORPORATION and its licensors retain all intellectual property
+* and proprietary rights in and to this software, related documentation
+* and any modifications thereto. Any use, reproduction, disclosure or
+* distribution of this software and related documentation without an express
+* license agreement from NVIDIA CORPORATION is strictly prohibited. */
+
+#include "NvCoDx12DescriptorHeap.h"
+
+namespace nvidia {
+namespace Common {
+
+Dx12DescriptorHeap::Dx12DescriptorHeap():
+ m_size(0),
+ m_currentIndex(0),
+ m_descriptorSize(0)
+{
+}
+
+int Dx12DescriptorHeap::init(ID3D12Device* device, int size, D3D12_DESCRIPTOR_HEAP_TYPE type, D3D12_DESCRIPTOR_HEAP_FLAGS flags)
+{
+ D3D12_DESCRIPTOR_HEAP_DESC srvHeapDesc = {};
+ srvHeapDesc.NumDescriptors = size;
+ srvHeapDesc.Flags = flags;
+ srvHeapDesc.Type = type;
+ NV_RETURN_ON_FAIL(device->CreateDescriptorHeap(&srvHeapDesc, IID_PPV_ARGS(&m_heap)));
+
+ m_descriptorSize = device->GetDescriptorHandleIncrementSize(type);
+ m_size = size;
+
+ return NV_OK;
+}
+
+int Dx12DescriptorHeap::init(ID3D12Device* device, const D3D12_CPU_DESCRIPTOR_HANDLE* handles, int numHandles, D3D12_DESCRIPTOR_HEAP_TYPE type, D3D12_DESCRIPTOR_HEAP_FLAGS flags)
+{
+ NV_RETURN_ON_FAIL(init(device, numHandles, type, flags));
+ D3D12_CPU_DESCRIPTOR_HANDLE dst = m_heap->GetCPUDescriptorHandleForHeapStart();
+
+ // Copy them all
+ for (int i = 0; i < numHandles; i++, dst.ptr += m_descriptorSize)
+ {
+ D3D12_CPU_DESCRIPTOR_HANDLE src = handles[i];
+ if (src.ptr != 0)
+ {
+ device->CopyDescriptorsSimple(1, dst, src, type);
+ }
+ }
+
+ return NV_OK;
+}
+
+} // namespace Common
+} // namespace nvidia
+