1 /*
2 * Copyright 2020 Google LLC
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "src/gpu/d3d/GrD3DDescriptorHeap.h"
9 #include "src/gpu/d3d/GrD3DGpu.h"
10
Make(GrD3DGpu * gpu,D3D12_DESCRIPTOR_HEAP_TYPE type,unsigned int numDescriptors,D3D12_DESCRIPTOR_HEAP_FLAGS flags)11 std::unique_ptr<GrD3DDescriptorHeap> GrD3DDescriptorHeap::Make(GrD3DGpu* gpu,
12 D3D12_DESCRIPTOR_HEAP_TYPE type,
13 unsigned int numDescriptors,
14 D3D12_DESCRIPTOR_HEAP_FLAGS flags) {
15 D3D12_DESCRIPTOR_HEAP_DESC heapDesc = {};
16 heapDesc.Type = type;
17 heapDesc.NumDescriptors = numDescriptors;
18 heapDesc.Flags = flags;
19
20 ID3D12DescriptorHeap* heap;
21 gpu->device()->CreateDescriptorHeap(&heapDesc, IID_PPV_ARGS(&heap));
22
23 return std::unique_ptr<GrD3DDescriptorHeap>(
24 new GrD3DDescriptorHeap(std::move(gr_cp<ID3D12DescriptorHeap>(heap)),
25 gpu->device()->GetDescriptorHandleIncrementSize(type)));
26 }
27
GrD3DDescriptorHeap(const gr_cp<ID3D12DescriptorHeap> & heap,unsigned int handleIncrementSize)28 GrD3DDescriptorHeap::GrD3DDescriptorHeap(const gr_cp<ID3D12DescriptorHeap>& heap,
29 unsigned int handleIncrementSize)
30 : fHeap(heap)
31 , fHandleIncrementSize(handleIncrementSize)
32 , fUniqueID(GenID()) {
33 fCPUHeapStart = fHeap->GetCPUDescriptorHandleForHeapStart();
34 fGPUHeapStart = fHeap->GetGPUDescriptorHandleForHeapStart();
35 }
36
getCPUHandle(unsigned int index)37 GrD3DDescriptorHeap::CPUHandle GrD3DDescriptorHeap::getCPUHandle(unsigned int index) {
38 SkASSERT(index < fHeap->GetDesc().NumDescriptors);
39 D3D12_CPU_DESCRIPTOR_HANDLE handle = fCPUHeapStart;
40 handle.ptr += index * fHandleIncrementSize;
41 return {handle, fUniqueID};
42 }
43
getGPUHandle(unsigned int index)44 GrD3DDescriptorHeap::GPUHandle GrD3DDescriptorHeap::getGPUHandle(unsigned int index) {
45 SkASSERT(index < fHeap->GetDesc().NumDescriptors);
46 D3D12_GPU_DESCRIPTOR_HANDLE handle = fGPUHeapStart;
47 handle.ptr += index * fHandleIncrementSize;
48 return {handle, fUniqueID};
49 }
50
51
52
53