1 /*
2 * Copyright © Yonggang Luo
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 */
23
24 #ifndef D3D12_COMMON_STATE_H
25 #define D3D12_COMMON_STATE_H
26
27 #pragma once
28
29 #ifndef _WIN32
30 #include <wsl/winadapter.h>
31 #else
32 #include <unknwn.h>
33 #endif
34
35 #define D3D12_IGNORE_SDK_LAYERS
36 #include <directx/d3d12.h>
37 #include <directx/d3d12video.h>
38
39 #if defined(__cplusplus)
40 #if !defined(_WIN32) || defined(_MSC_VER) || D3D12_SDK_VERSION < 606
41 inline D3D12_CPU_DESCRIPTOR_HANDLE
GetCPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap * heap)42 GetCPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap *heap)
43 {
44 return heap->GetCPUDescriptorHandleForHeapStart();
45 }
46 inline D3D12_GPU_DESCRIPTOR_HANDLE
GetGPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap * heap)47 GetGPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap *heap)
48 {
49 return heap->GetGPUDescriptorHandleForHeapStart();
50 }
51 inline D3D12_RESOURCE_DESC
GetDesc(ID3D12Resource * res)52 GetDesc(ID3D12Resource *res)
53 {
54 return res->GetDesc();
55 }
56 inline D3D12_HEAP_PROPERTIES
GetCustomHeapProperties(ID3D12Device * dev,D3D12_HEAP_TYPE type)57 GetCustomHeapProperties(ID3D12Device *dev, D3D12_HEAP_TYPE type)
58 {
59 return dev->GetCustomHeapProperties(0, type);
60 }
61 inline LUID
GetAdapterLuid(ID3D12Device * dev)62 GetAdapterLuid(ID3D12Device *dev)
63 {
64 return dev->GetAdapterLuid();
65 }
66 inline D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
GetOutputStreamDesc(ID3D12VideoProcessor * proc)67 GetOutputStreamDesc(ID3D12VideoProcessor *proc)
68 {
69 return proc->GetOutputStreamDesc();
70 }
71 #else
72 inline D3D12_CPU_DESCRIPTOR_HANDLE
GetCPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap * heap)73 GetCPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap *heap)
74 {
75 D3D12_CPU_DESCRIPTOR_HANDLE ret;
76 heap->GetCPUDescriptorHandleForHeapStart(&ret);
77 return ret;
78 }
79 inline D3D12_GPU_DESCRIPTOR_HANDLE
GetGPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap * heap)80 GetGPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap *heap)
81 {
82 D3D12_GPU_DESCRIPTOR_HANDLE ret;
83 heap->GetGPUDescriptorHandleForHeapStart(&ret);
84 return ret;
85 }
86 inline D3D12_RESOURCE_DESC
GetDesc(ID3D12Resource * res)87 GetDesc(ID3D12Resource *res)
88 {
89 D3D12_RESOURCE_DESC ret;
90 res->GetDesc(&ret);
91 return ret;
92 }
93 inline D3D12_HEAP_PROPERTIES
GetCustomHeapProperties(ID3D12Device * dev,D3D12_HEAP_TYPE type)94 GetCustomHeapProperties(ID3D12Device *dev, D3D12_HEAP_TYPE type)
95 {
96 D3D12_HEAP_PROPERTIES ret;
97 dev->GetCustomHeapProperties(&ret, 0, type);
98 return ret;
99 }
100 inline LUID
GetAdapterLuid(ID3D12Device * dev)101 GetAdapterLuid(ID3D12Device *dev)
102 {
103 LUID ret;
104 dev->GetAdapterLuid(&ret);
105 return ret;
106 }
107 inline D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC
GetOutputStreamDesc(ID3D12VideoProcessor * proc)108 GetOutputStreamDesc(ID3D12VideoProcessor *proc)
109 {
110 D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC ret;
111 proc->GetOutputStreamDesc(&ret);
112 return ret;
113 }
114 #endif
115 #endif
116
117 #endif
118