diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index 554d5b9..d9ef965 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -93,6 +93,7 @@
   include/d3d11_3.idl \
   include/d3d11_4.idl \
   include/d3d11sdklayers.idl \
+  include/d3d12.idl \
   include/d3d12shader.idl \
   include/d3dcommon.idl \
   include/dbgprop.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index 88e942f..9368bb6 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -393,6 +393,7 @@
 @HAVE_WIDL_TRUE@  include/d3d11_3.idl \
 @HAVE_WIDL_TRUE@  include/d3d11_4.idl \
 @HAVE_WIDL_TRUE@  include/d3d11sdklayers.idl \
+@HAVE_WIDL_TRUE@  include/d3d12.idl \
 @HAVE_WIDL_TRUE@  include/d3d12shader.idl \
 @HAVE_WIDL_TRUE@  include/d3dcommon.idl \
 @HAVE_WIDL_TRUE@  include/dbgprop.idl \
diff --git a/mingw-w64-headers/include/amstream.h b/mingw-w64-headers/include/amstream.h
index 18f3a66..2bf2459 100644
--- a/mingw-w64-headers/include/amstream.h
+++ b/mingw-w64-headers/include/amstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/amstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/amstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/amvideo.h b/mingw-w64-headers/include/amvideo.h
index b5c3a30..9dccc90 100644
--- a/mingw-w64-headers/include/amvideo.h
+++ b/mingw-w64-headers/include/amvideo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/amvideo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/amvideo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/austream.h b/mingw-w64-headers/include/austream.h
index db73094..9f091e6 100644
--- a/mingw-w64-headers/include/austream.h
+++ b/mingw-w64-headers/include/austream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/austream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/austream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ctfutb.h b/mingw-w64-headers/include/ctfutb.h
index 3b9f571..87df140 100644
--- a/mingw-w64-headers/include/ctfutb.h
+++ b/mingw-w64-headers/include/ctfutb.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/ctfutb.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/ctfutb.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10.h b/mingw-w64-headers/include/d3d10.h
index f5251ad..1834653 100644
--- a/mingw-w64-headers/include/d3d10.h
+++ b/mingw-w64-headers/include/d3d10.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d10.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d10.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10_1.h b/mingw-w64-headers/include/d3d10_1.h
index ea3ace2..bdc66a1 100644
--- a/mingw-w64-headers/include/d3d10_1.h
+++ b/mingw-w64-headers/include/d3d10_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d10_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d10_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d10sdklayers.h b/mingw-w64-headers/include/d3d10sdklayers.h
index dc2cf8d..93f8b1c 100644
--- a/mingw-w64-headers/include/d3d10sdklayers.h
+++ b/mingw-w64-headers/include/d3d10sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d10sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d10sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11.h b/mingw-w64-headers/include/d3d11.h
index cc945c5..2d81182 100644
--- a/mingw-w64-headers/include/d3d11.h
+++ b/mingw-w64-headers/include/d3d11.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d11.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d11.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_1.h b/mingw-w64-headers/include/d3d11_1.h
index c5ae60c..9c43a9a 100644
--- a/mingw-w64-headers/include/d3d11_1.h
+++ b/mingw-w64-headers/include/d3d11_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d11_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d11_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_2.h b/mingw-w64-headers/include/d3d11_2.h
index 6a5256f..6708a78 100644
--- a/mingw-w64-headers/include/d3d11_2.h
+++ b/mingw-w64-headers/include/d3d11_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d11_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d11_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_3.h b/mingw-w64-headers/include/d3d11_3.h
index 91b4733..fb15b49 100644
--- a/mingw-w64-headers/include/d3d11_3.h
+++ b/mingw-w64-headers/include/d3d11_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d11_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d11_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11_4.h b/mingw-w64-headers/include/d3d11_4.h
index 070f7de..a046711 100644
--- a/mingw-w64-headers/include/d3d11_4.h
+++ b/mingw-w64-headers/include/d3d11_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d11_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d11_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d11sdklayers.h b/mingw-w64-headers/include/d3d11sdklayers.h
index 6edd03a..207c2cc 100644
--- a/mingw-w64-headers/include/d3d11sdklayers.h
+++ b/mingw-w64-headers/include/d3d11sdklayers.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d11sdklayers.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d11sdklayers.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3d12.h b/mingw-w64-headers/include/d3d12.h
new file mode 100644
index 0000000..f9a1c7f
--- /dev/null
+++ b/mingw-w64-headers/include/d3d12.h
@@ -0,0 +1,5315 @@
+/*** Autogenerated by WIDL 5.16 from include/d3d12.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __d3d12_h__
+#define __d3d12_h__
+
+/* Forward declarations */
+
+#ifndef __ID3D12Object_FWD_DEFINED__
+#define __ID3D12Object_FWD_DEFINED__
+typedef interface ID3D12Object ID3D12Object;
+#ifdef __cplusplus
+interface ID3D12Object;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12DeviceChild_FWD_DEFINED__
+#define __ID3D12DeviceChild_FWD_DEFINED__
+typedef interface ID3D12DeviceChild ID3D12DeviceChild;
+#ifdef __cplusplus
+interface ID3D12DeviceChild;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Pageable_FWD_DEFINED__
+#define __ID3D12Pageable_FWD_DEFINED__
+typedef interface ID3D12Pageable ID3D12Pageable;
+#ifdef __cplusplus
+interface ID3D12Pageable;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Resource_FWD_DEFINED__
+#define __ID3D12Resource_FWD_DEFINED__
+typedef interface ID3D12Resource ID3D12Resource;
+#ifdef __cplusplus
+interface ID3D12Resource;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12CommandList_FWD_DEFINED__
+#define __ID3D12CommandList_FWD_DEFINED__
+typedef interface ID3D12CommandList ID3D12CommandList;
+#ifdef __cplusplus
+interface ID3D12CommandList;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12DescriptorHeap_FWD_DEFINED__
+#define __ID3D12DescriptorHeap_FWD_DEFINED__
+typedef interface ID3D12DescriptorHeap ID3D12DescriptorHeap;
+#ifdef __cplusplus
+interface ID3D12DescriptorHeap;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12QueryHeap_FWD_DEFINED__
+#define __ID3D12QueryHeap_FWD_DEFINED__
+typedef interface ID3D12QueryHeap ID3D12QueryHeap;
+#ifdef __cplusplus
+interface ID3D12QueryHeap;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12CommandSignature_FWD_DEFINED__
+#define __ID3D12CommandSignature_FWD_DEFINED__
+typedef interface ID3D12CommandSignature ID3D12CommandSignature;
+#ifdef __cplusplus
+interface ID3D12CommandSignature;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12GraphicsCommandList_FWD_DEFINED__
+#define __ID3D12GraphicsCommandList_FWD_DEFINED__
+typedef interface ID3D12GraphicsCommandList ID3D12GraphicsCommandList;
+#ifdef __cplusplus
+interface ID3D12GraphicsCommandList;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12CommandQueue_FWD_DEFINED__
+#define __ID3D12CommandQueue_FWD_DEFINED__
+typedef interface ID3D12CommandQueue ID3D12CommandQueue;
+#ifdef __cplusplus
+interface ID3D12CommandQueue;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12RootSignature_FWD_DEFINED__
+#define __ID3D12RootSignature_FWD_DEFINED__
+typedef interface ID3D12RootSignature ID3D12RootSignature;
+#ifdef __cplusplus
+interface ID3D12RootSignature;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12PipelineState_FWD_DEFINED__
+#define __ID3D12PipelineState_FWD_DEFINED__
+typedef interface ID3D12PipelineState ID3D12PipelineState;
+#ifdef __cplusplus
+interface ID3D12PipelineState;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Fence_FWD_DEFINED__
+#define __ID3D12Fence_FWD_DEFINED__
+typedef interface ID3D12Fence ID3D12Fence;
+#ifdef __cplusplus
+interface ID3D12Fence;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12CommandAllocator_FWD_DEFINED__
+#define __ID3D12CommandAllocator_FWD_DEFINED__
+typedef interface ID3D12CommandAllocator ID3D12CommandAllocator;
+#ifdef __cplusplus
+interface ID3D12CommandAllocator;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Device_FWD_DEFINED__
+#define __ID3D12Device_FWD_DEFINED__
+typedef interface ID3D12Device ID3D12Device;
+#ifdef __cplusplus
+interface ID3D12Device;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Debug_FWD_DEFINED__
+#define __ID3D12Debug_FWD_DEFINED__
+typedef interface ID3D12Debug ID3D12Debug;
+#ifdef __cplusplus
+interface ID3D12Debug;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12RootSignatureDeserializer_FWD_DEFINED__
+#define __ID3D12RootSignatureDeserializer_FWD_DEFINED__
+typedef interface ID3D12RootSignatureDeserializer ID3D12RootSignatureDeserializer;
+#ifdef __cplusplus
+interface ID3D12RootSignatureDeserializer;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <oaidl.h>
+#include <ocidl.h>
+#include <dxgi.h>
+#include <d3dcommon.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _D3D12_CONSTANTS
+#define _D3D12_CONSTANTS
+#define D3D12_CS_TGSM_REGISTER_COUNT (8192)
+
+#define D3D12_MAX_ROOT_COST (64)
+
+#define D3D12_VIEWPORT_BOUNDS_MAX (32767)
+
+#define D3D12_VIEWPORT_BOUNDS_MIN (-32768)
+
+#define D3D12_APPEND_ALIGNED_ELEMENT (0xffffffff)
+
+#define D3D12_DEFAULT_BLEND_FACTOR_ALPHA (1.0f)
+#define D3D12_DEFAULT_BLEND_FACTOR_BLUE (1.0f)
+#define D3D12_DEFAULT_BLEND_FACTOR_GREEN (1.0f)
+#define D3D12_DEFAULT_BLEND_FACTOR_RED (1.0f)
+#define D3D12_DEFAULT_DEPTH_BIAS (0)
+
+#define D3D12_DEFAULT_DEPTH_BIAS_CLAMP (0.0f)
+#define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS (0.0f)
+#define D3D12_DEFAULT_STENCIL_READ_MASK (0xff)
+
+#define D3D12_DEFAULT_STENCIL_WRITE_MASK (0xff)
+
+#define D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND (0xffffffff)
+
+#define D3D12_FLOAT32_MAX (3.402823466e+38f)
+#define D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT (32)
+
+#define D3D12_REQ_MIP_LEVELS (15)
+
+#define D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION (2048)
+
+#define D3D12_REQ_TEXTURE1D_U_DIMENSION (16384)
+
+#define D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION (2048)
+
+#define D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION (16384)
+
+#define D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION (2048)
+
+#define D3D12_REQ_TEXTURECUBE_DIMENSION (16384)
+
+#define D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES (0xffffffff)
+
+#define D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT (8)
+
+#define D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT (256)
+
+#define D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT (65536)
+
+#define D3D12_TEXTURE_DATA_PITCH_ALIGNMENT (256)
+
+#define D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT (512)
+
+#define D3D12_VS_INPUT_REGISTER_COUNT (32)
+
+#define D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE (16)
+
+#endif
+#define D3D12_SHADER_COMPONENT_MAPPING_MASK (0x7)
+
+#define D3D12_SHADER_COMPONENT_MAPPING_SHIFT (3)
+
+#define D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES (1 << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 4))
+
+typedef enum D3D12_SHADER_MIN_PRECISION_SUPPORT {
+    D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0x0,
+    D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1,
+    D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2
+} D3D12_SHADER_MIN_PRECISION_SUPPORT;
+typedef enum D3D12_TILED_RESOURCES_TIER {
+    D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0,
+    D3D12_TILED_RESOURCES_TIER_1 = 1,
+    D3D12_TILED_RESOURCES_TIER_2 = 2,
+    D3D12_TILED_RESOURCES_TIER_3 = 3
+} D3D12_TILED_RESOURCES_TIER;
+typedef enum D3D12_RESOURCE_BINDING_TIER {
+    D3D12_RESOURCE_BINDING_TIER_1 = 1,
+    D3D12_RESOURCE_BINDING_TIER_2 = 2,
+    D3D12_RESOURCE_BINDING_TIER_3 = 3
+} D3D12_RESOURCE_BINDING_TIER;
+typedef enum D3D12_CONSERVATIVE_RASTERIZATION_TIER {
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0,
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1,
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2,
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3
+} D3D12_CONSERVATIVE_RASTERIZATION_TIER;
+typedef enum D3D12_CROSS_NODE_SHARING_TIER {
+    D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0,
+    D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1,
+    D3D12_CROSS_NODE_SHARING_TIER_1 = 2,
+    D3D12_CROSS_NODE_SHARING_TIER_2 = 3
+} D3D12_CROSS_NODE_SHARING_TIER;
+typedef enum D3D12_RESOURCE_HEAP_TIER {
+    D3D12_RESOURCE_HEAP_TIER_1 = 1,
+    D3D12_RESOURCE_HEAP_TIER_2 = 2
+} D3D12_RESOURCE_HEAP_TIER;
+typedef enum D3D12_FORMAT_SUPPORT1 {
+    D3D12_FORMAT_SUPPORT1_NONE = 0x0,
+    D3D12_FORMAT_SUPPORT1_BUFFER = 0x1,
+    D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x2,
+    D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x4,
+    D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x8,
+    D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x10,
+    D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x20,
+    D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x40,
+    D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x80,
+    D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x100,
+    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x200,
+    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x400,
+    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x800,
+    D3D12_FORMAT_SUPPORT1_MIP = 0x1000,
+    D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x4000,
+    D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x8000,
+    D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x10000,
+    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x40000,
+    D3D12_FORMAT_SUPPORT1_DISPLAY = 0x80000,
+    D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x100000,
+    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x200000,
+    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x400000,
+    D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x800000,
+    D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x1000000,
+    D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000,
+    D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x4000000,
+    D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x8000000,
+    D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000,
+    D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000,
+    D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000
+} D3D12_FORMAT_SUPPORT1;
+typedef enum D3D12_FORMAT_SUPPORT2 {
+    D3D12_FORMAT_SUPPORT2_NONE = 0x0,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x1,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x2,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x8,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x10,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x20,
+    D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x40,
+    D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x80,
+    D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x100,
+    D3D12_FORMAT_SUPPORT2_TILED = 0x200,
+    D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x4000
+} D3D12_FORMAT_SUPPORT2;
+#ifndef __ID3D12Fence_FWD_DEFINED__
+#define __ID3D12Fence_FWD_DEFINED__
+typedef interface ID3D12Fence ID3D12Fence;
+#ifdef __cplusplus
+interface ID3D12Fence;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12RootSignature_FWD_DEFINED__
+#define __ID3D12RootSignature_FWD_DEFINED__
+typedef interface ID3D12RootSignature ID3D12RootSignature;
+#ifdef __cplusplus
+interface ID3D12RootSignature;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Heap_FWD_DEFINED__
+#define __ID3D12Heap_FWD_DEFINED__
+typedef interface ID3D12Heap ID3D12Heap;
+#ifdef __cplusplus
+interface ID3D12Heap;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12DescriptorHeap_FWD_DEFINED__
+#define __ID3D12DescriptorHeap_FWD_DEFINED__
+typedef interface ID3D12DescriptorHeap ID3D12DescriptorHeap;
+#ifdef __cplusplus
+interface ID3D12DescriptorHeap;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Resource_FWD_DEFINED__
+#define __ID3D12Resource_FWD_DEFINED__
+typedef interface ID3D12Resource ID3D12Resource;
+#ifdef __cplusplus
+interface ID3D12Resource;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12CommandAllocator_FWD_DEFINED__
+#define __ID3D12CommandAllocator_FWD_DEFINED__
+typedef interface ID3D12CommandAllocator ID3D12CommandAllocator;
+#ifdef __cplusplus
+interface ID3D12CommandAllocator;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12GraphicsCommandList_FWD_DEFINED__
+#define __ID3D12GraphicsCommandList_FWD_DEFINED__
+typedef interface ID3D12GraphicsCommandList ID3D12GraphicsCommandList;
+#ifdef __cplusplus
+interface ID3D12GraphicsCommandList;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12CommandQueue_FWD_DEFINED__
+#define __ID3D12CommandQueue_FWD_DEFINED__
+typedef interface ID3D12CommandQueue ID3D12CommandQueue;
+#ifdef __cplusplus
+interface ID3D12CommandQueue;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12PipelineState_FWD_DEFINED__
+#define __ID3D12PipelineState_FWD_DEFINED__
+typedef interface ID3D12PipelineState ID3D12PipelineState;
+#ifdef __cplusplus
+interface ID3D12PipelineState;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ID3D12Device_FWD_DEFINED__
+#define __ID3D12Device_FWD_DEFINED__
+typedef interface ID3D12Device ID3D12Device;
+#ifdef __cplusplus
+interface ID3D12Device;
+#endif /* __cplusplus */
+#endif
+
+typedef RECT D3D12_RECT;
+typedef struct D3D12_BOX {
+    UINT left;
+    UINT top;
+    UINT front;
+    UINT right;
+    UINT bottom;
+    UINT back;
+} D3D12_BOX;
+typedef struct D3D12_VIEWPORT {
+    FLOAT TopLeftX;
+    FLOAT TopLeftY;
+    FLOAT Width;
+    FLOAT Height;
+    FLOAT MinDepth;
+    FLOAT MaxDepth;
+} D3D12_VIEWPORT;
+typedef struct D3D12_RANGE {
+    SIZE_T Begin;
+    SIZE_T End;
+} D3D12_RANGE;
+typedef struct D3D12_RESOURCE_ALLOCATION_INFO {
+    UINT64 SizeInBytes;
+    UINT64 Alignment;
+} D3D12_RESOURCE_ALLOCATION_INFO;
+typedef struct D3D12_DRAW_ARGUMENTS {
+    UINT VertexCountPerInstance;
+    UINT InstanceCount;
+    UINT StartVertexLocation;
+    UINT StartInstanceLocation;
+} D3D12_DRAW_ARGUMENTS;
+typedef struct D3D12_DRAW_INDEXED_ARGUMENTS {
+    UINT IndexCountPerInstance;
+    UINT InstanceCount;
+    UINT StartIndexLocation;
+    INT BaseVertexLocation;
+    UINT StartInstanceLocation;
+} D3D12_DRAW_INDEXED_ARGUMENTS;
+typedef struct D3D12_DISPATCH_ARGUMENTS {
+    UINT ThreadGroupCountX;
+    UINT ThreadGroupCountY;
+    UINT ThreadGroupCountZ;
+} D3D12_DISPATCH_ARGUMENTS;
+typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS {
+    WINBOOL DoublePrecisionFloatShaderOps;
+    WINBOOL OutputMergerLogicOp;
+    D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;
+    D3D12_TILED_RESOURCES_TIER TiledResourcesTier;
+    D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;
+    WINBOOL PSSpecifiedStencilRefSupported;
+    WINBOOL TypedUAVLoadAdditionalFormats;
+    WINBOOL ROVsSupported;
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
+    UINT MaxGPUVirtualAddressBitsPerResource;
+    WINBOOL StandardSwizzle64KBSupported;
+    D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier;
+    WINBOOL CrossAdapterRowMajorTextureSupported;
+    WINBOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;
+    D3D12_RESOURCE_HEAP_TIER ResourceHeapTier;
+} D3D12_FEATURE_DATA_D3D12_OPTIONS;
+typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT {
+    DXGI_FORMAT Format;
+    D3D12_FORMAT_SUPPORT1 Support1;
+    D3D12_FORMAT_SUPPORT2 Support2;
+} D3D12_FEATURE_DATA_FORMAT_SUPPORT;
+typedef enum D3D12_HEAP_TYPE {
+    D3D12_HEAP_TYPE_DEFAULT = 1,
+    D3D12_HEAP_TYPE_UPLOAD = 2,
+    D3D12_HEAP_TYPE_READBACK = 3,
+    D3D12_HEAP_TYPE_CUSTOM = 4
+} D3D12_HEAP_TYPE;
+typedef enum D3D12_CPU_PAGE_PROPERTY {
+    D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0,
+    D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2,
+    D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3
+} D3D12_CPU_PAGE_PROPERTY;
+typedef enum D3D12_MEMORY_POOL {
+    D3D12_MEMORY_POOL_UNKNOWN = 0,
+    D3D12_MEMORY_POOL_L0 = 1,
+    D3D12_MEMORY_POOL_L1 = 2
+} D3D12_MEMORY_POOL;
+typedef struct D3D12_HEAP_PROPERTIES {
+    D3D12_HEAP_TYPE Type;
+    D3D12_CPU_PAGE_PROPERTY CPUPageProperty;
+    D3D12_MEMORY_POOL MemoryPoolPreference;
+    UINT CreationNodeMask;
+    UINT VisibleNodeMask;
+} D3D12_HEAP_PROPERTIES;
+typedef enum D3D12_HEAP_FLAGS {
+    D3D12_HEAP_FLAG_NONE = 0x0,
+    D3D12_HEAP_FLAG_SHARED = 0x1,
+    D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4,
+    D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8,
+    D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
+    D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
+    D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
+    D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0x0,
+    D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,
+    D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
+    D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84
+} D3D12_HEAP_FLAGS;
+typedef struct D3D12_HEAP_DESC {
+    UINT64 SizeInBytes;
+    D3D12_HEAP_PROPERTIES Properties;
+    UINT64 Alignment;
+    D3D12_HEAP_FLAGS Flags;
+} D3D12_HEAP_DESC;
+typedef struct D3D12_TILED_RESOURCE_COORDINATE {
+    UINT X;
+    UINT Y;
+    UINT Z;
+    UINT Subresource;
+} D3D12_TILED_RESOURCE_COORDINATE;
+typedef struct D3D12_TILE_REGION_SIZE {
+    UINT NumTiles;
+    WINBOOL UseBox;
+    UINT Width;
+    UINT16 Height;
+    UINT16 Depth;
+} D3D12_TILE_REGION_SIZE;
+typedef struct D3D12_SUBRESOURCE_TILING {
+    UINT WidthInTiles;
+    UINT16 HeightInTiles;
+    UINT16 DepthInTiles;
+    UINT StartTileIndexInOverallResource;
+} D3D12_SUBRESOURCE_TILING;
+typedef struct D3D12_TILE_SHAPE {
+    UINT WidthInTexels;
+    UINT HeightInTexels;
+    UINT DepthInTexels;
+} D3D12_TILE_SHAPE;
+typedef struct D3D12_SHADER_BYTECODE {
+    const void *pShaderBytecode;
+    SIZE_T BytecodeLength;
+} D3D12_SHADER_BYTECODE;
+typedef struct D3D12_DEPTH_STENCIL_VALUE {
+    FLOAT Depth;
+    UINT8 Stencil;
+} D3D12_DEPTH_STENCIL_VALUE;
+typedef struct D3D12_CLEAR_VALUE {
+    DXGI_FORMAT Format;
+    __C89_NAMELESS union {
+        FLOAT Color[4];
+        D3D12_DEPTH_STENCIL_VALUE DepthStencil;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_CLEAR_VALUE;
+typedef struct D3D12_PACKED_MIP_INFO {
+    UINT8 NumStandardMips;
+    UINT8 NumPackedMips;
+    UINT NumTilesForPackedMips;
+    UINT StartTileIndexInOverallResource;
+} D3D12_PACKED_MIP_INFO;
+typedef enum D3D12_RESOURCE_STATES {
+    D3D12_RESOURCE_STATE_COMMON = 0,
+    D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,
+    D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x2,
+    D3D12_RESOURCE_STATE_RENDER_TARGET = 0x4,
+    D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x8,
+    D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x10,
+    D3D12_RESOURCE_STATE_DEPTH_READ = 0x20,
+    D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x40,
+    D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x80,
+    D3D12_RESOURCE_STATE_STREAM_OUT = 0x100,
+    D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x200,
+    D3D12_RESOURCE_STATE_COPY_DEST = 0x400,
+    D3D12_RESOURCE_STATE_COPY_SOURCE = 0x800,
+    D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000,
+    D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000,
+    D3D12_RESOURCE_STATE_GENERIC_READ = ((((0x1 | 0x2) | 0x40) | 0x80) | 0x200) | 0x800,
+    D3D12_RESOURCE_STATE_PRESENT = 0x0,
+    D3D12_RESOURCE_STATE_PREDICATION = 0x200
+} D3D12_RESOURCE_STATES;
+DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_STATES);
+typedef enum D3D12_RESOURCE_BARRIER_TYPE {
+    D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0,
+    D3D12_RESOURCE_BARRIER_TYPE_ALIASING = 1,
+    D3D12_RESOURCE_BARRIER_TYPE_UAV = 2
+} D3D12_RESOURCE_BARRIER_TYPE;
+typedef enum D3D12_RESOURCE_BARRIER_FLAGS {
+    D3D12_RESOURCE_BARRIER_FLAG_NONE = 0x0,
+    D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1,
+    D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2
+} D3D12_RESOURCE_BARRIER_FLAGS;
+typedef struct D3D12_RESOURCE_TRANSITION_BARRIER {
+    ID3D12Resource *pResource;
+    UINT Subresource;
+    D3D12_RESOURCE_STATES StateBefore;
+    D3D12_RESOURCE_STATES StateAfter;
+} D3D12_RESOURCE_TRANSITION_BARRIER;
+typedef struct D3D12_RESOURCE_ALIASING_BARRIER_ALIASING {
+    ID3D12Resource *pResourceBefore;
+    ID3D12Resource *pResourceAfter;
+} D3D12_RESOURCE_ALIASING_BARRIER;
+typedef struct D3D12_RESOURCE_UAV_BARRIER {
+    ID3D12Resource *pResource;
+} D3D12_RESOURCE_UAV_BARRIER;
+typedef struct D3D12_RESOURCE_BARRIER {
+    D3D12_RESOURCE_BARRIER_TYPE Type;
+    D3D12_RESOURCE_BARRIER_FLAGS Flags;
+    __C89_NAMELESS union {
+        D3D12_RESOURCE_TRANSITION_BARRIER Transition;
+        D3D12_RESOURCE_ALIASING_BARRIER Aliasing;
+        D3D12_RESOURCE_UAV_BARRIER UAV;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_RESOURCE_BARRIER;
+typedef enum D3D12_RESOURCE_DIMENSION {
+    D3D12_RESOURCE_DIMENSION_UNKNOWN = 0,
+    D3D12_RESOURCE_DIMENSION_BUFFER = 1,
+    D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2,
+    D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3,
+    D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4
+} D3D12_RESOURCE_DIMENSION;
+typedef enum D3D12_TEXTURE_LAYOUT {
+    D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
+    D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
+    D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
+    D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
+} D3D12_TEXTURE_LAYOUT;
+typedef enum D3D12_RESOURCE_FLAGS {
+    D3D12_RESOURCE_FLAG_NONE = 0x0,
+    D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1,
+    D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2,
+    D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4,
+    D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8,
+    D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10,
+    D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20
+} D3D12_RESOURCE_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_FLAGS);
+typedef struct D3D12_RESOURCE_DESC {
+    D3D12_RESOURCE_DIMENSION Dimension;
+    UINT64 Alignment;
+    UINT64 Width;
+    UINT Height;
+    UINT16 DepthOrArraySize;
+    UINT16 MipLevels;
+    DXGI_FORMAT Format;
+    DXGI_SAMPLE_DESC SampleDesc;
+    D3D12_TEXTURE_LAYOUT Layout;
+    D3D12_RESOURCE_FLAGS Flags;
+} D3D12_RESOURCE_DESC;
+typedef enum D3D12_TEXTURE_COPY_TYPE {
+    D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0,
+    D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1
+} D3D12_TEXTURE_COPY_TYPE;
+typedef struct D3D12_SUBRESOURCE_FOOTPRINT {
+    DXGI_FORMAT Format;
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+    UINT RowPitch;
+} D3D12_SUBRESOURCE_FOOTPRINT;
+typedef struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT {
+    UINT64 Offset;
+    D3D12_SUBRESOURCE_FOOTPRINT Footprint;
+} D3D12_PLACED_SUBRESOURCE_FOOTPRINT;
+typedef struct D3D12_TEXTURE_COPY_LOCATION {
+    ID3D12Resource *pResource;
+    D3D12_TEXTURE_COPY_TYPE Type;
+    __C89_NAMELESS union {
+        D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;
+        UINT SubresourceIndex;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_TEXTURE_COPY_LOCATION;
+typedef enum D3D12_DESCRIPTOR_RANGE_TYPE {
+    D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0,
+    D3D12_DESCRIPTOR_RANGE_TYPE_UAV = 1,
+    D3D12_DESCRIPTOR_RANGE_TYPE_CBV = 2,
+    D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = 3
+} D3D12_DESCRIPTOR_RANGE_TYPE;
+typedef struct D3D12_DESCRIPTOR_RANGE {
+    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
+    UINT NumDescriptors;
+    UINT BaseShaderRegister;
+    UINT RegisterSpace;
+    UINT OffsetInDescriptorsFromTableStart;
+} D3D12_DESCRIPTOR_RANGE;
+typedef enum D3D12_DESCRIPTOR_RANGE_FLAGS {
+    D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0
+} D3D12_DESCRIPTOR_RANGE_FLAGS;
+typedef struct D3D12_DESCRIPTOR_RANGE1 {
+    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
+    UINT NumDescriptors;
+    UINT BaseShaderRegister;
+    UINT RegisterSpace;
+    D3D12_DESCRIPTOR_RANGE_FLAGS Flags;
+    UINT OffsetInDescriptorsFromTableStart;
+} D3D12_DESCRIPTOR_RANGE1;
+typedef struct D3D12_ROOT_DESCRIPTOR_TABLE {
+    UINT NumDescriptorRanges;
+    const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges;
+} D3D12_ROOT_DESCRIPTOR_TABLE;
+typedef struct D3D12_ROOT_DESCRIPTOR_TABLE1 {
+    UINT NumDescriptorRanges;
+    const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges;
+} D3D12_ROOT_DESCRIPTOR_TABLE1;
+typedef struct D3D12_ROOT_CONSTANTS {
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+    UINT Num32BitValues;
+} D3D12_ROOT_CONSTANTS;
+typedef struct D3D12_ROOT_DESCRIPTOR {
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+} D3D12_ROOT_DESCRIPTOR;
+typedef enum D3D12_ROOT_DESCRIPTOR_FLAGS {
+    D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0
+} D3D12_ROOT_DESCRIPTOR_FLAGS;
+typedef struct D3D12_ROOT_DESCRIPTOR1 {
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+    D3D12_ROOT_DESCRIPTOR_FLAGS Flags;
+} D3D12_ROOT_DESCRIPTOR1;
+typedef enum D3D12_ROOT_PARAMETER_TYPE {
+    D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0,
+    D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 1,
+    D3D12_ROOT_PARAMETER_TYPE_CBV = 2,
+    D3D12_ROOT_PARAMETER_TYPE_SRV = 3,
+    D3D12_ROOT_PARAMETER_TYPE_UAV = 4
+} D3D12_ROOT_PARAMETER_TYPE;
+typedef enum D3D12_SHADER_VISIBILITY {
+    D3D12_SHADER_VISIBILITY_ALL = 0,
+    D3D12_SHADER_VISIBILITY_VERTEX = 1,
+    D3D12_SHADER_VISIBILITY_HULL = 2,
+    D3D12_SHADER_VISIBILITY_DOMAIN = 3,
+    D3D12_SHADER_VISIBILITY_GEOMETRY = 4,
+    D3D12_SHADER_VISIBILITY_PIXEL = 5
+} D3D12_SHADER_VISIBILITY;
+typedef struct D3D12_ROOT_PARAMETER {
+    D3D12_ROOT_PARAMETER_TYPE ParameterType;
+    __C89_NAMELESS union {
+        D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;
+        D3D12_ROOT_CONSTANTS Constants;
+        D3D12_ROOT_DESCRIPTOR Descriptor;
+    } __C89_NAMELESSUNIONNAME;
+    D3D12_SHADER_VISIBILITY ShaderVisibility;
+} D3D12_ROOT_PARAMETER;
+typedef struct D3D12_ROOT_PARAMETER1 {
+    D3D12_ROOT_PARAMETER_TYPE ParameterType;
+    __C89_NAMELESS union {
+        D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable;
+        D3D12_ROOT_CONSTANTS Constants;
+        D3D12_ROOT_DESCRIPTOR1 Descriptor;
+    } __C89_NAMELESSUNIONNAME;
+    D3D12_SHADER_VISIBILITY ShaderVisibility;
+} D3D12_ROOT_PARAMETER1;
+typedef enum D3D12_STATIC_BORDER_COLOR {
+    D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,
+    D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK = 1,
+    D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE = 2
+} D3D12_STATIC_BORDER_COLOR;
+typedef enum D3D12_FILTER {
+    D3D12_FILTER_MIN_MAG_MIP_POINT = 0x0,
+    D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1,
+    D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4,
+    D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5,
+    D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+    D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+    D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+    D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+    D3D12_FILTER_ANISOTROPIC = 0x55,
+    D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
+    D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
+    D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
+    D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
+    D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
+    D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+    D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
+    D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
+    D3D12_FILTER_COMPARISON_ANISOTROPIC = 0xd5,
+    D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100,
+    D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,
+    D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
+    D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,
+    D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,
+    D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,
+    D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,
+    D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
+    D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x155,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,
+    D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
+    D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,
+    D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,
+    D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
+    D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5
+} D3D12_FILTER;
+typedef enum D3D12_FILTER_TYPE {
+    D3D12_FILTER_TYPE_POINT = 0,
+    D3D12_FILTER_TYPE_LINEAR = 1
+} D3D12_FILTER_TYPE;
+#define D3D12_MIP_FILTER_SHIFT (0)
+
+#define D3D12_MAG_FILTER_SHIFT (2)
+
+#define D3D12_MIN_FILTER_SHIFT (4)
+
+#define D3D12_FILTER_TYPE_MASK (0x3)
+
+#define D3D12_ANISOTROPIC_FILTERING_BIT (0x40)
+
+typedef enum D3D12_FILTER_REDUCTION_TYPE {
+    D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0,
+    D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1,
+    D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2,
+    D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3
+} D3D12_FILTER_REDUCTION_TYPE;
+#define D3D12_FILTER_REDUCTION_TYPE_MASK (0x3)
+
+#define D3D12_FILTER_REDUCTION_TYPE_SHIFT (7)
+
+#define D3D12_DECODE_MAG_FILTER(filter) \
+    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MAG_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))
+#define D3D12_DECODE_MIN_FILTER(filter) \
+    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIN_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))
+#define D3D12_DECODE_MIP_FILTER(filter) \
+    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIP_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))
+#define D3D12_DECODE_IS_ANISOTROPIC_FILTER(filter)  \
+    (((filter) & D3D12_ANISOTROPIC_FILTERING_BIT) \
+    && (D3D12_DECODE_MIN_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \
+    && (D3D12_DECODE_MAG_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \
+    && (D3D12_DECODE_MIP_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR))
+#define D3D12_DECODE_FILTER_REDUCTION(filter) \
+    ((D3D12_FILTER_REDUCTION_TYPE)(((filter) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT) \
+    & D3D12_FILTER_REDUCTION_TYPE_MASK))
+#define D3D12_DECODE_IS_COMPARISON_FILTER(filter) \
+    (D3D12_DECODE_FILTER_REDUCTION(filter) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON)
+typedef enum D3D12_TEXTURE_ADDRESS_MODE {
+    D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1,
+    D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2,
+    D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3,
+    D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4,
+    D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5
+} D3D12_TEXTURE_ADDRESS_MODE;
+typedef enum D3D12_COMPARISON_FUNC {
+    D3D12_COMPARISON_FUNC_NEVER = 1,
+    D3D12_COMPARISON_FUNC_LESS = 2,
+    D3D12_COMPARISON_FUNC_EQUAL = 3,
+    D3D12_COMPARISON_FUNC_LESS_EQUAL = 4,
+    D3D12_COMPARISON_FUNC_GREATER = 5,
+    D3D12_COMPARISON_FUNC_NOT_EQUAL = 6,
+    D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,
+    D3D12_COMPARISON_FUNC_ALWAYS = 8
+} D3D12_COMPARISON_FUNC;
+typedef struct D3D12_STATIC_SAMPLER_DESC {
+    D3D12_FILTER Filter;
+    D3D12_TEXTURE_ADDRESS_MODE AddressU;
+    D3D12_TEXTURE_ADDRESS_MODE AddressV;
+    D3D12_TEXTURE_ADDRESS_MODE AddressW;
+    FLOAT MipLODBias;
+    UINT MaxAnisotropy;
+    D3D12_COMPARISON_FUNC ComparisonFunc;
+    D3D12_STATIC_BORDER_COLOR BorderColor;
+    FLOAT MinLOD;
+    FLOAT MaxLOD;
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+    D3D12_SHADER_VISIBILITY ShaderVisibility;
+} D3D12_STATIC_SAMPLER_DESC;
+typedef enum D3D12_ROOT_SIGNATURE_FLAGS {
+    D3D12_ROOT_SIGNATURE_FLAG_NONE = 0x0,
+    D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x4,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,
+    D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40
+} D3D12_ROOT_SIGNATURE_FLAGS;
+typedef struct D3D12_ROOT_SIGNATURE_DESC {
+    UINT NumParameters;
+    const D3D12_ROOT_PARAMETER *pParameters;
+    UINT NumStaticSamplers;
+    const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
+    D3D12_ROOT_SIGNATURE_FLAGS Flags;
+} D3D12_ROOT_SIGNATURE_DESC;
+typedef struct D3D12_ROOT_SIGNATURE_DESC1 {
+    UINT NumParameters;
+    const D3D12_ROOT_PARAMETER1 *pParameters;
+    UINT NumStaticSamplers;
+    const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
+    D3D12_ROOT_SIGNATURE_FLAGS Flags;
+} D3D12_ROOT_SIGNATURE_DESC1;
+typedef enum D3D_ROOT_SIGNATURE_VERSION {
+    D3D_ROOT_SIGNATURE_VERSION_1 = 0x1,
+    D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1,
+    D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2
+} D3D_ROOT_SIGNATURE_VERSION;
+typedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC {
+    D3D_ROOT_SIGNATURE_VERSION Version;
+    __C89_NAMELESS union {
+        D3D12_ROOT_SIGNATURE_DESC Desc_1_0;
+        D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_VERSIONED_ROOT_SIGNATURE_DESC;
+typedef enum D3D12_DESCRIPTOR_HEAP_TYPE {
+    D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV = 0,
+    D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER = 1,
+    D3D12_DESCRIPTOR_HEAP_TYPE_RTV = 2,
+    D3D12_DESCRIPTOR_HEAP_TYPE_DSV = 3,
+    D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES = 4
+} D3D12_DESCRIPTOR_HEAP_TYPE;
+typedef enum D3D12_DESCRIPTOR_HEAP_FLAGS {
+    D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0x0,
+    D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1
+} D3D12_DESCRIPTOR_HEAP_FLAGS;
+typedef struct D3D12_DESCRIPTOR_HEAP_DESC {
+    D3D12_DESCRIPTOR_HEAP_TYPE Type;
+    UINT NumDescriptors;
+    D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
+    UINT NodeMask;
+} D3D12_DESCRIPTOR_HEAP_DESC;
+typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS;
+typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC {
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT SizeInBytes;
+} D3D12_CONSTANT_BUFFER_VIEW_DESC;
+typedef enum D3D12_SRV_DIMENSION {
+    D3D12_SRV_DIMENSION_UNKNOWN = 0,
+    D3D12_SRV_DIMENSION_BUFFER = 1,
+    D3D12_SRV_DIMENSION_TEXTURE1D = 2,
+    D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3,
+    D3D12_SRV_DIMENSION_TEXTURE2D = 4,
+    D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5,
+    D3D12_SRV_DIMENSION_TEXTURE2DMS = 6,
+    D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,
+    D3D12_SRV_DIMENSION_TEXTURE3D = 8,
+    D3D12_SRV_DIMENSION_TEXTURECUBE = 9,
+    D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10
+} D3D12_SRV_DIMENSION;
+typedef enum D3D12_BUFFER_SRV_FLAGS {
+    D3D12_BUFFER_SRV_FLAG_NONE = 0x0,
+    D3D12_BUFFER_SRV_FLAG_RAW = 0x1
+} D3D12_BUFFER_SRV_FLAGS;
+typedef enum D3D12_SHADER_COMPONENT_MAPPING {
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0,
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1,
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2,
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3,
+    D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4,
+    D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5
+} D3D12_SHADER_COMPONENT_MAPPING;
+#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(x, y, z, w) \
+        (((x) & D3D12_SHADER_COMPONENT_MAPPING_MASK) \
+        | (((y) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << D3D12_SHADER_COMPONENT_MAPPING_SHIFT) \
+        | (((z) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 2)) \
+        | (((w) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 3)) \
+        | D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES)
+#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0, 1, 2, 3)
+typedef struct D3D12_BUFFER_SRV {
+    UINT64 FirstElement;
+    UINT NumElements;
+    UINT StructureByteStride;
+    D3D12_BUFFER_SRV_FLAGS Flags;
+} D3D12_BUFFER_SRV;
+typedef struct D3D12_TEX1D_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX1D_SRV;
+typedef struct D3D12_TEX1D_ARRAY_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX1D_ARRAY_SRV;
+typedef struct D3D12_TEX2D_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT PlaneSlice;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX2D_SRV;
+typedef struct D3D12_TEX2D_ARRAY_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    UINT PlaneSlice;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX2D_ARRAY_SRV;
+typedef struct D3D12_TEX2DMS_SRV {
+    UINT UnusedField_NothingToDefine;
+} D3D12_TEX2DMS_SRV;
+typedef struct D3D12_TEX2DMS_ARRAY_SRV {
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2DMS_ARRAY_SRV;
+typedef struct D3D12_TEX3D_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX3D_SRV;
+typedef struct D3D12_TEXCUBE_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEXCUBE_SRV;
+typedef struct D3D12_TEXCUBE_ARRAY_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT First2DArrayFace;
+    UINT NumCubes;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEXCUBE_ARRAY_SRV;
+typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC {
+    DXGI_FORMAT Format;
+    D3D12_SRV_DIMENSION ViewDimension;
+    UINT Shader4ComponentMapping;
+    __C89_NAMELESS union {
+        D3D12_BUFFER_SRV Buffer;
+        D3D12_TEX1D_SRV Texture1D;
+        D3D12_TEX1D_ARRAY_SRV Texture1DArray;
+        D3D12_TEX2D_SRV Texture2D;
+        D3D12_TEX2D_ARRAY_SRV Texture2DArray;
+        D3D12_TEX2DMS_SRV Texture2DMS;
+        D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+        D3D12_TEX3D_SRV Texture3D;
+        D3D12_TEXCUBE_SRV TextureCube;
+        D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_SHADER_RESOURCE_VIEW_DESC;
+typedef enum D3D12_UAV_DIMENSION {
+    D3D12_UAV_DIMENSION_UNKNOWN = 0,
+    D3D12_UAV_DIMENSION_BUFFER = 1,
+    D3D12_UAV_DIMENSION_TEXTURE1D = 2,
+    D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3,
+    D3D12_UAV_DIMENSION_TEXTURE2D = 4,
+    D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5,
+    D3D12_UAV_DIMENSION_TEXTURE3D = 8
+} D3D12_UAV_DIMENSION;
+typedef enum D3D12_BUFFER_UAV_FLAGS {
+    D3D12_BUFFER_UAV_FLAG_NONE = 0x0,
+    D3D12_BUFFER_UAV_FLAG_RAW = 0x1
+} D3D12_BUFFER_UAV_FLAGS;
+typedef struct D3D12_BUFFER_UAV {
+    UINT64 FirstElement;
+    UINT NumElements;
+    UINT StructureByteStride;
+    UINT64 CounterOffsetInBytes;
+    D3D12_BUFFER_UAV_FLAGS Flags;
+} D3D12_BUFFER_UAV;
+typedef struct D3D12_TEX1D_UAV {
+    UINT MipSlice;
+} D3D12_TEX1D_UAV;
+typedef struct D3D12_TEX1D_ARRAY_UAV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX1D_ARRAY_UAV;
+typedef struct D3D12_TEX2D_UAV {
+    UINT MipSlice;
+    UINT PlaneSlice;
+} D3D12_TEX2D_UAV;
+typedef struct D3D12_TEX2D_ARRAY_UAV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    UINT PlaneSlice;
+} D3D12_TEX2D_ARRAY_UAV;
+typedef struct D3D12_TEX3D_UAV {
+    UINT MipSlice;
+    UINT FirstWSlice;
+    UINT WSize;
+} D3D12_TEX3D_UAV;
+typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC {
+    DXGI_FORMAT Format;
+    D3D12_UAV_DIMENSION ViewDimension;
+    __C89_NAMELESS union {
+        D3D12_BUFFER_UAV Buffer;
+        D3D12_TEX1D_UAV Texture1D;
+        D3D12_TEX1D_ARRAY_UAV Texture1DArray;
+        D3D12_TEX2D_UAV Texture2D;
+        D3D12_TEX2D_ARRAY_UAV Texture2DArray;
+        D3D12_TEX3D_UAV Texture3D;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_UNORDERED_ACCESS_VIEW_DESC;
+typedef enum D3D12_RTV_DIMENSION {
+    D3D12_RTV_DIMENSION_UNKNOWN = 0,
+    D3D12_RTV_DIMENSION_BUFFER = 1,
+    D3D12_RTV_DIMENSION_TEXTURE1D = 2,
+    D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3,
+    D3D12_RTV_DIMENSION_TEXTURE2D = 4,
+    D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5,
+    D3D12_RTV_DIMENSION_TEXTURE2DMS = 6,
+    D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,
+    D3D12_RTV_DIMENSION_TEXTURE3D = 8
+} D3D12_RTV_DIMENSION;
+typedef struct D3D12_BUFFER_RTV {
+    UINT64 FirstElement;
+    UINT NumElements;
+} D3D12_BUFFER_RTV;
+typedef struct D3D12_TEX1D_RTV {
+    UINT MipSlice;
+} D3D12_TEX1D_RTV;
+typedef struct D3D12_TEX1D_ARRAY_RTV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX1D_ARRAY_RTV;
+typedef struct D3D12_TEX2D_RTV {
+    UINT MipSlice;
+    UINT PlaneSlice;
+} D3D12_TEX2D_RTV;
+typedef struct D3D12_TEX2D_ARRAY_RTV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    UINT PlaneSlice;
+} D3D12_TEX2D_ARRAY_RTV;
+typedef struct D3D12_TEX2DMS_RTV {
+    UINT UnusedField_NothingToDefine;
+} D3D12_TEX2DMS_RTV;
+typedef struct D3D12_TEX2DMS_ARRAY_RTV {
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2DMS_ARRAY_RTV;
+typedef struct D3D12_TEX3D_RTV {
+    UINT MipSlice;
+    UINT FirstWSlice;
+    UINT WSize;
+} D3D12_TEX3D_RTV;
+typedef struct D3D12_RENDER_TARGET_VIEW_DESC {
+    DXGI_FORMAT Format;
+    D3D12_RTV_DIMENSION ViewDimension;
+    __C89_NAMELESS union {
+        D3D12_BUFFER_RTV Buffer;
+        D3D12_TEX1D_RTV Texture1D;
+        D3D12_TEX1D_ARRAY_RTV Texture1DArray;
+        D3D12_TEX2D_RTV Texture2D;
+        D3D12_TEX2D_ARRAY_RTV Texture2DArray;
+        D3D12_TEX2DMS_RTV Texture2DMS;
+        D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
+        D3D12_TEX3D_RTV Texture3D;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_RENDER_TARGET_VIEW_DESC;
+typedef enum D3D12_DSV_DIMENSION {
+    D3D12_DSV_DIMENSION_UNKNOWN = 0,
+    D3D12_DSV_DIMENSION_TEXTURE1D = 1,
+    D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2,
+    D3D12_DSV_DIMENSION_TEXTURE2D = 3,
+    D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4,
+    D3D12_DSV_DIMENSION_TEXTURE2DMS = 5,
+    D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6
+} D3D12_DSV_DIMENSION;
+typedef enum D3D12_DSV_FLAGS {
+    D3D12_DSV_FLAG_NONE = 0x0,
+    D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1,
+    D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2
+} D3D12_DSV_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(D3D12_DSV_FLAGS);
+typedef struct D3D12_TEX1D_DSV {
+    UINT MipSlice;
+} D3D12_TEX1D_DSV;
+typedef struct D3D12_TEX1D_ARRAY_DSV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX1D_ARRAY_DSV;
+typedef struct D3D12_TEX2D_DSV {
+    UINT MipSlice;
+} D3D12_TEX2D_DSV;
+typedef struct D3D12_TEX2D_ARRAY_DSV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2D_ARRAY_DSV;
+typedef struct D3D12_TEX2DMS_DSV {
+    UINT UnusedField_NothingToDefine;
+} D3D12_TEX2DMS_DSV;
+typedef struct D3D12_TEX2DMS_ARRAY_DSV {
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2DMS_ARRAY_DSV;
+typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC {
+    DXGI_FORMAT Format;
+    D3D12_DSV_DIMENSION ViewDimension;
+    D3D12_DSV_FLAGS Flags;
+    __C89_NAMELESS union {
+        D3D12_TEX1D_DSV Texture1D;
+        D3D12_TEX1D_ARRAY_DSV Texture1DArray;
+        D3D12_TEX2D_DSV Texture2D;
+        D3D12_TEX2D_ARRAY_DSV Texture2DArray;
+        D3D12_TEX2DMS_DSV Texture2DMS;
+        D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_DEPTH_STENCIL_VIEW_DESC;
+typedef struct D3D12_SAMPLER_DESC {
+    D3D12_FILTER Filter;
+    D3D12_TEXTURE_ADDRESS_MODE AddressU;
+    D3D12_TEXTURE_ADDRESS_MODE AddressV;
+    D3D12_TEXTURE_ADDRESS_MODE AddressW;
+    FLOAT MipLODBias;
+    UINT MaxAnisotropy;
+    D3D12_COMPARISON_FUNC ComparisonFunc;
+    FLOAT BorderColor[4];
+    FLOAT MinLOD;
+    FLOAT MaxLOD;
+} D3D12_SAMPLER_DESC;
+typedef struct D3D12_CPU_DESCRIPTOR_HANDLE {
+    SIZE_T ptr;
+} D3D12_CPU_DESCRIPTOR_HANDLE;
+typedef struct D3D12_GPU_DESCRIPTOR_HANDLE {
+    UINT64 ptr;
+} D3D12_GPU_DESCRIPTOR_HANDLE;
+typedef enum D3D12_STENCIL_OP {
+    D3D12_STENCIL_OP_KEEP = 1,
+    D3D12_STENCIL_OP_ZERO = 2,
+    D3D12_STENCIL_OP_REPLACE = 3,
+    D3D12_STENCIL_OP_INCR_SAT = 4,
+    D3D12_STENCIL_OP_DECR_SAT = 5,
+    D3D12_STENCIL_OP_INVERT = 6,
+    D3D12_STENCIL_OP_INCR = 7,
+    D3D12_STENCIL_OP_DECR = 8
+} D3D12_STENCIL_OP;
+typedef struct D3D12_DEPTH_STENCILOP_DESC {
+    D3D12_STENCIL_OP StencilFailOp;
+    D3D12_STENCIL_OP StencilDepthFailOp;
+    D3D12_STENCIL_OP StencilPassOp;
+    D3D12_COMPARISON_FUNC StencilFunc;
+} D3D12_DEPTH_STENCILOP_DESC;
+typedef enum D3D12_DEPTH_WRITE_MASK {
+    D3D12_DEPTH_WRITE_MASK_ZERO = 0,
+    D3D12_DEPTH_WRITE_MASK_ALL = 1
+} D3D12_DEPTH_WRITE_MASK;
+typedef struct D3D12_DEPTH_STENCIL_DESC {
+    WINBOOL DepthEnable;
+    D3D12_DEPTH_WRITE_MASK DepthWriteMask;
+    D3D12_COMPARISON_FUNC DepthFunc;
+    WINBOOL StencilEnable;
+    UINT8 StencilReadMask;
+    UINT8 StencilWriteMask;
+    D3D12_DEPTH_STENCILOP_DESC FrontFace;
+    D3D12_DEPTH_STENCILOP_DESC BackFace;
+} D3D12_DEPTH_STENCIL_DESC;
+typedef enum D3D12_BLEND {
+    D3D12_BLEND_ZERO = 1,
+    D3D12_BLEND_ONE = 2,
+    D3D12_BLEND_SRC_COLOR = 3,
+    D3D12_BLEND_INV_SRC_COLOR = 4,
+    D3D12_BLEND_SRC_ALPHA = 5,
+    D3D12_BLEND_INV_SRC_ALPHA = 6,
+    D3D12_BLEND_DEST_ALPHA = 7,
+    D3D12_BLEND_INV_DEST_ALPHA = 8,
+    D3D12_BLEND_DEST_COLOR = 9,
+    D3D12_BLEND_INV_DEST_COLOR = 10,
+    D3D12_BLEND_SRC_ALPHA_SAT = 11,
+    D3D12_BLEND_BLEND_FACTOR = 14,
+    D3D12_BLEND_INV_BLEND_FACTOR = 15,
+    D3D12_BLEND_SRC1_COLOR = 16,
+    D3D12_BLEND_INV_SRC1_COLOR = 17,
+    D3D12_BLEND_SRC1_ALPHA = 18,
+    D3D12_BLEND_INV_SRC1_ALPHA = 19
+} D3D12_BLEND;
+typedef enum D3D12_BLEND_OP {
+    D3D12_BLEND_OP_ADD = 1,
+    D3D12_BLEND_OP_SUBTRACT = 2,
+    D3D12_BLEND_OP_REV_SUBTRACT = 3,
+    D3D12_BLEND_OP_MIN = 4,
+    D3D12_BLEND_OP_MAX = 5
+} D3D12_BLEND_OP;
+typedef enum D3D12_LOGIC_OP {
+    D3D12_LOGIC_OP_CLEAR = 0,
+    D3D12_LOGIC_OP_SET = 1,
+    D3D12_LOGIC_OP_COPY = 2,
+    D3D12_LOGIC_OP_COPY_INVERTED = 3,
+    D3D12_LOGIC_OP_NOOP = 4
+} D3D12_LOGIC_OP;
+typedef enum D3D12_COLOR_WRITE_ENABLE {
+    D3D12_COLOR_WRITE_ENABLE_RED = 0x1,
+    D3D12_COLOR_WRITE_ENABLE_GREEN = 0x2,
+    D3D12_COLOR_WRITE_ENABLE_BLUE = 0x4,
+    D3D12_COLOR_WRITE_ENABLE_ALPHA = 0x8,
+    D3D12_COLOR_WRITE_ENABLE_ALL = ((D3D12_COLOR_WRITE_ENABLE_RED | D3D12_COLOR_WRITE_ENABLE_GREEN) | D3D12_COLOR_WRITE_ENABLE_BLUE) | D3D12_COLOR_WRITE_ENABLE_ALPHA
+} D3D12_COLOR_WRITE_ENABLE;
+typedef struct D3D12_RENDER_TARGET_BLEND_DESC {
+    WINBOOL BlendEnable;
+    WINBOOL LogicOpEnable;
+    D3D12_BLEND SrcBlend;
+    D3D12_BLEND DestBlend;
+    D3D12_BLEND_OP BlendOp;
+    D3D12_BLEND SrcBlendAlpha;
+    D3D12_BLEND DestBlendAlpha;
+    D3D12_BLEND_OP BlendOpAlpha;
+    D3D12_LOGIC_OP LogicOp;
+    UINT8 RenderTargetWriteMask;
+} D3D12_RENDER_TARGET_BLEND_DESC;
+typedef struct D3D12_BLEND_DESC {
+    WINBOOL AlphaToCoverageEnable;
+    WINBOOL IndependentBlendEnable;
+    D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[8];
+} D3D12_BLEND_DESC;
+typedef enum D3D12_FILL_MODE {
+    D3D12_FILL_MODE_WIREFRAME = 2,
+    D3D12_FILL_MODE_SOLID = 3
+} D3D12_FILL_MODE;
+typedef enum D3D12_CULL_MODE {
+    D3D12_CULL_MODE_NONE = 1,
+    D3D12_CULL_MODE_FRONT = 2,
+    D3D12_CULL_MODE_BACK = 3
+} D3D12_CULL_MODE;
+typedef enum D3D12_CONSERVATIVE_RASTERIZATION_MODE {
+    D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0,
+    D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1
+} D3D12_CONSERVATIVE_RASTERIZATION_MODE;
+typedef struct D3D12_RASTERIZER_DESC {
+    D3D12_FILL_MODE FillMode;
+    D3D12_CULL_MODE CullMode;
+    WINBOOL FrontCounterClockwise;
+    INT DepthBias;
+    FLOAT DepthBiasClamp;
+    FLOAT SlopeScaledDepthBias;
+    WINBOOL DepthClipEnable;
+    WINBOOL MultisampleEnable;
+    WINBOOL AntialiasedLineEnable;
+    UINT ForcedSampleCount;
+    D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
+} D3D12_RASTERIZER_DESC;
+typedef struct D3D12_SO_DECLARATION_ENTRY {
+    UINT Stream;
+    const char *SemanticName;
+    UINT SemanticIndex;
+    BYTE StartComponent;
+    BYTE ComponentCount;
+    BYTE OutputSlot;
+} D3D12_SO_DECLARATION_ENTRY;
+typedef struct D3D12_STREAM_OUTPUT_DESC {
+    const D3D12_SO_DECLARATION_ENTRY *pSODeclaration;
+    UINT NumEntries;
+    const UINT *pBufferStrides;
+    UINT NumStrides;
+    UINT RasterizedStream;
+} D3D12_STREAM_OUTPUT_DESC;
+typedef enum D3D12_INPUT_CLASSIFICATION {
+    D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0,
+    D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1
+} D3D12_INPUT_CLASSIFICATION;
+typedef struct D3D12_INPUT_ELEMENT_DESC {
+    const char *SemanticName;
+    UINT SemanticIndex;
+    DXGI_FORMAT Format;
+    UINT InputSlot;
+    UINT AlignedByteOffset;
+    D3D12_INPUT_CLASSIFICATION InputSlotClass;
+    UINT InstanceDataStepRate;
+} D3D12_INPUT_ELEMENT_DESC;
+typedef struct D3D12_INPUT_LAYOUT_DESC {
+    const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs;
+    UINT NumElements;
+} D3D12_INPUT_LAYOUT_DESC;
+typedef enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE {
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0,
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1,
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2
+} D3D12_INDEX_BUFFER_STRIP_CUT_VALUE;
+typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
+typedef enum D3D12_PRIMITIVE_TOPOLOGY_TYPE {
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4
+} D3D12_PRIMITIVE_TOPOLOGY_TYPE;
+typedef struct D3D12_CACHED_PIPELINE_STATE {
+    const void *pCachedBlob;
+    SIZE_T CachedBlobSizeInBytes;
+} D3D12_CACHED_PIPELINE_STATE;
+typedef enum D3D12_PIPELINE_STATE_FLAGS {
+    D3D12_PIPELINE_STATE_FLAG_NONE = 0x0,
+    D3D12_PIPELINE_STATE_FLAG_DEBUG = 0x1
+} D3D12_PIPELINE_STATE_FLAGS;
+typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC {
+    ID3D12RootSignature *pRootSignature;
+    D3D12_SHADER_BYTECODE VS;
+    D3D12_SHADER_BYTECODE PS;
+    D3D12_SHADER_BYTECODE DS;
+    D3D12_SHADER_BYTECODE HS;
+    D3D12_SHADER_BYTECODE GS;
+    D3D12_STREAM_OUTPUT_DESC StreamOutput;
+    D3D12_BLEND_DESC BlendState;
+    UINT SampleMask;
+    D3D12_RASTERIZER_DESC RasterizerState;
+    D3D12_DEPTH_STENCIL_DESC DepthStencilState;
+    D3D12_INPUT_LAYOUT_DESC InputLayout;
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue;
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;
+    UINT NumRenderTargets;
+    DXGI_FORMAT RTVFormats[8];
+    DXGI_FORMAT DSVFormat;
+    DXGI_SAMPLE_DESC SampleDesc;
+    UINT NodeMask;
+    D3D12_CACHED_PIPELINE_STATE CachedPSO;
+    D3D12_PIPELINE_STATE_FLAGS Flags;
+} D3D12_GRAPHICS_PIPELINE_STATE_DESC;
+typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC {
+    ID3D12RootSignature *pRootSignature;
+    D3D12_SHADER_BYTECODE CS;
+    UINT NodeMask;
+    D3D12_CACHED_PIPELINE_STATE CachedPSO;
+    D3D12_PIPELINE_STATE_FLAGS Flags;
+} D3D12_COMPUTE_PIPELINE_STATE_DESC;
+typedef enum D3D12_COMMAND_LIST_TYPE {
+    D3D12_COMMAND_LIST_TYPE_DIRECT = 0,
+    D3D12_COMMAND_LIST_TYPE_BUNDLE = 1,
+    D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
+    D3D12_COMMAND_LIST_TYPE_COPY = 3
+} D3D12_COMMAND_LIST_TYPE;
+typedef enum D3D12_COMMAND_QUEUE_PRIORITY {
+    D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0,
+    D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100
+} D3D12_COMMAND_QUEUE_PRIORITY;
+typedef enum D3D12_COMMAND_QUEUE_FLAGS {
+    D3D12_COMMAND_QUEUE_FLAG_NONE = 0x0,
+    D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1
+} D3D12_COMMAND_QUEUE_FLAGS;
+typedef struct D3D12_COMMAND_QUEUE_DESC {
+    D3D12_COMMAND_LIST_TYPE Type;
+    INT Priority;
+    D3D12_COMMAND_QUEUE_FLAGS Flags;
+    UINT NodeMask;
+} D3D12_COMMAND_QUEUE_DESC;
+typedef struct D3D12_FEATURE_DATA_ARCHITECTURE {
+    UINT NodeIndex;
+    WINBOOL TileBasedRenderer;
+    WINBOOL UMA;
+    WINBOOL CacheCoherentUMA;
+} D3D12_FEATURE_DATA_ARCHITECTURE;
+typedef struct D3D12_FEATURE_DATA_FORMAT_INFO {
+    DXGI_FORMAT Format;
+    UINT8 PlaneCount;
+} D3D12_FEATURE_DATA_FORMAT_INFO;
+typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS {
+    UINT NumFeatureLevels;
+    const D3D_FEATURE_LEVEL *pFeatureLevelsRequested;
+    D3D_FEATURE_LEVEL MaxSupportedFeatureLevel;
+} D3D12_FEATURE_DATA_FEATURE_LEVELS;
+typedef enum D3D12_FEATURE {
+    D3D12_FEATURE_D3D12_OPTIONS = 0,
+    D3D12_FEATURE_ARCHITECTURE = 1,
+    D3D12_FEATURE_FEATURE_LEVELS = 2,
+    D3D12_FEATURE_FORMAT_SUPPORT = 3,
+    D3D12_FEATURE_FORMAT_INFO = 4,
+    D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 5
+} D3D12_FEATURE;
+typedef struct D3D12_MEMCPY_DEST {
+    void *pData;
+    SIZE_T RowPitch;
+    SIZE_T SlicePitch;
+} D3D12_MEMCPY_DEST;
+typedef struct D3D12_SUBRESOURCE_DATA {
+    const void *pData;
+    LONG_PTR RowPitch;
+    LONG_PTR SlicePitch;
+} D3D12_SUBRESOURCE_DATA;
+/*****************************************************************************
+ * ID3D12Object interface
+ */
+#ifndef __ID3D12Object_INTERFACE_DEFINED__
+#define __ID3D12Object_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12Object, 0xc4fec28f, 0x7966, 0x4e95, 0x9f,0x94, 0xf4,0x31,0xcb,0x56,0xc3,0xb8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c4fec28f-7966-4e95-9f94-f431cb56c3b8")
+ID3D12Object : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetPrivateData(
+        REFGUID guid,
+        UINT *data_size,
+        void *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
+        REFGUID guid,
+        UINT data_size,
+        const void *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(
+        REFGUID guid,
+        const IUnknown *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetName(
+        const WCHAR *name) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12Object, 0xc4fec28f, 0x7966, 0x4e95, 0x9f,0x94, 0xf4,0x31,0xcb,0x56,0xc3,0xb8)
+#endif
+#else
+typedef struct ID3D12ObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12Object *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12Object *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12Object *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12Object *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12Object *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12Object *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12Object *This,
+        const WCHAR *name);
+
+    END_INTERFACE
+} ID3D12ObjectVtbl;
+
+interface ID3D12Object {
+    CONST_VTBL ID3D12ObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12Object_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12Object_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12Object_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12Object_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12Object_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12Object_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12Object_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12Object_QueryInterface(ID3D12Object* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12Object_AddRef(ID3D12Object* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12Object_Release(ID3D12Object* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12Object_GetPrivateData(ID3D12Object* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Object_SetPrivateData(ID3D12Object* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Object_SetPrivateDataInterface(ID3D12Object* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12Object_SetName(ID3D12Object* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12Object_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12DeviceChild interface
+ */
+#ifndef __ID3D12DeviceChild_INTERFACE_DEFINED__
+#define __ID3D12DeviceChild_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12DeviceChild, 0x905db94b, 0xa00c, 0x4140, 0x9d,0xf5, 0x2b,0x64,0xca,0x9e,0xa3,0x57);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("905db94b-a00c-4140-9df5-2b64ca9ea357")
+ID3D12DeviceChild : public ID3D12Object
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDevice(
+        REFIID riid,
+        void **device) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12DeviceChild, 0x905db94b, 0xa00c, 0x4140, 0x9d,0xf5, 0x2b,0x64,0xca,0x9e,0xa3,0x57)
+#endif
+#else
+typedef struct ID3D12DeviceChildVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12DeviceChild *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12DeviceChild *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12DeviceChild *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12DeviceChild *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12DeviceChild *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12DeviceChild *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12DeviceChild *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12DeviceChild *This,
+        REFIID riid,
+        void **device);
+
+    END_INTERFACE
+} ID3D12DeviceChildVtbl;
+
+interface ID3D12DeviceChild {
+    CONST_VTBL ID3D12DeviceChildVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12DeviceChild_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12DeviceChild_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12DeviceChild_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12DeviceChild_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12DeviceChild_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12DeviceChild_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12DeviceChild_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12DeviceChild_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12DeviceChild_QueryInterface(ID3D12DeviceChild* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12DeviceChild_AddRef(ID3D12DeviceChild* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12DeviceChild_Release(ID3D12DeviceChild* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12DeviceChild_GetPrivateData(ID3D12DeviceChild* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12DeviceChild_SetPrivateData(ID3D12DeviceChild* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12DeviceChild_SetPrivateDataInterface(ID3D12DeviceChild* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12DeviceChild_SetName(ID3D12DeviceChild* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12DeviceChild_GetDevice(ID3D12DeviceChild* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12DeviceChild_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12Pageable interface
+ */
+#ifndef __ID3D12Pageable_INTERFACE_DEFINED__
+#define __ID3D12Pageable_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12Pageable, 0x63ee58fb, 0x1268, 0x4835, 0x86,0xda, 0xf0,0x08,0xce,0x62,0xf0,0xd6);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("63ee58fb-1268-4835-86da-f008ce62f0d6")
+ID3D12Pageable : public ID3D12DeviceChild
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12Pageable, 0x63ee58fb, 0x1268, 0x4835, 0x86,0xda, 0xf0,0x08,0xce,0x62,0xf0,0xd6)
+#endif
+#else
+typedef struct ID3D12PageableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12Pageable *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12Pageable *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12Pageable *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12Pageable *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12Pageable *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12Pageable *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12Pageable *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12Pageable *This,
+        REFIID riid,
+        void **device);
+
+    END_INTERFACE
+} ID3D12PageableVtbl;
+
+interface ID3D12Pageable {
+    CONST_VTBL ID3D12PageableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12Pageable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12Pageable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12Pageable_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12Pageable_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12Pageable_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12Pageable_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12Pageable_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12Pageable_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12Pageable_QueryInterface(ID3D12Pageable* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12Pageable_AddRef(ID3D12Pageable* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12Pageable_Release(ID3D12Pageable* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12Pageable_GetPrivateData(ID3D12Pageable* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Pageable_SetPrivateData(ID3D12Pageable* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Pageable_SetPrivateDataInterface(ID3D12Pageable* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12Pageable_SetName(ID3D12Pageable* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12Pageable_GetDevice(ID3D12Pageable* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12Pageable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12Resource interface
+ */
+#ifndef __ID3D12Resource_INTERFACE_DEFINED__
+#define __ID3D12Resource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12Resource, 0x696442be, 0xa72e, 0x4059, 0xbc,0x79, 0x5b,0x5c,0x98,0x04,0x0f,0xad);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("696442be-a72e-4059-bc79-5b5c98040fad")
+ID3D12Resource : public ID3D12Pageable
+{
+    virtual HRESULT STDMETHODCALLTYPE Map(
+        UINT sub_resource,
+        const D3D12_RANGE *read_range,
+        void **data) = 0;
+
+    virtual void STDMETHODCALLTYPE Unmap(
+        UINT sub_resource,
+        const D3D12_RANGE *written_range) = 0;
+
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual D3D12_RESOURCE_DESC* STDMETHODCALLTYPE GetDesc(
+        D3D12_RESOURCE_DESC *__ret) = 0;
+    D3D12_RESOURCE_DESC STDMETHODCALLTYPE GetDesc(
+        )
+    {
+        D3D12_RESOURCE_DESC __ret;
+        return *GetDesc(&__ret);
+    }
+#else
+    virtual D3D12_RESOURCE_DESC STDMETHODCALLTYPE GetDesc(
+        ) = 0;
+#endif
+
+    virtual D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE GetGPUVirtualAddress(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE WriteToSubresource(
+        UINT dst_sub_resource,
+        const D3D12_BOX *dst_box,
+        const void *src_data,
+        UINT src_row_pitch,
+        UINT src_slice_pitch) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReadFromSubresource(
+        void *dst_data,
+        UINT dst_row_pitch,
+        UINT dst_slice_pitch,
+        UINT src_sub_resource,
+        const D3D12_BOX *src_box) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHeapProperties(
+        D3D12_HEAP_PROPERTIES *heap_properties,
+        D3D12_HEAP_FLAGS *flags) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12Resource, 0x696442be, 0xa72e, 0x4059, 0xbc,0x79, 0x5b,0x5c,0x98,0x04,0x0f,0xad)
+#endif
+#else
+typedef struct ID3D12ResourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12Resource *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12Resource *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12Resource *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12Resource *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12Resource *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12Resource *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12Resource *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12Resource *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12Resource methods ***/
+    HRESULT (STDMETHODCALLTYPE *Map)(
+        ID3D12Resource *This,
+        UINT sub_resource,
+        const D3D12_RANGE *read_range,
+        void **data);
+
+    void (STDMETHODCALLTYPE *Unmap)(
+        ID3D12Resource *This,
+        UINT sub_resource,
+        const D3D12_RANGE *written_range);
+
+    D3D12_RESOURCE_DESC * (STDMETHODCALLTYPE *GetDesc)(
+        ID3D12Resource *This,
+        D3D12_RESOURCE_DESC *__ret);
+
+    D3D12_GPU_VIRTUAL_ADDRESS (STDMETHODCALLTYPE *GetGPUVirtualAddress)(
+        ID3D12Resource *This);
+
+    HRESULT (STDMETHODCALLTYPE *WriteToSubresource)(
+        ID3D12Resource *This,
+        UINT dst_sub_resource,
+        const D3D12_BOX *dst_box,
+        const void *src_data,
+        UINT src_row_pitch,
+        UINT src_slice_pitch);
+
+    HRESULT (STDMETHODCALLTYPE *ReadFromSubresource)(
+        ID3D12Resource *This,
+        void *dst_data,
+        UINT dst_row_pitch,
+        UINT dst_slice_pitch,
+        UINT src_sub_resource,
+        const D3D12_BOX *src_box);
+
+    HRESULT (STDMETHODCALLTYPE *GetHeapProperties)(
+        ID3D12Resource *This,
+        D3D12_HEAP_PROPERTIES *heap_properties,
+        D3D12_HEAP_FLAGS *flags);
+
+    END_INTERFACE
+} ID3D12ResourceVtbl;
+
+interface ID3D12Resource {
+    CONST_VTBL ID3D12ResourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12Resource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12Resource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12Resource_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12Resource_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12Resource_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12Resource_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12Resource_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12Resource_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12Resource methods ***/
+#define ID3D12Resource_Map(This,sub_resource,read_range,data) (This)->lpVtbl->Map(This,sub_resource,read_range,data)
+#define ID3D12Resource_Unmap(This,sub_resource,written_range) (This)->lpVtbl->Unmap(This,sub_resource,written_range)
+#define ID3D12Resource_GetDesc(This) ID3D12Resource_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#define ID3D12Resource_GetGPUVirtualAddress(This) (This)->lpVtbl->GetGPUVirtualAddress(This)
+#define ID3D12Resource_WriteToSubresource(This,dst_sub_resource,dst_box,src_data,src_row_pitch,src_slice_pitch) (This)->lpVtbl->WriteToSubresource(This,dst_sub_resource,dst_box,src_data,src_row_pitch,src_slice_pitch)
+#define ID3D12Resource_ReadFromSubresource(This,dst_data,dst_row_pitch,dst_slice_pitch,src_sub_resource,src_box) (This)->lpVtbl->ReadFromSubresource(This,dst_data,dst_row_pitch,dst_slice_pitch,src_sub_resource,src_box)
+#define ID3D12Resource_GetHeapProperties(This,heap_properties,flags) (This)->lpVtbl->GetHeapProperties(This,heap_properties,flags)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12Resource_QueryInterface(ID3D12Resource* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12Resource_AddRef(ID3D12Resource* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12Resource_Release(ID3D12Resource* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12Resource_GetPrivateData(ID3D12Resource* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Resource_SetPrivateData(ID3D12Resource* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Resource_SetPrivateDataInterface(ID3D12Resource* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12Resource_SetName(ID3D12Resource* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12Resource_GetDevice(ID3D12Resource* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12Resource methods ***/
+static FORCEINLINE HRESULT ID3D12Resource_Map(ID3D12Resource* This,UINT sub_resource,const D3D12_RANGE *read_range,void **data) {
+    return This->lpVtbl->Map(This,sub_resource,read_range,data);
+}
+static FORCEINLINE void ID3D12Resource_Unmap(ID3D12Resource* This,UINT sub_resource,const D3D12_RANGE *written_range) {
+    This->lpVtbl->Unmap(This,sub_resource,written_range);
+}
+static FORCEINLINE D3D12_RESOURCE_DESC ID3D12Resource_GetDesc(ID3D12Resource* This) {
+    D3D12_RESOURCE_DESC __ret;
+    return *This->lpVtbl->GetDesc(This,&__ret);
+}
+static FORCEINLINE D3D12_GPU_VIRTUAL_ADDRESS ID3D12Resource_GetGPUVirtualAddress(ID3D12Resource* This) {
+    return This->lpVtbl->GetGPUVirtualAddress(This);
+}
+static FORCEINLINE HRESULT ID3D12Resource_WriteToSubresource(ID3D12Resource* This,UINT dst_sub_resource,const D3D12_BOX *dst_box,const void *src_data,UINT src_row_pitch,UINT src_slice_pitch) {
+    return This->lpVtbl->WriteToSubresource(This,dst_sub_resource,dst_box,src_data,src_row_pitch,src_slice_pitch);
+}
+static FORCEINLINE HRESULT ID3D12Resource_ReadFromSubresource(ID3D12Resource* This,void *dst_data,UINT dst_row_pitch,UINT dst_slice_pitch,UINT src_sub_resource,const D3D12_BOX *src_box) {
+    return This->lpVtbl->ReadFromSubresource(This,dst_data,dst_row_pitch,dst_slice_pitch,src_sub_resource,src_box);
+}
+static FORCEINLINE HRESULT ID3D12Resource_GetHeapProperties(ID3D12Resource* This,D3D12_HEAP_PROPERTIES *heap_properties,D3D12_HEAP_FLAGS *flags) {
+    return This->lpVtbl->GetHeapProperties(This,heap_properties,flags);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12Resource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12CommandList interface
+ */
+#ifndef __ID3D12CommandList_INTERFACE_DEFINED__
+#define __ID3D12CommandList_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12CommandList, 0x7116d91c, 0xe7e4, 0x47ce, 0xb8,0xc6, 0xec,0x81,0x68,0xf4,0x37,0xe5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7116d91c-e7e4-47ce-b8c6-ec8168f437e5")
+ID3D12CommandList : public ID3D12DeviceChild
+{
+    virtual D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12CommandList, 0x7116d91c, 0xe7e4, 0x47ce, 0xb8,0xc6, 0xec,0x81,0x68,0xf4,0x37,0xe5)
+#endif
+#else
+typedef struct ID3D12CommandListVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12CommandList *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12CommandList *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12CommandList *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12CommandList *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12CommandList *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12CommandList *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12CommandList *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12CommandList *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12CommandList methods ***/
+    D3D12_COMMAND_LIST_TYPE (STDMETHODCALLTYPE *GetType)(
+        ID3D12CommandList *This);
+
+    END_INTERFACE
+} ID3D12CommandListVtbl;
+
+interface ID3D12CommandList {
+    CONST_VTBL ID3D12CommandListVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12CommandList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12CommandList_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12CommandList_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12CommandList_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandList_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandList_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12CommandList_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12CommandList_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12CommandList methods ***/
+#define ID3D12CommandList_GetType(This) (This)->lpVtbl->GetType(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12CommandList_QueryInterface(ID3D12CommandList* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12CommandList_AddRef(ID3D12CommandList* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12CommandList_Release(ID3D12CommandList* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12CommandList_GetPrivateData(ID3D12CommandList* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandList_SetPrivateData(ID3D12CommandList* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandList_SetPrivateDataInterface(ID3D12CommandList* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandList_SetName(ID3D12CommandList* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12CommandList_GetDevice(ID3D12CommandList* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12CommandList methods ***/
+static FORCEINLINE D3D12_COMMAND_LIST_TYPE ID3D12CommandList_GetType(ID3D12CommandList* This) {
+    return This->lpVtbl->GetType(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12CommandList_INTERFACE_DEFINED__ */
+
+typedef enum D3D12_TILE_COPY_FLAGS {
+    D3D12_TILE_COPY_FLAG_NONE = 0x0,
+    D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1,
+    D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,
+    D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4
+} D3D12_TILE_COPY_FLAGS;
+typedef struct D3D12_INDEX_BUFFER_VIEW {
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT SizeInBytes;
+    DXGI_FORMAT Format;
+} D3D12_INDEX_BUFFER_VIEW;
+typedef struct D3D12_VERTEX_BUFFER_VIEW {
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT SizeInBytes;
+    UINT StrideInBytes;
+} D3D12_VERTEX_BUFFER_VIEW;
+typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW {
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT64 SizeInBytes;
+    D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
+} D3D12_STREAM_OUTPUT_BUFFER_VIEW;
+typedef enum D3D12_CLEAR_FLAGS {
+    D3D12_CLEAR_FLAG_DEPTH = 0x1,
+    D3D12_CLEAR_FLAG_STENCIL = 0x2
+} D3D12_CLEAR_FLAGS;
+DEFINE_ENUM_FLAG_OPERATORS(D3D12_CLEAR_FLAGS);
+typedef struct D3D12_DISCARD_REGION {
+    UINT NumRects;
+    const D3D12_RECT *pRects;
+    UINT FirstSubresource;
+    UINT NumSubresources;
+} D3D12_DISCARD_REGION;
+typedef enum D3D12_QUERY_TYPE {
+    D3D12_QUERY_TYPE_OCCLUSION = 0,
+    D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1,
+    D3D12_QUERY_TYPE_TIMESTAMP = 2,
+    D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7
+} D3D12_QUERY_TYPE;
+typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS {
+    UINT64 IAVertices;
+    UINT64 IAPrimitives;
+    UINT64 VSInvocations;
+    UINT64 GSInvocations;
+    UINT64 GSPrimitives;
+    UINT64 CInvocations;
+    UINT64 CPrimitives;
+    UINT64 PSInvocations;
+    UINT64 HSInvocations;
+    UINT64 DSInvocations;
+    UINT64 CSInvocations;
+} D3D12_QUERY_DATA_PIPELINE_STATISTICS;
+typedef enum D3D12_PREDICATION_OP {
+    D3D12_PREDICATION_OP_EQUAL_ZERO = 0,
+    D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1
+} D3D12_PREDICATION_OP;
+/*****************************************************************************
+ * ID3D12DescriptorHeap interface
+ */
+#ifndef __ID3D12DescriptorHeap_INTERFACE_DEFINED__
+#define __ID3D12DescriptorHeap_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12DescriptorHeap, 0x8efb471d, 0x616c, 0x4f49, 0x90,0xf7, 0x12,0x7b,0xb7,0x63,0xfa,0x51);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8efb471d-616c-4f49-90f7-127bb763fa51")
+ID3D12DescriptorHeap : public ID3D12Pageable
+{
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual D3D12_DESCRIPTOR_HEAP_DESC* STDMETHODCALLTYPE GetDesc(
+        D3D12_DESCRIPTOR_HEAP_DESC *__ret) = 0;
+    D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc(
+        )
+    {
+        D3D12_DESCRIPTOR_HEAP_DESC __ret;
+        return *GetDesc(&__ret);
+    }
+#else
+    virtual D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc(
+        ) = 0;
+#endif
+
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual D3D12_CPU_DESCRIPTOR_HANDLE* STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart(
+        D3D12_CPU_DESCRIPTOR_HANDLE *__ret) = 0;
+    D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart(
+        )
+    {
+        D3D12_CPU_DESCRIPTOR_HANDLE __ret;
+        return *GetCPUDescriptorHandleForHeapStart(&__ret);
+    }
+#else
+    virtual D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart(
+        ) = 0;
+#endif
+
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual D3D12_GPU_DESCRIPTOR_HANDLE* STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart(
+        D3D12_GPU_DESCRIPTOR_HANDLE *__ret) = 0;
+    D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart(
+        )
+    {
+        D3D12_GPU_DESCRIPTOR_HANDLE __ret;
+        return *GetGPUDescriptorHandleForHeapStart(&__ret);
+    }
+#else
+    virtual D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart(
+        ) = 0;
+#endif
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12DescriptorHeap, 0x8efb471d, 0x616c, 0x4f49, 0x90,0xf7, 0x12,0x7b,0xb7,0x63,0xfa,0x51)
+#endif
+#else
+typedef struct ID3D12DescriptorHeapVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12DescriptorHeap *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12DescriptorHeap *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12DescriptorHeap *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12DescriptorHeap *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12DescriptorHeap *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12DescriptorHeap *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12DescriptorHeap *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12DescriptorHeap *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12DescriptorHeap methods ***/
+    D3D12_DESCRIPTOR_HEAP_DESC * (STDMETHODCALLTYPE *GetDesc)(
+        ID3D12DescriptorHeap *This,
+        D3D12_DESCRIPTOR_HEAP_DESC *__ret);
+
+    D3D12_CPU_DESCRIPTOR_HANDLE * (STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart)(
+        ID3D12DescriptorHeap *This,
+        D3D12_CPU_DESCRIPTOR_HANDLE *__ret);
+
+    D3D12_GPU_DESCRIPTOR_HANDLE * (STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart)(
+        ID3D12DescriptorHeap *This,
+        D3D12_GPU_DESCRIPTOR_HANDLE *__ret);
+
+    END_INTERFACE
+} ID3D12DescriptorHeapVtbl;
+
+interface ID3D12DescriptorHeap {
+    CONST_VTBL ID3D12DescriptorHeapVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12DescriptorHeap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12DescriptorHeap_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12DescriptorHeap_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12DescriptorHeap_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12DescriptorHeap_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12DescriptorHeap_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12DescriptorHeap_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12DescriptorHeap_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12DescriptorHeap methods ***/
+#define ID3D12DescriptorHeap_GetDesc(This) ID3D12DescriptorHeap_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This) ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This) ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12DescriptorHeap_QueryInterface(ID3D12DescriptorHeap* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12DescriptorHeap_AddRef(ID3D12DescriptorHeap* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12DescriptorHeap_Release(ID3D12DescriptorHeap* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12DescriptorHeap_GetPrivateData(ID3D12DescriptorHeap* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12DescriptorHeap_SetPrivateData(ID3D12DescriptorHeap* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12DescriptorHeap_SetPrivateDataInterface(ID3D12DescriptorHeap* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12DescriptorHeap_SetName(ID3D12DescriptorHeap* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12DescriptorHeap_GetDevice(ID3D12DescriptorHeap* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12DescriptorHeap methods ***/
+static FORCEINLINE D3D12_DESCRIPTOR_HEAP_DESC ID3D12DescriptorHeap_GetDesc(ID3D12DescriptorHeap* This) {
+    D3D12_DESCRIPTOR_HEAP_DESC __ret;
+    return *This->lpVtbl->GetDesc(This,&__ret);
+}
+static FORCEINLINE D3D12_CPU_DESCRIPTOR_HANDLE ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap* This) {
+    D3D12_CPU_DESCRIPTOR_HANDLE __ret;
+    return *This->lpVtbl->GetCPUDescriptorHandleForHeapStart(This,&__ret);
+}
+static FORCEINLINE D3D12_GPU_DESCRIPTOR_HANDLE ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(ID3D12DescriptorHeap* This) {
+    D3D12_GPU_DESCRIPTOR_HANDLE __ret;
+    return *This->lpVtbl->GetGPUDescriptorHandleForHeapStart(This,&__ret);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12DescriptorHeap_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12QueryHeap interface
+ */
+#ifndef __ID3D12QueryHeap_INTERFACE_DEFINED__
+#define __ID3D12QueryHeap_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12QueryHeap, 0x0d9658ae, 0xed45, 0x469e, 0xa6,0x1d, 0x97,0x0e,0xc5,0x83,0xca,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0d9658ae-ed45-469e-a61d-970ec583cab4")
+ID3D12QueryHeap : public ID3D12Pageable
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12QueryHeap, 0x0d9658ae, 0xed45, 0x469e, 0xa6,0x1d, 0x97,0x0e,0xc5,0x83,0xca,0xb4)
+#endif
+#else
+typedef struct ID3D12QueryHeapVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12QueryHeap *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12QueryHeap *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12QueryHeap *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12QueryHeap *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12QueryHeap *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12QueryHeap *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12QueryHeap *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12QueryHeap *This,
+        REFIID riid,
+        void **device);
+
+    END_INTERFACE
+} ID3D12QueryHeapVtbl;
+
+interface ID3D12QueryHeap {
+    CONST_VTBL ID3D12QueryHeapVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12QueryHeap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12QueryHeap_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12QueryHeap_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12QueryHeap_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12QueryHeap_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12QueryHeap_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12QueryHeap_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12QueryHeap_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12QueryHeap_QueryInterface(ID3D12QueryHeap* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12QueryHeap_AddRef(ID3D12QueryHeap* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12QueryHeap_Release(ID3D12QueryHeap* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12QueryHeap_GetPrivateData(ID3D12QueryHeap* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12QueryHeap_SetPrivateData(ID3D12QueryHeap* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12QueryHeap_SetPrivateDataInterface(ID3D12QueryHeap* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12QueryHeap_SetName(ID3D12QueryHeap* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12QueryHeap_GetDevice(ID3D12QueryHeap* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12QueryHeap_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12CommandSignature interface
+ */
+#ifndef __ID3D12CommandSignature_INTERFACE_DEFINED__
+#define __ID3D12CommandSignature_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12CommandSignature, 0xc36a797c, 0xec80, 0x4f0a, 0x89,0x85, 0xa7,0xb2,0x47,0x50,0x82,0xd1);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c36a797c-ec80-4f0a-8985-a7b2475082d1")
+ID3D12CommandSignature : public ID3D12Pageable
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12CommandSignature, 0xc36a797c, 0xec80, 0x4f0a, 0x89,0x85, 0xa7,0xb2,0x47,0x50,0x82,0xd1)
+#endif
+#else
+typedef struct ID3D12CommandSignatureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12CommandSignature *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12CommandSignature *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12CommandSignature *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12CommandSignature *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12CommandSignature *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12CommandSignature *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12CommandSignature *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12CommandSignature *This,
+        REFIID riid,
+        void **device);
+
+    END_INTERFACE
+} ID3D12CommandSignatureVtbl;
+
+interface ID3D12CommandSignature {
+    CONST_VTBL ID3D12CommandSignatureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12CommandSignature_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12CommandSignature_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12CommandSignature_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12CommandSignature_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandSignature_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandSignature_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12CommandSignature_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12CommandSignature_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12CommandSignature_QueryInterface(ID3D12CommandSignature* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12CommandSignature_AddRef(ID3D12CommandSignature* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12CommandSignature_Release(ID3D12CommandSignature* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12CommandSignature_GetPrivateData(ID3D12CommandSignature* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandSignature_SetPrivateData(ID3D12CommandSignature* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandSignature_SetPrivateDataInterface(ID3D12CommandSignature* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandSignature_SetName(ID3D12CommandSignature* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12CommandSignature_GetDevice(ID3D12CommandSignature* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12CommandSignature_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12GraphicsCommandList interface
+ */
+#ifndef __ID3D12GraphicsCommandList_INTERFACE_DEFINED__
+#define __ID3D12GraphicsCommandList_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12GraphicsCommandList, 0x5b160d0f, 0xac1b, 0x4185, 0x8b,0xa8, 0xb3,0xae,0x42,0xa5,0xa4,0x55);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5b160d0f-ac1b-4185-8ba8-b3ae42a5a455")
+ID3D12GraphicsCommandList : public ID3D12CommandList
+{
+    virtual HRESULT STDMETHODCALLTYPE Close(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ID3D12CommandAllocator *allocator,
+        ID3D12PipelineState *initial_state) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ClearState(
+        ID3D12PipelineState *pipeline_state) = 0;
+
+    virtual void STDMETHODCALLTYPE DrawInstanced(
+        UINT vertex_count_per_instance,
+        UINT instance_count,
+        UINT start_vertex_location,
+        UINT start_instance_location) = 0;
+
+    virtual void STDMETHODCALLTYPE DrawIndexedInstanced(
+        UINT index_count_per_instance,
+        UINT instance_count,
+        UINT start_vertex_location,
+        INT base_vertex_location,
+        UINT start_instance_location) = 0;
+
+    virtual void STDMETHODCALLTYPE Dispatch(
+        UINT x,
+        UINT u,
+        UINT z) = 0;
+
+    virtual void STDMETHODCALLTYPE CopyBufferRegion(
+        ID3D12Resource *dst_buffer,
+        UINT64 dst_offset,
+        ID3D12Resource *src_buffer,
+        UINT64 src_offset,
+        UINT64 byte_count) = 0;
+
+    virtual void STDMETHODCALLTYPE CopyTextureRegion(
+        const D3D12_TEXTURE_COPY_LOCATION *dst,
+        UINT dst_x,
+        UINT dst_y,
+        UINT dst_z,
+        const D3D12_TEXTURE_COPY_LOCATION *src,
+        const D3D12_BOX *src_box) = 0;
+
+    virtual void STDMETHODCALLTYPE CopyResource(
+        ID3D12Resource *dst_resource,
+        ID3D12Resource *src_resource) = 0;
+
+    virtual void STDMETHODCALLTYPE CopyTiles(
+        ID3D12Resource *tiled_resource,
+        const D3D12_TILED_RESOURCE_COORDINATE *tile_region_start_coordinate,
+        const D3D12_TILE_REGION_SIZE *tile_region_size,
+        ID3D12Resource *buffer,
+        UINT64 buffer_offset,
+        D3D12_TILE_COPY_FLAGS flags) = 0;
+
+    virtual void STDMETHODCALLTYPE ResolveSubresource(
+        ID3D12Resource *dst_resource,
+        UINT dst_sub_resource,
+        ID3D12Resource *src_resource,
+        UINT src_sub_resource,
+        DXGI_FORMAT format) = 0;
+
+    virtual void STDMETHODCALLTYPE IASetPrimitiveTopology(
+        D3D12_PRIMITIVE_TOPOLOGY primitive_topology) = 0;
+
+    virtual void STDMETHODCALLTYPE RSSetViewports(
+        UINT viewport_count,
+        const D3D12_VIEWPORT *viewports) = 0;
+
+    virtual void STDMETHODCALLTYPE RSSetScissorRects(
+        UINT rect_count,
+        const D3D12_RECT *rects) = 0;
+
+    virtual void STDMETHODCALLTYPE OMSetBlendFactor(
+        const FLOAT blend_factor[4]) = 0;
+
+    virtual void STDMETHODCALLTYPE OMSetStencilRef(
+        UINT stencil_ref) = 0;
+
+    virtual void STDMETHODCALLTYPE SetPipelineState(
+        ID3D12PipelineState *pipeline_state) = 0;
+
+    virtual void STDMETHODCALLTYPE ResourceBarrier(
+        UINT barrier_count,
+        const D3D12_RESOURCE_BARRIER *barriers) = 0;
+
+    virtual void STDMETHODCALLTYPE ExecuteBundle(
+        ID3D12GraphicsCommandList *command_list) = 0;
+
+    virtual void STDMETHODCALLTYPE SetDescriptorHeaps(
+        UINT heap_count,
+        ID3D12DescriptorHeap *const *heaps) = 0;
+
+    virtual void STDMETHODCALLTYPE SetComputeRootSignature(
+        ID3D12RootSignature *root_signature) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGraphicsRootSignature(
+        ID3D12RootSignature *root_signature) = 0;
+
+    virtual void STDMETHODCALLTYPE SetComputeRootDescriptorTable(
+        UINT root_parameter_index,
+        D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGraphicsRootDescriptorTable(
+        UINT root_parameter_index,
+        D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstant(
+        UINT root_parameter_index,
+        UINT data,
+        UINT dst_offset) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstant(
+        UINT root_parameter_index,
+        UINT data,
+        UINT dst_offset) = 0;
+
+    virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstants(
+        UINT root_parameter_index,
+        UINT constant_count,
+        const void *data,
+        UINT dst_offset) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstants(
+        UINT root_parameter_index,
+        UINT constant_count,
+        const void *data,
+        UINT dst_offset) = 0;
+
+    virtual void STDMETHODCALLTYPE SetComputeRootConstantBufferView(
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGraphicsRootConstantBufferView(
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address) = 0;
+
+    virtual void STDMETHODCALLTYPE SetComputeRootShaderResourceView(
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGraphicsRootShaderResourceView(
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address) = 0;
+
+    virtual void STDMETHODCALLTYPE SetComputeRootUnorderedAccessView(
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGraphicsRootUnorderedAccessView(
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address) = 0;
+
+    virtual void STDMETHODCALLTYPE IASetIndexBuffer(
+        const D3D12_INDEX_BUFFER_VIEW *view) = 0;
+
+    virtual void STDMETHODCALLTYPE IASetVertexBuffers(
+        UINT start_slot,
+        UINT view_count,
+        const D3D12_VERTEX_BUFFER_VIEW *views) = 0;
+
+    virtual void STDMETHODCALLTYPE SOSetTargets(
+        UINT start_slot,
+        UINT view_count,
+        const D3D12_STREAM_OUTPUT_BUFFER_VIEW *views) = 0;
+
+    virtual void STDMETHODCALLTYPE OMSetRenderTargets(
+        UINT render_target_descriptor_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *render_target_descriptors,
+        WINBOOL single_descriptor_handle,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *depth_stencil_descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE ClearDepthStencilView(
+        D3D12_CPU_DESCRIPTOR_HANDLE dsv,
+        D3D12_CLEAR_FLAGS flags,
+        FLOAT depth,
+        UINT8 stencil,
+        UINT rect_count,
+        const D3D12_RECT *rects) = 0;
+
+    virtual void STDMETHODCALLTYPE ClearRenderTargetView(
+        D3D12_CPU_DESCRIPTOR_HANDLE rtv,
+        const FLOAT color[4],
+        UINT rect_count,
+        const D3D12_RECT *rects) = 0;
+
+    virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewUint(
+        D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,
+        D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle,
+        ID3D12Resource *resource,
+        const UINT values[4],
+        UINT rect_count,
+        const D3D12_RECT *rects) = 0;
+
+    virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewFloat(
+        D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,
+        D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle,
+        ID3D12Resource *resource,
+        const float values[4],
+        UINT rect_count,
+        const D3D12_RECT *rects) = 0;
+
+    virtual void STDMETHODCALLTYPE DiscardResource(
+        ID3D12Resource *resource,
+        const D3D12_DISCARD_REGION *region) = 0;
+
+    virtual void STDMETHODCALLTYPE BeginQuery(
+        ID3D12QueryHeap *heap,
+        D3D12_QUERY_TYPE type,
+        UINT index) = 0;
+
+    virtual void STDMETHODCALLTYPE EndQuery(
+        ID3D12QueryHeap *heap,
+        D3D12_QUERY_TYPE type,
+        UINT index) = 0;
+
+    virtual void STDMETHODCALLTYPE ResolveQueryData(
+        ID3D12QueryHeap *heap,
+        D3D12_QUERY_TYPE type,
+        UINT start_index,
+        UINT query_count,
+        ID3D12Resource *dst_buffer,
+        UINT64 aligned_dst_buffer_offset) = 0;
+
+    virtual void STDMETHODCALLTYPE SetPredication(
+        ID3D12Resource *buffer,
+        UINT64 aligned_buffer_offset,
+        D3D12_PREDICATION_OP operation) = 0;
+
+    virtual void STDMETHODCALLTYPE SetMarker(
+        UINT metadata,
+        const void *data,
+        UINT size) = 0;
+
+    virtual void STDMETHODCALLTYPE BeginEvent(
+        UINT metadata,
+        const void *data,
+        UINT size) = 0;
+
+    virtual void STDMETHODCALLTYPE EndEvent(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE ExecuteIndirect(
+        ID3D12CommandSignature *command_signature,
+        UINT max_command_count,
+        ID3D12Resource *arg_buffer,
+        UINT64 arg_buffer_offset,
+        ID3D12Resource *count_buffer,
+        UINT64 count_buffer_offset) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12GraphicsCommandList, 0x5b160d0f, 0xac1b, 0x4185, 0x8b,0xa8, 0xb3,0xae,0x42,0xa5,0xa4,0x55)
+#endif
+#else
+typedef struct ID3D12GraphicsCommandListVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12GraphicsCommandList *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12GraphicsCommandList *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12GraphicsCommandList *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12GraphicsCommandList *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12GraphicsCommandList *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12GraphicsCommandList *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12GraphicsCommandList *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12GraphicsCommandList *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12CommandList methods ***/
+    D3D12_COMMAND_LIST_TYPE (STDMETHODCALLTYPE *GetType)(
+        ID3D12GraphicsCommandList *This);
+
+    /*** ID3D12GraphicsCommandList methods ***/
+    HRESULT (STDMETHODCALLTYPE *Close)(
+        ID3D12GraphicsCommandList *This);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12CommandAllocator *allocator,
+        ID3D12PipelineState *initial_state);
+
+    HRESULT (STDMETHODCALLTYPE *ClearState)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12PipelineState *pipeline_state);
+
+    void (STDMETHODCALLTYPE *DrawInstanced)(
+        ID3D12GraphicsCommandList *This,
+        UINT vertex_count_per_instance,
+        UINT instance_count,
+        UINT start_vertex_location,
+        UINT start_instance_location);
+
+    void (STDMETHODCALLTYPE *DrawIndexedInstanced)(
+        ID3D12GraphicsCommandList *This,
+        UINT index_count_per_instance,
+        UINT instance_count,
+        UINT start_vertex_location,
+        INT base_vertex_location,
+        UINT start_instance_location);
+
+    void (STDMETHODCALLTYPE *Dispatch)(
+        ID3D12GraphicsCommandList *This,
+        UINT x,
+        UINT u,
+        UINT z);
+
+    void (STDMETHODCALLTYPE *CopyBufferRegion)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12Resource *dst_buffer,
+        UINT64 dst_offset,
+        ID3D12Resource *src_buffer,
+        UINT64 src_offset,
+        UINT64 byte_count);
+
+    void (STDMETHODCALLTYPE *CopyTextureRegion)(
+        ID3D12GraphicsCommandList *This,
+        const D3D12_TEXTURE_COPY_LOCATION *dst,
+        UINT dst_x,
+        UINT dst_y,
+        UINT dst_z,
+        const D3D12_TEXTURE_COPY_LOCATION *src,
+        const D3D12_BOX *src_box);
+
+    void (STDMETHODCALLTYPE *CopyResource)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12Resource *dst_resource,
+        ID3D12Resource *src_resource);
+
+    void (STDMETHODCALLTYPE *CopyTiles)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12Resource *tiled_resource,
+        const D3D12_TILED_RESOURCE_COORDINATE *tile_region_start_coordinate,
+        const D3D12_TILE_REGION_SIZE *tile_region_size,
+        ID3D12Resource *buffer,
+        UINT64 buffer_offset,
+        D3D12_TILE_COPY_FLAGS flags);
+
+    void (STDMETHODCALLTYPE *ResolveSubresource)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12Resource *dst_resource,
+        UINT dst_sub_resource,
+        ID3D12Resource *src_resource,
+        UINT src_sub_resource,
+        DXGI_FORMAT format);
+
+    void (STDMETHODCALLTYPE *IASetPrimitiveTopology)(
+        ID3D12GraphicsCommandList *This,
+        D3D12_PRIMITIVE_TOPOLOGY primitive_topology);
+
+    void (STDMETHODCALLTYPE *RSSetViewports)(
+        ID3D12GraphicsCommandList *This,
+        UINT viewport_count,
+        const D3D12_VIEWPORT *viewports);
+
+    void (STDMETHODCALLTYPE *RSSetScissorRects)(
+        ID3D12GraphicsCommandList *This,
+        UINT rect_count,
+        const D3D12_RECT *rects);
+
+    void (STDMETHODCALLTYPE *OMSetBlendFactor)(
+        ID3D12GraphicsCommandList *This,
+        const FLOAT blend_factor[4]);
+
+    void (STDMETHODCALLTYPE *OMSetStencilRef)(
+        ID3D12GraphicsCommandList *This,
+        UINT stencil_ref);
+
+    void (STDMETHODCALLTYPE *SetPipelineState)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12PipelineState *pipeline_state);
+
+    void (STDMETHODCALLTYPE *ResourceBarrier)(
+        ID3D12GraphicsCommandList *This,
+        UINT barrier_count,
+        const D3D12_RESOURCE_BARRIER *barriers);
+
+    void (STDMETHODCALLTYPE *ExecuteBundle)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12GraphicsCommandList *command_list);
+
+    void (STDMETHODCALLTYPE *SetDescriptorHeaps)(
+        ID3D12GraphicsCommandList *This,
+        UINT heap_count,
+        ID3D12DescriptorHeap *const *heaps);
+
+    void (STDMETHODCALLTYPE *SetComputeRootSignature)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12RootSignature *root_signature);
+
+    void (STDMETHODCALLTYPE *SetGraphicsRootSignature)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12RootSignature *root_signature);
+
+    void (STDMETHODCALLTYPE *SetComputeRootDescriptorTable)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor);
+
+    void (STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor);
+
+    void (STDMETHODCALLTYPE *SetComputeRoot32BitConstant)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        UINT data,
+        UINT dst_offset);
+
+    void (STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        UINT data,
+        UINT dst_offset);
+
+    void (STDMETHODCALLTYPE *SetComputeRoot32BitConstants)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        UINT constant_count,
+        const void *data,
+        UINT dst_offset);
+
+    void (STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        UINT constant_count,
+        const void *data,
+        UINT dst_offset);
+
+    void (STDMETHODCALLTYPE *SetComputeRootConstantBufferView)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void (STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void (STDMETHODCALLTYPE *SetComputeRootShaderResourceView)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void (STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void (STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void (STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView)(
+        ID3D12GraphicsCommandList *This,
+        UINT root_parameter_index,
+        D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void (STDMETHODCALLTYPE *IASetIndexBuffer)(
+        ID3D12GraphicsCommandList *This,
+        const D3D12_INDEX_BUFFER_VIEW *view);
+
+    void (STDMETHODCALLTYPE *IASetVertexBuffers)(
+        ID3D12GraphicsCommandList *This,
+        UINT start_slot,
+        UINT view_count,
+        const D3D12_VERTEX_BUFFER_VIEW *views);
+
+    void (STDMETHODCALLTYPE *SOSetTargets)(
+        ID3D12GraphicsCommandList *This,
+        UINT start_slot,
+        UINT view_count,
+        const D3D12_STREAM_OUTPUT_BUFFER_VIEW *views);
+
+    void (STDMETHODCALLTYPE *OMSetRenderTargets)(
+        ID3D12GraphicsCommandList *This,
+        UINT render_target_descriptor_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *render_target_descriptors,
+        WINBOOL single_descriptor_handle,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *depth_stencil_descriptor);
+
+    void (STDMETHODCALLTYPE *ClearDepthStencilView)(
+        ID3D12GraphicsCommandList *This,
+        D3D12_CPU_DESCRIPTOR_HANDLE dsv,
+        D3D12_CLEAR_FLAGS flags,
+        FLOAT depth,
+        UINT8 stencil,
+        UINT rect_count,
+        const D3D12_RECT *rects);
+
+    void (STDMETHODCALLTYPE *ClearRenderTargetView)(
+        ID3D12GraphicsCommandList *This,
+        D3D12_CPU_DESCRIPTOR_HANDLE rtv,
+        const FLOAT color[4],
+        UINT rect_count,
+        const D3D12_RECT *rects);
+
+    void (STDMETHODCALLTYPE *ClearUnorderedAccessViewUint)(
+        ID3D12GraphicsCommandList *This,
+        D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,
+        D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle,
+        ID3D12Resource *resource,
+        const UINT values[4],
+        UINT rect_count,
+        const D3D12_RECT *rects);
+
+    void (STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat)(
+        ID3D12GraphicsCommandList *This,
+        D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,
+        D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle,
+        ID3D12Resource *resource,
+        const float values[4],
+        UINT rect_count,
+        const D3D12_RECT *rects);
+
+    void (STDMETHODCALLTYPE *DiscardResource)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12Resource *resource,
+        const D3D12_DISCARD_REGION *region);
+
+    void (STDMETHODCALLTYPE *BeginQuery)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12QueryHeap *heap,
+        D3D12_QUERY_TYPE type,
+        UINT index);
+
+    void (STDMETHODCALLTYPE *EndQuery)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12QueryHeap *heap,
+        D3D12_QUERY_TYPE type,
+        UINT index);
+
+    void (STDMETHODCALLTYPE *ResolveQueryData)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12QueryHeap *heap,
+        D3D12_QUERY_TYPE type,
+        UINT start_index,
+        UINT query_count,
+        ID3D12Resource *dst_buffer,
+        UINT64 aligned_dst_buffer_offset);
+
+    void (STDMETHODCALLTYPE *SetPredication)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12Resource *buffer,
+        UINT64 aligned_buffer_offset,
+        D3D12_PREDICATION_OP operation);
+
+    void (STDMETHODCALLTYPE *SetMarker)(
+        ID3D12GraphicsCommandList *This,
+        UINT metadata,
+        const void *data,
+        UINT size);
+
+    void (STDMETHODCALLTYPE *BeginEvent)(
+        ID3D12GraphicsCommandList *This,
+        UINT metadata,
+        const void *data,
+        UINT size);
+
+    void (STDMETHODCALLTYPE *EndEvent)(
+        ID3D12GraphicsCommandList *This);
+
+    void (STDMETHODCALLTYPE *ExecuteIndirect)(
+        ID3D12GraphicsCommandList *This,
+        ID3D12CommandSignature *command_signature,
+        UINT max_command_count,
+        ID3D12Resource *arg_buffer,
+        UINT64 arg_buffer_offset,
+        ID3D12Resource *count_buffer,
+        UINT64 count_buffer_offset);
+
+    END_INTERFACE
+} ID3D12GraphicsCommandListVtbl;
+
+interface ID3D12GraphicsCommandList {
+    CONST_VTBL ID3D12GraphicsCommandListVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12GraphicsCommandList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12GraphicsCommandList_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12GraphicsCommandList_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12GraphicsCommandList_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12GraphicsCommandList_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12GraphicsCommandList_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12GraphicsCommandList_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12GraphicsCommandList_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12CommandList methods ***/
+#define ID3D12GraphicsCommandList_GetType(This) (This)->lpVtbl->GetType(This)
+/*** ID3D12GraphicsCommandList methods ***/
+#define ID3D12GraphicsCommandList_Close(This) (This)->lpVtbl->Close(This)
+#define ID3D12GraphicsCommandList_Reset(This,allocator,initial_state) (This)->lpVtbl->Reset(This,allocator,initial_state)
+#define ID3D12GraphicsCommandList_ClearState(This,pipeline_state) (This)->lpVtbl->ClearState(This,pipeline_state)
+#define ID3D12GraphicsCommandList_DrawInstanced(This,vertex_count_per_instance,instance_count,start_vertex_location,start_instance_location) (This)->lpVtbl->DrawInstanced(This,vertex_count_per_instance,instance_count,start_vertex_location,start_instance_location)
+#define ID3D12GraphicsCommandList_DrawIndexedInstanced(This,index_count_per_instance,instance_count,start_vertex_location,base_vertex_location,start_instance_location) (This)->lpVtbl->DrawIndexedInstanced(This,index_count_per_instance,instance_count,start_vertex_location,base_vertex_location,start_instance_location)
+#define ID3D12GraphicsCommandList_Dispatch(This,x,u,z) (This)->lpVtbl->Dispatch(This,x,u,z)
+#define ID3D12GraphicsCommandList_CopyBufferRegion(This,dst_buffer,dst_offset,src_buffer,src_offset,byte_count) (This)->lpVtbl->CopyBufferRegion(This,dst_buffer,dst_offset,src_buffer,src_offset,byte_count)
+#define ID3D12GraphicsCommandList_CopyTextureRegion(This,dst,dst_x,dst_y,dst_z,src,src_box) (This)->lpVtbl->CopyTextureRegion(This,dst,dst_x,dst_y,dst_z,src,src_box)
+#define ID3D12GraphicsCommandList_CopyResource(This,dst_resource,src_resource) (This)->lpVtbl->CopyResource(This,dst_resource,src_resource)
+#define ID3D12GraphicsCommandList_CopyTiles(This,tiled_resource,tile_region_start_coordinate,tile_region_size,buffer,buffer_offset,flags) (This)->lpVtbl->CopyTiles(This,tiled_resource,tile_region_start_coordinate,tile_region_size,buffer,buffer_offset,flags)
+#define ID3D12GraphicsCommandList_ResolveSubresource(This,dst_resource,dst_sub_resource,src_resource,src_sub_resource,format) (This)->lpVtbl->ResolveSubresource(This,dst_resource,dst_sub_resource,src_resource,src_sub_resource,format)
+#define ID3D12GraphicsCommandList_IASetPrimitiveTopology(This,primitive_topology) (This)->lpVtbl->IASetPrimitiveTopology(This,primitive_topology)
+#define ID3D12GraphicsCommandList_RSSetViewports(This,viewport_count,viewports) (This)->lpVtbl->RSSetViewports(This,viewport_count,viewports)
+#define ID3D12GraphicsCommandList_RSSetScissorRects(This,rect_count,rects) (This)->lpVtbl->RSSetScissorRects(This,rect_count,rects)
+#define ID3D12GraphicsCommandList_OMSetBlendFactor(This,blend_factor) (This)->lpVtbl->OMSetBlendFactor(This,blend_factor)
+#define ID3D12GraphicsCommandList_OMSetStencilRef(This,stencil_ref) (This)->lpVtbl->OMSetStencilRef(This,stencil_ref)
+#define ID3D12GraphicsCommandList_SetPipelineState(This,pipeline_state) (This)->lpVtbl->SetPipelineState(This,pipeline_state)
+#define ID3D12GraphicsCommandList_ResourceBarrier(This,barrier_count,barriers) (This)->lpVtbl->ResourceBarrier(This,barrier_count,barriers)
+#define ID3D12GraphicsCommandList_ExecuteBundle(This,command_list) (This)->lpVtbl->ExecuteBundle(This,command_list)
+#define ID3D12GraphicsCommandList_SetDescriptorHeaps(This,heap_count,heaps) (This)->lpVtbl->SetDescriptorHeaps(This,heap_count,heaps)
+#define ID3D12GraphicsCommandList_SetComputeRootSignature(This,root_signature) (This)->lpVtbl->SetComputeRootSignature(This,root_signature)
+#define ID3D12GraphicsCommandList_SetGraphicsRootSignature(This,root_signature) (This)->lpVtbl->SetGraphicsRootSignature(This,root_signature)
+#define ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(This,root_parameter_index,base_descriptor) (This)->lpVtbl->SetComputeRootDescriptorTable(This,root_parameter_index,base_descriptor)
+#define ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(This,root_parameter_index,base_descriptor) (This)->lpVtbl->SetGraphicsRootDescriptorTable(This,root_parameter_index,base_descriptor)
+#define ID3D12GraphicsCommandList_SetComputeRoot32BitConstant(This,root_parameter_index,data,dst_offset) (This)->lpVtbl->SetComputeRoot32BitConstant(This,root_parameter_index,data,dst_offset)
+#define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstant(This,root_parameter_index,data,dst_offset) (This)->lpVtbl->SetGraphicsRoot32BitConstant(This,root_parameter_index,data,dst_offset)
+#define ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(This,root_parameter_index,constant_count,data,dst_offset) (This)->lpVtbl->SetComputeRoot32BitConstants(This,root_parameter_index,constant_count,data,dst_offset)
+#define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstants(This,root_parameter_index,constant_count,data,dst_offset) (This)->lpVtbl->SetGraphicsRoot32BitConstants(This,root_parameter_index,constant_count,data,dst_offset)
+#define ID3D12GraphicsCommandList_SetComputeRootConstantBufferView(This,root_parameter_index,address) (This)->lpVtbl->SetComputeRootConstantBufferView(This,root_parameter_index,address)
+#define ID3D12GraphicsCommandList_SetGraphicsRootConstantBufferView(This,root_parameter_index,address) (This)->lpVtbl->SetGraphicsRootConstantBufferView(This,root_parameter_index,address)
+#define ID3D12GraphicsCommandList_SetComputeRootShaderResourceView(This,root_parameter_index,address) (This)->lpVtbl->SetComputeRootShaderResourceView(This,root_parameter_index,address)
+#define ID3D12GraphicsCommandList_SetGraphicsRootShaderResourceView(This,root_parameter_index,address) (This)->lpVtbl->SetGraphicsRootShaderResourceView(This,root_parameter_index,address)
+#define ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(This,root_parameter_index,address) (This)->lpVtbl->SetComputeRootUnorderedAccessView(This,root_parameter_index,address)
+#define ID3D12GraphicsCommandList_SetGraphicsRootUnorderedAccessView(This,root_parameter_index,address) (This)->lpVtbl->SetGraphicsRootUnorderedAccessView(This,root_parameter_index,address)
+#define ID3D12GraphicsCommandList_IASetIndexBuffer(This,view) (This)->lpVtbl->IASetIndexBuffer(This,view)
+#define ID3D12GraphicsCommandList_IASetVertexBuffers(This,start_slot,view_count,views) (This)->lpVtbl->IASetVertexBuffers(This,start_slot,view_count,views)
+#define ID3D12GraphicsCommandList_SOSetTargets(This,start_slot,view_count,views) (This)->lpVtbl->SOSetTargets(This,start_slot,view_count,views)
+#define ID3D12GraphicsCommandList_OMSetRenderTargets(This,render_target_descriptor_count,render_target_descriptors,single_descriptor_handle,depth_stencil_descriptor) (This)->lpVtbl->OMSetRenderTargets(This,render_target_descriptor_count,render_target_descriptors,single_descriptor_handle,depth_stencil_descriptor)
+#define ID3D12GraphicsCommandList_ClearDepthStencilView(This,dsv,flags,depth,stencil,rect_count,rects) (This)->lpVtbl->ClearDepthStencilView(This,dsv,flags,depth,stencil,rect_count,rects)
+#define ID3D12GraphicsCommandList_ClearRenderTargetView(This,rtv,color,rect_count,rects) (This)->lpVtbl->ClearRenderTargetView(This,rtv,color,rect_count,rects)
+#define ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(This,gpu_handle,cpu_handle,resource,values,rect_count,rects) (This)->lpVtbl->ClearUnorderedAccessViewUint(This,gpu_handle,cpu_handle,resource,values,rect_count,rects)
+#define ID3D12GraphicsCommandList_ClearUnorderedAccessViewFloat(This,gpu_handle,cpu_handle,resource,values,rect_count,rects) (This)->lpVtbl->ClearUnorderedAccessViewFloat(This,gpu_handle,cpu_handle,resource,values,rect_count,rects)
+#define ID3D12GraphicsCommandList_DiscardResource(This,resource,region) (This)->lpVtbl->DiscardResource(This,resource,region)
+#define ID3D12GraphicsCommandList_BeginQuery(This,heap,type,index) (This)->lpVtbl->BeginQuery(This,heap,type,index)
+#define ID3D12GraphicsCommandList_EndQuery(This,heap,type,index) (This)->lpVtbl->EndQuery(This,heap,type,index)
+#define ID3D12GraphicsCommandList_ResolveQueryData(This,heap,type,start_index,query_count,dst_buffer,aligned_dst_buffer_offset) (This)->lpVtbl->ResolveQueryData(This,heap,type,start_index,query_count,dst_buffer,aligned_dst_buffer_offset)
+#define ID3D12GraphicsCommandList_SetPredication(This,buffer,aligned_buffer_offset,operation) (This)->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation)
+#define ID3D12GraphicsCommandList_SetMarker(This,metadata,data,size) (This)->lpVtbl->SetMarker(This,metadata,data,size)
+#define ID3D12GraphicsCommandList_BeginEvent(This,metadata,data,size) (This)->lpVtbl->BeginEvent(This,metadata,data,size)
+#define ID3D12GraphicsCommandList_EndEvent(This) (This)->lpVtbl->EndEvent(This)
+#define ID3D12GraphicsCommandList_ExecuteIndirect(This,command_signature,max_command_count,arg_buffer,arg_buffer_offset,count_buffer,count_buffer_offset) (This)->lpVtbl->ExecuteIndirect(This,command_signature,max_command_count,arg_buffer,arg_buffer_offset,count_buffer,count_buffer_offset)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_QueryInterface(ID3D12GraphicsCommandList* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12GraphicsCommandList_AddRef(ID3D12GraphicsCommandList* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12GraphicsCommandList_Release(ID3D12GraphicsCommandList* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_GetPrivateData(ID3D12GraphicsCommandList* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_SetPrivateData(ID3D12GraphicsCommandList* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_SetPrivateDataInterface(ID3D12GraphicsCommandList* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_SetName(ID3D12GraphicsCommandList* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_GetDevice(ID3D12GraphicsCommandList* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12CommandList methods ***/
+static FORCEINLINE D3D12_COMMAND_LIST_TYPE ID3D12GraphicsCommandList_GetType(ID3D12GraphicsCommandList* This) {
+    return This->lpVtbl->GetType(This);
+}
+/*** ID3D12GraphicsCommandList methods ***/
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_Close(ID3D12GraphicsCommandList* This) {
+    return This->lpVtbl->Close(This);
+}
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_Reset(ID3D12GraphicsCommandList* This,ID3D12CommandAllocator *allocator,ID3D12PipelineState *initial_state) {
+    return This->lpVtbl->Reset(This,allocator,initial_state);
+}
+static FORCEINLINE HRESULT ID3D12GraphicsCommandList_ClearState(ID3D12GraphicsCommandList* This,ID3D12PipelineState *pipeline_state) {
+    return This->lpVtbl->ClearState(This,pipeline_state);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_DrawInstanced(ID3D12GraphicsCommandList* This,UINT vertex_count_per_instance,UINT instance_count,UINT start_vertex_location,UINT start_instance_location) {
+    This->lpVtbl->DrawInstanced(This,vertex_count_per_instance,instance_count,start_vertex_location,start_instance_location);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_DrawIndexedInstanced(ID3D12GraphicsCommandList* This,UINT index_count_per_instance,UINT instance_count,UINT start_vertex_location,INT base_vertex_location,UINT start_instance_location) {
+    This->lpVtbl->DrawIndexedInstanced(This,index_count_per_instance,instance_count,start_vertex_location,base_vertex_location,start_instance_location);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_Dispatch(ID3D12GraphicsCommandList* This,UINT x,UINT u,UINT z) {
+    This->lpVtbl->Dispatch(This,x,u,z);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_CopyBufferRegion(ID3D12GraphicsCommandList* This,ID3D12Resource *dst_buffer,UINT64 dst_offset,ID3D12Resource *src_buffer,UINT64 src_offset,UINT64 byte_count) {
+    This->lpVtbl->CopyBufferRegion(This,dst_buffer,dst_offset,src_buffer,src_offset,byte_count);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_CopyTextureRegion(ID3D12GraphicsCommandList* This,const D3D12_TEXTURE_COPY_LOCATION *dst,UINT dst_x,UINT dst_y,UINT dst_z,const D3D12_TEXTURE_COPY_LOCATION *src,const D3D12_BOX *src_box) {
+    This->lpVtbl->CopyTextureRegion(This,dst,dst_x,dst_y,dst_z,src,src_box);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_CopyResource(ID3D12GraphicsCommandList* This,ID3D12Resource *dst_resource,ID3D12Resource *src_resource) {
+    This->lpVtbl->CopyResource(This,dst_resource,src_resource);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_CopyTiles(ID3D12GraphicsCommandList* This,ID3D12Resource *tiled_resource,const D3D12_TILED_RESOURCE_COORDINATE *tile_region_start_coordinate,const D3D12_TILE_REGION_SIZE *tile_region_size,ID3D12Resource *buffer,UINT64 buffer_offset,D3D12_TILE_COPY_FLAGS flags) {
+    This->lpVtbl->CopyTiles(This,tiled_resource,tile_region_start_coordinate,tile_region_size,buffer,buffer_offset,flags);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ResolveSubresource(ID3D12GraphicsCommandList* This,ID3D12Resource *dst_resource,UINT dst_sub_resource,ID3D12Resource *src_resource,UINT src_sub_resource,DXGI_FORMAT format) {
+    This->lpVtbl->ResolveSubresource(This,dst_resource,dst_sub_resource,src_resource,src_sub_resource,format);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_IASetPrimitiveTopology(ID3D12GraphicsCommandList* This,D3D12_PRIMITIVE_TOPOLOGY primitive_topology) {
+    This->lpVtbl->IASetPrimitiveTopology(This,primitive_topology);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_RSSetViewports(ID3D12GraphicsCommandList* This,UINT viewport_count,const D3D12_VIEWPORT *viewports) {
+    This->lpVtbl->RSSetViewports(This,viewport_count,viewports);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_RSSetScissorRects(ID3D12GraphicsCommandList* This,UINT rect_count,const D3D12_RECT *rects) {
+    This->lpVtbl->RSSetScissorRects(This,rect_count,rects);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_OMSetBlendFactor(ID3D12GraphicsCommandList* This,const FLOAT blend_factor[4]) {
+    This->lpVtbl->OMSetBlendFactor(This,blend_factor);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_OMSetStencilRef(ID3D12GraphicsCommandList* This,UINT stencil_ref) {
+    This->lpVtbl->OMSetStencilRef(This,stencil_ref);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetPipelineState(ID3D12GraphicsCommandList* This,ID3D12PipelineState *pipeline_state) {
+    This->lpVtbl->SetPipelineState(This,pipeline_state);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ResourceBarrier(ID3D12GraphicsCommandList* This,UINT barrier_count,const D3D12_RESOURCE_BARRIER *barriers) {
+    This->lpVtbl->ResourceBarrier(This,barrier_count,barriers);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ExecuteBundle(ID3D12GraphicsCommandList* This,ID3D12GraphicsCommandList *command_list) {
+    This->lpVtbl->ExecuteBundle(This,command_list);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetDescriptorHeaps(ID3D12GraphicsCommandList* This,UINT heap_count,ID3D12DescriptorHeap *const *heaps) {
+    This->lpVtbl->SetDescriptorHeaps(This,heap_count,heaps);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetComputeRootSignature(ID3D12GraphicsCommandList* This,ID3D12RootSignature *root_signature) {
+    This->lpVtbl->SetComputeRootSignature(This,root_signature);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetGraphicsRootSignature(ID3D12GraphicsCommandList* This,ID3D12RootSignature *root_signature) {
+    This->lpVtbl->SetGraphicsRootSignature(This,root_signature);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor) {
+    This->lpVtbl->SetComputeRootDescriptorTable(This,root_parameter_index,base_descriptor);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor) {
+    This->lpVtbl->SetGraphicsRootDescriptorTable(This,root_parameter_index,base_descriptor);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetComputeRoot32BitConstant(ID3D12GraphicsCommandList* This,UINT root_parameter_index,UINT data,UINT dst_offset) {
+    This->lpVtbl->SetComputeRoot32BitConstant(This,root_parameter_index,data,dst_offset);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstant(ID3D12GraphicsCommandList* This,UINT root_parameter_index,UINT data,UINT dst_offset) {
+    This->lpVtbl->SetGraphicsRoot32BitConstant(This,root_parameter_index,data,dst_offset);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(ID3D12GraphicsCommandList* This,UINT root_parameter_index,UINT constant_count,const void *data,UINT dst_offset) {
+    This->lpVtbl->SetComputeRoot32BitConstants(This,root_parameter_index,constant_count,data,dst_offset);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstants(ID3D12GraphicsCommandList* This,UINT root_parameter_index,UINT constant_count,const void *data,UINT dst_offset) {
+    This->lpVtbl->SetGraphicsRoot32BitConstants(This,root_parameter_index,constant_count,data,dst_offset);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetComputeRootConstantBufferView(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_VIRTUAL_ADDRESS address) {
+    This->lpVtbl->SetComputeRootConstantBufferView(This,root_parameter_index,address);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetGraphicsRootConstantBufferView(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_VIRTUAL_ADDRESS address) {
+    This->lpVtbl->SetGraphicsRootConstantBufferView(This,root_parameter_index,address);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetComputeRootShaderResourceView(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_VIRTUAL_ADDRESS address) {
+    This->lpVtbl->SetComputeRootShaderResourceView(This,root_parameter_index,address);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetGraphicsRootShaderResourceView(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_VIRTUAL_ADDRESS address) {
+    This->lpVtbl->SetGraphicsRootShaderResourceView(This,root_parameter_index,address);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_VIRTUAL_ADDRESS address) {
+    This->lpVtbl->SetComputeRootUnorderedAccessView(This,root_parameter_index,address);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetGraphicsRootUnorderedAccessView(ID3D12GraphicsCommandList* This,UINT root_parameter_index,D3D12_GPU_VIRTUAL_ADDRESS address) {
+    This->lpVtbl->SetGraphicsRootUnorderedAccessView(This,root_parameter_index,address);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_IASetIndexBuffer(ID3D12GraphicsCommandList* This,const D3D12_INDEX_BUFFER_VIEW *view) {
+    This->lpVtbl->IASetIndexBuffer(This,view);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_IASetVertexBuffers(ID3D12GraphicsCommandList* This,UINT start_slot,UINT view_count,const D3D12_VERTEX_BUFFER_VIEW *views) {
+    This->lpVtbl->IASetVertexBuffers(This,start_slot,view_count,views);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SOSetTargets(ID3D12GraphicsCommandList* This,UINT start_slot,UINT view_count,const D3D12_STREAM_OUTPUT_BUFFER_VIEW *views) {
+    This->lpVtbl->SOSetTargets(This,start_slot,view_count,views);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_OMSetRenderTargets(ID3D12GraphicsCommandList* This,UINT render_target_descriptor_count,const D3D12_CPU_DESCRIPTOR_HANDLE *render_target_descriptors,WINBOOL single_descriptor_handle,const D3D12_CPU_DESCRIPTOR_HANDLE *depth_stencil_descriptor) {
+    This->lpVtbl->OMSetRenderTargets(This,render_target_descriptor_count,render_target_descriptors,single_descriptor_handle,depth_stencil_descriptor);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ClearDepthStencilView(ID3D12GraphicsCommandList* This,D3D12_CPU_DESCRIPTOR_HANDLE dsv,D3D12_CLEAR_FLAGS flags,FLOAT depth,UINT8 stencil,UINT rect_count,const D3D12_RECT *rects) {
+    This->lpVtbl->ClearDepthStencilView(This,dsv,flags,depth,stencil,rect_count,rects);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ClearRenderTargetView(ID3D12GraphicsCommandList* This,D3D12_CPU_DESCRIPTOR_HANDLE rtv,const FLOAT color[4],UINT rect_count,const D3D12_RECT *rects) {
+    This->lpVtbl->ClearRenderTargetView(This,rtv,color,rect_count,rects);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(ID3D12GraphicsCommandList* This,D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle,ID3D12Resource *resource,const UINT values[4],UINT rect_count,const D3D12_RECT *rects) {
+    This->lpVtbl->ClearUnorderedAccessViewUint(This,gpu_handle,cpu_handle,resource,values,rect_count,rects);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ClearUnorderedAccessViewFloat(ID3D12GraphicsCommandList* This,D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle,ID3D12Resource *resource,const float values[4],UINT rect_count,const D3D12_RECT *rects) {
+    This->lpVtbl->ClearUnorderedAccessViewFloat(This,gpu_handle,cpu_handle,resource,values,rect_count,rects);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_DiscardResource(ID3D12GraphicsCommandList* This,ID3D12Resource *resource,const D3D12_DISCARD_REGION *region) {
+    This->lpVtbl->DiscardResource(This,resource,region);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_BeginQuery(ID3D12GraphicsCommandList* This,ID3D12QueryHeap *heap,D3D12_QUERY_TYPE type,UINT index) {
+    This->lpVtbl->BeginQuery(This,heap,type,index);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_EndQuery(ID3D12GraphicsCommandList* This,ID3D12QueryHeap *heap,D3D12_QUERY_TYPE type,UINT index) {
+    This->lpVtbl->EndQuery(This,heap,type,index);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ResolveQueryData(ID3D12GraphicsCommandList* This,ID3D12QueryHeap *heap,D3D12_QUERY_TYPE type,UINT start_index,UINT query_count,ID3D12Resource *dst_buffer,UINT64 aligned_dst_buffer_offset) {
+    This->lpVtbl->ResolveQueryData(This,heap,type,start_index,query_count,dst_buffer,aligned_dst_buffer_offset);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetPredication(ID3D12GraphicsCommandList* This,ID3D12Resource *buffer,UINT64 aligned_buffer_offset,D3D12_PREDICATION_OP operation) {
+    This->lpVtbl->SetPredication(This,buffer,aligned_buffer_offset,operation);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_SetMarker(ID3D12GraphicsCommandList* This,UINT metadata,const void *data,UINT size) {
+    This->lpVtbl->SetMarker(This,metadata,data,size);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_BeginEvent(ID3D12GraphicsCommandList* This,UINT metadata,const void *data,UINT size) {
+    This->lpVtbl->BeginEvent(This,metadata,data,size);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_EndEvent(ID3D12GraphicsCommandList* This) {
+    This->lpVtbl->EndEvent(This);
+}
+static FORCEINLINE void ID3D12GraphicsCommandList_ExecuteIndirect(ID3D12GraphicsCommandList* This,ID3D12CommandSignature *command_signature,UINT max_command_count,ID3D12Resource *arg_buffer,UINT64 arg_buffer_offset,ID3D12Resource *count_buffer,UINT64 count_buffer_offset) {
+    This->lpVtbl->ExecuteIndirect(This,command_signature,max_command_count,arg_buffer,arg_buffer_offset,count_buffer,count_buffer_offset);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12GraphicsCommandList_INTERFACE_DEFINED__ */
+
+typedef enum D3D12_TILE_RANGE_FLAGS {
+    D3D12_TILE_RANGE_FLAG_NONE = 0x0,
+    D3D12_TILE_RANGE_FLAG_NULL = 0x1,
+    D3D12_TILE_RANGE_FLAG_SKIP = 0x2,
+    D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 0x4
+} D3D12_TILE_RANGE_FLAGS;
+typedef enum D3D12_TILE_MAPPING_FLAGS {
+    D3D12_TILE_MAPPING_FLAG_NONE = 0x0,
+    D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1
+} D3D12_TILE_MAPPING_FLAGS;
+/*****************************************************************************
+ * ID3D12CommandQueue interface
+ */
+#ifndef __ID3D12CommandQueue_INTERFACE_DEFINED__
+#define __ID3D12CommandQueue_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12CommandQueue, 0x0ec870a6, 0x5d7e, 0x4c22, 0x8c,0xfc, 0x5b,0xaa,0xe0,0x76,0x16,0xed);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0ec870a6-5d7e-4c22-8cfc-5baae07616ed")
+ID3D12CommandQueue : public ID3D12Pageable
+{
+    virtual void STDMETHODCALLTYPE UpdateTileMappings(
+        ID3D12Resource *resource,
+        UINT region_count,
+        const D3D12_TILED_RESOURCE_COORDINATE *region_start_coordinates,
+        const D3D12_TILE_REGION_SIZE *region_sizes,
+        UINT range_count,
+        const D3D12_TILE_RANGE_FLAGS *range_flags,
+        UINT *heap_range_offsets,
+        UINT *range_tile_counts,
+        D3D12_TILE_MAPPING_FLAGS flags) = 0;
+
+    virtual void STDMETHODCALLTYPE CopyTileMappings(
+        ID3D12Resource *dst_resource,
+        const D3D12_TILED_RESOURCE_COORDINATE *dst_region_start_coordinate,
+        ID3D12Resource *src_resource,
+        const D3D12_TILED_RESOURCE_COORDINATE *src_region_start_coordinate,
+        const D3D12_TILE_REGION_SIZE *region_size,
+        D3D12_TILE_MAPPING_FLAGS flags) = 0;
+
+    virtual void STDMETHODCALLTYPE ExecuteCommandLists(
+        UINT command_list_count,
+        ID3D12CommandList *const *command_lists) = 0;
+
+    virtual void STDMETHODCALLTYPE SetMarker(
+        UINT metadata,
+        const void *data,
+        UINT size) = 0;
+
+    virtual void STDMETHODCALLTYPE BeginEvent(
+        UINT metadata,
+        const void *data,
+        UINT size) = 0;
+
+    virtual void STDMETHODCALLTYPE EndEvent(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Signal(
+        ID3D12Fence *fence,
+        UINT64 value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Wait(
+        ID3D12Fence *fence,
+        UINT64 value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTimestampFrequency(
+        UINT64 *frequency) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClockCalibration(
+        UINT64 *gpu_timestamp,
+        UINT64 *cpu_timestamp) = 0;
+
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual D3D12_COMMAND_QUEUE_DESC* STDMETHODCALLTYPE GetDesc(
+        D3D12_COMMAND_QUEUE_DESC *__ret) = 0;
+    D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc(
+        )
+    {
+        D3D12_COMMAND_QUEUE_DESC __ret;
+        return *GetDesc(&__ret);
+    }
+#else
+    virtual D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc(
+        ) = 0;
+#endif
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12CommandQueue, 0x0ec870a6, 0x5d7e, 0x4c22, 0x8c,0xfc, 0x5b,0xaa,0xe0,0x76,0x16,0xed)
+#endif
+#else
+typedef struct ID3D12CommandQueueVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12CommandQueue *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12CommandQueue *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12CommandQueue *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12CommandQueue *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12CommandQueue *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12CommandQueue *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12CommandQueue *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12CommandQueue *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12CommandQueue methods ***/
+    void (STDMETHODCALLTYPE *UpdateTileMappings)(
+        ID3D12CommandQueue *This,
+        ID3D12Resource *resource,
+        UINT region_count,
+        const D3D12_TILED_RESOURCE_COORDINATE *region_start_coordinates,
+        const D3D12_TILE_REGION_SIZE *region_sizes,
+        UINT range_count,
+        const D3D12_TILE_RANGE_FLAGS *range_flags,
+        UINT *heap_range_offsets,
+        UINT *range_tile_counts,
+        D3D12_TILE_MAPPING_FLAGS flags);
+
+    void (STDMETHODCALLTYPE *CopyTileMappings)(
+        ID3D12CommandQueue *This,
+        ID3D12Resource *dst_resource,
+        const D3D12_TILED_RESOURCE_COORDINATE *dst_region_start_coordinate,
+        ID3D12Resource *src_resource,
+        const D3D12_TILED_RESOURCE_COORDINATE *src_region_start_coordinate,
+        const D3D12_TILE_REGION_SIZE *region_size,
+        D3D12_TILE_MAPPING_FLAGS flags);
+
+    void (STDMETHODCALLTYPE *ExecuteCommandLists)(
+        ID3D12CommandQueue *This,
+        UINT command_list_count,
+        ID3D12CommandList *const *command_lists);
+
+    void (STDMETHODCALLTYPE *SetMarker)(
+        ID3D12CommandQueue *This,
+        UINT metadata,
+        const void *data,
+        UINT size);
+
+    void (STDMETHODCALLTYPE *BeginEvent)(
+        ID3D12CommandQueue *This,
+        UINT metadata,
+        const void *data,
+        UINT size);
+
+    void (STDMETHODCALLTYPE *EndEvent)(
+        ID3D12CommandQueue *This);
+
+    HRESULT (STDMETHODCALLTYPE *Signal)(
+        ID3D12CommandQueue *This,
+        ID3D12Fence *fence,
+        UINT64 value);
+
+    HRESULT (STDMETHODCALLTYPE *Wait)(
+        ID3D12CommandQueue *This,
+        ID3D12Fence *fence,
+        UINT64 value);
+
+    HRESULT (STDMETHODCALLTYPE *GetTimestampFrequency)(
+        ID3D12CommandQueue *This,
+        UINT64 *frequency);
+
+    HRESULT (STDMETHODCALLTYPE *GetClockCalibration)(
+        ID3D12CommandQueue *This,
+        UINT64 *gpu_timestamp,
+        UINT64 *cpu_timestamp);
+
+    D3D12_COMMAND_QUEUE_DESC * (STDMETHODCALLTYPE *GetDesc)(
+        ID3D12CommandQueue *This,
+        D3D12_COMMAND_QUEUE_DESC *__ret);
+
+    END_INTERFACE
+} ID3D12CommandQueueVtbl;
+
+interface ID3D12CommandQueue {
+    CONST_VTBL ID3D12CommandQueueVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12CommandQueue_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12CommandQueue_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12CommandQueue_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12CommandQueue_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandQueue_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandQueue_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12CommandQueue_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12CommandQueue_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12CommandQueue methods ***/
+#define ID3D12CommandQueue_UpdateTileMappings(This,resource,region_count,region_start_coordinates,region_sizes,range_count,range_flags,heap_range_offsets,range_tile_counts,flags) (This)->lpVtbl->UpdateTileMappings(This,resource,region_count,region_start_coordinates,region_sizes,range_count,range_flags,heap_range_offsets,range_tile_counts,flags)
+#define ID3D12CommandQueue_CopyTileMappings(This,dst_resource,dst_region_start_coordinate,src_resource,src_region_start_coordinate,region_size,flags) (This)->lpVtbl->CopyTileMappings(This,dst_resource,dst_region_start_coordinate,src_resource,src_region_start_coordinate,region_size,flags)
+#define ID3D12CommandQueue_ExecuteCommandLists(This,command_list_count,command_lists) (This)->lpVtbl->ExecuteCommandLists(This,command_list_count,command_lists)
+#define ID3D12CommandQueue_SetMarker(This,metadata,data,size) (This)->lpVtbl->SetMarker(This,metadata,data,size)
+#define ID3D12CommandQueue_BeginEvent(This,metadata,data,size) (This)->lpVtbl->BeginEvent(This,metadata,data,size)
+#define ID3D12CommandQueue_EndEvent(This) (This)->lpVtbl->EndEvent(This)
+#define ID3D12CommandQueue_Signal(This,fence,value) (This)->lpVtbl->Signal(This,fence,value)
+#define ID3D12CommandQueue_Wait(This,fence,value) (This)->lpVtbl->Wait(This,fence,value)
+#define ID3D12CommandQueue_GetTimestampFrequency(This,frequency) (This)->lpVtbl->GetTimestampFrequency(This,frequency)
+#define ID3D12CommandQueue_GetClockCalibration(This,gpu_timestamp,cpu_timestamp) (This)->lpVtbl->GetClockCalibration(This,gpu_timestamp,cpu_timestamp)
+#define ID3D12CommandQueue_GetDesc(This) ID3D12CommandQueue_GetDesc_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12CommandQueue_QueryInterface(ID3D12CommandQueue* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12CommandQueue_AddRef(ID3D12CommandQueue* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12CommandQueue_Release(ID3D12CommandQueue* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12CommandQueue_GetPrivateData(ID3D12CommandQueue* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandQueue_SetPrivateData(ID3D12CommandQueue* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandQueue_SetPrivateDataInterface(ID3D12CommandQueue* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandQueue_SetName(ID3D12CommandQueue* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12CommandQueue_GetDevice(ID3D12CommandQueue* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12CommandQueue methods ***/
+static FORCEINLINE void ID3D12CommandQueue_UpdateTileMappings(ID3D12CommandQueue* This,ID3D12Resource *resource,UINT region_count,const D3D12_TILED_RESOURCE_COORDINATE *region_start_coordinates,const D3D12_TILE_REGION_SIZE *region_sizes,UINT range_count,const D3D12_TILE_RANGE_FLAGS *range_flags,UINT *heap_range_offsets,UINT *range_tile_counts,D3D12_TILE_MAPPING_FLAGS flags) {
+    This->lpVtbl->UpdateTileMappings(This,resource,region_count,region_start_coordinates,region_sizes,range_count,range_flags,heap_range_offsets,range_tile_counts,flags);
+}
+static FORCEINLINE void ID3D12CommandQueue_CopyTileMappings(ID3D12CommandQueue* This,ID3D12Resource *dst_resource,const D3D12_TILED_RESOURCE_COORDINATE *dst_region_start_coordinate,ID3D12Resource *src_resource,const D3D12_TILED_RESOURCE_COORDINATE *src_region_start_coordinate,const D3D12_TILE_REGION_SIZE *region_size,D3D12_TILE_MAPPING_FLAGS flags) {
+    This->lpVtbl->CopyTileMappings(This,dst_resource,dst_region_start_coordinate,src_resource,src_region_start_coordinate,region_size,flags);
+}
+static FORCEINLINE void ID3D12CommandQueue_ExecuteCommandLists(ID3D12CommandQueue* This,UINT command_list_count,ID3D12CommandList *const *command_lists) {
+    This->lpVtbl->ExecuteCommandLists(This,command_list_count,command_lists);
+}
+static FORCEINLINE void ID3D12CommandQueue_SetMarker(ID3D12CommandQueue* This,UINT metadata,const void *data,UINT size) {
+    This->lpVtbl->SetMarker(This,metadata,data,size);
+}
+static FORCEINLINE void ID3D12CommandQueue_BeginEvent(ID3D12CommandQueue* This,UINT metadata,const void *data,UINT size) {
+    This->lpVtbl->BeginEvent(This,metadata,data,size);
+}
+static FORCEINLINE void ID3D12CommandQueue_EndEvent(ID3D12CommandQueue* This) {
+    This->lpVtbl->EndEvent(This);
+}
+static FORCEINLINE HRESULT ID3D12CommandQueue_Signal(ID3D12CommandQueue* This,ID3D12Fence *fence,UINT64 value) {
+    return This->lpVtbl->Signal(This,fence,value);
+}
+static FORCEINLINE HRESULT ID3D12CommandQueue_Wait(ID3D12CommandQueue* This,ID3D12Fence *fence,UINT64 value) {
+    return This->lpVtbl->Wait(This,fence,value);
+}
+static FORCEINLINE HRESULT ID3D12CommandQueue_GetTimestampFrequency(ID3D12CommandQueue* This,UINT64 *frequency) {
+    return This->lpVtbl->GetTimestampFrequency(This,frequency);
+}
+static FORCEINLINE HRESULT ID3D12CommandQueue_GetClockCalibration(ID3D12CommandQueue* This,UINT64 *gpu_timestamp,UINT64 *cpu_timestamp) {
+    return This->lpVtbl->GetClockCalibration(This,gpu_timestamp,cpu_timestamp);
+}
+static FORCEINLINE D3D12_COMMAND_QUEUE_DESC ID3D12CommandQueue_GetDesc(ID3D12CommandQueue* This) {
+    D3D12_COMMAND_QUEUE_DESC __ret;
+    return *This->lpVtbl->GetDesc(This,&__ret);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12CommandQueue_INTERFACE_DEFINED__ */
+
+typedef enum D3D12_FENCE_FLAGS {
+    D3D12_FENCE_FLAG_NONE = 0x0,
+    D3D12_FENCE_FLAG_SHARED = 0x1,
+    D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2
+} D3D12_FENCE_FLAGS;
+typedef enum D3D12_QUERY_HEAP_TYPE {
+    D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0,
+    D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1,
+    D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2,
+    D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3
+} D3D12_QUERY_HEAP_TYPE;
+typedef struct D3D12_QUERY_HEAP_DESC {
+    D3D12_QUERY_HEAP_TYPE Type;
+    UINT Count;
+    UINT NodeMask;
+} D3D12_QUERY_HEAP_DESC;
+typedef enum D3D12_INDIRECT_ARGUMENT_TYPE {
+    D3D12_INDIRECT_ARGUMENT_TYPE_DRAW = 0,
+    D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED = 1,
+    D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH = 2,
+    D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW = 3,
+    D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW = 4,
+    D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT = 5,
+    D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW = 6,
+    D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW = 7,
+    D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW = 8
+} D3D12_INDIRECT_ARGUMENT_TYPE;
+typedef struct D3D12_INDIRECT_ARGUMENT_DESC {
+    D3D12_INDIRECT_ARGUMENT_TYPE Type;
+    __C89_NAMELESS union {
+        struct {
+            UINT Slot;
+        } VertexBuffer;
+        struct {
+            UINT RootParameterIndex;
+            UINT DestOffsetIn32BitValues;
+            UINT Num32BitValuesToSet;
+        } Constant;
+        struct {
+            UINT RootParameterIndex;
+        } ConstantBufferView;
+        struct {
+            UINT RootParameterIndex;
+        } ShaderResourceView;
+        struct {
+            UINT RootParameterIndex;
+        } UnorderedAccessView;
+    } __C89_NAMELESSUNIONNAME;
+} D3D12_INDIRECT_ARGUMENT_DESC;
+typedef struct D3D12_COMMAND_SIGNATURE_DESC {
+    UINT ByteStride;
+    UINT NumArgumentDescs;
+    const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs;
+    UINT NodeMask;
+} D3D12_COMMAND_SIGNATURE_DESC;
+/*****************************************************************************
+ * ID3D12RootSignature interface
+ */
+#ifndef __ID3D12RootSignature_INTERFACE_DEFINED__
+#define __ID3D12RootSignature_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12RootSignature, 0xc54a6b66, 0x72df, 0x4ee8, 0x8b,0xe5, 0xa9,0x46,0xa1,0x42,0x92,0x14);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("c54a6b66-72df-4ee8-8be5-a946a1429214")
+ID3D12RootSignature : public ID3D12DeviceChild
+{
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12RootSignature, 0xc54a6b66, 0x72df, 0x4ee8, 0x8b,0xe5, 0xa9,0x46,0xa1,0x42,0x92,0x14)
+#endif
+#else
+typedef struct ID3D12RootSignatureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12RootSignature *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12RootSignature *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12RootSignature *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12RootSignature *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12RootSignature *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12RootSignature *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12RootSignature *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12RootSignature *This,
+        REFIID riid,
+        void **device);
+
+    END_INTERFACE
+} ID3D12RootSignatureVtbl;
+
+interface ID3D12RootSignature {
+    CONST_VTBL ID3D12RootSignatureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12RootSignature_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12RootSignature_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12RootSignature_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12RootSignature_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12RootSignature_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12RootSignature_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12RootSignature_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12RootSignature_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12RootSignature_QueryInterface(ID3D12RootSignature* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12RootSignature_AddRef(ID3D12RootSignature* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12RootSignature_Release(ID3D12RootSignature* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12RootSignature_GetPrivateData(ID3D12RootSignature* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12RootSignature_SetPrivateData(ID3D12RootSignature* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12RootSignature_SetPrivateDataInterface(ID3D12RootSignature* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12RootSignature_SetName(ID3D12RootSignature* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12RootSignature_GetDevice(ID3D12RootSignature* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12RootSignature_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12PipelineState interface
+ */
+#ifndef __ID3D12PipelineState_INTERFACE_DEFINED__
+#define __ID3D12PipelineState_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12PipelineState, 0x765a30f3, 0xf624, 0x4c6f, 0xa8,0x28, 0xac,0xe9,0x48,0x62,0x24,0x45);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("765a30f3-f624-4c6f-a828-ace948622445")
+ID3D12PipelineState : public ID3D12Pageable
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCachedBlob(
+        ID3DBlob **blob) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12PipelineState, 0x765a30f3, 0xf624, 0x4c6f, 0xa8,0x28, 0xac,0xe9,0x48,0x62,0x24,0x45)
+#endif
+#else
+typedef struct ID3D12PipelineStateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12PipelineState *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12PipelineState *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12PipelineState *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12PipelineState *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12PipelineState *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12PipelineState *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12PipelineState *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12PipelineState *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12PipelineState methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCachedBlob)(
+        ID3D12PipelineState *This,
+        ID3DBlob **blob);
+
+    END_INTERFACE
+} ID3D12PipelineStateVtbl;
+
+interface ID3D12PipelineState {
+    CONST_VTBL ID3D12PipelineStateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12PipelineState_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12PipelineState_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12PipelineState_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12PipelineState_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12PipelineState_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12PipelineState_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12PipelineState_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12PipelineState_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12PipelineState methods ***/
+#define ID3D12PipelineState_GetCachedBlob(This,blob) (This)->lpVtbl->GetCachedBlob(This,blob)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12PipelineState_QueryInterface(ID3D12PipelineState* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12PipelineState_AddRef(ID3D12PipelineState* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12PipelineState_Release(ID3D12PipelineState* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12PipelineState_GetPrivateData(ID3D12PipelineState* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12PipelineState_SetPrivateData(ID3D12PipelineState* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12PipelineState_SetPrivateDataInterface(ID3D12PipelineState* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12PipelineState_SetName(ID3D12PipelineState* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12PipelineState_GetDevice(ID3D12PipelineState* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12PipelineState methods ***/
+static FORCEINLINE HRESULT ID3D12PipelineState_GetCachedBlob(ID3D12PipelineState* This,ID3DBlob **blob) {
+    return This->lpVtbl->GetCachedBlob(This,blob);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12PipelineState_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12Fence interface
+ */
+#ifndef __ID3D12Fence_INTERFACE_DEFINED__
+#define __ID3D12Fence_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12Fence, 0x0a753dcf, 0xc4d8, 0x4b91, 0xad,0xf6, 0xbe,0x5a,0x60,0xd9,0x5a,0x76);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("0a753dcf-c4d8-4b91-adf6-be5a60d95a76")
+ID3D12Fence : public ID3D12Pageable
+{
+    virtual UINT64 STDMETHODCALLTYPE GetCompletedValue(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEventOnCompletion(
+        UINT64 value,
+        HANDLE event) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Signal(
+        UINT64 value) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12Fence, 0x0a753dcf, 0xc4d8, 0x4b91, 0xad,0xf6, 0xbe,0x5a,0x60,0xd9,0x5a,0x76)
+#endif
+#else
+typedef struct ID3D12FenceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12Fence *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12Fence *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12Fence *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12Fence *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12Fence *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12Fence *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12Fence *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12Fence *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12Fence methods ***/
+    UINT64 (STDMETHODCALLTYPE *GetCompletedValue)(
+        ID3D12Fence *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetEventOnCompletion)(
+        ID3D12Fence *This,
+        UINT64 value,
+        HANDLE event);
+
+    HRESULT (STDMETHODCALLTYPE *Signal)(
+        ID3D12Fence *This,
+        UINT64 value);
+
+    END_INTERFACE
+} ID3D12FenceVtbl;
+
+interface ID3D12Fence {
+    CONST_VTBL ID3D12FenceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12Fence_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12Fence_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12Fence_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12Fence_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12Fence_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12Fence_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12Fence_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12Fence_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12Fence methods ***/
+#define ID3D12Fence_GetCompletedValue(This) (This)->lpVtbl->GetCompletedValue(This)
+#define ID3D12Fence_SetEventOnCompletion(This,value,event) (This)->lpVtbl->SetEventOnCompletion(This,value,event)
+#define ID3D12Fence_Signal(This,value) (This)->lpVtbl->Signal(This,value)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12Fence_QueryInterface(ID3D12Fence* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12Fence_AddRef(ID3D12Fence* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12Fence_Release(ID3D12Fence* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12Fence_GetPrivateData(ID3D12Fence* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Fence_SetPrivateData(ID3D12Fence* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Fence_SetPrivateDataInterface(ID3D12Fence* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12Fence_SetName(ID3D12Fence* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12Fence_GetDevice(ID3D12Fence* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12Fence methods ***/
+static FORCEINLINE UINT64 ID3D12Fence_GetCompletedValue(ID3D12Fence* This) {
+    return This->lpVtbl->GetCompletedValue(This);
+}
+static FORCEINLINE HRESULT ID3D12Fence_SetEventOnCompletion(ID3D12Fence* This,UINT64 value,HANDLE event) {
+    return This->lpVtbl->SetEventOnCompletion(This,value,event);
+}
+static FORCEINLINE HRESULT ID3D12Fence_Signal(ID3D12Fence* This,UINT64 value) {
+    return This->lpVtbl->Signal(This,value);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12Fence_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12CommandAllocator interface
+ */
+#ifndef __ID3D12CommandAllocator_INTERFACE_DEFINED__
+#define __ID3D12CommandAllocator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12CommandAllocator, 0x6102dee4, 0xaf59, 0x4b09, 0xb9,0x99, 0xb4,0x4d,0x73,0xf0,0x9b,0x24);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("6102dee4-af59-4b09-b999-b44d73f09b24")
+ID3D12CommandAllocator : public ID3D12Pageable
+{
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12CommandAllocator, 0x6102dee4, 0xaf59, 0x4b09, 0xb9,0x99, 0xb4,0x4d,0x73,0xf0,0x9b,0x24)
+#endif
+#else
+typedef struct ID3D12CommandAllocatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12CommandAllocator *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12CommandAllocator *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12CommandAllocator *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12CommandAllocator *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12CommandAllocator *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12CommandAllocator *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12CommandAllocator *This,
+        const WCHAR *name);
+
+    /*** ID3D12DeviceChild methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        ID3D12CommandAllocator *This,
+        REFIID riid,
+        void **device);
+
+    /*** ID3D12CommandAllocator methods ***/
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        ID3D12CommandAllocator *This);
+
+    END_INTERFACE
+} ID3D12CommandAllocatorVtbl;
+
+interface ID3D12CommandAllocator {
+    CONST_VTBL ID3D12CommandAllocatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12CommandAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12CommandAllocator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12CommandAllocator_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12CommandAllocator_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandAllocator_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12CommandAllocator_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12CommandAllocator_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12DeviceChild methods ***/
+#define ID3D12CommandAllocator_GetDevice(This,riid,device) (This)->lpVtbl->GetDevice(This,riid,device)
+/*** ID3D12CommandAllocator methods ***/
+#define ID3D12CommandAllocator_Reset(This) (This)->lpVtbl->Reset(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12CommandAllocator_QueryInterface(ID3D12CommandAllocator* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12CommandAllocator_AddRef(ID3D12CommandAllocator* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12CommandAllocator_Release(ID3D12CommandAllocator* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12CommandAllocator_GetPrivateData(ID3D12CommandAllocator* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandAllocator_SetPrivateData(ID3D12CommandAllocator* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandAllocator_SetPrivateDataInterface(ID3D12CommandAllocator* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12CommandAllocator_SetName(ID3D12CommandAllocator* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12DeviceChild methods ***/
+static FORCEINLINE HRESULT ID3D12CommandAllocator_GetDevice(ID3D12CommandAllocator* This,REFIID riid,void **device) {
+    return This->lpVtbl->GetDevice(This,riid,device);
+}
+/*** ID3D12CommandAllocator methods ***/
+static FORCEINLINE HRESULT ID3D12CommandAllocator_Reset(ID3D12CommandAllocator* This) {
+    return This->lpVtbl->Reset(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12CommandAllocator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12Device interface
+ */
+#ifndef __ID3D12Device_INTERFACE_DEFINED__
+#define __ID3D12Device_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12Device, 0x189819f1, 0x1db6, 0x4b57, 0xbe,0x54, 0x18,0x21,0x33,0x9b,0x85,0xf7);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("189819f1-1db6-4b57-be54-1821339b85f7")
+ID3D12Device : public ID3D12Object
+{
+    virtual UINT STDMETHODCALLTYPE GetNodeCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCommandQueue(
+        const D3D12_COMMAND_QUEUE_DESC *desc,
+        REFIID riid,
+        void **command_queue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCommandAllocator(
+        D3D12_COMMAND_LIST_TYPE type,
+        REFIID riid,
+        void **command_allocator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateGraphicsPipelineState(
+        const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc,
+        REFIID riid,
+        void **pipeline_state) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateComputePipelineState(
+        const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc,
+        REFIID riid,
+        void **pipeline_state) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCommandList(
+        UINT node_mask,
+        D3D12_COMMAND_LIST_TYPE type,
+        ID3D12CommandAllocator *command_allocator,
+        ID3D12PipelineState *initial_pipeline_state,
+        REFIID riid,
+        void **command_list) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport(
+        D3D12_FEATURE feature,
+        void *feature_data,
+        UINT feature_data_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDescriptorHeap(
+        const D3D12_DESCRIPTOR_HEAP_DESC *desc,
+        REFIID riid,
+        void **descriptor_heap) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetDescriptorHandleIncrementSize(
+        D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRootSignature(
+        UINT node_mask,
+        const void *bytecode,
+        SIZE_T bytecode_length,
+        REFIID riid,
+        void **root_signature) = 0;
+
+    virtual void STDMETHODCALLTYPE CreateConstantBufferView(
+        const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE CreateShaderResourceView(
+        ID3D12Resource *resource,
+        const D3D12_SHADER_RESOURCE_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE CreateUnorderedAccessView(
+        ID3D12Resource *resource,
+        ID3D12Resource *counter_resource,
+        const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE CreateRenderTargetView(
+        ID3D12Resource *resource,
+        const D3D12_RENDER_TARGET_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE CreateDepthStencilView(
+        ID3D12Resource *resource,
+        const D3D12_DEPTH_STENCIL_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE CreateSampler(
+        const D3D12_SAMPLER_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor) = 0;
+
+    virtual void STDMETHODCALLTYPE CopyDescriptors(
+        UINT dst_descriptor_range_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets,
+        const UINT *dst_descriptor_range_sizes,
+        UINT src_descriptor_range_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets,
+        const UINT *src_descriptor_range_sizes,
+        D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) = 0;
+
+    virtual void STDMETHODCALLTYPE CopyDescriptorsSimple(
+        UINT descriptor_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE dst_descriptor_range_offset,
+        const D3D12_CPU_DESCRIPTOR_HANDLE src_descriptor_range_offset,
+        D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) = 0;
+
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual D3D12_RESOURCE_ALLOCATION_INFO* STDMETHODCALLTYPE GetResourceAllocationInfo(
+        D3D12_RESOURCE_ALLOCATION_INFO *__ret,
+        UINT visible_mask,
+        UINT reource_desc_count,
+        const D3D12_RESOURCE_DESC *resource_descs) = 0;
+    D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo(
+        UINT visible_mask,
+        UINT reource_desc_count,
+        const D3D12_RESOURCE_DESC *resource_descs)
+    {
+        D3D12_RESOURCE_ALLOCATION_INFO __ret;
+        return *GetResourceAllocationInfo(&__ret, visible_mask, reource_desc_count, resource_descs);
+    }
+#else
+    virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo(
+        UINT visible_mask,
+        UINT reource_desc_count,
+        const D3D12_RESOURCE_DESC *resource_descs) = 0;
+#endif
+
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual D3D12_HEAP_PROPERTIES* STDMETHODCALLTYPE GetCustomHeapProperties(
+        D3D12_HEAP_PROPERTIES *__ret,
+        UINT node_mask,
+        D3D12_HEAP_TYPE heap_type) = 0;
+    D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE GetCustomHeapProperties(
+        UINT node_mask,
+        D3D12_HEAP_TYPE heap_type)
+    {
+        D3D12_HEAP_PROPERTIES __ret;
+        return *GetCustomHeapProperties(&__ret, node_mask, heap_type);
+    }
+#else
+    virtual D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE GetCustomHeapProperties(
+        UINT node_mask,
+        D3D12_HEAP_TYPE heap_type) = 0;
+#endif
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource(
+        const D3D12_HEAP_PROPERTIES *heap_properties,
+        D3D12_HEAP_FLAGS heap_flags,
+        const D3D12_RESOURCE_DESC *desc,
+        D3D12_RESOURCE_STATES initial_state,
+        const D3D12_CLEAR_VALUE *optimized_clear_value,
+        REFIID riid,
+        void **resource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateHeap(
+        const D3D12_HEAP_DESC *desc,
+        REFIID riid,
+        void **heap) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource(
+        ID3D12Heap *heap,
+        UINT64 heap_offset,
+        const D3D12_RESOURCE_DESC *desc,
+        D3D12_RESOURCE_STATES initial_state,
+        const D3D12_CLEAR_VALUE *optimized_clear_value,
+        REFIID riid,
+        void **resource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateReservedResource(
+        const D3D12_RESOURCE_DESC *desc,
+        D3D12_RESOURCE_STATES initial_state,
+        const D3D12_CLEAR_VALUE *optimized_clear_value,
+        REFIID riid,
+        void **resource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSharedHandle(
+        ID3D12DeviceChild *object,
+        const SECURITY_ATTRIBUTES *attributes,
+        DWORD access,
+        const WCHAR *name,
+        HANDLE *handle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenSharedHandle(
+        HANDLE handle,
+        REFIID riid,
+        void **object) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenSharedHandleByName(
+        const WCHAR *name,
+        DWORD access,
+        HANDLE *handle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MakeResident(
+        UINT object_count,
+        ID3D12Pageable *const *objects) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Evict(
+        UINT object_count,
+        ID3D12Pageable *const *objects) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateFence(
+        UINT64 initial_value,
+        D3D12_FENCE_FLAGS flags,
+        REFIID riid,
+        void **fence) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE GetCopyableFootprints(
+        const D3D12_RESOURCE_DESC *desc,
+        UINT first_sub_resource,
+        UINT sub_resource_count,
+        UINT64 base_offset,
+        D3D12_PLACED_SUBRESOURCE_FOOTPRINT *layouts,
+        UINT *row_count,
+        UINT64 *row_size,
+        UINT64 *total_bytes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateQueryHeap(
+        const D3D12_QUERY_HEAP_DESC *desc,
+        REFIID riid,
+        void **heap) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStablePowerState(
+        WINBOOL enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCommandSignature(
+        const D3D12_COMMAND_SIGNATURE_DESC *desc,
+        ID3D12RootSignature *root_signature,
+        REFIID riid,
+        void **command_signature) = 0;
+
+    virtual void STDMETHODCALLTYPE GetResourceTiling(
+        ID3D12Resource *resource,
+        UINT *total_tile_count,
+        D3D12_PACKED_MIP_INFO *packed_mip_info,
+        D3D12_TILE_SHAPE *standard_tile_shape,
+        UINT *sub_resource_tiling_count,
+        UINT first_sub_resource_tiling,
+        D3D12_SUBRESOURCE_TILING *sub_resource_tilings) = 0;
+
+#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
+    virtual LUID* STDMETHODCALLTYPE GetAdapterLuid(
+        LUID *__ret) = 0;
+    LUID STDMETHODCALLTYPE GetAdapterLuid(
+        )
+    {
+        LUID __ret;
+        return *GetAdapterLuid(&__ret);
+    }
+#else
+    virtual LUID STDMETHODCALLTYPE GetAdapterLuid(
+        ) = 0;
+#endif
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12Device, 0x189819f1, 0x1db6, 0x4b57, 0xbe,0x54, 0x18,0x21,0x33,0x9b,0x85,0xf7)
+#endif
+#else
+typedef struct ID3D12DeviceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12Device *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12Device *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12Device *This);
+
+    /*** ID3D12Object methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        ID3D12Device *This,
+        REFGUID guid,
+        UINT *data_size,
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        ID3D12Device *This,
+        REFGUID guid,
+        UINT data_size,
+        const void *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetPrivateDataInterface)(
+        ID3D12Device *This,
+        REFGUID guid,
+        const IUnknown *data);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ID3D12Device *This,
+        const WCHAR *name);
+
+    /*** ID3D12Device methods ***/
+    UINT (STDMETHODCALLTYPE *GetNodeCount)(
+        ID3D12Device *This);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCommandQueue)(
+        ID3D12Device *This,
+        const D3D12_COMMAND_QUEUE_DESC *desc,
+        REFIID riid,
+        void **command_queue);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCommandAllocator)(
+        ID3D12Device *This,
+        D3D12_COMMAND_LIST_TYPE type,
+        REFIID riid,
+        void **command_allocator);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGraphicsPipelineState)(
+        ID3D12Device *This,
+        const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc,
+        REFIID riid,
+        void **pipeline_state);
+
+    HRESULT (STDMETHODCALLTYPE *CreateComputePipelineState)(
+        ID3D12Device *This,
+        const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc,
+        REFIID riid,
+        void **pipeline_state);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
+        ID3D12Device *This,
+        UINT node_mask,
+        D3D12_COMMAND_LIST_TYPE type,
+        ID3D12CommandAllocator *command_allocator,
+        ID3D12PipelineState *initial_pipeline_state,
+        REFIID riid,
+        void **command_list);
+
+    HRESULT (STDMETHODCALLTYPE *CheckFeatureSupport)(
+        ID3D12Device *This,
+        D3D12_FEATURE feature,
+        void *feature_data,
+        UINT feature_data_size);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDescriptorHeap)(
+        ID3D12Device *This,
+        const D3D12_DESCRIPTOR_HEAP_DESC *desc,
+        REFIID riid,
+        void **descriptor_heap);
+
+    UINT (STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize)(
+        ID3D12Device *This,
+        D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);
+
+    HRESULT (STDMETHODCALLTYPE *CreateRootSignature)(
+        ID3D12Device *This,
+        UINT node_mask,
+        const void *bytecode,
+        SIZE_T bytecode_length,
+        REFIID riid,
+        void **root_signature);
+
+    void (STDMETHODCALLTYPE *CreateConstantBufferView)(
+        ID3D12Device *This,
+        const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+
+    void (STDMETHODCALLTYPE *CreateShaderResourceView)(
+        ID3D12Device *This,
+        ID3D12Resource *resource,
+        const D3D12_SHADER_RESOURCE_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+
+    void (STDMETHODCALLTYPE *CreateUnorderedAccessView)(
+        ID3D12Device *This,
+        ID3D12Resource *resource,
+        ID3D12Resource *counter_resource,
+        const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+
+    void (STDMETHODCALLTYPE *CreateRenderTargetView)(
+        ID3D12Device *This,
+        ID3D12Resource *resource,
+        const D3D12_RENDER_TARGET_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+
+    void (STDMETHODCALLTYPE *CreateDepthStencilView)(
+        ID3D12Device *This,
+        ID3D12Resource *resource,
+        const D3D12_DEPTH_STENCIL_VIEW_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+
+    void (STDMETHODCALLTYPE *CreateSampler)(
+        ID3D12Device *This,
+        const D3D12_SAMPLER_DESC *desc,
+        D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+
+    void (STDMETHODCALLTYPE *CopyDescriptors)(
+        ID3D12Device *This,
+        UINT dst_descriptor_range_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets,
+        const UINT *dst_descriptor_range_sizes,
+        UINT src_descriptor_range_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets,
+        const UINT *src_descriptor_range_sizes,
+        D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);
+
+    void (STDMETHODCALLTYPE *CopyDescriptorsSimple)(
+        ID3D12Device *This,
+        UINT descriptor_count,
+        const D3D12_CPU_DESCRIPTOR_HANDLE dst_descriptor_range_offset,
+        const D3D12_CPU_DESCRIPTOR_HANDLE src_descriptor_range_offset,
+        D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);
+
+    D3D12_RESOURCE_ALLOCATION_INFO * (STDMETHODCALLTYPE *GetResourceAllocationInfo)(
+        ID3D12Device *This,
+        D3D12_RESOURCE_ALLOCATION_INFO *__ret,
+        UINT visible_mask,
+        UINT reource_desc_count,
+        const D3D12_RESOURCE_DESC *resource_descs);
+
+    D3D12_HEAP_PROPERTIES * (STDMETHODCALLTYPE *GetCustomHeapProperties)(
+        ID3D12Device *This,
+        D3D12_HEAP_PROPERTIES *__ret,
+        UINT node_mask,
+        D3D12_HEAP_TYPE heap_type);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCommittedResource)(
+        ID3D12Device *This,
+        const D3D12_HEAP_PROPERTIES *heap_properties,
+        D3D12_HEAP_FLAGS heap_flags,
+        const D3D12_RESOURCE_DESC *desc,
+        D3D12_RESOURCE_STATES initial_state,
+        const D3D12_CLEAR_VALUE *optimized_clear_value,
+        REFIID riid,
+        void **resource);
+
+    HRESULT (STDMETHODCALLTYPE *CreateHeap)(
+        ID3D12Device *This,
+        const D3D12_HEAP_DESC *desc,
+        REFIID riid,
+        void **heap);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePlacedResource)(
+        ID3D12Device *This,
+        ID3D12Heap *heap,
+        UINT64 heap_offset,
+        const D3D12_RESOURCE_DESC *desc,
+        D3D12_RESOURCE_STATES initial_state,
+        const D3D12_CLEAR_VALUE *optimized_clear_value,
+        REFIID riid,
+        void **resource);
+
+    HRESULT (STDMETHODCALLTYPE *CreateReservedResource)(
+        ID3D12Device *This,
+        const D3D12_RESOURCE_DESC *desc,
+        D3D12_RESOURCE_STATES initial_state,
+        const D3D12_CLEAR_VALUE *optimized_clear_value,
+        REFIID riid,
+        void **resource);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSharedHandle)(
+        ID3D12Device *This,
+        ID3D12DeviceChild *object,
+        const SECURITY_ATTRIBUTES *attributes,
+        DWORD access,
+        const WCHAR *name,
+        HANDLE *handle);
+
+    HRESULT (STDMETHODCALLTYPE *OpenSharedHandle)(
+        ID3D12Device *This,
+        HANDLE handle,
+        REFIID riid,
+        void **object);
+
+    HRESULT (STDMETHODCALLTYPE *OpenSharedHandleByName)(
+        ID3D12Device *This,
+        const WCHAR *name,
+        DWORD access,
+        HANDLE *handle);
+
+    HRESULT (STDMETHODCALLTYPE *MakeResident)(
+        ID3D12Device *This,
+        UINT object_count,
+        ID3D12Pageable *const *objects);
+
+    HRESULT (STDMETHODCALLTYPE *Evict)(
+        ID3D12Device *This,
+        UINT object_count,
+        ID3D12Pageable *const *objects);
+
+    HRESULT (STDMETHODCALLTYPE *CreateFence)(
+        ID3D12Device *This,
+        UINT64 initial_value,
+        D3D12_FENCE_FLAGS flags,
+        REFIID riid,
+        void **fence);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceRemovedReason)(
+        ID3D12Device *This);
+
+    void (STDMETHODCALLTYPE *GetCopyableFootprints)(
+        ID3D12Device *This,
+        const D3D12_RESOURCE_DESC *desc,
+        UINT first_sub_resource,
+        UINT sub_resource_count,
+        UINT64 base_offset,
+        D3D12_PLACED_SUBRESOURCE_FOOTPRINT *layouts,
+        UINT *row_count,
+        UINT64 *row_size,
+        UINT64 *total_bytes);
+
+    HRESULT (STDMETHODCALLTYPE *CreateQueryHeap)(
+        ID3D12Device *This,
+        const D3D12_QUERY_HEAP_DESC *desc,
+        REFIID riid,
+        void **heap);
+
+    HRESULT (STDMETHODCALLTYPE *SetStablePowerState)(
+        ID3D12Device *This,
+        WINBOOL enable);
+
+    HRESULT (STDMETHODCALLTYPE *CreateCommandSignature)(
+        ID3D12Device *This,
+        const D3D12_COMMAND_SIGNATURE_DESC *desc,
+        ID3D12RootSignature *root_signature,
+        REFIID riid,
+        void **command_signature);
+
+    void (STDMETHODCALLTYPE *GetResourceTiling)(
+        ID3D12Device *This,
+        ID3D12Resource *resource,
+        UINT *total_tile_count,
+        D3D12_PACKED_MIP_INFO *packed_mip_info,
+        D3D12_TILE_SHAPE *standard_tile_shape,
+        UINT *sub_resource_tiling_count,
+        UINT first_sub_resource_tiling,
+        D3D12_SUBRESOURCE_TILING *sub_resource_tilings);
+
+    LUID * (STDMETHODCALLTYPE *GetAdapterLuid)(
+        ID3D12Device *This,
+        LUID *__ret);
+
+    END_INTERFACE
+} ID3D12DeviceVtbl;
+
+interface ID3D12Device {
+    CONST_VTBL ID3D12DeviceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12Device_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12Device_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12Device_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Object methods ***/
+#define ID3D12Device_GetPrivateData(This,guid,data_size,data) (This)->lpVtbl->GetPrivateData(This,guid,data_size,data)
+#define ID3D12Device_SetPrivateData(This,guid,data_size,data) (This)->lpVtbl->SetPrivateData(This,guid,data_size,data)
+#define ID3D12Device_SetPrivateDataInterface(This,guid,data) (This)->lpVtbl->SetPrivateDataInterface(This,guid,data)
+#define ID3D12Device_SetName(This,name) (This)->lpVtbl->SetName(This,name)
+/*** ID3D12Device methods ***/
+#define ID3D12Device_GetNodeCount(This) (This)->lpVtbl->GetNodeCount(This)
+#define ID3D12Device_CreateCommandQueue(This,desc,riid,command_queue) (This)->lpVtbl->CreateCommandQueue(This,desc,riid,command_queue)
+#define ID3D12Device_CreateCommandAllocator(This,type,riid,command_allocator) (This)->lpVtbl->CreateCommandAllocator(This,type,riid,command_allocator)
+#define ID3D12Device_CreateGraphicsPipelineState(This,desc,riid,pipeline_state) (This)->lpVtbl->CreateGraphicsPipelineState(This,desc,riid,pipeline_state)
+#define ID3D12Device_CreateComputePipelineState(This,desc,riid,pipeline_state) (This)->lpVtbl->CreateComputePipelineState(This,desc,riid,pipeline_state)
+#define ID3D12Device_CreateCommandList(This,node_mask,type,command_allocator,initial_pipeline_state,riid,command_list) (This)->lpVtbl->CreateCommandList(This,node_mask,type,command_allocator,initial_pipeline_state,riid,command_list)
+#define ID3D12Device_CheckFeatureSupport(This,feature,feature_data,feature_data_size) (This)->lpVtbl->CheckFeatureSupport(This,feature,feature_data,feature_data_size)
+#define ID3D12Device_CreateDescriptorHeap(This,desc,riid,descriptor_heap) (This)->lpVtbl->CreateDescriptorHeap(This,desc,riid,descriptor_heap)
+#define ID3D12Device_GetDescriptorHandleIncrementSize(This,descriptor_heap_type) (This)->lpVtbl->GetDescriptorHandleIncrementSize(This,descriptor_heap_type)
+#define ID3D12Device_CreateRootSignature(This,node_mask,bytecode,bytecode_length,riid,root_signature) (This)->lpVtbl->CreateRootSignature(This,node_mask,bytecode,bytecode_length,riid,root_signature)
+#define ID3D12Device_CreateConstantBufferView(This,desc,descriptor) (This)->lpVtbl->CreateConstantBufferView(This,desc,descriptor)
+#define ID3D12Device_CreateShaderResourceView(This,resource,desc,descriptor) (This)->lpVtbl->CreateShaderResourceView(This,resource,desc,descriptor)
+#define ID3D12Device_CreateUnorderedAccessView(This,resource,counter_resource,desc,descriptor) (This)->lpVtbl->CreateUnorderedAccessView(This,resource,counter_resource,desc,descriptor)
+#define ID3D12Device_CreateRenderTargetView(This,resource,desc,descriptor) (This)->lpVtbl->CreateRenderTargetView(This,resource,desc,descriptor)
+#define ID3D12Device_CreateDepthStencilView(This,resource,desc,descriptor) (This)->lpVtbl->CreateDepthStencilView(This,resource,desc,descriptor)
+#define ID3D12Device_CreateSampler(This,desc,descriptor) (This)->lpVtbl->CreateSampler(This,desc,descriptor)
+#define ID3D12Device_CopyDescriptors(This,dst_descriptor_range_count,dst_descriptor_range_offsets,dst_descriptor_range_sizes,src_descriptor_range_count,src_descriptor_range_offsets,src_descriptor_range_sizes,descriptor_heap_type) (This)->lpVtbl->CopyDescriptors(This,dst_descriptor_range_count,dst_descriptor_range_offsets,dst_descriptor_range_sizes,src_descriptor_range_count,src_descriptor_range_offsets,src_descriptor_range_sizes,descriptor_heap_type)
+#define ID3D12Device_CopyDescriptorsSimple(This,descriptor_count,dst_descriptor_range_offset,src_descriptor_range_offset,descriptor_heap_type) (This)->lpVtbl->CopyDescriptorsSimple(This,descriptor_count,dst_descriptor_range_offset,src_descriptor_range_offset,descriptor_heap_type)
+#define ID3D12Device_GetResourceAllocationInfo(This,visible_mask,reource_desc_count,resource_descs) ID3D12Device_GetResourceAllocationInfo_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#define ID3D12Device_GetCustomHeapProperties(This,node_mask,heap_type) ID3D12Device_GetCustomHeapProperties_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#define ID3D12Device_CreateCommittedResource(This,heap_properties,heap_flags,desc,initial_state,optimized_clear_value,riid,resource) (This)->lpVtbl->CreateCommittedResource(This,heap_properties,heap_flags,desc,initial_state,optimized_clear_value,riid,resource)
+#define ID3D12Device_CreateHeap(This,desc,riid,heap) (This)->lpVtbl->CreateHeap(This,desc,riid,heap)
+#define ID3D12Device_CreatePlacedResource(This,heap,heap_offset,desc,initial_state,optimized_clear_value,riid,resource) (This)->lpVtbl->CreatePlacedResource(This,heap,heap_offset,desc,initial_state,optimized_clear_value,riid,resource)
+#define ID3D12Device_CreateReservedResource(This,desc,initial_state,optimized_clear_value,riid,resource) (This)->lpVtbl->CreateReservedResource(This,desc,initial_state,optimized_clear_value,riid,resource)
+#define ID3D12Device_CreateSharedHandle(This,object,attributes,access,name,handle) (This)->lpVtbl->CreateSharedHandle(This,object,attributes,access,name,handle)
+#define ID3D12Device_OpenSharedHandle(This,handle,riid,object) (This)->lpVtbl->OpenSharedHandle(This,handle,riid,object)
+#define ID3D12Device_OpenSharedHandleByName(This,name,access,handle) (This)->lpVtbl->OpenSharedHandleByName(This,name,access,handle)
+#define ID3D12Device_MakeResident(This,object_count,objects) (This)->lpVtbl->MakeResident(This,object_count,objects)
+#define ID3D12Device_Evict(This,object_count,objects) (This)->lpVtbl->Evict(This,object_count,objects)
+#define ID3D12Device_CreateFence(This,initial_value,flags,riid,fence) (This)->lpVtbl->CreateFence(This,initial_value,flags,riid,fence)
+#define ID3D12Device_GetDeviceRemovedReason(This) (This)->lpVtbl->GetDeviceRemovedReason(This)
+#define ID3D12Device_GetCopyableFootprints(This,desc,first_sub_resource,sub_resource_count,base_offset,layouts,row_count,row_size,total_bytes) (This)->lpVtbl->GetCopyableFootprints(This,desc,first_sub_resource,sub_resource_count,base_offset,layouts,row_count,row_size,total_bytes)
+#define ID3D12Device_CreateQueryHeap(This,desc,riid,heap) (This)->lpVtbl->CreateQueryHeap(This,desc,riid,heap)
+#define ID3D12Device_SetStablePowerState(This,enable) (This)->lpVtbl->SetStablePowerState(This,enable)
+#define ID3D12Device_CreateCommandSignature(This,desc,root_signature,riid,command_signature) (This)->lpVtbl->CreateCommandSignature(This,desc,root_signature,riid,command_signature)
+#define ID3D12Device_GetResourceTiling(This,resource,total_tile_count,packed_mip_info,standard_tile_shape,sub_resource_tiling_count,first_sub_resource_tiling,sub_resource_tilings) (This)->lpVtbl->GetResourceTiling(This,resource,total_tile_count,packed_mip_info,standard_tile_shape,sub_resource_tiling_count,first_sub_resource_tiling,sub_resource_tilings)
+#define ID3D12Device_GetAdapterLuid(This) ID3D12Device_GetAdapterLuid_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12Device_QueryInterface(ID3D12Device* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12Device_AddRef(ID3D12Device* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12Device_Release(ID3D12Device* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Object methods ***/
+static FORCEINLINE HRESULT ID3D12Device_GetPrivateData(ID3D12Device* This,REFGUID guid,UINT *data_size,void *data) {
+    return This->lpVtbl->GetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Device_SetPrivateData(ID3D12Device* This,REFGUID guid,UINT data_size,const void *data) {
+    return This->lpVtbl->SetPrivateData(This,guid,data_size,data);
+}
+static FORCEINLINE HRESULT ID3D12Device_SetPrivateDataInterface(ID3D12Device* This,REFGUID guid,const IUnknown *data) {
+    return This->lpVtbl->SetPrivateDataInterface(This,guid,data);
+}
+static FORCEINLINE HRESULT ID3D12Device_SetName(ID3D12Device* This,const WCHAR *name) {
+    return This->lpVtbl->SetName(This,name);
+}
+/*** ID3D12Device methods ***/
+static FORCEINLINE UINT ID3D12Device_GetNodeCount(ID3D12Device* This) {
+    return This->lpVtbl->GetNodeCount(This);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateCommandQueue(ID3D12Device* This,const D3D12_COMMAND_QUEUE_DESC *desc,REFIID riid,void **command_queue) {
+    return This->lpVtbl->CreateCommandQueue(This,desc,riid,command_queue);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateCommandAllocator(ID3D12Device* This,D3D12_COMMAND_LIST_TYPE type,REFIID riid,void **command_allocator) {
+    return This->lpVtbl->CreateCommandAllocator(This,type,riid,command_allocator);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateGraphicsPipelineState(ID3D12Device* This,const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc,REFIID riid,void **pipeline_state) {
+    return This->lpVtbl->CreateGraphicsPipelineState(This,desc,riid,pipeline_state);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateComputePipelineState(ID3D12Device* This,const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc,REFIID riid,void **pipeline_state) {
+    return This->lpVtbl->CreateComputePipelineState(This,desc,riid,pipeline_state);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateCommandList(ID3D12Device* This,UINT node_mask,D3D12_COMMAND_LIST_TYPE type,ID3D12CommandAllocator *command_allocator,ID3D12PipelineState *initial_pipeline_state,REFIID riid,void **command_list) {
+    return This->lpVtbl->CreateCommandList(This,node_mask,type,command_allocator,initial_pipeline_state,riid,command_list);
+}
+static FORCEINLINE HRESULT ID3D12Device_CheckFeatureSupport(ID3D12Device* This,D3D12_FEATURE feature,void *feature_data,UINT feature_data_size) {
+    return This->lpVtbl->CheckFeatureSupport(This,feature,feature_data,feature_data_size);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateDescriptorHeap(ID3D12Device* This,const D3D12_DESCRIPTOR_HEAP_DESC *desc,REFIID riid,void **descriptor_heap) {
+    return This->lpVtbl->CreateDescriptorHeap(This,desc,riid,descriptor_heap);
+}
+static FORCEINLINE UINT ID3D12Device_GetDescriptorHandleIncrementSize(ID3D12Device* This,D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) {
+    return This->lpVtbl->GetDescriptorHandleIncrementSize(This,descriptor_heap_type);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateRootSignature(ID3D12Device* This,UINT node_mask,const void *bytecode,SIZE_T bytecode_length,REFIID riid,void **root_signature) {
+    return This->lpVtbl->CreateRootSignature(This,node_mask,bytecode,bytecode_length,riid,root_signature);
+}
+static FORCEINLINE void ID3D12Device_CreateConstantBufferView(ID3D12Device* This,const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc,D3D12_CPU_DESCRIPTOR_HANDLE descriptor) {
+    This->lpVtbl->CreateConstantBufferView(This,desc,descriptor);
+}
+static FORCEINLINE void ID3D12Device_CreateShaderResourceView(ID3D12Device* This,ID3D12Resource *resource,const D3D12_SHADER_RESOURCE_VIEW_DESC *desc,D3D12_CPU_DESCRIPTOR_HANDLE descriptor) {
+    This->lpVtbl->CreateShaderResourceView(This,resource,desc,descriptor);
+}
+static FORCEINLINE void ID3D12Device_CreateUnorderedAccessView(ID3D12Device* This,ID3D12Resource *resource,ID3D12Resource *counter_resource,const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc,D3D12_CPU_DESCRIPTOR_HANDLE descriptor) {
+    This->lpVtbl->CreateUnorderedAccessView(This,resource,counter_resource,desc,descriptor);
+}
+static FORCEINLINE void ID3D12Device_CreateRenderTargetView(ID3D12Device* This,ID3D12Resource *resource,const D3D12_RENDER_TARGET_VIEW_DESC *desc,D3D12_CPU_DESCRIPTOR_HANDLE descriptor) {
+    This->lpVtbl->CreateRenderTargetView(This,resource,desc,descriptor);
+}
+static FORCEINLINE void ID3D12Device_CreateDepthStencilView(ID3D12Device* This,ID3D12Resource *resource,const D3D12_DEPTH_STENCIL_VIEW_DESC *desc,D3D12_CPU_DESCRIPTOR_HANDLE descriptor) {
+    This->lpVtbl->CreateDepthStencilView(This,resource,desc,descriptor);
+}
+static FORCEINLINE void ID3D12Device_CreateSampler(ID3D12Device* This,const D3D12_SAMPLER_DESC *desc,D3D12_CPU_DESCRIPTOR_HANDLE descriptor) {
+    This->lpVtbl->CreateSampler(This,desc,descriptor);
+}
+static FORCEINLINE void ID3D12Device_CopyDescriptors(ID3D12Device* This,UINT dst_descriptor_range_count,const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets,const UINT *dst_descriptor_range_sizes,UINT src_descriptor_range_count,const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets,const UINT *src_descriptor_range_sizes,D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) {
+    This->lpVtbl->CopyDescriptors(This,dst_descriptor_range_count,dst_descriptor_range_offsets,dst_descriptor_range_sizes,src_descriptor_range_count,src_descriptor_range_offsets,src_descriptor_range_sizes,descriptor_heap_type);
+}
+static FORCEINLINE void ID3D12Device_CopyDescriptorsSimple(ID3D12Device* This,UINT descriptor_count,const D3D12_CPU_DESCRIPTOR_HANDLE dst_descriptor_range_offset,const D3D12_CPU_DESCRIPTOR_HANDLE src_descriptor_range_offset,D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type) {
+    This->lpVtbl->CopyDescriptorsSimple(This,descriptor_count,dst_descriptor_range_offset,src_descriptor_range_offset,descriptor_heap_type);
+}
+static FORCEINLINE D3D12_RESOURCE_ALLOCATION_INFO ID3D12Device_GetResourceAllocationInfo(ID3D12Device* This,UINT visible_mask,UINT reource_desc_count,const D3D12_RESOURCE_DESC *resource_descs) {
+    D3D12_RESOURCE_ALLOCATION_INFO __ret;
+    return *This->lpVtbl->GetResourceAllocationInfo(This,&__ret,visible_mask,reource_desc_count,resource_descs);
+}
+static FORCEINLINE D3D12_HEAP_PROPERTIES ID3D12Device_GetCustomHeapProperties(ID3D12Device* This,UINT node_mask,D3D12_HEAP_TYPE heap_type) {
+    D3D12_HEAP_PROPERTIES __ret;
+    return *This->lpVtbl->GetCustomHeapProperties(This,&__ret,node_mask,heap_type);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateCommittedResource(ID3D12Device* This,const D3D12_HEAP_PROPERTIES *heap_properties,D3D12_HEAP_FLAGS heap_flags,const D3D12_RESOURCE_DESC *desc,D3D12_RESOURCE_STATES initial_state,const D3D12_CLEAR_VALUE *optimized_clear_value,REFIID riid,void **resource) {
+    return This->lpVtbl->CreateCommittedResource(This,heap_properties,heap_flags,desc,initial_state,optimized_clear_value,riid,resource);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateHeap(ID3D12Device* This,const D3D12_HEAP_DESC *desc,REFIID riid,void **heap) {
+    return This->lpVtbl->CreateHeap(This,desc,riid,heap);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreatePlacedResource(ID3D12Device* This,ID3D12Heap *heap,UINT64 heap_offset,const D3D12_RESOURCE_DESC *desc,D3D12_RESOURCE_STATES initial_state,const D3D12_CLEAR_VALUE *optimized_clear_value,REFIID riid,void **resource) {
+    return This->lpVtbl->CreatePlacedResource(This,heap,heap_offset,desc,initial_state,optimized_clear_value,riid,resource);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateReservedResource(ID3D12Device* This,const D3D12_RESOURCE_DESC *desc,D3D12_RESOURCE_STATES initial_state,const D3D12_CLEAR_VALUE *optimized_clear_value,REFIID riid,void **resource) {
+    return This->lpVtbl->CreateReservedResource(This,desc,initial_state,optimized_clear_value,riid,resource);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateSharedHandle(ID3D12Device* This,ID3D12DeviceChild *object,const SECURITY_ATTRIBUTES *attributes,DWORD access,const WCHAR *name,HANDLE *handle) {
+    return This->lpVtbl->CreateSharedHandle(This,object,attributes,access,name,handle);
+}
+static FORCEINLINE HRESULT ID3D12Device_OpenSharedHandle(ID3D12Device* This,HANDLE handle,REFIID riid,void **object) {
+    return This->lpVtbl->OpenSharedHandle(This,handle,riid,object);
+}
+static FORCEINLINE HRESULT ID3D12Device_OpenSharedHandleByName(ID3D12Device* This,const WCHAR *name,DWORD access,HANDLE *handle) {
+    return This->lpVtbl->OpenSharedHandleByName(This,name,access,handle);
+}
+static FORCEINLINE HRESULT ID3D12Device_MakeResident(ID3D12Device* This,UINT object_count,ID3D12Pageable *const *objects) {
+    return This->lpVtbl->MakeResident(This,object_count,objects);
+}
+static FORCEINLINE HRESULT ID3D12Device_Evict(ID3D12Device* This,UINT object_count,ID3D12Pageable *const *objects) {
+    return This->lpVtbl->Evict(This,object_count,objects);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateFence(ID3D12Device* This,UINT64 initial_value,D3D12_FENCE_FLAGS flags,REFIID riid,void **fence) {
+    return This->lpVtbl->CreateFence(This,initial_value,flags,riid,fence);
+}
+static FORCEINLINE HRESULT ID3D12Device_GetDeviceRemovedReason(ID3D12Device* This) {
+    return This->lpVtbl->GetDeviceRemovedReason(This);
+}
+static FORCEINLINE void ID3D12Device_GetCopyableFootprints(ID3D12Device* This,const D3D12_RESOURCE_DESC *desc,UINT first_sub_resource,UINT sub_resource_count,UINT64 base_offset,D3D12_PLACED_SUBRESOURCE_FOOTPRINT *layouts,UINT *row_count,UINT64 *row_size,UINT64 *total_bytes) {
+    This->lpVtbl->GetCopyableFootprints(This,desc,first_sub_resource,sub_resource_count,base_offset,layouts,row_count,row_size,total_bytes);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateQueryHeap(ID3D12Device* This,const D3D12_QUERY_HEAP_DESC *desc,REFIID riid,void **heap) {
+    return This->lpVtbl->CreateQueryHeap(This,desc,riid,heap);
+}
+static FORCEINLINE HRESULT ID3D12Device_SetStablePowerState(ID3D12Device* This,WINBOOL enable) {
+    return This->lpVtbl->SetStablePowerState(This,enable);
+}
+static FORCEINLINE HRESULT ID3D12Device_CreateCommandSignature(ID3D12Device* This,const D3D12_COMMAND_SIGNATURE_DESC *desc,ID3D12RootSignature *root_signature,REFIID riid,void **command_signature) {
+    return This->lpVtbl->CreateCommandSignature(This,desc,root_signature,riid,command_signature);
+}
+static FORCEINLINE void ID3D12Device_GetResourceTiling(ID3D12Device* This,ID3D12Resource *resource,UINT *total_tile_count,D3D12_PACKED_MIP_INFO *packed_mip_info,D3D12_TILE_SHAPE *standard_tile_shape,UINT *sub_resource_tiling_count,UINT first_sub_resource_tiling,D3D12_SUBRESOURCE_TILING *sub_resource_tilings) {
+    This->lpVtbl->GetResourceTiling(This,resource,total_tile_count,packed_mip_info,standard_tile_shape,sub_resource_tiling_count,first_sub_resource_tiling,sub_resource_tilings);
+}
+static FORCEINLINE LUID ID3D12Device_GetAdapterLuid(ID3D12Device* This) {
+    LUID __ret;
+    return *This->lpVtbl->GetAdapterLuid(This,&__ret);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12Device_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12Debug interface
+ */
+#ifndef __ID3D12Debug_INTERFACE_DEFINED__
+#define __ID3D12Debug_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12Debug, 0x344488b7, 0x6846, 0x474b, 0xb9,0x89, 0xf0,0x27,0x44,0x82,0x45,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("344488b7-6846-474b-b989-f027448245e0")
+ID3D12Debug : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE EnableDebugLayer(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12Debug, 0x344488b7, 0x6846, 0x474b, 0xb9,0x89, 0xf0,0x27,0x44,0x82,0x45,0xe0)
+#endif
+#else
+typedef struct ID3D12DebugVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12Debug *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12Debug *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12Debug *This);
+
+    /*** ID3D12Debug methods ***/
+    void (STDMETHODCALLTYPE *EnableDebugLayer)(
+        ID3D12Debug *This);
+
+    END_INTERFACE
+} ID3D12DebugVtbl;
+
+interface ID3D12Debug {
+    CONST_VTBL ID3D12DebugVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12Debug_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12Debug_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12Debug_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12Debug methods ***/
+#define ID3D12Debug_EnableDebugLayer(This) (This)->lpVtbl->EnableDebugLayer(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12Debug_QueryInterface(ID3D12Debug* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12Debug_AddRef(ID3D12Debug* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12Debug_Release(ID3D12Debug* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12Debug methods ***/
+static FORCEINLINE void ID3D12Debug_EnableDebugLayer(ID3D12Debug* This) {
+    This->lpVtbl->EnableDebugLayer(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12Debug_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ID3D12RootSignatureDeserializer interface
+ */
+#ifndef __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__
+#define __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ID3D12RootSignatureDeserializer, 0x34ab647b, 0x3cc8, 0x46ac, 0x84,0x1b, 0xc0,0x96,0x56,0x45,0xc0,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("34ab647b-3cc8-46ac-841b-c0965645c046")
+ID3D12RootSignatureDeserializer : public IUnknown
+{
+    virtual const D3D12_ROOT_SIGNATURE_DESC * STDMETHODCALLTYPE GetRootSignatureDesc(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ID3D12RootSignatureDeserializer, 0x34ab647b, 0x3cc8, 0x46ac, 0x84,0x1b, 0xc0,0x96,0x56,0x45,0xc0,0x46)
+#endif
+#else
+typedef struct ID3D12RootSignatureDeserializerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ID3D12RootSignatureDeserializer *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ID3D12RootSignatureDeserializer *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ID3D12RootSignatureDeserializer *This);
+
+    /*** ID3D12RootSignatureDeserializer methods ***/
+    const D3D12_ROOT_SIGNATURE_DESC * (STDMETHODCALLTYPE *GetRootSignatureDesc)(
+        ID3D12RootSignatureDeserializer *This);
+
+    END_INTERFACE
+} ID3D12RootSignatureDeserializerVtbl;
+
+interface ID3D12RootSignatureDeserializer {
+    CONST_VTBL ID3D12RootSignatureDeserializerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ID3D12RootSignatureDeserializer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ID3D12RootSignatureDeserializer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ID3D12RootSignatureDeserializer_Release(This) (This)->lpVtbl->Release(This)
+/*** ID3D12RootSignatureDeserializer methods ***/
+#define ID3D12RootSignatureDeserializer_GetRootSignatureDesc(This) (This)->lpVtbl->GetRootSignatureDesc(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ID3D12RootSignatureDeserializer_QueryInterface(ID3D12RootSignatureDeserializer* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ID3D12RootSignatureDeserializer_AddRef(ID3D12RootSignatureDeserializer* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ID3D12RootSignatureDeserializer_Release(ID3D12RootSignatureDeserializer* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ID3D12RootSignatureDeserializer methods ***/
+static FORCEINLINE const D3D12_ROOT_SIGNATURE_DESC * ID3D12RootSignatureDeserializer_GetRootSignatureDesc(ID3D12RootSignatureDeserializer* This) {
+    return This->lpVtbl->GetRootSignatureDesc(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__ */
+
+HRESULT __stdcall  D3D12CreateRootSignatureDeserializer(const void *data,SIZE_T data_size,REFIID iid,void **deserializer);
+
+HRESULT __stdcall  D3D12SerializeRootSignature(const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc,D3D_ROOT_SIGNATURE_VERSION version,ID3DBlob **blob,ID3DBlob **error_blob);
+
+HRESULT __stdcall  D3D12SerializeVersionedRootSignature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *root_signature_desc,ID3DBlob **blob,ID3DBlob **error_blob);
+
+typedef HRESULT (__stdcall *PFN_D3D12_CREATE_DEVICE)(IUnknown *adapter,D3D_FEATURE_LEVEL minimum_feature_level,REFIID iid,void **device);
+HRESULT __stdcall  D3D12CreateDevice(IUnknown *adapter,D3D_FEATURE_LEVEL minimum_feature_level,REFIID iid,void **device);
+
+typedef HRESULT (__stdcall *PFN_D3D12_GET_DEBUG_INTERFACE)(REFIID iid,void **debug);
+HRESULT __stdcall  D3D12GetDebugInterface(REFIID iid,void **debug);
+
+HRESULT __stdcall  D3D12EnableExperimentalFeatures(UINT feature_count,const IID *iids,void *configurations,UINT *configurations_sizes);
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __d3d12_h__ */
diff --git a/mingw-w64-headers/include/d3d12.idl b/mingw-w64-headers/include/d3d12.idl
new file mode 100644
index 0000000..201e01f
--- /dev/null
+++ b/mingw-w64-headers/include/d3d12.idl
@@ -0,0 +1,2185 @@
+/*
+ * Copyright 2016 Józef Kucia for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "dxgi.idl";
+import "d3dcommon.idl";
+
+cpp_quote("#ifndef _D3D12_CONSTANTS")
+cpp_quote("#define _D3D12_CONSTANTS")
+
+const UINT D3D12_CS_TGSM_REGISTER_COUNT = 8192;
+const UINT D3D12_MAX_ROOT_COST = 64;
+const UINT D3D12_VIEWPORT_BOUNDS_MAX = 32767;
+const UINT D3D12_VIEWPORT_BOUNDS_MIN = -32768;
+
+const UINT D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff;
+cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_ALPHA (1.0f)")
+cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_BLUE (1.0f)")
+cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_GREEN (1.0f)")
+cpp_quote("#define D3D12_DEFAULT_BLEND_FACTOR_RED (1.0f)")
+const UINT D3D12_DEFAULT_DEPTH_BIAS = 0;
+cpp_quote("#define D3D12_DEFAULT_DEPTH_BIAS_CLAMP (0.0f)")
+cpp_quote("#define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS (0.0f)")
+const UINT D3D12_DEFAULT_STENCIL_READ_MASK = 0xff;
+const UINT D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff;
+const UINT D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff;
+cpp_quote("#define D3D12_FLOAT32_MAX (3.402823466e+38f)")
+const UINT D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;
+const UINT D3D12_REQ_MIP_LEVELS = 15;
+const UINT D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048;
+const UINT D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384;
+const UINT D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048;
+const UINT D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384;
+const UINT D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048;
+const UINT D3D12_REQ_TEXTURECUBE_DIMENSION = 16384;
+const UINT D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff;
+const UINT D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;
+const UINT D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256;
+const UINT D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536;
+const UINT D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256;
+const UINT D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512;
+const UINT D3D12_VS_INPUT_REGISTER_COUNT = 32;
+const UINT D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;
+
+cpp_quote("#endif")
+
+const UINT D3D12_SHADER_COMPONENT_MAPPING_MASK = 0x7;
+const UINT D3D12_SHADER_COMPONENT_MAPPING_SHIFT = 3;
+const UINT D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES
+        = 1 << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 4);
+
+typedef enum D3D12_SHADER_MIN_PRECISION_SUPPORT
+{
+    D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0x0,
+    D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1,
+    D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2,
+} D3D12_SHADER_MIN_PRECISION_SUPPORT;
+
+typedef enum D3D12_TILED_RESOURCES_TIER
+{
+    D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0,
+    D3D12_TILED_RESOURCES_TIER_1 = 1,
+    D3D12_TILED_RESOURCES_TIER_2 = 2,
+    D3D12_TILED_RESOURCES_TIER_3 = 3,
+} D3D12_TILED_RESOURCES_TIER;
+
+typedef enum D3D12_RESOURCE_BINDING_TIER
+{
+    D3D12_RESOURCE_BINDING_TIER_1 = 1,
+    D3D12_RESOURCE_BINDING_TIER_2 = 2,
+    D3D12_RESOURCE_BINDING_TIER_3 = 3,
+} D3D12_RESOURCE_BINDING_TIER;
+
+typedef enum D3D12_CONSERVATIVE_RASTERIZATION_TIER
+{
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0,
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1,
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2,
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3,
+} D3D12_CONSERVATIVE_RASTERIZATION_TIER;
+
+typedef enum D3D12_CROSS_NODE_SHARING_TIER
+{
+    D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0,
+    D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1,
+    D3D12_CROSS_NODE_SHARING_TIER_1 = 2,
+    D3D12_CROSS_NODE_SHARING_TIER_2 = 3,
+} D3D12_CROSS_NODE_SHARING_TIER;
+
+typedef enum D3D12_RESOURCE_HEAP_TIER
+{
+    D3D12_RESOURCE_HEAP_TIER_1 = 1,
+    D3D12_RESOURCE_HEAP_TIER_2 = 2,
+} D3D12_RESOURCE_HEAP_TIER;
+
+typedef enum D3D12_FORMAT_SUPPORT1
+{
+    D3D12_FORMAT_SUPPORT1_NONE = 0x00000000,
+    D3D12_FORMAT_SUPPORT1_BUFFER = 0x00000001,
+    D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x00000002,
+    D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x00000004,
+    D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x00000008,
+    D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x00000010,
+    D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x00000020,
+    D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x00000040,
+    D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x00000080,
+    D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x00000100,
+    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x00000200,
+    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x00000400,
+    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x00000800,
+    D3D12_FORMAT_SUPPORT1_MIP = 0x00001000,
+    D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x00004000,
+    D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x00008000,
+    D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x00010000,
+    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x00040000,
+    D3D12_FORMAT_SUPPORT1_DISPLAY = 0x00080000,
+    D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x00100000,
+    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x00200000,
+    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x00400000,
+    D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x00800000,
+    D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x01000000,
+    D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x02000000,
+    D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x04000000,
+    D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x08000000,
+    D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000,
+    D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000,
+    D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000,
+} D3D12_FORMAT_SUPPORT1;
+
+typedef enum D3D12_FORMAT_SUPPORT2
+{
+    D3D12_FORMAT_SUPPORT2_NONE = 0x00000000,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x00000001,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x00000002,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x00000004,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x00000008,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x00000010,
+    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x00000020,
+    D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x00000040,
+    D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x00000080,
+    D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x00000100,
+    D3D12_FORMAT_SUPPORT2_TILED = 0x00000200,
+    D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x00004000,
+} D3D12_FORMAT_SUPPORT2;
+
+interface ID3D12Fence;
+interface ID3D12RootSignature;
+interface ID3D12Heap;
+interface ID3D12DescriptorHeap;
+interface ID3D12Resource;
+interface ID3D12CommandAllocator;
+interface ID3D12GraphicsCommandList;
+interface ID3D12CommandQueue;
+interface ID3D12PipelineState;
+interface ID3D12Device;
+
+typedef RECT D3D12_RECT;
+
+typedef struct D3D12_BOX
+{
+    UINT left;
+    UINT top;
+    UINT front;
+    UINT right;
+    UINT bottom;
+    UINT back;
+} D3D12_BOX;
+
+typedef struct D3D12_VIEWPORT
+{
+    FLOAT TopLeftX;
+    FLOAT TopLeftY;
+    FLOAT Width;
+    FLOAT Height;
+    FLOAT MinDepth;
+    FLOAT MaxDepth;
+} D3D12_VIEWPORT;
+
+typedef struct D3D12_RANGE
+{
+    SIZE_T Begin;
+    SIZE_T End;
+} D3D12_RANGE;
+
+typedef struct D3D12_RESOURCE_ALLOCATION_INFO
+{
+    UINT64 SizeInBytes;
+    UINT64 Alignment;
+} D3D12_RESOURCE_ALLOCATION_INFO;
+
+typedef struct D3D12_DRAW_ARGUMENTS
+{
+    UINT VertexCountPerInstance;
+    UINT InstanceCount;
+    UINT StartVertexLocation;
+    UINT StartInstanceLocation;
+} D3D12_DRAW_ARGUMENTS;
+
+typedef struct D3D12_DRAW_INDEXED_ARGUMENTS
+{
+    UINT IndexCountPerInstance;
+    UINT InstanceCount;
+    UINT StartIndexLocation;
+    INT BaseVertexLocation;
+    UINT StartInstanceLocation;
+} D3D12_DRAW_INDEXED_ARGUMENTS;
+
+typedef struct D3D12_DISPATCH_ARGUMENTS
+{
+    UINT ThreadGroupCountX;
+    UINT ThreadGroupCountY;
+    UINT ThreadGroupCountZ;
+} D3D12_DISPATCH_ARGUMENTS;
+
+typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS
+{
+    BOOL DoublePrecisionFloatShaderOps;
+    BOOL OutputMergerLogicOp;
+    D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;
+    D3D12_TILED_RESOURCES_TIER TiledResourcesTier;
+    D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;
+    BOOL PSSpecifiedStencilRefSupported;
+    BOOL TypedUAVLoadAdditionalFormats;
+    BOOL ROVsSupported;
+    D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
+    UINT MaxGPUVirtualAddressBitsPerResource;
+    BOOL StandardSwizzle64KBSupported;
+    D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier;
+    BOOL CrossAdapterRowMajorTextureSupported;
+    BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;
+    D3D12_RESOURCE_HEAP_TIER ResourceHeapTier;
+} D3D12_FEATURE_DATA_D3D12_OPTIONS;
+
+typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT
+{
+    DXGI_FORMAT Format;
+    D3D12_FORMAT_SUPPORT1 Support1;
+    D3D12_FORMAT_SUPPORT2 Support2;
+} D3D12_FEATURE_DATA_FORMAT_SUPPORT;
+
+typedef enum D3D12_HEAP_TYPE
+{
+    D3D12_HEAP_TYPE_DEFAULT = 1,
+    D3D12_HEAP_TYPE_UPLOAD = 2,
+    D3D12_HEAP_TYPE_READBACK = 3,
+    D3D12_HEAP_TYPE_CUSTOM = 4,
+} D3D12_HEAP_TYPE;
+
+typedef enum D3D12_CPU_PAGE_PROPERTY
+{
+    D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0,
+    D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2,
+    D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3,
+} D3D12_CPU_PAGE_PROPERTY;
+
+typedef enum D3D12_MEMORY_POOL
+{
+    D3D12_MEMORY_POOL_UNKNOWN = 0,
+    D3D12_MEMORY_POOL_L0 = 1,
+    D3D12_MEMORY_POOL_L1 = 2,
+} D3D12_MEMORY_POOL;
+
+typedef struct D3D12_HEAP_PROPERTIES
+{
+    D3D12_HEAP_TYPE Type;
+    D3D12_CPU_PAGE_PROPERTY CPUPageProperty;
+    D3D12_MEMORY_POOL MemoryPoolPreference;
+    UINT CreationNodeMask;
+    UINT VisibleNodeMask;
+} D3D12_HEAP_PROPERTIES;
+
+typedef enum D3D12_HEAP_FLAGS
+{
+    D3D12_HEAP_FLAG_NONE = 0x00,
+    D3D12_HEAP_FLAG_SHARED = 0x01,
+    D3D12_HEAP_FLAG_DENY_BUFFERS = 0x04,
+    D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x08,
+    D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
+    D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
+    D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
+    D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0x00,
+    D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,
+    D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
+    D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84,
+} D3D12_HEAP_FLAGS;
+
+typedef struct D3D12_HEAP_DESC
+{
+    UINT64 SizeInBytes;
+    D3D12_HEAP_PROPERTIES Properties;
+    UINT64 Alignment;
+    D3D12_HEAP_FLAGS Flags;
+} D3D12_HEAP_DESC;
+
+typedef struct D3D12_TILED_RESOURCE_COORDINATE
+{
+    UINT X;
+    UINT Y;
+    UINT Z;
+    UINT Subresource;
+} D3D12_TILED_RESOURCE_COORDINATE;
+
+typedef struct D3D12_TILE_REGION_SIZE
+{
+    UINT NumTiles;
+    BOOL UseBox;
+    UINT Width;
+    UINT16 Height;
+    UINT16 Depth;
+} D3D12_TILE_REGION_SIZE;
+
+typedef struct D3D12_SUBRESOURCE_TILING
+{
+    UINT WidthInTiles;
+    UINT16 HeightInTiles;
+    UINT16 DepthInTiles;
+    UINT StartTileIndexInOverallResource;
+} D3D12_SUBRESOURCE_TILING;
+
+typedef struct D3D12_TILE_SHAPE
+{
+    UINT WidthInTexels;
+    UINT HeightInTexels;
+    UINT DepthInTexels;
+} D3D12_TILE_SHAPE;
+
+typedef struct D3D12_SHADER_BYTECODE
+{
+    const void *pShaderBytecode;
+    SIZE_T BytecodeLength;
+} D3D12_SHADER_BYTECODE;
+
+typedef struct D3D12_DEPTH_STENCIL_VALUE
+{
+    FLOAT Depth;
+    UINT8 Stencil;
+} D3D12_DEPTH_STENCIL_VALUE;
+
+typedef struct D3D12_CLEAR_VALUE
+{
+    DXGI_FORMAT Format;
+    union
+    {
+        FLOAT Color[4];
+        D3D12_DEPTH_STENCIL_VALUE DepthStencil;
+    };
+} D3D12_CLEAR_VALUE;
+
+typedef struct D3D12_PACKED_MIP_INFO
+{
+    UINT8 NumStandardMips;
+    UINT8 NumPackedMips;
+    UINT NumTilesForPackedMips;
+    UINT StartTileIndexInOverallResource;
+} D3D12_PACKED_MIP_INFO;
+
+typedef enum D3D12_RESOURCE_STATES
+{
+    D3D12_RESOURCE_STATE_COMMON = 0,
+    D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,
+    D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x2,
+    D3D12_RESOURCE_STATE_RENDER_TARGET = 0x4,
+    D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x8,
+    D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x10,
+    D3D12_RESOURCE_STATE_DEPTH_READ = 0x20,
+    D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x40,
+    D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x80,
+    D3D12_RESOURCE_STATE_STREAM_OUT = 0x100,
+    D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x200,
+    D3D12_RESOURCE_STATE_COPY_DEST = 0x400,
+    D3D12_RESOURCE_STATE_COPY_SOURCE = 0x800,
+    D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000,
+    D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000,
+    D3D12_RESOURCE_STATE_GENERIC_READ = 0x1 | 0x2 | 0x40 | 0x80 | 0x200 | 0x800,
+    D3D12_RESOURCE_STATE_PRESENT = 0x0,
+    D3D12_RESOURCE_STATE_PREDICATION = 0x200,
+} D3D12_RESOURCE_STATES;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_STATES);")
+
+typedef enum D3D12_RESOURCE_BARRIER_TYPE
+{
+    D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0,
+    D3D12_RESOURCE_BARRIER_TYPE_ALIASING = 1,
+    D3D12_RESOURCE_BARRIER_TYPE_UAV = 2,
+} D3D12_RESOURCE_BARRIER_TYPE;
+
+typedef enum D3D12_RESOURCE_BARRIER_FLAGS
+{
+    D3D12_RESOURCE_BARRIER_FLAG_NONE = 0x0,
+    D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1,
+    D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2,
+} D3D12_RESOURCE_BARRIER_FLAGS;
+
+typedef struct D3D12_RESOURCE_TRANSITION_BARRIER
+{
+    ID3D12Resource *pResource;
+    UINT Subresource;
+    D3D12_RESOURCE_STATES StateBefore;
+    D3D12_RESOURCE_STATES StateAfter;
+} D3D12_RESOURCE_TRANSITION_BARRIER;
+
+typedef struct D3D12_RESOURCE_ALIASING_BARRIER_ALIASING
+{
+    ID3D12Resource *pResourceBefore;
+    ID3D12Resource *pResourceAfter;
+} D3D12_RESOURCE_ALIASING_BARRIER;
+
+typedef struct D3D12_RESOURCE_UAV_BARRIER
+{
+    ID3D12Resource *pResource;
+} D3D12_RESOURCE_UAV_BARRIER;
+
+typedef struct D3D12_RESOURCE_BARRIER
+{
+    D3D12_RESOURCE_BARRIER_TYPE Type;
+    D3D12_RESOURCE_BARRIER_FLAGS Flags;
+    union
+    {
+        D3D12_RESOURCE_TRANSITION_BARRIER Transition;
+        D3D12_RESOURCE_ALIASING_BARRIER Aliasing;
+        D3D12_RESOURCE_UAV_BARRIER UAV;
+    };
+} D3D12_RESOURCE_BARRIER;
+
+typedef enum D3D12_RESOURCE_DIMENSION
+{
+    D3D12_RESOURCE_DIMENSION_UNKNOWN = 0,
+    D3D12_RESOURCE_DIMENSION_BUFFER = 1,
+    D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2,
+    D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3,
+    D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4,
+} D3D12_RESOURCE_DIMENSION;
+
+typedef enum D3D12_TEXTURE_LAYOUT
+{
+    D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
+    D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
+    D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
+    D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3,
+} D3D12_TEXTURE_LAYOUT;
+
+typedef enum D3D12_RESOURCE_FLAGS
+{
+    D3D12_RESOURCE_FLAG_NONE = 0x0,
+    D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1,
+    D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2,
+    D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4,
+    D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8,
+    D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10,
+    D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20,
+} D3D12_RESOURCE_FLAGS;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_FLAGS);")
+
+typedef struct D3D12_RESOURCE_DESC
+{
+    D3D12_RESOURCE_DIMENSION Dimension;
+    UINT64 Alignment;
+    UINT64 Width;
+    UINT Height;
+    UINT16 DepthOrArraySize;
+    UINT16 MipLevels;
+    DXGI_FORMAT Format;
+    DXGI_SAMPLE_DESC SampleDesc;
+    D3D12_TEXTURE_LAYOUT Layout;
+    D3D12_RESOURCE_FLAGS Flags;
+} D3D12_RESOURCE_DESC;
+
+typedef enum D3D12_TEXTURE_COPY_TYPE
+{
+    D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0,
+    D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1,
+} D3D12_TEXTURE_COPY_TYPE;
+
+typedef struct D3D12_SUBRESOURCE_FOOTPRINT
+{
+    DXGI_FORMAT Format;
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+    UINT RowPitch;
+} D3D12_SUBRESOURCE_FOOTPRINT;
+
+typedef struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT
+{
+    UINT64 Offset;
+    D3D12_SUBRESOURCE_FOOTPRINT Footprint;
+} D3D12_PLACED_SUBRESOURCE_FOOTPRINT;
+
+typedef struct D3D12_TEXTURE_COPY_LOCATION
+{
+    ID3D12Resource *pResource;
+    D3D12_TEXTURE_COPY_TYPE Type;
+    union
+    {
+        D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;
+        UINT SubresourceIndex;
+    };
+} D3D12_TEXTURE_COPY_LOCATION;
+
+typedef enum D3D12_DESCRIPTOR_RANGE_TYPE
+{
+    D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0,
+    D3D12_DESCRIPTOR_RANGE_TYPE_UAV = 1,
+    D3D12_DESCRIPTOR_RANGE_TYPE_CBV = 2,
+    D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = 3,
+} D3D12_DESCRIPTOR_RANGE_TYPE;
+
+typedef struct D3D12_DESCRIPTOR_RANGE
+{
+    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
+    UINT NumDescriptors;
+    UINT BaseShaderRegister;
+    UINT RegisterSpace;
+    UINT OffsetInDescriptorsFromTableStart;
+} D3D12_DESCRIPTOR_RANGE;
+
+typedef enum D3D12_DESCRIPTOR_RANGE_FLAGS
+{
+    D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0,
+} D3D12_DESCRIPTOR_RANGE_FLAGS;
+
+typedef struct D3D12_DESCRIPTOR_RANGE1
+{
+    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
+    UINT NumDescriptors;
+    UINT BaseShaderRegister;
+    UINT RegisterSpace;
+    D3D12_DESCRIPTOR_RANGE_FLAGS Flags;
+    UINT OffsetInDescriptorsFromTableStart;
+} D3D12_DESCRIPTOR_RANGE1;
+
+typedef struct D3D12_ROOT_DESCRIPTOR_TABLE
+{
+    UINT NumDescriptorRanges;
+    const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges;
+} D3D12_ROOT_DESCRIPTOR_TABLE;
+
+typedef struct D3D12_ROOT_DESCRIPTOR_TABLE1
+{
+    UINT NumDescriptorRanges;
+    const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges;
+} D3D12_ROOT_DESCRIPTOR_TABLE1;
+
+typedef struct D3D12_ROOT_CONSTANTS
+{
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+    UINT Num32BitValues;
+} D3D12_ROOT_CONSTANTS;
+
+typedef struct D3D12_ROOT_DESCRIPTOR
+{
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+} D3D12_ROOT_DESCRIPTOR;
+
+typedef enum D3D12_ROOT_DESCRIPTOR_FLAGS
+{
+    D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0,
+} D3D12_ROOT_DESCRIPTOR_FLAGS;
+
+typedef struct D3D12_ROOT_DESCRIPTOR1
+{
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+    D3D12_ROOT_DESCRIPTOR_FLAGS Flags;
+} D3D12_ROOT_DESCRIPTOR1;
+
+typedef enum D3D12_ROOT_PARAMETER_TYPE
+{
+    D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0,
+    D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 1,
+    D3D12_ROOT_PARAMETER_TYPE_CBV = 2,
+    D3D12_ROOT_PARAMETER_TYPE_SRV = 3,
+    D3D12_ROOT_PARAMETER_TYPE_UAV = 4,
+} D3D12_ROOT_PARAMETER_TYPE;
+
+typedef enum D3D12_SHADER_VISIBILITY
+{
+    D3D12_SHADER_VISIBILITY_ALL = 0,
+    D3D12_SHADER_VISIBILITY_VERTEX = 1,
+    D3D12_SHADER_VISIBILITY_HULL = 2,
+    D3D12_SHADER_VISIBILITY_DOMAIN = 3,
+    D3D12_SHADER_VISIBILITY_GEOMETRY = 4,
+    D3D12_SHADER_VISIBILITY_PIXEL = 5,
+} D3D12_SHADER_VISIBILITY;
+
+typedef struct D3D12_ROOT_PARAMETER
+{
+    D3D12_ROOT_PARAMETER_TYPE ParameterType;
+    union
+    {
+        D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;
+        D3D12_ROOT_CONSTANTS Constants;
+        D3D12_ROOT_DESCRIPTOR Descriptor;
+    };
+    D3D12_SHADER_VISIBILITY ShaderVisibility;
+} D3D12_ROOT_PARAMETER;
+
+typedef struct D3D12_ROOT_PARAMETER1
+{
+    D3D12_ROOT_PARAMETER_TYPE ParameterType;
+    union
+    {
+        D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable;
+        D3D12_ROOT_CONSTANTS Constants;
+        D3D12_ROOT_DESCRIPTOR1 Descriptor;
+    };
+    D3D12_SHADER_VISIBILITY ShaderVisibility;
+} D3D12_ROOT_PARAMETER1;
+
+typedef enum D3D12_STATIC_BORDER_COLOR
+{
+    D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,
+    D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK = 1,
+    D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE = 2,
+} D3D12_STATIC_BORDER_COLOR;
+
+typedef enum D3D12_FILTER
+{
+    D3D12_FILTER_MIN_MAG_MIP_POINT = 0x00,
+    D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,
+    D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,
+    D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,
+    D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+    D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+    D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+    D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+    D3D12_FILTER_ANISOTROPIC = 0x55,
+    D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
+    D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
+    D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
+    D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
+    D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
+    D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+    D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
+    D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
+    D3D12_FILTER_COMPARISON_ANISOTROPIC = 0xd5,
+    D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100,
+    D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,
+    D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
+    D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,
+    D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,
+    D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,
+    D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,
+    D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
+    D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x155,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,
+    D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
+    D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,
+    D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,
+    D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,
+    D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
+    D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5,
+} D3D12_FILTER;
+
+typedef enum D3D12_FILTER_TYPE
+{
+    D3D12_FILTER_TYPE_POINT = 0,
+    D3D12_FILTER_TYPE_LINEAR = 1,
+} D3D12_FILTER_TYPE;
+
+const UINT D3D12_MIP_FILTER_SHIFT = 0;
+const UINT D3D12_MAG_FILTER_SHIFT = 2;
+const UINT D3D12_MIN_FILTER_SHIFT = 4;
+const UINT D3D12_FILTER_TYPE_MASK = 0x3;
+
+const UINT D3D12_ANISOTROPIC_FILTERING_BIT = 0x40;
+
+typedef enum D3D12_FILTER_REDUCTION_TYPE
+{
+    D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0,
+    D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1,
+    D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2,
+    D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3,
+} D3D12_FILTER_REDUCTION_TYPE;
+
+const UINT D3D12_FILTER_REDUCTION_TYPE_MASK = 0x3;
+const UINT D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7;
+
+cpp_quote("#define D3D12_DECODE_MAG_FILTER(filter) \\")
+cpp_quote("    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MAG_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D12_DECODE_MIN_FILTER(filter) \\")
+cpp_quote("    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIN_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D12_DECODE_MIP_FILTER(filter) \\")
+cpp_quote("    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIP_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D12_DECODE_IS_ANISOTROPIC_FILTER(filter)  \\")
+cpp_quote("    (((filter) & D3D12_ANISOTROPIC_FILTERING_BIT) \\")
+cpp_quote("    && (D3D12_DECODE_MIN_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \\")
+cpp_quote("    && (D3D12_DECODE_MAG_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \\")
+cpp_quote("    && (D3D12_DECODE_MIP_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR))")
+
+cpp_quote("#define D3D12_DECODE_FILTER_REDUCTION(filter) \\")
+cpp_quote("    ((D3D12_FILTER_REDUCTION_TYPE)(((filter) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT) \\")
+cpp_quote("    & D3D12_FILTER_REDUCTION_TYPE_MASK))")
+
+cpp_quote("#define D3D12_DECODE_IS_COMPARISON_FILTER(filter) \\")
+cpp_quote("    (D3D12_DECODE_FILTER_REDUCTION(filter) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON)")
+
+typedef enum D3D12_TEXTURE_ADDRESS_MODE
+{
+    D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1,
+    D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2,
+    D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3,
+    D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4,
+    D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5,
+} D3D12_TEXTURE_ADDRESS_MODE;
+
+typedef enum D3D12_COMPARISON_FUNC
+{
+    D3D12_COMPARISON_FUNC_NEVER = 1,
+    D3D12_COMPARISON_FUNC_LESS = 2,
+    D3D12_COMPARISON_FUNC_EQUAL = 3,
+    D3D12_COMPARISON_FUNC_LESS_EQUAL = 4,
+    D3D12_COMPARISON_FUNC_GREATER = 5,
+    D3D12_COMPARISON_FUNC_NOT_EQUAL = 6,
+    D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,
+    D3D12_COMPARISON_FUNC_ALWAYS = 8,
+} D3D12_COMPARISON_FUNC;
+
+typedef struct D3D12_STATIC_SAMPLER_DESC
+{
+    D3D12_FILTER Filter;
+    D3D12_TEXTURE_ADDRESS_MODE AddressU;
+    D3D12_TEXTURE_ADDRESS_MODE AddressV;
+    D3D12_TEXTURE_ADDRESS_MODE AddressW;
+    FLOAT MipLODBias;
+    UINT MaxAnisotropy;
+    D3D12_COMPARISON_FUNC ComparisonFunc;
+    D3D12_STATIC_BORDER_COLOR BorderColor;
+    FLOAT MinLOD;
+    FLOAT MaxLOD;
+    UINT ShaderRegister;
+    UINT RegisterSpace;
+    D3D12_SHADER_VISIBILITY ShaderVisibility;
+} D3D12_STATIC_SAMPLER_DESC;
+
+typedef enum D3D12_ROOT_SIGNATURE_FLAGS
+{
+    D3D12_ROOT_SIGNATURE_FLAG_NONE = 0x00,
+    D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x01,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x02,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x04,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x08,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,
+    D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,
+    D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40,
+} D3D12_ROOT_SIGNATURE_FLAGS;
+
+typedef struct D3D12_ROOT_SIGNATURE_DESC
+{
+    UINT NumParameters;
+    const D3D12_ROOT_PARAMETER *pParameters;
+    UINT NumStaticSamplers;
+    const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
+    D3D12_ROOT_SIGNATURE_FLAGS Flags;
+} D3D12_ROOT_SIGNATURE_DESC;
+
+typedef struct D3D12_ROOT_SIGNATURE_DESC1
+{
+    UINT NumParameters;
+    const D3D12_ROOT_PARAMETER1 *pParameters;
+    UINT NumStaticSamplers;
+    const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
+    D3D12_ROOT_SIGNATURE_FLAGS Flags;
+} D3D12_ROOT_SIGNATURE_DESC1;
+
+typedef enum D3D_ROOT_SIGNATURE_VERSION
+{
+    D3D_ROOT_SIGNATURE_VERSION_1 = 0x1,
+    D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1,
+    D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2,
+} D3D_ROOT_SIGNATURE_VERSION;
+
+typedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC
+{
+    D3D_ROOT_SIGNATURE_VERSION Version;
+    union
+    {
+        D3D12_ROOT_SIGNATURE_DESC Desc_1_0;
+        D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1;
+    };
+} D3D12_VERSIONED_ROOT_SIGNATURE_DESC;
+
+typedef enum D3D12_DESCRIPTOR_HEAP_TYPE
+{
+    D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV,
+    D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER,
+    D3D12_DESCRIPTOR_HEAP_TYPE_RTV,
+    D3D12_DESCRIPTOR_HEAP_TYPE_DSV,
+    D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES,
+} D3D12_DESCRIPTOR_HEAP_TYPE;
+
+typedef enum D3D12_DESCRIPTOR_HEAP_FLAGS
+{
+    D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0x0,
+    D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1,
+} D3D12_DESCRIPTOR_HEAP_FLAGS;
+
+typedef struct D3D12_DESCRIPTOR_HEAP_DESC
+{
+    D3D12_DESCRIPTOR_HEAP_TYPE Type;
+    UINT NumDescriptors;
+    D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
+    UINT NodeMask;
+} D3D12_DESCRIPTOR_HEAP_DESC;
+
+typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS;
+
+typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC
+{
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT SizeInBytes;
+} D3D12_CONSTANT_BUFFER_VIEW_DESC;
+
+typedef enum D3D12_SRV_DIMENSION
+{
+    D3D12_SRV_DIMENSION_UNKNOWN = 0,
+    D3D12_SRV_DIMENSION_BUFFER = 1,
+    D3D12_SRV_DIMENSION_TEXTURE1D = 2,
+    D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3,
+    D3D12_SRV_DIMENSION_TEXTURE2D = 4,
+    D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5,
+    D3D12_SRV_DIMENSION_TEXTURE2DMS = 6,
+    D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,
+    D3D12_SRV_DIMENSION_TEXTURE3D = 8,
+    D3D12_SRV_DIMENSION_TEXTURECUBE = 9,
+    D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10,
+} D3D12_SRV_DIMENSION;
+
+typedef enum D3D12_BUFFER_SRV_FLAGS
+{
+    D3D12_BUFFER_SRV_FLAG_NONE = 0x0,
+    D3D12_BUFFER_SRV_FLAG_RAW = 0x1,
+} D3D12_BUFFER_SRV_FLAGS;
+
+typedef enum D3D12_SHADER_COMPONENT_MAPPING
+{
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0,
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1,
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2,
+    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3,
+    D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4,
+    D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5,
+} D3D12_SHADER_COMPONENT_MAPPING;
+
+cpp_quote("#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(x, y, z, w) \\")
+cpp_quote("        (((x) & D3D12_SHADER_COMPONENT_MAPPING_MASK) \\")
+cpp_quote("        | (((y) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << D3D12_SHADER_COMPONENT_MAPPING_SHIFT) \\")
+cpp_quote("        | (((z) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 2)) \\")
+cpp_quote("        | (((w) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 3)) \\")
+cpp_quote("        | D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES)")
+cpp_quote("#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0, 1, 2, 3)")
+
+typedef struct D3D12_BUFFER_SRV
+{
+    UINT64 FirstElement;
+    UINT NumElements;
+    UINT StructureByteStride;
+    D3D12_BUFFER_SRV_FLAGS Flags;
+} D3D12_BUFFER_SRV;
+
+typedef struct D3D12_TEX1D_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX1D_SRV;
+
+typedef struct D3D12_TEX1D_ARRAY_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX1D_ARRAY_SRV;
+
+typedef struct D3D12_TEX2D_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT PlaneSlice;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX2D_SRV;
+
+typedef struct D3D12_TEX2D_ARRAY_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    UINT PlaneSlice;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX2D_ARRAY_SRV;
+
+typedef struct D3D12_TEX2DMS_SRV
+{
+    UINT UnusedField_NothingToDefine;
+} D3D12_TEX2DMS_SRV;
+
+typedef struct D3D12_TEX2DMS_ARRAY_SRV
+{
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2DMS_ARRAY_SRV;
+
+typedef struct D3D12_TEX3D_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEX3D_SRV;
+
+typedef struct D3D12_TEXCUBE_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEXCUBE_SRV;
+
+typedef struct D3D12_TEXCUBE_ARRAY_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT First2DArrayFace;
+    UINT NumCubes;
+    FLOAT ResourceMinLODClamp;
+} D3D12_TEXCUBE_ARRAY_SRV;
+
+typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D12_SRV_DIMENSION ViewDimension;
+    UINT Shader4ComponentMapping;
+    union
+    {
+        D3D12_BUFFER_SRV Buffer;
+        D3D12_TEX1D_SRV Texture1D;
+        D3D12_TEX1D_ARRAY_SRV Texture1DArray;
+        D3D12_TEX2D_SRV Texture2D;
+        D3D12_TEX2D_ARRAY_SRV Texture2DArray;
+        D3D12_TEX2DMS_SRV Texture2DMS;
+        D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+        D3D12_TEX3D_SRV Texture3D;
+        D3D12_TEXCUBE_SRV TextureCube;
+        D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
+    };
+} D3D12_SHADER_RESOURCE_VIEW_DESC;
+
+typedef enum D3D12_UAV_DIMENSION
+{
+    D3D12_UAV_DIMENSION_UNKNOWN = 0,
+    D3D12_UAV_DIMENSION_BUFFER = 1,
+    D3D12_UAV_DIMENSION_TEXTURE1D = 2,
+    D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3,
+    D3D12_UAV_DIMENSION_TEXTURE2D = 4,
+    D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5,
+    D3D12_UAV_DIMENSION_TEXTURE3D = 8,
+} D3D12_UAV_DIMENSION;
+
+typedef enum D3D12_BUFFER_UAV_FLAGS
+{
+    D3D12_BUFFER_UAV_FLAG_NONE = 0x0,
+    D3D12_BUFFER_UAV_FLAG_RAW = 0x1,
+} D3D12_BUFFER_UAV_FLAGS;
+
+typedef struct D3D12_BUFFER_UAV
+{
+    UINT64 FirstElement;
+    UINT NumElements;
+    UINT StructureByteStride;
+    UINT64 CounterOffsetInBytes;
+    D3D12_BUFFER_UAV_FLAGS Flags;
+} D3D12_BUFFER_UAV;
+
+typedef struct D3D12_TEX1D_UAV
+{
+    UINT MipSlice;
+} D3D12_TEX1D_UAV;
+
+typedef struct D3D12_TEX1D_ARRAY_UAV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX1D_ARRAY_UAV;
+
+typedef struct D3D12_TEX2D_UAV
+{
+    UINT MipSlice;
+    UINT PlaneSlice;
+} D3D12_TEX2D_UAV;
+
+typedef struct D3D12_TEX2D_ARRAY_UAV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    UINT PlaneSlice;
+} D3D12_TEX2D_ARRAY_UAV;
+
+typedef struct D3D12_TEX3D_UAV
+{
+    UINT MipSlice;
+    UINT FirstWSlice;
+    UINT WSize;
+} D3D12_TEX3D_UAV;
+
+typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D12_UAV_DIMENSION ViewDimension;
+    union
+    {
+        D3D12_BUFFER_UAV Buffer;
+        D3D12_TEX1D_UAV Texture1D;
+        D3D12_TEX1D_ARRAY_UAV Texture1DArray;
+        D3D12_TEX2D_UAV Texture2D;
+        D3D12_TEX2D_ARRAY_UAV Texture2DArray;
+        D3D12_TEX3D_UAV Texture3D;
+    };
+} D3D12_UNORDERED_ACCESS_VIEW_DESC;
+
+typedef enum D3D12_RTV_DIMENSION
+{
+    D3D12_RTV_DIMENSION_UNKNOWN = 0,
+    D3D12_RTV_DIMENSION_BUFFER = 1,
+    D3D12_RTV_DIMENSION_TEXTURE1D = 2,
+    D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3,
+    D3D12_RTV_DIMENSION_TEXTURE2D = 4,
+    D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5,
+    D3D12_RTV_DIMENSION_TEXTURE2DMS = 6,
+    D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,
+    D3D12_RTV_DIMENSION_TEXTURE3D = 8,
+} D3D12_RTV_DIMENSION;
+
+typedef struct D3D12_BUFFER_RTV
+{
+    UINT64 FirstElement;
+    UINT NumElements;
+} D3D12_BUFFER_RTV;
+
+typedef struct D3D12_TEX1D_RTV
+{
+    UINT MipSlice;
+} D3D12_TEX1D_RTV;
+
+typedef struct D3D12_TEX1D_ARRAY_RTV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX1D_ARRAY_RTV;
+
+typedef struct D3D12_TEX2D_RTV
+{
+    UINT MipSlice;
+    UINT PlaneSlice;
+} D3D12_TEX2D_RTV;
+
+typedef struct D3D12_TEX2D_ARRAY_RTV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+    UINT PlaneSlice;
+} D3D12_TEX2D_ARRAY_RTV;
+
+typedef struct D3D12_TEX2DMS_RTV
+{
+    UINT UnusedField_NothingToDefine;
+} D3D12_TEX2DMS_RTV;
+
+typedef struct D3D12_TEX2DMS_ARRAY_RTV
+{
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2DMS_ARRAY_RTV;
+
+typedef struct D3D12_TEX3D_RTV
+{
+    UINT MipSlice;
+    UINT FirstWSlice;
+    UINT WSize;
+} D3D12_TEX3D_RTV;
+
+typedef struct D3D12_RENDER_TARGET_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D12_RTV_DIMENSION ViewDimension;
+    union
+    {
+        D3D12_BUFFER_RTV Buffer;
+        D3D12_TEX1D_RTV Texture1D;
+        D3D12_TEX1D_ARRAY_RTV Texture1DArray;
+        D3D12_TEX2D_RTV Texture2D;
+        D3D12_TEX2D_ARRAY_RTV Texture2DArray;
+        D3D12_TEX2DMS_RTV Texture2DMS;
+        D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
+        D3D12_TEX3D_RTV Texture3D;
+    };
+} D3D12_RENDER_TARGET_VIEW_DESC;
+
+typedef enum D3D12_DSV_DIMENSION
+{
+    D3D12_DSV_DIMENSION_UNKNOWN = 0,
+    D3D12_DSV_DIMENSION_TEXTURE1D = 1,
+    D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2,
+    D3D12_DSV_DIMENSION_TEXTURE2D = 3,
+    D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4,
+    D3D12_DSV_DIMENSION_TEXTURE2DMS = 5,
+    D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6,
+} D3D12_DSV_DIMENSION;
+
+typedef enum D3D12_DSV_FLAGS
+{
+    D3D12_DSV_FLAG_NONE = 0x0,
+    D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1,
+    D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2,
+} D3D12_DSV_FLAGS;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_DSV_FLAGS);")
+
+typedef struct D3D12_TEX1D_DSV
+{
+    UINT MipSlice;
+} D3D12_TEX1D_DSV;
+
+typedef struct D3D12_TEX1D_ARRAY_DSV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX1D_ARRAY_DSV;
+
+typedef struct D3D12_TEX2D_DSV
+{
+    UINT MipSlice;
+} D3D12_TEX2D_DSV;
+
+typedef struct D3D12_TEX2D_ARRAY_DSV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2D_ARRAY_DSV;
+
+typedef struct D3D12_TEX2DMS_DSV
+{
+    UINT UnusedField_NothingToDefine;
+} D3D12_TEX2DMS_DSV;
+
+typedef struct D3D12_TEX2DMS_ARRAY_DSV
+{
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D12_TEX2DMS_ARRAY_DSV;
+
+typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D12_DSV_DIMENSION ViewDimension;
+    D3D12_DSV_FLAGS Flags;
+    union
+    {
+        D3D12_TEX1D_DSV Texture1D;
+        D3D12_TEX1D_ARRAY_DSV Texture1DArray;
+        D3D12_TEX2D_DSV Texture2D;
+        D3D12_TEX2D_ARRAY_DSV Texture2DArray;
+        D3D12_TEX2DMS_DSV Texture2DMS;
+        D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
+    };
+} D3D12_DEPTH_STENCIL_VIEW_DESC;
+
+typedef struct D3D12_SAMPLER_DESC
+{
+    D3D12_FILTER Filter;
+    D3D12_TEXTURE_ADDRESS_MODE AddressU;
+    D3D12_TEXTURE_ADDRESS_MODE AddressV;
+    D3D12_TEXTURE_ADDRESS_MODE AddressW;
+    FLOAT MipLODBias;
+    UINT MaxAnisotropy;
+    D3D12_COMPARISON_FUNC ComparisonFunc;
+    FLOAT BorderColor[4];
+    FLOAT MinLOD;
+    FLOAT MaxLOD;
+} D3D12_SAMPLER_DESC;
+
+typedef struct D3D12_CPU_DESCRIPTOR_HANDLE
+{
+    SIZE_T ptr;
+} D3D12_CPU_DESCRIPTOR_HANDLE;
+
+typedef struct D3D12_GPU_DESCRIPTOR_HANDLE
+{
+    UINT64 ptr;
+} D3D12_GPU_DESCRIPTOR_HANDLE;
+
+typedef enum D3D12_STENCIL_OP
+{
+    D3D12_STENCIL_OP_KEEP = 1,
+    D3D12_STENCIL_OP_ZERO = 2,
+    D3D12_STENCIL_OP_REPLACE = 3,
+    D3D12_STENCIL_OP_INCR_SAT = 4,
+    D3D12_STENCIL_OP_DECR_SAT = 5,
+    D3D12_STENCIL_OP_INVERT = 6,
+    D3D12_STENCIL_OP_INCR = 7,
+    D3D12_STENCIL_OP_DECR = 8,
+} D3D12_STENCIL_OP;
+
+typedef struct D3D12_DEPTH_STENCILOP_DESC
+{
+    D3D12_STENCIL_OP StencilFailOp;
+    D3D12_STENCIL_OP StencilDepthFailOp;
+    D3D12_STENCIL_OP StencilPassOp;
+    D3D12_COMPARISON_FUNC StencilFunc;
+} D3D12_DEPTH_STENCILOP_DESC;
+
+typedef enum D3D12_DEPTH_WRITE_MASK
+{
+    D3D12_DEPTH_WRITE_MASK_ZERO = 0,
+    D3D12_DEPTH_WRITE_MASK_ALL = 1,
+} D3D12_DEPTH_WRITE_MASK;
+
+typedef struct D3D12_DEPTH_STENCIL_DESC
+{
+    BOOL DepthEnable;
+    D3D12_DEPTH_WRITE_MASK DepthWriteMask;
+    D3D12_COMPARISON_FUNC DepthFunc;
+    BOOL StencilEnable;
+    UINT8 StencilReadMask;
+    UINT8 StencilWriteMask;
+    D3D12_DEPTH_STENCILOP_DESC FrontFace;
+    D3D12_DEPTH_STENCILOP_DESC BackFace;
+} D3D12_DEPTH_STENCIL_DESC;
+
+typedef enum D3D12_BLEND
+{
+    D3D12_BLEND_ZERO = 1,
+    D3D12_BLEND_ONE = 2,
+    D3D12_BLEND_SRC_COLOR = 3,
+    D3D12_BLEND_INV_SRC_COLOR = 4,
+    D3D12_BLEND_SRC_ALPHA = 5,
+    D3D12_BLEND_INV_SRC_ALPHA = 6,
+    D3D12_BLEND_DEST_ALPHA = 7,
+    D3D12_BLEND_INV_DEST_ALPHA = 8,
+    D3D12_BLEND_DEST_COLOR = 9,
+    D3D12_BLEND_INV_DEST_COLOR = 10,
+    D3D12_BLEND_SRC_ALPHA_SAT = 11,
+    D3D12_BLEND_BLEND_FACTOR = 14,
+    D3D12_BLEND_INV_BLEND_FACTOR = 15,
+    D3D12_BLEND_SRC1_COLOR = 16,
+    D3D12_BLEND_INV_SRC1_COLOR = 17,
+    D3D12_BLEND_SRC1_ALPHA = 18,
+    D3D12_BLEND_INV_SRC1_ALPHA = 19,
+} D3D12_BLEND;
+
+typedef enum D3D12_BLEND_OP
+{
+    D3D12_BLEND_OP_ADD = 1,
+    D3D12_BLEND_OP_SUBTRACT = 2,
+    D3D12_BLEND_OP_REV_SUBTRACT = 3,
+    D3D12_BLEND_OP_MIN = 4,
+    D3D12_BLEND_OP_MAX = 5,
+} D3D12_BLEND_OP;
+
+typedef enum D3D12_LOGIC_OP
+{
+    D3D12_LOGIC_OP_CLEAR = 0,
+    D3D12_LOGIC_OP_SET = 1,
+    D3D12_LOGIC_OP_COPY = 2,
+    D3D12_LOGIC_OP_COPY_INVERTED = 3,
+    D3D12_LOGIC_OP_NOOP = 4,
+} D3D12_LOGIC_OP;
+
+typedef enum D3D12_COLOR_WRITE_ENABLE
+{
+    D3D12_COLOR_WRITE_ENABLE_RED = 0x1,
+    D3D12_COLOR_WRITE_ENABLE_GREEN = 0x2,
+    D3D12_COLOR_WRITE_ENABLE_BLUE = 0x4,
+    D3D12_COLOR_WRITE_ENABLE_ALPHA = 0x8,
+    D3D12_COLOR_WRITE_ENABLE_ALL = (D3D12_COLOR_WRITE_ENABLE_RED
+            | D3D12_COLOR_WRITE_ENABLE_GREEN | D3D12_COLOR_WRITE_ENABLE_BLUE
+            | D3D12_COLOR_WRITE_ENABLE_ALPHA),
+} D3D12_COLOR_WRITE_ENABLE;
+
+typedef struct D3D12_RENDER_TARGET_BLEND_DESC
+{
+    BOOL BlendEnable;
+    BOOL LogicOpEnable;
+    D3D12_BLEND SrcBlend;
+    D3D12_BLEND DestBlend;
+    D3D12_BLEND_OP BlendOp;
+    D3D12_BLEND SrcBlendAlpha;
+    D3D12_BLEND DestBlendAlpha;
+    D3D12_BLEND_OP BlendOpAlpha;
+    D3D12_LOGIC_OP LogicOp;
+    UINT8 RenderTargetWriteMask;
+} D3D12_RENDER_TARGET_BLEND_DESC;
+
+typedef struct D3D12_BLEND_DESC
+{
+    BOOL AlphaToCoverageEnable;
+    BOOL IndependentBlendEnable;
+    D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT];
+} D3D12_BLEND_DESC;
+
+typedef enum D3D12_FILL_MODE
+{
+    D3D12_FILL_MODE_WIREFRAME = 2,
+    D3D12_FILL_MODE_SOLID = 3,
+} D3D12_FILL_MODE;
+
+typedef enum D3D12_CULL_MODE
+{
+    D3D12_CULL_MODE_NONE = 1,
+    D3D12_CULL_MODE_FRONT = 2,
+    D3D12_CULL_MODE_BACK = 3,
+} D3D12_CULL_MODE;
+
+typedef enum D3D12_CONSERVATIVE_RASTERIZATION_MODE
+{
+    D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0,
+    D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1,
+} D3D12_CONSERVATIVE_RASTERIZATION_MODE;
+
+typedef struct D3D12_RASTERIZER_DESC
+{
+    D3D12_FILL_MODE FillMode;
+    D3D12_CULL_MODE CullMode;
+    BOOL FrontCounterClockwise;
+    INT DepthBias;
+    FLOAT DepthBiasClamp;
+    FLOAT SlopeScaledDepthBias;
+    BOOL DepthClipEnable;
+    BOOL MultisampleEnable;
+    BOOL AntialiasedLineEnable;
+    UINT ForcedSampleCount;
+    D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
+} D3D12_RASTERIZER_DESC;
+
+typedef struct D3D12_SO_DECLARATION_ENTRY
+{
+    UINT Stream;
+    const char *SemanticName;
+    UINT SemanticIndex;
+    BYTE StartComponent;
+    BYTE ComponentCount;
+    BYTE OutputSlot;
+} D3D12_SO_DECLARATION_ENTRY;
+
+typedef struct D3D12_STREAM_OUTPUT_DESC
+{
+    const D3D12_SO_DECLARATION_ENTRY *pSODeclaration;
+    UINT NumEntries;
+    const UINT *pBufferStrides;
+    UINT NumStrides;
+    UINT RasterizedStream;
+} D3D12_STREAM_OUTPUT_DESC;
+
+typedef enum D3D12_INPUT_CLASSIFICATION
+{
+    D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0,
+    D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1,
+} D3D12_INPUT_CLASSIFICATION;
+
+typedef struct D3D12_INPUT_ELEMENT_DESC
+{
+    const char *SemanticName;
+    UINT SemanticIndex;
+    DXGI_FORMAT Format;
+    UINT InputSlot;
+    UINT AlignedByteOffset;
+    D3D12_INPUT_CLASSIFICATION InputSlotClass;
+    UINT InstanceDataStepRate;
+} D3D12_INPUT_ELEMENT_DESC;
+
+typedef struct D3D12_INPUT_LAYOUT_DESC
+{
+    const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs;
+    UINT NumElements;
+} D3D12_INPUT_LAYOUT_DESC;
+
+typedef enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE
+{
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0,
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1,
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2,
+} D3D12_INDEX_BUFFER_STRIP_CUT_VALUE;
+
+typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
+
+typedef enum D3D12_PRIMITIVE_TOPOLOGY_TYPE
+{
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3,
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4,
+} D3D12_PRIMITIVE_TOPOLOGY_TYPE;
+
+typedef struct D3D12_CACHED_PIPELINE_STATE
+{
+    const void *pCachedBlob;
+    SIZE_T CachedBlobSizeInBytes;
+} D3D12_CACHED_PIPELINE_STATE;
+
+typedef enum D3D12_PIPELINE_STATE_FLAGS
+{
+    D3D12_PIPELINE_STATE_FLAG_NONE = 0x0,
+    D3D12_PIPELINE_STATE_FLAG_DEBUG = 0x1,
+} D3D12_PIPELINE_STATE_FLAGS;
+
+typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC
+{
+    ID3D12RootSignature *pRootSignature;
+    D3D12_SHADER_BYTECODE VS;
+    D3D12_SHADER_BYTECODE PS;
+    D3D12_SHADER_BYTECODE DS;
+    D3D12_SHADER_BYTECODE HS;
+    D3D12_SHADER_BYTECODE GS;
+    D3D12_STREAM_OUTPUT_DESC StreamOutput;
+    D3D12_BLEND_DESC BlendState;
+    UINT SampleMask;
+    D3D12_RASTERIZER_DESC RasterizerState;
+    D3D12_DEPTH_STENCIL_DESC DepthStencilState;
+    D3D12_INPUT_LAYOUT_DESC InputLayout;
+    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue;
+    D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;
+    UINT NumRenderTargets;
+    DXGI_FORMAT RTVFormats[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT];
+    DXGI_FORMAT DSVFormat;
+    DXGI_SAMPLE_DESC SampleDesc;
+    UINT NodeMask;
+    D3D12_CACHED_PIPELINE_STATE CachedPSO;
+    D3D12_PIPELINE_STATE_FLAGS Flags;
+} D3D12_GRAPHICS_PIPELINE_STATE_DESC;
+
+typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC
+{
+    ID3D12RootSignature *pRootSignature;
+    D3D12_SHADER_BYTECODE CS;
+    UINT NodeMask;
+    D3D12_CACHED_PIPELINE_STATE CachedPSO;
+    D3D12_PIPELINE_STATE_FLAGS Flags;
+} D3D12_COMPUTE_PIPELINE_STATE_DESC;
+
+typedef enum D3D12_COMMAND_LIST_TYPE
+{
+    D3D12_COMMAND_LIST_TYPE_DIRECT = 0,
+    D3D12_COMMAND_LIST_TYPE_BUNDLE = 1,
+    D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
+    D3D12_COMMAND_LIST_TYPE_COPY = 3,
+} D3D12_COMMAND_LIST_TYPE;
+
+typedef enum D3D12_COMMAND_QUEUE_PRIORITY
+{
+    D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0,
+    D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100,
+} D3D12_COMMAND_QUEUE_PRIORITY;
+
+typedef enum D3D12_COMMAND_QUEUE_FLAGS
+{
+    D3D12_COMMAND_QUEUE_FLAG_NONE = 0x0,
+    D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1,
+} D3D12_COMMAND_QUEUE_FLAGS;
+
+typedef struct D3D12_COMMAND_QUEUE_DESC
+{
+    D3D12_COMMAND_LIST_TYPE Type;
+    INT Priority;
+    D3D12_COMMAND_QUEUE_FLAGS Flags;
+    UINT NodeMask;
+} D3D12_COMMAND_QUEUE_DESC;
+
+typedef struct D3D12_FEATURE_DATA_ARCHITECTURE
+{
+    UINT NodeIndex;
+    BOOL TileBasedRenderer;
+    BOOL UMA;
+    BOOL CacheCoherentUMA;
+} D3D12_FEATURE_DATA_ARCHITECTURE;
+
+typedef struct D3D12_FEATURE_DATA_FORMAT_INFO
+{
+    DXGI_FORMAT Format;
+    UINT8 PlaneCount;
+} D3D12_FEATURE_DATA_FORMAT_INFO;
+
+typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS
+{
+    UINT NumFeatureLevels;
+    const D3D_FEATURE_LEVEL *pFeatureLevelsRequested;
+    D3D_FEATURE_LEVEL MaxSupportedFeatureLevel;
+} D3D12_FEATURE_DATA_FEATURE_LEVELS;
+
+typedef enum D3D12_FEATURE
+{
+    D3D12_FEATURE_D3D12_OPTIONS = 0,
+    D3D12_FEATURE_ARCHITECTURE = 1,
+    D3D12_FEATURE_FEATURE_LEVELS = 2,
+    D3D12_FEATURE_FORMAT_SUPPORT = 3,
+    D3D12_FEATURE_FORMAT_INFO = 4,
+    D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 5,
+} D3D12_FEATURE;
+
+typedef struct D3D12_MEMCPY_DEST
+{
+    void *pData;
+    SIZE_T RowPitch;
+    SIZE_T SlicePitch;
+} D3D12_MEMCPY_DEST;
+
+typedef struct D3D12_SUBRESOURCE_DATA
+{
+    const void *pData;
+    LONG_PTR RowPitch;
+    LONG_PTR SlicePitch;
+} D3D12_SUBRESOURCE_DATA;
+
+[
+    uuid(c4fec28f-7966-4e95-9f94-f431cb56c3b8),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12Object : IUnknown
+{
+    HRESULT GetPrivateData(REFGUID guid, UINT *data_size, void *data);
+    HRESULT SetPrivateData(REFGUID guid, UINT data_size, const void *data);
+    HRESULT SetPrivateDataInterface(REFGUID guid, const IUnknown *data);
+    HRESULT SetName(const WCHAR *name);
+}
+
+[
+    uuid(905db94b-a00c-4140-9df5-2b64ca9ea357),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12DeviceChild : ID3D12Object
+{
+    HRESULT GetDevice(REFIID riid, void **device);
+}
+
+[
+    uuid(63ee58fb-1268-4835-86da-f008ce62f0d6),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12Pageable : ID3D12DeviceChild
+{
+}
+
+[
+    uuid(696442be-a72e-4059-bc79-5b5c98040fad),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12Resource : ID3D12Pageable
+{
+    HRESULT Map(UINT sub_resource, const D3D12_RANGE *read_range, void **data);
+    void Unmap(UINT sub_resource, const D3D12_RANGE *written_range);
+
+    D3D12_RESOURCE_DESC GetDesc();
+
+    D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress();
+
+    HRESULT WriteToSubresource(UINT dst_sub_resource, const D3D12_BOX *dst_box,
+            const void *src_data, UINT src_row_pitch, UINT src_slice_pitch);
+    HRESULT ReadFromSubresource(void *dst_data, UINT dst_row_pitch, UINT dst_slice_pitch,
+            UINT src_sub_resource, const D3D12_BOX *src_box);
+
+    HRESULT GetHeapProperties(D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS *flags);
+}
+
+[
+    uuid(7116d91c-e7e4-47ce-b8c6-ec8168f437e5),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12CommandList : ID3D12DeviceChild
+{
+    D3D12_COMMAND_LIST_TYPE GetType();
+}
+
+typedef enum D3D12_TILE_COPY_FLAGS
+{
+    D3D12_TILE_COPY_FLAG_NONE = 0x0,
+    D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1,
+    D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,
+    D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4,
+} D3D12_TILE_COPY_FLAGS;
+
+typedef struct D3D12_INDEX_BUFFER_VIEW
+{
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT SizeInBytes;
+    DXGI_FORMAT Format;
+} D3D12_INDEX_BUFFER_VIEW;
+
+typedef struct D3D12_VERTEX_BUFFER_VIEW
+{
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT SizeInBytes;
+    UINT StrideInBytes;
+} D3D12_VERTEX_BUFFER_VIEW;
+
+typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW
+{
+    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
+    UINT64 SizeInBytes;
+    D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
+} D3D12_STREAM_OUTPUT_BUFFER_VIEW;
+
+typedef enum D3D12_CLEAR_FLAGS
+{
+    D3D12_CLEAR_FLAG_DEPTH = 0x1,
+    D3D12_CLEAR_FLAG_STENCIL = 0x2,
+} D3D12_CLEAR_FLAGS;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_CLEAR_FLAGS);")
+
+typedef struct D3D12_DISCARD_REGION
+{
+    UINT NumRects;
+    const D3D12_RECT *pRects;
+    UINT FirstSubresource;
+    UINT NumSubresources;
+} D3D12_DISCARD_REGION;
+
+typedef enum D3D12_QUERY_TYPE
+{
+    D3D12_QUERY_TYPE_OCCLUSION = 0,
+    D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1,
+    D3D12_QUERY_TYPE_TIMESTAMP = 2,
+    D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6,
+    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7,
+} D3D12_QUERY_TYPE;
+
+typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS
+{
+    UINT64 IAVertices;
+    UINT64 IAPrimitives;
+    UINT64 VSInvocations;
+    UINT64 GSInvocations;
+    UINT64 GSPrimitives;
+    UINT64 CInvocations;
+    UINT64 CPrimitives;
+    UINT64 PSInvocations;
+    UINT64 HSInvocations;
+    UINT64 DSInvocations;
+    UINT64 CSInvocations;
+} D3D12_QUERY_DATA_PIPELINE_STATISTICS;
+
+typedef enum D3D12_PREDICATION_OP
+{
+    D3D12_PREDICATION_OP_EQUAL_ZERO = 0,
+    D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1,
+} D3D12_PREDICATION_OP;
+
+[
+    uuid(8efb471d-616c-4f49-90f7-127bb763fa51),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12DescriptorHeap : ID3D12Pageable
+{
+    D3D12_DESCRIPTOR_HEAP_DESC GetDesc();
+
+    D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();
+    D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();
+}
+
+[
+    uuid(0d9658ae-ed45-469e-a61d-970ec583cab4),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12QueryHeap : ID3D12Pageable
+{
+}
+
+[
+    uuid(c36a797c-ec80-4f0a-8985-a7b2475082d1),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12CommandSignature : ID3D12Pageable
+{
+}
+
+[
+    uuid(5b160d0f-ac1b-4185-8ba8-b3ae42a5a455),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12GraphicsCommandList : ID3D12CommandList
+{
+    HRESULT Close();
+
+    HRESULT Reset(ID3D12CommandAllocator *allocator, ID3D12PipelineState *initial_state);
+
+    HRESULT ClearState(ID3D12PipelineState *pipeline_state);
+
+    void DrawInstanced(UINT vertex_count_per_instance, UINT instance_count,
+            UINT start_vertex_location, UINT start_instance_location);
+    void DrawIndexedInstanced(UINT index_count_per_instance, UINT instance_count,
+            UINT start_vertex_location, INT base_vertex_location, UINT start_instance_location);
+
+    void Dispatch(UINT x, UINT u, UINT z);
+
+    void CopyBufferRegion(ID3D12Resource *dst_buffer, UINT64 dst_offset,
+            ID3D12Resource *src_buffer, UINT64 src_offset, UINT64 byte_count);
+    void CopyTextureRegion(const D3D12_TEXTURE_COPY_LOCATION *dst,
+            UINT dst_x, UINT dst_y, UINT dst_z,
+            const D3D12_TEXTURE_COPY_LOCATION *src, const D3D12_BOX *src_box);
+    void CopyResource(ID3D12Resource *dst_resource, ID3D12Resource *src_resource);
+
+    void CopyTiles(ID3D12Resource *tiled_resource,
+            const D3D12_TILED_RESOURCE_COORDINATE *tile_region_start_coordinate,
+            const D3D12_TILE_REGION_SIZE *tile_region_size,
+            ID3D12Resource *buffer,
+            UINT64 buffer_offset,
+            D3D12_TILE_COPY_FLAGS flags);
+
+    void ResolveSubresource(ID3D12Resource *dst_resource, UINT dst_sub_resource,
+            ID3D12Resource *src_resource, UINT src_sub_resource,
+            DXGI_FORMAT format);
+
+    void IASetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY primitive_topology);
+
+    void RSSetViewports(UINT viewport_count, const D3D12_VIEWPORT *viewports);
+    void RSSetScissorRects(UINT rect_count, const D3D12_RECT *rects);
+
+    void OMSetBlendFactor(const FLOAT blend_factor[4]);
+    void OMSetStencilRef(UINT stencil_ref);
+
+    void SetPipelineState(ID3D12PipelineState *pipeline_state);
+
+    void ResourceBarrier(UINT barrier_count, const D3D12_RESOURCE_BARRIER *barriers);
+
+    void ExecuteBundle(ID3D12GraphicsCommandList *command_list);
+
+    void SetDescriptorHeaps(UINT heap_count, ID3D12DescriptorHeap * const *heaps);
+
+    void SetComputeRootSignature(ID3D12RootSignature *root_signature);
+    void SetGraphicsRootSignature(ID3D12RootSignature *root_signature);
+
+    void SetComputeRootDescriptorTable(UINT root_parameter_index, D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor);
+    void SetGraphicsRootDescriptorTable(UINT root_parameter_index, D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor);
+
+    void SetComputeRoot32BitConstant(UINT root_parameter_index, UINT data, UINT dst_offset);
+    void SetGraphicsRoot32BitConstant(UINT root_parameter_index, UINT data, UINT dst_offset);
+
+    void SetComputeRoot32BitConstants(UINT root_parameter_index, UINT constant_count, const void *data,
+            UINT dst_offset);
+    void SetGraphicsRoot32BitConstants(UINT root_parameter_index, UINT constant_count, const void *data,
+            UINT dst_offset);
+
+    void SetComputeRootConstantBufferView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);
+    void SetGraphicsRootConstantBufferView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void SetComputeRootShaderResourceView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);
+    void SetGraphicsRootShaderResourceView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void SetComputeRootUnorderedAccessView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);
+    void SetGraphicsRootUnorderedAccessView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);
+
+    void IASetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW *view);
+    void IASetVertexBuffers(UINT start_slot, UINT view_count, const D3D12_VERTEX_BUFFER_VIEW *views);
+
+    void SOSetTargets(UINT start_slot, UINT view_count, const D3D12_STREAM_OUTPUT_BUFFER_VIEW *views);
+
+    void OMSetRenderTargets(UINT render_target_descriptor_count,
+            const D3D12_CPU_DESCRIPTOR_HANDLE *render_target_descriptors,
+            BOOL single_descriptor_handle,
+            const D3D12_CPU_DESCRIPTOR_HANDLE *depth_stencil_descriptor);
+
+    void ClearDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE dsv, D3D12_CLEAR_FLAGS flags,
+            FLOAT depth, UINT8 stencil, UINT rect_count, const D3D12_RECT *rects);
+    void ClearRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE rtv, const FLOAT color[4],
+            UINT rect_count, const D3D12_RECT *rects);
+    void ClearUnorderedAccessViewUint(D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,
+            D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle, ID3D12Resource *resource, const UINT values[4],
+            UINT rect_count, const D3D12_RECT *rects);
+    void ClearUnorderedAccessViewFloat(D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,
+            D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle, ID3D12Resource *resource, const float values[4],
+            UINT rect_count, const D3D12_RECT *rects);
+
+    void DiscardResource(ID3D12Resource *resource, const D3D12_DISCARD_REGION *region);
+
+    void BeginQuery(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type, UINT index);
+    void EndQuery(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type, UINT index);
+    void ResolveQueryData(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type,
+            UINT start_index, UINT query_count,
+            ID3D12Resource *dst_buffer, UINT64 aligned_dst_buffer_offset);
+
+    void SetPredication(ID3D12Resource *buffer, UINT64 aligned_buffer_offset,
+            D3D12_PREDICATION_OP operation);
+
+    void SetMarker(UINT metadata, const void *data, UINT size);
+    void BeginEvent(UINT metadata, const void *data, UINT size);
+    void EndEvent();
+
+    void ExecuteIndirect(ID3D12CommandSignature *command_signature,
+            UINT max_command_count, ID3D12Resource *arg_buffer, UINT64 arg_buffer_offset,
+            ID3D12Resource *count_buffer, UINT64 count_buffer_offset);
+}
+
+typedef enum D3D12_TILE_RANGE_FLAGS
+{
+    D3D12_TILE_RANGE_FLAG_NONE = 0x0,
+    D3D12_TILE_RANGE_FLAG_NULL = 0x1,
+    D3D12_TILE_RANGE_FLAG_SKIP = 0x2,
+    D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 0x4
+} D3D12_TILE_RANGE_FLAGS;
+
+typedef enum D3D12_TILE_MAPPING_FLAGS
+{
+    D3D12_TILE_MAPPING_FLAG_NONE = 0x0,
+    D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1,
+} D3D12_TILE_MAPPING_FLAGS;
+
+[
+    uuid(0ec870a6-5d7e-4c22-8cfc-5baae07616ed),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12CommandQueue : ID3D12Pageable
+{
+    void UpdateTileMappings(ID3D12Resource *resource, UINT region_count,
+            const D3D12_TILED_RESOURCE_COORDINATE *region_start_coordinates,
+            const D3D12_TILE_REGION_SIZE *region_sizes,
+            UINT range_count,
+            const D3D12_TILE_RANGE_FLAGS *range_flags,
+            UINT *heap_range_offsets,
+            UINT *range_tile_counts,
+            D3D12_TILE_MAPPING_FLAGS flags);
+
+    void CopyTileMappings(ID3D12Resource *dst_resource,
+            const D3D12_TILED_RESOURCE_COORDINATE *dst_region_start_coordinate,
+            ID3D12Resource *src_resource,
+            const D3D12_TILED_RESOURCE_COORDINATE *src_region_start_coordinate,
+            const D3D12_TILE_REGION_SIZE *region_size,
+            D3D12_TILE_MAPPING_FLAGS flags);
+
+    void ExecuteCommandLists(UINT command_list_count,
+            ID3D12CommandList * const * command_lists);
+
+    void SetMarker(UINT metadata, const void *data, UINT size);
+    void BeginEvent(UINT metadata, const void *data, UINT size);
+    void EndEvent();
+
+    HRESULT Signal(ID3D12Fence *fence, UINT64 value);
+    HRESULT Wait(ID3D12Fence *fence, UINT64 value);
+
+    HRESULT GetTimestampFrequency(UINT64 *frequency);
+    HRESULT GetClockCalibration(UINT64 *gpu_timestamp, UINT64 *cpu_timestamp);
+
+    D3D12_COMMAND_QUEUE_DESC GetDesc();
+}
+
+typedef enum D3D12_FENCE_FLAGS
+{
+    D3D12_FENCE_FLAG_NONE = 0x0,
+    D3D12_FENCE_FLAG_SHARED = 0x1,
+    D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2,
+} D3D12_FENCE_FLAGS;
+
+typedef enum D3D12_QUERY_HEAP_TYPE
+{
+    D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0,
+    D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1,
+    D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2,
+    D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3,
+} D3D12_QUERY_HEAP_TYPE;
+
+typedef struct D3D12_QUERY_HEAP_DESC
+{
+    D3D12_QUERY_HEAP_TYPE Type;
+    UINT Count;
+    UINT NodeMask;
+} D3D12_QUERY_HEAP_DESC;
+
+typedef enum D3D12_INDIRECT_ARGUMENT_TYPE
+{
+    D3D12_INDIRECT_ARGUMENT_TYPE_DRAW,
+    D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED,
+    D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH,
+    D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW,
+    D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW,
+    D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT,
+    D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW,
+    D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW,
+    D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW,
+} D3D12_INDIRECT_ARGUMENT_TYPE;
+
+typedef struct D3D12_INDIRECT_ARGUMENT_DESC
+{
+    D3D12_INDIRECT_ARGUMENT_TYPE Type;
+    union
+    {
+        struct
+        {
+            UINT Slot;
+        } VertexBuffer;
+        struct
+        {
+            UINT RootParameterIndex;
+            UINT DestOffsetIn32BitValues;
+            UINT Num32BitValuesToSet;
+        } Constant;
+        struct
+        {
+            UINT RootParameterIndex;
+        } ConstantBufferView;
+        struct
+        {
+            UINT RootParameterIndex;
+        } ShaderResourceView;
+        struct
+        {
+            UINT RootParameterIndex;
+        } UnorderedAccessView;
+    };
+} D3D12_INDIRECT_ARGUMENT_DESC;
+
+typedef struct D3D12_COMMAND_SIGNATURE_DESC
+{
+    UINT ByteStride;
+    UINT NumArgumentDescs;
+    const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs;
+    UINT NodeMask;
+} D3D12_COMMAND_SIGNATURE_DESC;
+
+[
+    uuid(c54a6b66-72df-4ee8-8be5-a946a1429214),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12RootSignature : ID3D12DeviceChild
+{
+}
+
+[
+    uuid(765a30f3-f624-4c6f-a828-ace948622445),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12PipelineState : ID3D12Pageable
+{
+    HRESULT GetCachedBlob(ID3DBlob **blob);
+}
+
+[
+    uuid(0a753dcf-c4d8-4b91-adf6-be5a60d95a76),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12Fence : ID3D12Pageable
+{
+    UINT64 GetCompletedValue();
+    HRESULT SetEventOnCompletion(UINT64 value, HANDLE event);
+    HRESULT Signal(UINT64 value);
+}
+
+[
+    uuid(6102dee4-af59-4b09-b999-b44d73f09b24),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12CommandAllocator : ID3D12Pageable
+{
+    HRESULT Reset();
+}
+
+[
+    uuid(189819f1-1db6-4b57-be54-1821339b85f7),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12Device : ID3D12Object
+{
+    UINT GetNodeCount();
+
+    HRESULT CreateCommandQueue(const D3D12_COMMAND_QUEUE_DESC *desc,
+            REFIID riid, void **command_queue);
+    HRESULT CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE type,
+            REFIID riid, void **command_allocator);
+    HRESULT CreateGraphicsPipelineState(const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc,
+            REFIID riid, void **pipeline_state);
+    HRESULT CreateComputePipelineState(const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc,
+            REFIID riid, void **pipeline_state);
+    HRESULT CreateCommandList(UINT node_mask,
+            D3D12_COMMAND_LIST_TYPE type,
+            ID3D12CommandAllocator *command_allocator,
+            ID3D12PipelineState *initial_pipeline_state,
+            REFIID riid, void **command_list);
+
+    HRESULT CheckFeatureSupport(D3D12_FEATURE feature,
+            void *feature_data, UINT feature_data_size);
+
+    HRESULT CreateDescriptorHeap(const D3D12_DESCRIPTOR_HEAP_DESC *desc,
+            REFIID riid, void **descriptor_heap);
+    UINT GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);
+
+    HRESULT CreateRootSignature(UINT node_mask,
+            const void *bytecode, SIZE_T bytecode_length,
+            REFIID riid, void **root_signature);
+
+    void CreateConstantBufferView(const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc,
+            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+    void CreateShaderResourceView(ID3D12Resource *resource,
+            const D3D12_SHADER_RESOURCE_VIEW_DESC *desc,
+            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+    void CreateUnorderedAccessView(ID3D12Resource *resource, ID3D12Resource *counter_resource,
+            const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc,
+            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+    void CreateRenderTargetView(ID3D12Resource *resource,
+            const D3D12_RENDER_TARGET_VIEW_DESC *desc,
+            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+    void CreateDepthStencilView(ID3D12Resource *resource,
+            const D3D12_DEPTH_STENCIL_VIEW_DESC *desc,
+            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+    void CreateSampler(const D3D12_SAMPLER_DESC *desc,
+            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);
+
+    void CopyDescriptors(UINT dst_descriptor_range_count,
+            const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets,
+            const UINT *dst_descriptor_range_sizes,
+            UINT src_descriptor_range_count,
+            const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets,
+            const UINT *src_descriptor_range_sizes,
+            D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);
+    void CopyDescriptorsSimple(UINT descriptor_count,
+            const D3D12_CPU_DESCRIPTOR_HANDLE dst_descriptor_range_offset,
+            const D3D12_CPU_DESCRIPTOR_HANDLE src_descriptor_range_offset,
+            D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);
+
+    D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(UINT visible_mask,
+            UINT reource_desc_count, const D3D12_RESOURCE_DESC *resource_descs);
+
+    D3D12_HEAP_PROPERTIES GetCustomHeapProperties(UINT node_mask,
+            D3D12_HEAP_TYPE heap_type);
+
+    HRESULT CreateCommittedResource(const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,
+            const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
+            const D3D12_CLEAR_VALUE *optimized_clear_value,
+            REFIID riid, void **resource);
+
+    HRESULT CreateHeap(const D3D12_HEAP_DESC *desc, REFIID riid, void **heap);
+
+    HRESULT CreatePlacedResource(ID3D12Heap *heap, UINT64 heap_offset,
+            const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
+            const D3D12_CLEAR_VALUE *optimized_clear_value,
+            REFIID riid, void **resource);
+    HRESULT CreateReservedResource(const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,
+            const D3D12_CLEAR_VALUE *optimized_clear_value,
+            REFIID riid, void **resource);
+
+    HRESULT CreateSharedHandle(ID3D12DeviceChild *object,
+            const SECURITY_ATTRIBUTES *attributes, DWORD access,
+            const WCHAR *name, HANDLE *handle);
+    HRESULT OpenSharedHandle(HANDLE handle,
+            REFIID riid, void **object);
+    HRESULT OpenSharedHandleByName(const WCHAR *name, DWORD access, HANDLE *handle);
+
+    HRESULT MakeResident(UINT object_count, ID3D12Pageable * const *objects);
+    HRESULT Evict(UINT object_count, ID3D12Pageable * const *objects);
+
+    HRESULT CreateFence(UINT64 initial_value, D3D12_FENCE_FLAGS flags, REFIID riid, void **fence);
+
+    HRESULT GetDeviceRemovedReason();
+
+    void GetCopyableFootprints(const D3D12_RESOURCE_DESC *desc,
+            UINT first_sub_resource,
+            UINT sub_resource_count,
+            UINT64 base_offset,
+            D3D12_PLACED_SUBRESOURCE_FOOTPRINT *layouts,
+            UINT *row_count,
+            UINT64 *row_size,
+            UINT64 *total_bytes);
+
+    HRESULT CreateQueryHeap(const D3D12_QUERY_HEAP_DESC *desc,
+            REFIID riid, void **heap);
+
+    HRESULT SetStablePowerState(BOOL enable);
+
+    HRESULT CreateCommandSignature(const D3D12_COMMAND_SIGNATURE_DESC *desc,
+            ID3D12RootSignature *root_signature,
+            REFIID riid, void **command_signature);
+
+    void GetResourceTiling(ID3D12Resource *resource,
+            UINT *total_tile_count,
+            D3D12_PACKED_MIP_INFO *packed_mip_info,
+            D3D12_TILE_SHAPE *standard_tile_shape,
+            UINT *sub_resource_tiling_count,
+            UINT first_sub_resource_tiling,
+            D3D12_SUBRESOURCE_TILING *sub_resource_tilings);
+
+    LUID GetAdapterLuid();
+}
+
+[
+    uuid(344488b7-6846-474b-b989-f027448245e0),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12Debug : IUnknown
+{
+    void EnableDebugLayer();
+}
+
+[
+    uuid(34ab647b-3cc8-46ac-841b-c0965645c046),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D12RootSignatureDeserializer : IUnknown
+{
+    const D3D12_ROOT_SIGNATURE_DESC *GetRootSignatureDesc();
+}
+
+[local] HRESULT __stdcall D3D12CreateRootSignatureDeserializer(
+        const void *data, SIZE_T data_size, REFIID iid, void **deserializer);
+
+[local] HRESULT __stdcall D3D12SerializeRootSignature(
+        const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc,
+        D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob);
+
+[local] HRESULT __stdcall D3D12SerializeVersionedRootSignature(
+        const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *root_signature_desc,
+        ID3DBlob **blob, ID3DBlob **error_blob);
+
+typedef HRESULT (__stdcall *PFN_D3D12_CREATE_DEVICE)(IUnknown *adapter,
+        D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device);
+
+[local] HRESULT __stdcall D3D12CreateDevice(IUnknown *adapter,
+        D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device);
+
+typedef HRESULT (__stdcall *PFN_D3D12_GET_DEBUG_INTERFACE)(REFIID iid, void **debug);
+
+[local] HRESULT __stdcall D3D12GetDebugInterface(REFIID iid, void **debug);
+
+[local] HRESULT __stdcall D3D12EnableExperimentalFeatures(UINT feature_count,
+        const IID *iids, void *configurations, UINT *configurations_sizes);
diff --git a/mingw-w64-headers/include/d3d12shader.h b/mingw-w64-headers/include/d3d12shader.h
index 65f091b..7da79e6 100644
--- a/mingw-w64-headers/include/d3d12shader.h
+++ b/mingw-w64-headers/include/d3d12shader.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3d12shader.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3d12shader.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/d3dcommon.h b/mingw-w64-headers/include/d3dcommon.h
index c7284f0..4f0d07d 100644
--- a/mingw-w64-headers/include/d3dcommon.h
+++ b/mingw-w64-headers/include/d3dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/d3dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/d3dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dcommon.h b/mingw-w64-headers/include/dcommon.h
index d876955..d4615ce 100644
--- a/mingw-w64-headers/include/dcommon.h
+++ b/mingw-w64-headers/include/dcommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dcommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dcommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/ddstream.h b/mingw-w64-headers/include/ddstream.h
index a40a734..582e222 100644
--- a/mingw-w64-headers/include/ddstream.h
+++ b/mingw-w64-headers/include/ddstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/ddstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/ddstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/devicetopology.h b/mingw-w64-headers/include/devicetopology.h
index cdee0bb..a2ca0b2 100644
--- a/mingw-w64-headers/include/devicetopology.h
+++ b/mingw-w64-headers/include/devicetopology.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/devicetopology.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/devicetopology.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/downloadmgr.h b/mingw-w64-headers/include/downloadmgr.h
index 13de992..055994e 100644
--- a/mingw-w64-headers/include/downloadmgr.h
+++ b/mingw-w64-headers/include/downloadmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/downloadmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/downloadmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/drmexternals.h b/mingw-w64-headers/include/drmexternals.h
index ba8bdb8..0848e65 100644
--- a/mingw-w64-headers/include/drmexternals.h
+++ b/mingw-w64-headers/include/drmexternals.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/drmexternals.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/drmexternals.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dvdif.h b/mingw-w64-headers/include/dvdif.h
index 87d2d28..541071b 100644
--- a/mingw-w64-headers/include/dvdif.h
+++ b/mingw-w64-headers/include/dvdif.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dvdif.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dvdif.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite.h b/mingw-w64-headers/include/dwrite.h
index 3ab1503..8680381 100644
--- a/mingw-w64-headers/include/dwrite.h
+++ b/mingw-w64-headers/include/dwrite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dwrite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dwrite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -393,9 +393,7 @@
     DWRITE_FONT_SIMULATIONS_BOLD = 1,
     DWRITE_FONT_SIMULATIONS_OBLIQUE = 2
 } DWRITE_FONT_SIMULATIONS;
-#ifdef DEFINE_ENUM_FLAG_OPERATORS
 DEFINE_ENUM_FLAG_OPERATORS(DWRITE_FONT_SIMULATIONS);
-#endif
 typedef enum DWRITE_PIXEL_GEOMETRY {
     DWRITE_PIXEL_GEOMETRY_FLAT = 0,
     DWRITE_PIXEL_GEOMETRY_RGB = 1,
@@ -552,6 +550,7 @@
     DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
     DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1
 } DWRITE_SCRIPT_SHAPES;
+DEFINE_ENUM_FLAG_OPERATORS(DWRITE_SCRIPT_SHAPES);
 typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD {
     DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE = 0,
     DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL = 1,
diff --git a/mingw-w64-headers/include/dwrite.idl b/mingw-w64-headers/include/dwrite.idl
index 180dc97..64cb5ee 100644
--- a/mingw-w64-headers/include/dwrite.idl
+++ b/mingw-w64-headers/include/dwrite.idl
@@ -147,10 +147,7 @@
     DWRITE_FONT_SIMULATIONS_BOLD,
     DWRITE_FONT_SIMULATIONS_OBLIQUE
 } DWRITE_FONT_SIMULATIONS;
-
-cpp_quote("#ifdef DEFINE_ENUM_FLAG_OPERATORS")
 cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DWRITE_FONT_SIMULATIONS);")
-cpp_quote("#endif")
 
 typedef enum DWRITE_PIXEL_GEOMETRY
 {
@@ -332,6 +329,7 @@
     DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
     DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1
 } DWRITE_SCRIPT_SHAPES;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DWRITE_SCRIPT_SHAPES);")
 
 typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD
 {
diff --git a/mingw-w64-headers/include/dwrite_1.h b/mingw-w64-headers/include/dwrite_1.h
index c226af2..9d8d5be 100644
--- a/mingw-w64-headers/include/dwrite_1.h
+++ b/mingw-w64-headers/include/dwrite_1.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dwrite_1.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dwrite_1.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_2.h b/mingw-w64-headers/include/dwrite_2.h
index 5157089..072c50d 100644
--- a/mingw-w64-headers/include/dwrite_2.h
+++ b/mingw-w64-headers/include/dwrite_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dwrite_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dwrite_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dwrite_3.h b/mingw-w64-headers/include/dwrite_3.h
index f058ec8..427c39e 100644
--- a/mingw-w64-headers/include/dwrite_3.h
+++ b/mingw-w64-headers/include/dwrite_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dwrite_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dwrite_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi.h b/mingw-w64-headers/include/dxgi.h
index fb47742..50e7fac 100644
--- a/mingw-w64-headers/include/dxgi.h
+++ b/mingw-w64-headers/include/dxgi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_2.h b/mingw-w64-headers/include/dxgi1_2.h
index b2b0d76..7538a94 100644
--- a/mingw-w64-headers/include/dxgi1_2.h
+++ b/mingw-w64-headers/include/dxgi1_2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgi1_2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgi1_2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_3.h b/mingw-w64-headers/include/dxgi1_3.h
index 3e8d7d2..ed52a63 100644
--- a/mingw-w64-headers/include/dxgi1_3.h
+++ b/mingw-w64-headers/include/dxgi1_3.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgi1_3.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgi1_3.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_4.h b/mingw-w64-headers/include/dxgi1_4.h
index d9e24a3..7ef08b6 100644
--- a/mingw-w64-headers/include/dxgi1_4.h
+++ b/mingw-w64-headers/include/dxgi1_4.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgi1_4.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgi1_4.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_5.h b/mingw-w64-headers/include/dxgi1_5.h
index 6026ff6..fe11d57 100644
--- a/mingw-w64-headers/include/dxgi1_5.h
+++ b/mingw-w64-headers/include/dxgi1_5.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgi1_5.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgi1_5.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgi1_6.h b/mingw-w64-headers/include/dxgi1_6.h
index 2778f2a..0ef65a3 100644
--- a/mingw-w64-headers/include/dxgi1_6.h
+++ b/mingw-w64-headers/include/dxgi1_6.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgi1_6.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgi1_6.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgicommon.h b/mingw-w64-headers/include/dxgicommon.h
index 6e28018..e3712be 100644
--- a/mingw-w64-headers/include/dxgicommon.h
+++ b/mingw-w64-headers/include/dxgicommon.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgicommon.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgicommon.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgidebug.h b/mingw-w64-headers/include/dxgidebug.h
index 5b453b2..1d5797f 100644
--- a/mingw-w64-headers/include/dxgidebug.h
+++ b/mingw-w64-headers/include/dxgidebug.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgidebug.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgidebug.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgiformat.h b/mingw-w64-headers/include/dxgiformat.h
index d05bfed..79b9b1c 100644
--- a/mingw-w64-headers/include/dxgiformat.h
+++ b/mingw-w64-headers/include/dxgiformat.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgiformat.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgiformat.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxgitype.h b/mingw-w64-headers/include/dxgitype.h
index a9f11fd..aa57249 100644
--- a/mingw-w64-headers/include/dxgitype.h
+++ b/mingw-w64-headers/include/dxgitype.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxgitype.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxgitype.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/dxva2api.h b/mingw-w64-headers/include/dxva2api.h
index 93fb0ec..8329082 100644
--- a/mingw-w64-headers/include/dxva2api.h
+++ b/mingw-w64-headers/include/dxva2api.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/dxva2api.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/dxva2api.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/endpointvolume.h b/mingw-w64-headers/include/endpointvolume.h
index 4714318..9967304 100644
--- a/mingw-w64-headers/include/endpointvolume.h
+++ b/mingw-w64-headers/include/endpointvolume.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/endpointvolume.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/endpointvolume.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/exdisp.h b/mingw-w64-headers/include/exdisp.h
index 534d1d7..131bff0 100644
--- a/mingw-w64-headers/include/exdisp.h
+++ b/mingw-w64-headers/include/exdisp.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/exdisp.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/exdisp.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/fusion.h b/mingw-w64-headers/include/fusion.h
index 9149016..a40d320 100644
--- a/mingw-w64-headers/include/fusion.h
+++ b/mingw-w64-headers/include/fusion.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/fusion.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/fusion.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/icftypes.h b/mingw-w64-headers/include/icftypes.h
index 6ae5949..6632dcc 100644
--- a/mingw-w64-headers/include/icftypes.h
+++ b/mingw-w64-headers/include/icftypes.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/icftypes.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/icftypes.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mediaobj.h b/mingw-w64-headers/include/mediaobj.h
index 8059a8b..7038a1d 100644
--- a/mingw-w64-headers/include/mediaobj.h
+++ b/mingw-w64-headers/include/mediaobj.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/mediaobj.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/mediaobj.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmdeviceapi.h b/mingw-w64-headers/include/mmdeviceapi.h
index df5addb..4ba6ec0 100644
--- a/mingw-w64-headers/include/mmdeviceapi.h
+++ b/mingw-w64-headers/include/mmdeviceapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/mmdeviceapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/mmdeviceapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mmstream.h b/mingw-w64-headers/include/mmstream.h
index a1f7317..dd73357 100644
--- a/mingw-w64-headers/include/mmstream.h
+++ b/mingw-w64-headers/include/mmstream.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/mmstream.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/mmstream.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/mscoree.h b/mingw-w64-headers/include/mscoree.h
index 111760b..8f9466c 100644
--- a/mingw-w64-headers/include/mscoree.h
+++ b/mingw-w64-headers/include/mscoree.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/mscoree.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/mscoree.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/msctf.h b/mingw-w64-headers/include/msctf.h
index 7fd473f..71f223a 100644
--- a/mingw-w64-headers/include/msctf.h
+++ b/mingw-w64-headers/include/msctf.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/msctf.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/msctf.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netfw.h b/mingw-w64-headers/include/netfw.h
index 681b40b..0155a58 100644
--- a/mingw-w64-headers/include/netfw.h
+++ b/mingw-w64-headers/include/netfw.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/netfw.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/netfw.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/netlistmgr.h b/mingw-w64-headers/include/netlistmgr.h
index c304c49..a01a67b 100644
--- a/mingw-w64-headers/include/netlistmgr.h
+++ b/mingw-w64-headers/include/netlistmgr.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/netlistmgr.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/netlistmgr.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/objectarray.h b/mingw-w64-headers/include/objectarray.h
index 9eef5b6..dc5d962 100644
--- a/mingw-w64-headers/include/objectarray.h
+++ b/mingw-w64-headers/include/objectarray.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/objectarray.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/objectarray.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/optary.h b/mingw-w64-headers/include/optary.h
index 30fdf8c..6565017 100644
--- a/mingw-w64-headers/include/optary.h
+++ b/mingw-w64-headers/include/optary.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/optary.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/optary.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/qedit.h b/mingw-w64-headers/include/qedit.h
index 6a8d3ea..ab45d6d 100644
--- a/mingw-w64-headers/include/qedit.h
+++ b/mingw-w64-headers/include/qedit.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/qedit.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/qedit.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/spatialaudioclient.h b/mingw-w64-headers/include/spatialaudioclient.h
index 16f2ddf..b6eac55 100644
--- a/mingw-w64-headers/include/spatialaudioclient.h
+++ b/mingw-w64-headers/include/spatialaudioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/spatialaudioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/spatialaudioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/taskschd.h b/mingw-w64-headers/include/taskschd.h
index 94de76c..016589f 100644
--- a/mingw-w64-headers/include/taskschd.h
+++ b/mingw-w64-headers/include/taskschd.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/taskschd.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/taskschd.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/thumbcache.h b/mingw-w64-headers/include/thumbcache.h
index 6ba9c58..defac5f 100644
--- a/mingw-w64-headers/include/thumbcache.h
+++ b/mingw-w64-headers/include/thumbcache.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/thumbcache.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/thumbcache.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationclient.h b/mingw-w64-headers/include/uiautomationclient.h
index 018763c..feb6f1b 100644
--- a/mingw-w64-headers/include/uiautomationclient.h
+++ b/mingw-w64-headers/include/uiautomationclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/uiautomationclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/uiautomationclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/uiautomationcore.h b/mingw-w64-headers/include/uiautomationcore.h
index 1fed5a6..3bcef3b 100644
--- a/mingw-w64-headers/include/uiautomationcore.h
+++ b/mingw-w64-headers/include/uiautomationcore.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/uiautomationcore.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/uiautomationcore.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/urlhist.h b/mingw-w64-headers/include/urlhist.h
index e514dde..e60d9aa 100644
--- a/mingw-w64-headers/include/urlhist.h
+++ b/mingw-w64-headers/include/urlhist.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/urlhist.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/urlhist.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/vmr9.h b/mingw-w64-headers/include/vmr9.h
index f5ca4df..5226966 100644
--- a/mingw-w64-headers/include/vmr9.h
+++ b/mingw-w64-headers/include/vmr9.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/vmr9.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/vmr9.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodec.h b/mingw-w64-headers/include/wincodec.h
index 1a4b46f..9ec1383 100644
--- a/mingw-w64-headers/include/wincodec.h
+++ b/mingw-w64-headers/include/wincodec.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/wincodec.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/wincodec.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wincodecsdk.h b/mingw-w64-headers/include/wincodecsdk.h
index 9d89632..a5b1cff 100644
--- a/mingw-w64-headers/include/wincodecsdk.h
+++ b/mingw-w64-headers/include/wincodecsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/wincodecsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/wincodecsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmdrmsdk.h b/mingw-w64-headers/include/wmdrmsdk.h
index 79c5c93..3d15876 100644
--- a/mingw-w64-headers/include/wmdrmsdk.h
+++ b/mingw-w64-headers/include/wmdrmsdk.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/wmdrmsdk.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/wmdrmsdk.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsbuffer.h b/mingw-w64-headers/include/wmsbuffer.h
index be22fb7..bb56717 100644
--- a/mingw-w64-headers/include/wmsbuffer.h
+++ b/mingw-w64-headers/include/wmsbuffer.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/wmsbuffer.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/wmsbuffer.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wmsdkidl.h b/mingw-w64-headers/include/wmsdkidl.h
index b90c874..34b6919 100644
--- a/mingw-w64-headers/include/wmsdkidl.h
+++ b/mingw-w64-headers/include/wmsdkidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/wmsdkidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/wmsdkidl.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/wpcapi.h b/mingw-w64-headers/include/wpcapi.h
index 34e5e15..5edaa46 100644
--- a/mingw-w64-headers/include/wpcapi.h
+++ b/mingw-w64-headers/include/wpcapi.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/wpcapi.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/wpcapi.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xapo.h b/mingw-w64-headers/include/xapo.h
index 5ab493d..b390d65 100644
--- a/mingw-w64-headers/include/xapo.h
+++ b/mingw-w64-headers/include/xapo.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/xapo.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/xapo.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2.h b/mingw-w64-headers/include/xaudio2.h
index 1caa673..a32ffe6 100644
--- a/mingw-w64-headers/include/xaudio2.h
+++ b/mingw-w64-headers/include/xaudio2.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/xaudio2.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/xaudio2.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xaudio2fx.h b/mingw-w64-headers/include/xaudio2fx.h
index 2b1ba40..853ca76 100644
--- a/mingw-w64-headers/include/xaudio2fx.h
+++ b/mingw-w64-headers/include/xaudio2fx.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/xaudio2fx.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/xaudio2fx.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/include/xmllite.h b/mingw-w64-headers/include/xmllite.h
index d45b215..740567c 100644
--- a/mingw-w64-headers/include/xmllite.h
+++ b/mingw-w64-headers/include/xmllite.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 5.13 from include/xmllite.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.16 from include/xmllite.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index 3b8ff60..49a21b8 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -140,6 +140,7 @@
 	d3d11_3 \
 	d3d11_4 \
 	d3d11sdklayers \
+	d3d12 \
 	d3d12shader \
 	d3dcommon \
 	dcommon \
