text: /*-------------------------------------------------------------------------------------
   *
   * Copyright (c) Microsoft Corporation
   *
   *-------------------------------------------------------------------------------------*/
  
  
  /* this ALWAYS GENERATED file contains the definitions for the interfaces */
  
  
   /* File created by MIDL compiler version 8.01.0618 */
  
  
  
  /* verify that the <rpcndr.h> version is high enough to compile this file*/
  #ifndef __REQUIRED_RPCNDR_H_VERSION__
  #define __REQUIRED_RPCNDR_H_VERSION__ 500
  #endif
  
  /* verify that the <rpcsal.h> version is high enough to compile this file*/
  #ifndef __REQUIRED_RPCSAL_H_VERSION__
  #define __REQUIRED_RPCSAL_H_VERSION__ 100
  #endif
  
  #include "rpc.h"
  #include "rpcndr.h"
  
  #ifndef __RPCNDR_H_VERSION__
  #error this stub requires an updated version of <rpcndr.h>
  #endif /* __RPCNDR_H_VERSION__ */
  
  #ifndef COM_NO_WINDOWS_H
  #include "windows.h"
  #include "ole2.h"
  #endif /*COM_NO_WINDOWS_H*/
  
  #ifndef __d3d12_h__
  #define __d3d12_h__
  
  #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  #pragma once
  #endif
  
  /* Forward Declarations */ 
  
  #ifndef __ID3D12Object_FWD_DEFINED__
  #define __ID3D12Object_FWD_DEFINED__
  typedef interface ID3D12Object ID3D12Object;
  
  #endif 	/* __ID3D12Object_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12DeviceChild_FWD_DEFINED__
  #define __ID3D12DeviceChild_FWD_DEFINED__
  typedef interface ID3D12DeviceChild ID3D12DeviceChild;
  
  #endif 	/* __ID3D12DeviceChild_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12RootSignature_FWD_DEFINED__
  #define __ID3D12RootSignature_FWD_DEFINED__
  typedef interface ID3D12RootSignature ID3D12RootSignature;
  
  #endif 	/* __ID3D12RootSignature_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12RootSignatureDeserializer_FWD_DEFINED__
  #define __ID3D12RootSignatureDeserializer_FWD_DEFINED__
  typedef interface ID3D12RootSignatureDeserializer ID3D12RootSignatureDeserializer;
  
  #endif 	/* __ID3D12RootSignatureDeserializer_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__
  #define __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__
  typedef interface ID3D12VersionedRootSignatureDeserializer ID3D12VersionedRootSignatureDeserializer;
  
  #endif 	/* __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12Pageable_FWD_DEFINED__
  #define __ID3D12Pageable_FWD_DEFINED__
  typedef interface ID3D12Pageable ID3D12Pageable;
  
  #endif 	/* __ID3D12Pageable_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12Heap_FWD_DEFINED__
  #define __ID3D12Heap_FWD_DEFINED__
  typedef interface ID3D12Heap ID3D12Heap;
  
  #endif 	/* __ID3D12Heap_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12Resource_FWD_DEFINED__
  #define __ID3D12Resource_FWD_DEFINED__
  typedef interface ID3D12Resource ID3D12Resource;
  
  #endif 	/* __ID3D12Resource_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12CommandAllocator_FWD_DEFINED__
  #define __ID3D12CommandAllocator_FWD_DEFINED__
  typedef interface ID3D12CommandAllocator ID3D12CommandAllocator;
  
  #endif 	/* __ID3D12CommandAllocator_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12Fence_FWD_DEFINED__
  #define __ID3D12Fence_FWD_DEFINED__
  typedef interface ID3D12Fence ID3D12Fence;
  
  #endif 	/* __ID3D12Fence_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12PipelineState_FWD_DEFINED__
  #define __ID3D12PipelineState_FWD_DEFINED__
  typedef interface ID3D12PipelineState ID3D12PipelineState;
  
  #endif 	/* __ID3D12PipelineState_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12DescriptorHeap_FWD_DEFINED__
  #define __ID3D12DescriptorHeap_FWD_DEFINED__
  typedef interface ID3D12DescriptorHeap ID3D12DescriptorHeap;
  
  #endif 	/* __ID3D12DescriptorHeap_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12QueryHeap_FWD_DEFINED__
  #define __ID3D12QueryHeap_FWD_DEFINED__
  typedef interface ID3D12QueryHeap ID3D12QueryHeap;
  
  #endif 	/* __ID3D12QueryHeap_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12CommandSignature_FWD_DEFINED__
  #define __ID3D12CommandSignature_FWD_DEFINED__
  typedef interface ID3D12CommandSignature ID3D12CommandSignature;
  
  #endif 	/* __ID3D12CommandSignature_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12CommandList_FWD_DEFINED__
  #define __ID3D12CommandList_FWD_DEFINED__
  typedef interface ID3D12CommandList ID3D12CommandList;
  
  #endif 	/* __ID3D12CommandList_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12GraphicsCommandList_FWD_DEFINED__
  #define __ID3D12GraphicsCommandList_FWD_DEFINED__
  typedef interface ID3D12GraphicsCommandList ID3D12GraphicsCommandList;
  
  #endif 	/* __ID3D12GraphicsCommandList_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12CommandQueue_FWD_DEFINED__
  #define __ID3D12CommandQueue_FWD_DEFINED__
  typedef interface ID3D12CommandQueue ID3D12CommandQueue;
  
  #endif 	/* __ID3D12CommandQueue_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12Device_FWD_DEFINED__
  #define __ID3D12Device_FWD_DEFINED__
  typedef interface ID3D12Device ID3D12Device;
  
  #endif 	/* __ID3D12Device_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12PipelineLibrary_FWD_DEFINED__
  #define __ID3D12PipelineLibrary_FWD_DEFINED__
  typedef interface ID3D12PipelineLibrary ID3D12PipelineLibrary;
  
  #endif 	/* __ID3D12PipelineLibrary_FWD_DEFINED__ */
  
  
  #ifndef __ID3D12Device1_FWD_DEFINED__
  #define __ID3D12Device1_FWD_DEFINED__
  typedef interface ID3D12Device1 ID3D12Device1;
  
  #endif 	/* __ID3D12Device1_FWD_DEFINED__ */
  
  
  /* header files for imported files */
  #include "oaidl.h"
  #include "ocidl.h"
  #include "dxgi.h"
  #include "d3dcommon.h"
  
  #ifdef __cplusplus
  extern "C"{
  #endif 
  
  
  /* interface __MIDL_itf_d3d12_0000_0000 */
  /* [local] */ 
  
  #include "winapifamily.h"
  #pragma region App Family
  #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  #ifndef _D3D12_CONSTANTS
  #define _D3D12_CONSTANTS
  #define	D3D12_16BIT_INDEX_STRIP_CUT_VALUE	( 0xffff )
  
  #define	D3D12_32BIT_INDEX_STRIP_CUT_VALUE	( 0xffffffff )
  
  #define	D3D12_8BIT_INDEX_STRIP_CUT_VALUE	( 0xff )
  
  #define	D3D12_APPEND_ALIGNED_ELEMENT	( 0xffffffff )
  
  #define	D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT	( 9 )
  
  #define	D3D12_CLIP_OR_CULL_DISTANCE_COUNT	( 8 )
  
  #define	D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT	( 2 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT	( 14 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS	( 4 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT	( 15 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT	( 16 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT	( 15 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST	( 1 )
  
  #define	D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT	( 64 )
  
  #define	D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT	( 1 )
  
  #define	D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST	( 1 )
  
  #define	D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT	( 128 )
  
  #define	D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST	( 1 )
  
  #define	D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT	( 128 )
  
  #define	D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT	( 16 )
  
  #define	D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST	( 1 )
  
  #define	D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT	( 16 )
  
  #define	D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT	( 32 )
  
  #define	D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_COMMONSHADER_TEMP_REGISTER_COUNT	( 4096 )
  
  #define	D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST	( 3 )
  
  #define	D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS	( 3 )
  
  #define	D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX	( 10 )
  
  #define	D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN	( -10 )
  
  #define	D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE	( -8 )
  
  #define	D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE	( 7 )
  
  #define	D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT	( 256 )
  
  #define	D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 256 )
  
  #define	D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP	( 64 )
  
  #define	D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 240 )
  
  #define	D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP	( 68 )
  
  #define	D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 224 )
  
  #define	D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP	( 72 )
  
  #define	D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 208 )
  
  #define	D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP	( 76 )
  
  #define	D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 192 )
  
  #define	D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP	( 84 )
  
  #define	D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 176 )
  
  #define	D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP	( 92 )
  
  #define	D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 160 )
  
  #define	D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP	( 100 )
  
  #define	D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 144 )
  
  #define	D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP	( 112 )
  
  #define	D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 128 )
  
  #define	D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP	( 128 )
  
  #define	D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 112 )
  
  #define	D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP	( 144 )
  
  #define	D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 96 )
  
  #define	D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP	( 168 )
  
  #define	D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 80 )
  
  #define	D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP	( 204 )
  
  #define	D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 64 )
  
  #define	D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP	( 256 )
  
  #define	D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 48 )
  
  #define	D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP	( 340 )
  
  #define	D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 32 )
  
  #define	D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP	( 512 )
  
  #define	D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 16 )
  
  #define	D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP	( 768 )
  
  #define	D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION	( 1 )
  
  #define	D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT	( 256 )
  
  #define	D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP	( 768 )
  
  #define	D3D12_CS_4_X_THREAD_GROUP_MAX_X	( 768 )
  
  #define	D3D12_CS_4_X_THREAD_GROUP_MAX_Y	( 768 )
  
  #define	D3D12_CS_4_X_UAV_REGISTER_COUNT	( 1 )
  
  #define	D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION	( 65535 )
  
  #define	D3D12_CS_TGSM_REGISTER_COUNT	( 8192 )
  
  #define	D3D12_CS_TGSM_REGISTER_READS_PER_INST	( 1 )
  
  #define	D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS	( 3 )
  
  #define	D3D12_CS_THREADGROUPID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT	( 1 )
  
  #define	D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS	( 3 )
  
  #define	D3D12_CS_THREADIDINGROUP_REGISTER_COUNT	( 1 )
  
  #define	D3D12_CS_THREADID_REGISTER_COMPONENTS	( 3 )
  
  #define	D3D12_CS_THREADID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP	( 1024 )
  
  #define	D3D12_CS_THREAD_GROUP_MAX_X	( 1024 )
  
  #define	D3D12_CS_THREAD_GROUP_MAX_Y	( 1024 )
  
  #define	D3D12_CS_THREAD_GROUP_MAX_Z	( 64 )
  
  #define	D3D12_CS_THREAD_GROUP_MIN_X	( 1 )
  
  #define	D3D12_CS_THREAD_GROUP_MIN_Y	( 1 )
  
  #define	D3D12_CS_THREAD_GROUP_MIN_Z	( 1 )
  
  #define	D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL	( 16384 )
  
  #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_BORDER_COLOR_COMPONENT	( 0.0f )
  #define	D3D12_DEFAULT_DEPTH_BIAS	( 0 )
  
  #define D3D12_DEFAULT_DEPTH_BIAS_CLAMP	( 0.0f )
  #define	D3D12_DEFAULT_MAX_ANISOTROPY	( 16 )
  
  #define D3D12_DEFAULT_MIP_LOD_BIAS	( 0.0f )
  #define	D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT	( 4194304 )
  
  #define	D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX	( 0 )
  
  #define	D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT	( 65536 )
  
  #define	D3D12_DEFAULT_SAMPLE_MASK	( 0xffffffff )
  
  #define	D3D12_DEFAULT_SCISSOR_ENDX	( 0 )
  
  #define	D3D12_DEFAULT_SCISSOR_ENDY	( 0 )
  
  #define	D3D12_DEFAULT_SCISSOR_STARTX	( 0 )
  
  #define	D3D12_DEFAULT_SCISSOR_STARTY	( 0 )
  
  #define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS	( 0.0f )
  #define	D3D12_DEFAULT_STENCIL_READ_MASK	( 0xff )
  
  #define	D3D12_DEFAULT_STENCIL_REFERENCE	( 0 )
  
  #define	D3D12_DEFAULT_STENCIL_WRITE_MASK	( 0xff )
  
  #define	D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX	( 0 )
  
  #define	D3D12_DEFAULT_VIEWPORT_HEIGHT	( 0 )
  
  #define D3D12_DEFAULT_VIEWPORT_MAX_DEPTH	( 0.0f )
  #define D3D12_DEFAULT_VIEWPORT_MIN_DEPTH	( 0.0f )
  #define	D3D12_DEFAULT_VIEWPORT_TOPLEFTX	( 0 )
  
  #define	D3D12_DEFAULT_VIEWPORT_TOPLEFTY	( 0 )
  
  #define	D3D12_DEFAULT_VIEWPORT_WIDTH	( 0 )
  
  #define	D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND	( 0xffffffff )
  
  #define	D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END	( 0xfffffff7 )
  
  #define	D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START	( 0xfffffff0 )
  
  #define	D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS	( 3968 )
  
  #define	D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS	( 3 )
  
  #define	D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT	( 1 )
  
  #define	D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_DS_OUTPUT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_DS_OUTPUT_REGISTER_COUNT	( 32 )
  
  #define D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP	( 0.6 )
  #define D3D12_FLOAT32_MAX	( 3.402823466e+38f )
  #define D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP	( 0.6f )
  #define D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR	( 2.4f )
  #define D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR	( 1.0f )
  #define D3D12_FLOAT_TO_SRGB_OFFSET	( 0.055f )
  #define D3D12_FLOAT_TO_SRGB_SCALE_1	( 12.92f )
  #define D3D12_FLOAT_TO_SRGB_SCALE_2	( 1.055f )
  #define D3D12_FLOAT_TO_SRGB_THRESHOLD	( 0.0031308f )
  #define D3D12_FTOI_INSTRUCTION_MAX_INPUT	( 2147483647.999f )
  #define D3D12_FTOI_INSTRUCTION_MIN_INPUT	( -2147483648.999f )
  #define D3D12_FTOU_INSTRUCTION_MAX_INPUT	( 4294967295.999f )
  #define D3D12_FTOU_INSTRUCTION_MIN_INPUT	( 0.0f )
  #define	D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST	( 2 )
  
  #define	D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS	( 1 )
  
  #define	D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT	( 1 )
  
  #define	D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_GS_INPUT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_GS_INPUT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_GS_INPUT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_GS_INPUT_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_GS_INPUT_REGISTER_VERTICES	( 32 )
  
  #define	D3D12_GS_MAX_INSTANCE_COUNT	( 32 )
  
  #define	D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES	( 1024 )
  
  #define	D3D12_GS_OUTPUT_ELEMENTS	( 32 )
  
  #define	D3D12_GS_OUTPUT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_GS_OUTPUT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND	( 0xffffffff )
  
  #define	D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND	( 0xffffffff )
  
  #define D3D12_HS_MAXTESSFACTOR_LOWER_BOUND	( 1.0f )
  #define D3D12_HS_MAXTESSFACTOR_UPPER_BOUND	( 64.0f )
  #define	D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS	( 3968 )
  
  #define	D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT	( 1 )
  
  #define	D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS	( 128 )
  
  #define	D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES	( 0 )
  
  #define	D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY	( 0 )
  
  #define	D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES	( 0 )
  
  #define	D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT	( 1 )
  
  #define	D3D12_IA_INSTANCE_ID_BIT_COUNT	( 32 )
  
  #define	D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT	( 32 )
  
  #define	D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT	( 32 )
  
  #define	D3D12_IA_PRIMITIVE_ID_BIT_COUNT	( 32 )
  
  #define	D3D12_IA_VERTEX_ID_BIT_COUNT	( 32 )
  
  #define	D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT	( 32 )
  
  #define	D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS	( 128 )
  
  #define	D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT	( 32 )
  
  #define	D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT	( 0xffffffff )
  
  #define	D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER	( 0xffffffff )
  
  #define	D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL	( 0xffffffff )
  
  #define	D3D12_KEEP_UNORDERED_ACCESS_VIEWS	( 0xffffffff )
  
  #define D3D12_LINEAR_GAMMA	( 1.0f )
  #define	D3D12_MAJOR_VERSION	( 12 )
  
  #define D3D12_MAX_BORDER_COLOR_COMPONENT	( 1.0f )
  #define D3D12_MAX_DEPTH	( 1.0f )
  #define	D3D12_MAX_LIVE_STATIC_SAMPLERS	( 2032 )
  
  #define	D3D12_MAX_MAXANISOTROPY	( 16 )
  
  #define	D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT	( 32 )
  
  #define D3D12_MAX_POSITION_VALUE	( 3.402823466e+34f )
  #define	D3D12_MAX_ROOT_COST	( 64 )
  
  #define	D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1	( 1000000 )
  
  #define	D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2	( 1000000 )
  
  #define	D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE	( 2048 )
  
  #define	D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP	( 17 )
  
  #define	D3D12_MINOR_VERSION	( 0 )
  
  #define D3D12_MIN_BORDER_COLOR_COMPONENT	( 0.0f )
  #define D3D12_MIN_DEPTH	( 0.0f )
  #define	D3D12_MIN_MAXANISOTROPY	( 0 )
  
  #define D3D12_MIP_LOD_BIAS_MAX	( 15.99f )
  #define D3D12_MIP_LOD_BIAS_MIN	( -16.0f )
  #define	D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT	( 8 )
  
  #define	D3D12_MIP_LOD_RANGE_BIT_COUNT	( 8 )
  
  #define D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH	( 1.4f )
  #define	D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT	( 0 )
  
  #define	D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END	( 0xffffffff )
  
  #define	D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START	( 0xfffffff8 )
  
  #define	D3D12_PACKED_TILE	( 0xffffffff )
  
  #define	D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT	( 15 )
  
  #define	D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT	( 16 )
  
  #define	D3D12_PS_CS_UAV_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_PS_CS_UAV_REGISTER_COUNT	( 8 )
  
  #define	D3D12_PS_CS_UAV_REGISTER_READS_PER_INST	( 1 )
  
  #define	D3D12_PS_CS_UAV_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_PS_FRONTFACING_DEFAULT_VALUE	( 0xffffffff )
  
  #define	D3D12_PS_FRONTFACING_FALSE_VALUE	( 0 )
  
  #define	D3D12_PS_FRONTFACING_TRUE_VALUE	( 0xffffffff )
  
  #define	D3D12_PS_INPUT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_PS_INPUT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_PS_INPUT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_PS_INPUT_REGISTER_READ_PORTS	( 1 )
  
  #define D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT	( 0.0f )
  #define	D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT	( 1 )
  
  #define	D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS	( 1 )
  
  #define	D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_PS_OUTPUT_MASK_REGISTER_COUNT	( 1 )
  
  #define	D3D12_PS_OUTPUT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_PS_OUTPUT_REGISTER_COUNT	( 8 )
  
  #define D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT	( 0.5f )
  #define	D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT	( 16 )
  
  #define	D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE	( 4096 )
  
  #define	D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP	( 27 )
  
  #define	D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT	( 4096 )
  
  #define	D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE	( 4096 )
  
  #define	D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP	( 32 )
  
  #define	D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP	( 32 )
  
  #define	D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION	( 16384 )
  
  #define	D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT	( 1024 )
  
  #define	D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT	( 4096 )
  
  #define	D3D12_REQ_MAXANISOTROPY	( 16 )
  
  #define	D3D12_REQ_MIP_LEVELS	( 15 )
  
  #define	D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES	( 2048 )
  
  #define	D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE	( 4096 )
  
  #define	D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH	( 16384 )
  
  #define	D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM	( 128 )
  
  #define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM	( 0.25f )
  #define	D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM	( 2048 )
  
  #define	D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP	( 20 )
  
  #define	D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE	( 4096 )
  
  #define	D3D12_REQ_SUBRESOURCES	( 30720 )
  
  #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_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL	( 0 )
  
  #define	D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES	( 0xffffffff )
  
  #define	D3D12_SHADER_MAJOR_VERSION	( 5 )
  
  #define	D3D12_SHADER_MAX_INSTANCES	( 65535 )
  
  #define	D3D12_SHADER_MAX_INTERFACES	( 253 )
  
  #define	D3D12_SHADER_MAX_INTERFACE_CALL_SITES	( 4096 )
  
  #define	D3D12_SHADER_MAX_TYPES	( 65535 )
  
  #define	D3D12_SHADER_MINOR_VERSION	( 1 )
  
  #define	D3D12_SHIFT_INSTRUCTION_PAD_VALUE	( 0 )
  
  #define	D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT	( 5 )
  
  #define	D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT	( 8 )
  
  #define	D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT	( 65536 )
  
  #define	D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT	( 4096 )
  
  #define	D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES	( 2048 )
  
  #define	D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES	( 512 )
  
  #define	D3D12_SO_BUFFER_SLOT_COUNT	( 4 )
  
  #define	D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP	( 0xffffffff )
  
  #define	D3D12_SO_NO_RASTERIZED_STREAM	( 0xffffffff )
  
  #define	D3D12_SO_OUTPUT_COMPONENT_COUNT	( 128 )
  
  #define	D3D12_SO_STREAM_COUNT	( 4 )
  
  #define	D3D12_SPEC_DATE_DAY	( 14 )
  
  #define	D3D12_SPEC_DATE_MONTH	( 11 )
  
  #define	D3D12_SPEC_DATE_YEAR	( 2014 )
  
  #define D3D12_SPEC_VERSION	( 1.16 )
  #define D3D12_SRGB_GAMMA	( 2.2f )
  #define D3D12_SRGB_TO_FLOAT_DENOMINATOR_1	( 12.92f )
  #define D3D12_SRGB_TO_FLOAT_DENOMINATOR_2	( 1.055f )
  #define D3D12_SRGB_TO_FLOAT_EXPONENT	( 2.4f )
  #define D3D12_SRGB_TO_FLOAT_OFFSET	( 0.055f )
  #define D3D12_SRGB_TO_FLOAT_THRESHOLD	( 0.04045f )
  #define D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP	( 0.5f )
  #define	D3D12_STANDARD_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED	( 64 )
  
  #define	D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE	( 4 )
  
  #define	D3D12_STANDARD_PIXEL_COMPONENT_COUNT	( 128 )
  
  #define	D3D12_STANDARD_PIXEL_ELEMENT_COUNT	( 32 )
  
  #define	D3D12_STANDARD_VECTOR_SIZE	( 4 )
  
  #define	D3D12_STANDARD_VERTEX_ELEMENT_COUNT	( 32 )
  
  #define	D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT	( 64 )
  
  #define	D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT	( 8 )
  
  #define	D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT	( 8 )
  
  #define	D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END	( 0xffffffff )
  
  #define	D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START	( 0xfffffff0 )
  
  #define	D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR	( 64 )
  
  #define	D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR	( 64 )
  
  #define	D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR	( 63 )
  
  #define	D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR	( 64 )
  
  #define	D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR	( 2 )
  
  #define	D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR	( 1 )
  
  #define	D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR	( 1 )
  
  #define	D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT	( 16 )
  
  #define	D3D12_TEXTURE_DATA_PITCH_ALIGNMENT	( 256 )
  
  #define	D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT	( 512 )
  
  #define	D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES	( 65536 )
  
  #define	D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT	( 4096 )
  
  #define	D3D12_UAV_SLOT_COUNT	( 64 )
  
  #define	D3D12_UNBOUND_MEMORY_ACCESS_RESULT	( 0 )
  
  #define	D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX	( 15 )
  
  #define	D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE	( 16 )
  
  #define	D3D12_VIEWPORT_BOUNDS_MAX	( 32767 )
  
  #define	D3D12_VIEWPORT_BOUNDS_MIN	( -32768 )
  
  #define	D3D12_VS_INPUT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_VS_INPUT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_VS_INPUT_REGISTER_READS_PER_INST	( 2 )
  
  #define	D3D12_VS_INPUT_REGISTER_READ_PORTS	( 1 )
  
  #define	D3D12_VS_OUTPUT_REGISTER_COMPONENTS	( 4 )
  
  #define	D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )
  
  #define	D3D12_VS_OUTPUT_REGISTER_COUNT	( 32 )
  
  #define	D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT	( 10 )
  
  #define	D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP	( 25 )
  
  #define	D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP	( 25 )
  
  #endif
  
  typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS;
  
  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_FLAGS
      {
          D3D12_COMMAND_QUEUE_FLAG_NONE	= 0,
          D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT	= 0x1
      } 	D3D12_COMMAND_QUEUE_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAGS );
  typedef 
  enum D3D12_COMMAND_QUEUE_PRIORITY
      {
          D3D12_COMMAND_QUEUE_PRIORITY_NORMAL	= 0,
          D3D12_COMMAND_QUEUE_PRIORITY_HIGH	= 100
      } 	D3D12_COMMAND_QUEUE_PRIORITY;
  
  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 
  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 
  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
      {
      LPCSTR SemanticName;
      UINT SemanticIndex;
      DXGI_FORMAT Format;
      UINT InputSlot;
      UINT AlignedByteOffset;
      D3D12_INPUT_CLASSIFICATION InputSlotClass;
      UINT InstanceDataStepRate;
      } 	D3D12_INPUT_ELEMENT_DESC;
  
  typedef 
  enum D3D12_FILL_MODE
      {
          D3D12_FILL_MODE_WIREFRAME	= 2,
          D3D12_FILL_MODE_SOLID	= 3
      } 	D3D12_FILL_MODE;
  
  typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
  
  typedef D3D_PRIMITIVE D3D12_PRIMITIVE;
  
  typedef 
  enum D3D12_CULL_MODE
      {
          D3D12_CULL_MODE_NONE	= 1,
          D3D12_CULL_MODE_FRONT	= 2,
          D3D12_CULL_MODE_BACK	= 3
      } 	D3D12_CULL_MODE;
  
  typedef struct D3D12_SO_DECLARATION_ENTRY
      {
      UINT Stream;
      LPCSTR SemanticName;
      UINT SemanticIndex;
      BYTE StartComponent;
      BYTE ComponentCount;
      BYTE OutputSlot;
      } 	D3D12_SO_DECLARATION_ENTRY;
  
  typedef struct D3D12_VIEWPORT
      {
      FLOAT TopLeftX;
      FLOAT TopLeftY;
      FLOAT Width;
      FLOAT Height;
      FLOAT MinDepth;
      FLOAT MaxDepth;
      } 	D3D12_VIEWPORT;
  
  typedef RECT D3D12_RECT;
  
  typedef struct D3D12_BOX
      {
      UINT left;
      UINT top;
      UINT front;
      UINT right;
      UINT bottom;
      UINT back;
      } 	D3D12_BOX;
  
  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 
  enum D3D12_DEPTH_WRITE_MASK
      {
          D3D12_DEPTH_WRITE_MASK_ZERO	= 0,
          D3D12_DEPTH_WRITE_MASK_ALL	= 1
      } 	D3D12_DEPTH_WRITE_MASK;
  
  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 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_COLOR_WRITE_ENABLE
      {
          D3D12_COLOR_WRITE_ENABLE_RED	= 1,
          D3D12_COLOR_WRITE_ENABLE_GREEN	= 2,
          D3D12_COLOR_WRITE_ENABLE_BLUE	= 4,
          D3D12_COLOR_WRITE_ENABLE_ALPHA	= 8,
          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 
  enum D3D12_LOGIC_OP
      {
          D3D12_LOGIC_OP_CLEAR	= 0,
          D3D12_LOGIC_OP_SET	= ( D3D12_LOGIC_OP_CLEAR + 1 ) ,
          D3D12_LOGIC_OP_COPY	= ( D3D12_LOGIC_OP_SET + 1 ) ,
          D3D12_LOGIC_OP_COPY_INVERTED	= ( D3D12_LOGIC_OP_COPY + 1 ) ,
          D3D12_LOGIC_OP_NOOP	= ( D3D12_LOGIC_OP_COPY_INVERTED + 1 ) ,
          D3D12_LOGIC_OP_INVERT	= ( D3D12_LOGIC_OP_NOOP + 1 ) ,
          D3D12_LOGIC_OP_AND	= ( D3D12_LOGIC_OP_INVERT + 1 ) ,
          D3D12_LOGIC_OP_NAND	= ( D3D12_LOGIC_OP_AND + 1 ) ,
          D3D12_LOGIC_OP_OR	= ( D3D12_LOGIC_OP_NAND + 1 ) ,
          D3D12_LOGIC_OP_NOR	= ( D3D12_LOGIC_OP_OR + 1 ) ,
          D3D12_LOGIC_OP_XOR	= ( D3D12_LOGIC_OP_NOR + 1 ) ,
          D3D12_LOGIC_OP_EQUIV	= ( D3D12_LOGIC_OP_XOR + 1 ) ,
          D3D12_LOGIC_OP_AND_REVERSE	= ( D3D12_LOGIC_OP_EQUIV + 1 ) ,
          D3D12_LOGIC_OP_AND_INVERTED	= ( D3D12_LOGIC_OP_AND_REVERSE + 1 ) ,
          D3D12_LOGIC_OP_OR_REVERSE	= ( D3D12_LOGIC_OP_AND_INVERTED + 1 ) ,
          D3D12_LOGIC_OP_OR_INVERTED	= ( D3D12_LOGIC_OP_OR_REVERSE + 1 ) 
      } 	D3D12_LOGIC_OP;
  
  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[ 8 ];
      } 	D3D12_BLEND_DESC;
  
  /* Note, the array size for RenderTarget[] above is D3D12_SIMULTANEOUS_RENDERTARGET_COUNT. 
     IDL processing/generation of this header replaces the define; this comment is merely explaining what happened. */
  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;
  
  
  
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0000_v0_0_s_ifspec;
  
  #ifndef __ID3D12Object_INTERFACE_DEFINED__
  #define __ID3D12Object_INTERFACE_DEFINED__
  
  /* interface ID3D12Object */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12Object;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("c4fec28f-7966-4e95-9f94-f431cb56c3b8")
      ID3D12Object : public IUnknown
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE GetPrivateData( 
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SetPrivateData( 
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( 
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SetName( 
              _In_z_  LPCWSTR Name) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12ObjectVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12Object * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12Object * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12Object * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12Object * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12Object * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12Object * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12Object * This,
              _In_z_  LPCWSTR Name);
          
          END_INTERFACE
      } ID3D12ObjectVtbl;
  
      interface ID3D12Object
      {
          CONST_VTBL struct ID3D12ObjectVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12Object_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12Object_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12Object_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12Object_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12Object_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12DeviceChild_INTERFACE_DEFINED__
  #define __ID3D12DeviceChild_INTERFACE_DEFINED__
  
  /* interface ID3D12DeviceChild */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12DeviceChild;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("905db94b-a00c-4140-9df5-2b64ca9ea357")
      ID3D12DeviceChild : public ID3D12Object
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE GetDevice( 
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12DeviceChildVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12DeviceChild * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12DeviceChild * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12DeviceChild * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12DeviceChild * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12DeviceChild * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12DeviceChild * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12DeviceChild * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12DeviceChild * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          END_INTERFACE
      } ID3D12DeviceChildVtbl;
  
      interface ID3D12DeviceChild
      {
          CONST_VTBL struct ID3D12DeviceChildVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12DeviceChild_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12DeviceChild_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12DeviceChild_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12DeviceChild_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12DeviceChild_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12DeviceChild_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12RootSignature_INTERFACE_DEFINED__
  #define __ID3D12RootSignature_INTERFACE_DEFINED__
  
  /* interface ID3D12RootSignature */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12RootSignature;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("c54a6b66-72df-4ee8-8be5-a946a1429214")
      ID3D12RootSignature : public ID3D12DeviceChild
      {
      public:
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12RootSignatureVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12RootSignature * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12RootSignature * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12RootSignature * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12RootSignature * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12RootSignature * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12RootSignature * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12RootSignature * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12RootSignature * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          END_INTERFACE
      } ID3D12RootSignatureVtbl;
  
      interface ID3D12RootSignature
      {
          CONST_VTBL struct ID3D12RootSignatureVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12RootSignature_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12RootSignature_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12RootSignature_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12RootSignature_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12RootSignature_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12RootSignature_INTERFACE_DEFINED__ */
  
  
  /* interface __MIDL_itf_d3d12_0000_0001 */
  /* [local] */ 
  
  typedef struct D3D12_SHADER_BYTECODE
      {
      _Field_size_bytes_full_(BytecodeLength)  const void *pShaderBytecode;
      SIZE_T BytecodeLength;
      } 	D3D12_SHADER_BYTECODE;
  
  typedef struct D3D12_STREAM_OUTPUT_DESC
      {
      _Field_size_full_(NumEntries)  const D3D12_SO_DECLARATION_ENTRY *pSODeclaration;
      UINT NumEntries;
      _Field_size_full_(NumStrides)  const UINT *pBufferStrides;
      UINT NumStrides;
      UINT RasterizedStream;
      } 	D3D12_STREAM_OUTPUT_DESC;
  
  typedef struct D3D12_INPUT_LAYOUT_DESC
      {
      _Field_size_full_(NumElements)  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 struct D3D12_CACHED_PIPELINE_STATE
      {
      _Field_size_bytes_full_(CachedBlobSizeInBytes)  const void *pCachedBlob;
      SIZE_T CachedBlobSizeInBytes;
      } 	D3D12_CACHED_PIPELINE_STATE;
  
  typedef 
  enum D3D12_PIPELINE_STATE_FLAGS
      {
          D3D12_PIPELINE_STATE_FLAG_NONE	= 0,
          D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG	= 0x1
      } 	D3D12_PIPELINE_STATE_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( 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_FEATURE
      {
          D3D12_FEATURE_D3D12_OPTIONS	= 0,
          D3D12_FEATURE_ARCHITECTURE	= 1,
          D3D12_FEATURE_FEATURE_LEVELS	= 2,
          D3D12_FEATURE_FORMAT_SUPPORT	= 3,
          D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS	= 4,
          D3D12_FEATURE_FORMAT_INFO	= 5,
          D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT	= 6,
          D3D12_FEATURE_SHADER_MODEL	= 7,
          D3D12_FEATURE_D3D12_OPTIONS1	= 8,
          D3D12_FEATURE_ROOT_SIGNATURE	= 12
      } 	D3D12_FEATURE;
  
  typedef 
  enum D3D12_SHADER_MIN_PRECISION_SUPPORT
      {
          D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE	= 0,
          D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT	= 0x1,
          D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT	= 0x2
      } 	D3D12_SHADER_MIN_PRECISION_SUPPORT;
  
  DEFINE_ENUM_FLAG_OPERATORS( 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_FORMAT_SUPPORT1
      {
          D3D12_FORMAT_SUPPORT1_NONE	= 0,
          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;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT1 );
  typedef 
  enum D3D12_FORMAT_SUPPORT2
      {
          D3D12_FORMAT_SUPPORT2_NONE	= 0,
          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;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT2 );
  typedef 
  enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS
      {
          D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE	= 0,
          D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE	= 0x1
      } 	D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS );
  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 struct D3D12_FEATURE_DATA_D3D12_OPTIONS
      {
      _Out_  BOOL DoublePrecisionFloatShaderOps;
      _Out_  BOOL OutputMergerLogicOp;
      _Out_  D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;
      _Out_  D3D12_TILED_RESOURCES_TIER TiledResourcesTier;
      _Out_  D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;
      _Out_  BOOL PSSpecifiedStencilRefSupported;
      _Out_  BOOL TypedUAVLoadAdditionalFormats;
      _Out_  BOOL ROVsSupported;
      _Out_  D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
      _Out_  UINT MaxGPUVirtualAddressBitsPerResource;
      _Out_  BOOL StandardSwizzle64KBSupported;
      _Out_  D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier;
      _Out_  BOOL CrossAdapterRowMajorTextureSupported;
      _Out_  BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;
      _Out_  D3D12_RESOURCE_HEAP_TIER ResourceHeapTier;
      } 	D3D12_FEATURE_DATA_D3D12_OPTIONS;
  
  typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS1
      {
      _Out_  BOOL WaveOps;
      _Out_  UINT WaveLaneCountMin;
      _Out_  UINT WaveLaneCountMax;
      _Out_  UINT TotalLaneCount;
      _Out_  BOOL ExpandedComputeResourceStates;
      _Out_  BOOL Int64ShaderOps;
      } 	D3D12_FEATURE_DATA_D3D12_OPTIONS1;
  
  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_FEATURE_DATA_ROOT_SIGNATURE
      {
      _Inout_  D3D_ROOT_SIGNATURE_VERSION HighestVersion;
      } 	D3D12_FEATURE_DATA_ROOT_SIGNATURE;
  
  typedef struct D3D12_FEATURE_DATA_ARCHITECTURE
      {
      _In_  UINT NodeIndex;
      _Out_  BOOL TileBasedRenderer;
      _Out_  BOOL UMA;
      _Out_  BOOL CacheCoherentUMA;
      } 	D3D12_FEATURE_DATA_ARCHITECTURE;
  
  typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS
      {
      _In_  UINT NumFeatureLevels;
      _In_reads_(NumFeatureLevels)  const D3D_FEATURE_LEVEL *pFeatureLevelsRequested;
      _Out_  D3D_FEATURE_LEVEL MaxSupportedFeatureLevel;
      } 	D3D12_FEATURE_DATA_FEATURE_LEVELS;
  
  typedef 
  enum D3D_SHADER_MODEL
      {
          D3D_SHADER_MODEL_5_1	= 0x51,
          D3D_SHADER_MODEL_6_0	= 0x60
      } 	D3D_SHADER_MODEL;
  
  typedef struct D3D12_FEATURE_DATA_SHADER_MODEL
      {
      _Inout_  D3D_SHADER_MODEL HighestShaderModel;
      } 	D3D12_FEATURE_DATA_SHADER_MODEL;
  
  typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT
      {
      _In_  DXGI_FORMAT Format;
      _Out_  D3D12_FORMAT_SUPPORT1 Support1;
      _Out_  D3D12_FORMAT_SUPPORT2 Support2;
      } 	D3D12_FEATURE_DATA_FORMAT_SUPPORT;
  
  typedef struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS
      {
      _In_  DXGI_FORMAT Format;
      _In_  UINT SampleCount;
      _In_  D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags;
      _Out_  UINT NumQualityLevels;
      } 	D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS;
  
  typedef struct D3D12_FEATURE_DATA_FORMAT_INFO
      {
      DXGI_FORMAT Format;
      UINT8 PlaneCount;
      } 	D3D12_FEATURE_DATA_FORMAT_INFO;
  
  typedef struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT
      {
      UINT MaxGPUVirtualAddressBitsPerResource;
      UINT MaxGPUVirtualAddressBitsPerProcess;
      } 	D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT;
  
  typedef struct D3D12_RESOURCE_ALLOCATION_INFO
      {
      UINT64 SizeInBytes;
      UINT64 Alignment;
      } 	D3D12_RESOURCE_ALLOCATION_INFO;
  
  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_NOT_AVAILABLE	= 1,
          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	= 0,
          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_HARDWARE_PROTECTED	= 0x100,
          D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES	= 0,
          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;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_HEAP_FLAGS );
  typedef struct D3D12_HEAP_DESC
      {
      UINT64 SizeInBytes;
      D3D12_HEAP_PROPERTIES Properties;
      UINT64 Alignment;
      D3D12_HEAP_FLAGS Flags;
      } 	D3D12_HEAP_DESC;
  
  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	= 0,
          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 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_RANGE
      {
      SIZE_T Begin;
      SIZE_T End;
      } 	D3D12_RANGE;
  
  typedef struct D3D12_SUBRESOURCE_INFO
      {
      UINT64 Offset;
      UINT RowPitch;
      UINT DepthPitch;
      } 	D3D12_SUBRESOURCE_INFO;
  
  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 
  enum D3D12_TILE_RANGE_FLAGS
      {
          D3D12_TILE_RANGE_FLAG_NONE	= 0,
          D3D12_TILE_RANGE_FLAG_NULL	= 1,
          D3D12_TILE_RANGE_FLAG_SKIP	= 2,
          D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE	= 4
      } 	D3D12_TILE_RANGE_FLAGS;
  
  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_PACKED_MIP_INFO
      {
      UINT8 NumStandardMips;
      UINT8 NumPackedMips;
      UINT NumTilesForPackedMips;
      UINT StartTileIndexInOverallResource;
      } 	D3D12_PACKED_MIP_INFO;
  
  typedef 
  enum D3D12_TILE_MAPPING_FLAGS
      {
          D3D12_TILE_MAPPING_FLAG_NONE	= 0,
          D3D12_TILE_MAPPING_FLAG_NO_HAZARD	= 0x1
      } 	D3D12_TILE_MAPPING_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAGS );
  typedef 
  enum D3D12_TILE_COPY_FLAGS
      {
          D3D12_TILE_COPY_FLAG_NONE	= 0,
          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;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAGS );
  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	= 0,
          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	= ( D3D12_RESOURCE_BARRIER_TYPE_TRANSITION + 1 ) ,
          D3D12_RESOURCE_BARRIER_TYPE_UAV	= ( D3D12_RESOURCE_BARRIER_TYPE_ALIASING + 1 ) 
      } 	D3D12_RESOURCE_BARRIER_TYPE;
  
  
  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
      {
      ID3D12Resource *pResourceBefore;
      ID3D12Resource *pResourceAfter;
      } 	D3D12_RESOURCE_ALIASING_BARRIER;
  
  typedef struct D3D12_RESOURCE_UAV_BARRIER
      {
      ID3D12Resource *pResource;
      } 	D3D12_RESOURCE_UAV_BARRIER;
  
  typedef 
  enum D3D12_RESOURCE_BARRIER_FLAGS
      {
          D3D12_RESOURCE_BARRIER_FLAG_NONE	= 0,
          D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY	= 0x1,
          D3D12_RESOURCE_BARRIER_FLAG_END_ONLY	= 0x2
      } 	D3D12_RESOURCE_BARRIER_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_BARRIER_FLAGS );
  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 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 
  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_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_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_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)) 
  #define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(Src0,Src1,Src2,Src3) ((((Src0)&D3D12_SHADER_COMPONENT_MAPPING_MASK)| \
                                                                  (((Src1)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<D3D12_SHADER_COMPONENT_MAPPING_SHIFT)| \
                                                                  (((Src2)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*2))| \
                                                                  (((Src3)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*3))| \
                                                                  D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES))
  #define D3D12_DECODE_SHADER_4_COMPONENT_MAPPING(ComponentToExtract,Mapping) ((D3D12_SHADER_COMPONENT_MAPPING)(Mapping >> (D3D12_SHADER_COMPONENT_MAPPING_SHIFT*ComponentToExtract) & D3D12_SHADER_COMPONENT_MAPPING_MASK))
  #define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0,1,2,3) 
  typedef 
  enum D3D12_BUFFER_SRV_FLAGS
      {
          D3D12_BUFFER_SRV_FLAG_NONE	= 0,
          D3D12_BUFFER_SRV_FLAG_RAW	= 0x1
      } 	D3D12_BUFFER_SRV_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAGS );
  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_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_TEX2DMS_SRV
      {
      UINT UnusedField_NothingToDefine;
      } 	D3D12_TEX2DMS_SRV;
  
  typedef struct D3D12_TEX2DMS_ARRAY_SRV
      {
      UINT FirstArraySlice;
      UINT ArraySize;
      } 	D3D12_TEX2DMS_ARRAY_SRV;
  
  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 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 struct D3D12_CONSTANT_BUFFER_VIEW_DESC
      {
      D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
      UINT SizeInBytes;
      } 	D3D12_CONSTANT_BUFFER_VIEW_DESC;
  
  typedef 
  enum D3D12_FILTER
      {
          D3D12_FILTER_MIN_MAG_MIP_POINT	= 0,
          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;
  
  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_FILTER_TYPE_MASK	( 0x3 )
  
  #define	D3D12_MIN_FILTER_SHIFT	( 4 )
  
  #define	D3D12_MAG_FILTER_SHIFT	( 2 )
  
  #define	D3D12_MIP_FILTER_SHIFT	( 0 )
  
  #define	D3D12_ANISOTROPIC_FILTERING_BIT	( 0x40 )
  
  #define D3D12_ENCODE_BASIC_FILTER( min, mag, mip, reduction )                                                     \
                                     ( ( D3D12_FILTER ) (                                                           \
                                     ( ( ( min ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIN_FILTER_SHIFT ) |           \
                                     ( ( ( mag ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MAG_FILTER_SHIFT ) |           \
                                     ( ( ( mip ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIP_FILTER_SHIFT ) |           \
                                     ( ( ( reduction ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) << D3D12_FILTER_REDUCTION_TYPE_SHIFT ) ) ) 
  #define D3D12_ENCODE_ANISOTROPIC_FILTER( reduction )                                                  \
                                           ( ( D3D12_FILTER ) (                                         \
                                           D3D12_ANISOTROPIC_FILTERING_BIT |                            \
                                           D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR,         \
                                                                      D3D12_FILTER_TYPE_LINEAR,         \
                                                                      D3D12_FILTER_TYPE_LINEAR,         \
                                                                      reduction ) ) )                     
  #define D3D12_DECODE_MIN_FILTER( D3D12Filter )                                                              \
                                   ( ( D3D12_FILTER_TYPE )                                                    \
                                   ( ( ( D3D12Filter ) >> D3D12_MIN_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) 
  #define D3D12_DECODE_MAG_FILTER( D3D12Filter )                                                              \
                                   ( ( D3D12_FILTER_TYPE )                                                    \
                                   ( ( ( D3D12Filter ) >> D3D12_MAG_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) 
  #define D3D12_DECODE_MIP_FILTER( D3D12Filter )                                                              \
                                   ( ( D3D12_FILTER_TYPE )                                                    \
                                   ( ( ( D3D12Filter ) >> D3D12_MIP_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) 
  #define D3D12_DECODE_FILTER_REDUCTION( D3D12Filter )                                                        \
                                   ( ( D3D12_FILTER_REDUCTION_TYPE )                                                      \
                                   ( ( ( D3D12Filter ) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) ) 
  #define D3D12_DECODE_IS_COMPARISON_FILTER( D3D12Filter )                                                    \
                                   ( D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON ) 
  #define D3D12_DECODE_IS_ANISOTROPIC_FILTER( D3D12Filter )                                               \
                              ( ( ( D3D12Filter ) & D3D12_ANISOTROPIC_FILTERING_BIT ) &&                  \
                              ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER( D3D12Filter ) ) &&   \
                              ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER( D3D12Filter ) ) &&   \
                              ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIP_FILTER( D3D12Filter ) ) )      
  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 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 
  enum D3D12_BUFFER_UAV_FLAGS
      {
          D3D12_BUFFER_UAV_FLAG_NONE	= 0,
          D3D12_BUFFER_UAV_FLAG_RAW	= 0x1
      } 	D3D12_BUFFER_UAV_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( 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 
  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 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 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_TEX2DMS_RTV
      {
      UINT UnusedField_NothingToDefine;
      } 	D3D12_TEX2DMS_RTV;
  
  typedef struct D3D12_TEX2D_ARRAY_RTV
      {
      UINT MipSlice;
      UINT FirstArraySlice;
      UINT ArraySize;
      UINT PlaneSlice;
      } 	D3D12_TEX2D_ARRAY_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 
  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_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 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 
  enum D3D12_DSV_FLAGS
      {
          D3D12_DSV_FLAG_NONE	= 0,
          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 
  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 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 
  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 
  enum D3D12_FENCE_FLAGS
      {
          D3D12_FENCE_FLAG_NONE	= 0,
          D3D12_FENCE_FLAG_SHARED	= 0x1,
          D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER	= 0x2
      } 	D3D12_FENCE_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_FLAGS );
  typedef 
  enum D3D12_DESCRIPTOR_HEAP_TYPE
      {
          D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV	= 0,
          D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER	= ( D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV + 1 ) ,
          D3D12_DESCRIPTOR_HEAP_TYPE_RTV	= ( D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER + 1 ) ,
          D3D12_DESCRIPTOR_HEAP_TYPE_DSV	= ( D3D12_DESCRIPTOR_HEAP_TYPE_RTV + 1 ) ,
          D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES	= ( D3D12_DESCRIPTOR_HEAP_TYPE_DSV + 1 ) 
      } 	D3D12_DESCRIPTOR_HEAP_TYPE;
  
  typedef 
  enum D3D12_DESCRIPTOR_HEAP_FLAGS
      {
          D3D12_DESCRIPTOR_HEAP_FLAG_NONE	= 0,
          D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE	= 0x1
      } 	D3D12_DESCRIPTOR_HEAP_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( 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 
  enum D3D12_DESCRIPTOR_RANGE_TYPE
      {
          D3D12_DESCRIPTOR_RANGE_TYPE_SRV	= 0,
          D3D12_DESCRIPTOR_RANGE_TYPE_UAV	= ( D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1 ) ,
          D3D12_DESCRIPTOR_RANGE_TYPE_CBV	= ( D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1 ) ,
          D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER	= ( D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1 ) 
      } 	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 struct D3D12_ROOT_DESCRIPTOR_TABLE
      {
      UINT NumDescriptorRanges;
      _Field_size_full_(NumDescriptorRanges)  const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges;
      } 	D3D12_ROOT_DESCRIPTOR_TABLE;
  
  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_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 
  enum D3D12_ROOT_PARAMETER_TYPE
      {
          D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE	= 0,
          D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS	= ( D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE + 1 ) ,
          D3D12_ROOT_PARAMETER_TYPE_CBV	= ( D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS + 1 ) ,
          D3D12_ROOT_PARAMETER_TYPE_SRV	= ( D3D12_ROOT_PARAMETER_TYPE_CBV + 1 ) ,
          D3D12_ROOT_PARAMETER_TYPE_UAV	= ( D3D12_ROOT_PARAMETER_TYPE_SRV + 1 ) 
      } 	D3D12_ROOT_PARAMETER_TYPE;
  
  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 
  enum D3D12_ROOT_SIGNATURE_FLAGS
      {
          D3D12_ROOT_SIGNATURE_FLAG_NONE	= 0,
          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;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS );
  typedef 
  enum D3D12_STATIC_BORDER_COLOR
      {
          D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK	= 0,
          D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK	= ( D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK + 1 ) ,
          D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE	= ( D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK + 1 ) 
      } 	D3D12_STATIC_BORDER_COLOR;
  
  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 struct D3D12_ROOT_SIGNATURE_DESC
      {
      UINT NumParameters;
      _Field_size_full_(NumParameters)  const D3D12_ROOT_PARAMETER *pParameters;
      UINT NumStaticSamplers;
      _Field_size_full_(NumStaticSamplers)  const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
      D3D12_ROOT_SIGNATURE_FLAGS Flags;
      } 	D3D12_ROOT_SIGNATURE_DESC;
  
  typedef 
  enum D3D12_DESCRIPTOR_RANGE_FLAGS
      {
          D3D12_DESCRIPTOR_RANGE_FLAG_NONE	= 0,
          D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE	= 0x1,
          D3D12_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE	= 0x2,
          D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE	= 0x4,
          D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC	= 0x8
      } 	D3D12_DESCRIPTOR_RANGE_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( 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_TABLE1
      {
      UINT NumDescriptorRanges;
      _Field_size_full_(NumDescriptorRanges)  const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges;
      } 	D3D12_ROOT_DESCRIPTOR_TABLE1;
  
  typedef 
  enum D3D12_ROOT_DESCRIPTOR_FLAGS
      {
          D3D12_ROOT_DESCRIPTOR_FLAG_NONE	= 0,
          D3D12_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE	= 0x2,
          D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE	= 0x4,
          D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC	= 0x8
      } 	D3D12_ROOT_DESCRIPTOR_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_DESCRIPTOR_FLAGS );
  typedef struct D3D12_ROOT_DESCRIPTOR1
      {
      UINT ShaderRegister;
      UINT RegisterSpace;
      D3D12_ROOT_DESCRIPTOR_FLAGS Flags;
      } 	D3D12_ROOT_DESCRIPTOR1;
  
  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 struct D3D12_ROOT_SIGNATURE_DESC1
      {
      UINT NumParameters;
      _Field_size_full_(NumParameters)  const D3D12_ROOT_PARAMETER1 *pParameters;
      UINT NumStaticSamplers;
      _Field_size_full_(NumStaticSamplers)  const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
      D3D12_ROOT_SIGNATURE_FLAGS Flags;
      } 	D3D12_ROOT_SIGNATURE_DESC1;
  
  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;
  
  
  
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0001_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0001_v0_0_s_ifspec;
  
  #ifndef __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__
  #define __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__
  
  /* interface ID3D12RootSignatureDeserializer */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12RootSignatureDeserializer;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("34AB647B-3CC8-46AC-841B-C0965645C046")
      ID3D12RootSignatureDeserializer : public IUnknown
      {
      public:
          virtual const D3D12_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE GetRootSignatureDesc( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12RootSignatureDeserializerVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12RootSignatureDeserializer * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12RootSignatureDeserializer * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12RootSignatureDeserializer * This);
          
          const D3D12_ROOT_SIGNATURE_DESC *( STDMETHODCALLTYPE *GetRootSignatureDesc )( 
              ID3D12RootSignatureDeserializer * This);
          
          END_INTERFACE
      } ID3D12RootSignatureDeserializerVtbl;
  
      interface ID3D12RootSignatureDeserializer
      {
          CONST_VTBL struct ID3D12RootSignatureDeserializerVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12RootSignatureDeserializer_GetRootSignatureDesc(This)	\
      ( (This)->lpVtbl -> GetRootSignatureDesc(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12VersionedRootSignatureDeserializer_INTERFACE_DEFINED__
  #define __ID3D12VersionedRootSignatureDeserializer_INTERFACE_DEFINED__
  
  /* interface ID3D12VersionedRootSignatureDeserializer */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12VersionedRootSignatureDeserializer;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0")
      ID3D12VersionedRootSignatureDeserializer : public IUnknown
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE GetRootSignatureDescAtVersion( 
              D3D_ROOT_SIGNATURE_VERSION convertToVersion,
              _Out_  const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **ppDesc) = 0;
          
          virtual const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE GetUnconvertedRootSignatureDesc( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12VersionedRootSignatureDeserializerVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12VersionedRootSignatureDeserializer * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12VersionedRootSignatureDeserializer * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12VersionedRootSignatureDeserializer * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetRootSignatureDescAtVersion )( 
              ID3D12VersionedRootSignatureDeserializer * This,
              D3D_ROOT_SIGNATURE_VERSION convertToVersion,
              _Out_  const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **ppDesc);
          
          const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *( STDMETHODCALLTYPE *GetUnconvertedRootSignatureDesc )( 
              ID3D12VersionedRootSignatureDeserializer * This);
          
          END_INTERFACE
      } ID3D12VersionedRootSignatureDeserializerVtbl;
  
      interface ID3D12VersionedRootSignatureDeserializer
      {
          CONST_VTBL struct ID3D12VersionedRootSignatureDeserializerVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define ID3D12VersionedRootSignatureDeserializer_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define ID3D12VersionedRootSignatureDeserializer_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define ID3D12VersionedRootSignatureDeserializer_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define ID3D12VersionedRootSignatureDeserializer_GetRootSignatureDescAtVersion(This,convertToVersion,ppDesc)	\
      ( (This)->lpVtbl -> GetRootSignatureDescAtVersion(This,convertToVersion,ppDesc) ) 
  
  #define ID3D12VersionedRootSignatureDeserializer_GetUnconvertedRootSignatureDesc(This)	\
      ( (This)->lpVtbl -> GetUnconvertedRootSignatureDesc(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12VersionedRootSignatureDeserializer_INTERFACE_DEFINED__ */
  
  
  /* interface __MIDL_itf_d3d12_0000_0003 */
  /* [local] */ 
  
  typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(
                              _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature,
                              _In_ D3D_ROOT_SIGNATURE_VERSION Version,
                              _Out_ ID3DBlob** ppBlob,
                              _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);
  
  HRESULT WINAPI D3D12SerializeRootSignature(
                              _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature,
                              _In_ D3D_ROOT_SIGNATURE_VERSION Version,
                              _Out_ ID3DBlob** ppBlob,
                              _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);
  
  typedef HRESULT (WINAPI* PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER)(
                                       _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
                                       _In_ SIZE_T SrcDataSizeInBytes,
                                       _In_ REFIID pRootSignatureDeserializerInterface,
                                       _Out_ void** ppRootSignatureDeserializer);
  
  HRESULT WINAPI D3D12CreateRootSignatureDeserializer(
                                       _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
                                       _In_ SIZE_T SrcDataSizeInBytes,
                                       _In_ REFIID pRootSignatureDeserializerInterface,
                                       _Out_ void** ppRootSignatureDeserializer);
  
  typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)(
                              _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature,
                              _Out_ ID3DBlob** ppBlob,
                              _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);
  
  HRESULT WINAPI D3D12SerializeVersionedRootSignature(
                              _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature,
                              _Out_ ID3DBlob** ppBlob,
                              _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);
  
  typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER)(
                                       _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
                                       _In_ SIZE_T SrcDataSizeInBytes,
                                       _In_ REFIID pRootSignatureDeserializerInterface,
                                       _Out_ void** ppRootSignatureDeserializer);
  
  HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer(
                                       _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
                                       _In_ SIZE_T SrcDataSizeInBytes,
                                       _In_ REFIID pRootSignatureDeserializerInterface,
                                       _Out_ void** ppRootSignatureDeserializer);
  
  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;
  
  // If rects are supplied in D3D12_DISCARD_REGION, below, the resource 
  // must have 2D subresources with all specified subresources the same dimension.
  typedef struct D3D12_DISCARD_REGION
      {
      UINT NumRects;
      _In_reads_(NumRects)  const D3D12_RECT *pRects;
      UINT FirstSubresource;
      UINT NumSubresources;
      } 	D3D12_DISCARD_REGION;
  
  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_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 
  enum D3D12_PREDICATION_OP
      {
          D3D12_PREDICATION_OP_EQUAL_ZERO	= 0,
          D3D12_PREDICATION_OP_NOT_EQUAL_ZERO	= 1
      } 	D3D12_PREDICATION_OP;
  
  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 struct D3D12_QUERY_DATA_SO_STATISTICS
      {
      UINT64 NumPrimitivesWritten;
      UINT64 PrimitivesStorageNeeded;
      } 	D3D12_QUERY_DATA_SO_STATISTICS;
  
  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 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_VERTEX_BUFFER_VIEW
      {
      D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
      UINT SizeInBytes;
      UINT StrideInBytes;
      } 	D3D12_VERTEX_BUFFER_VIEW;
  
  typedef struct D3D12_INDEX_BUFFER_VIEW
      {
      D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
      UINT SizeInBytes;
      DXGI_FORMAT Format;
      } 	D3D12_INDEX_BUFFER_VIEW;
  
  typedef 
  enum D3D12_INDIRECT_ARGUMENT_TYPE
      {
          D3D12_INDIRECT_ARGUMENT_TYPE_DRAW	= 0,
          D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED	= ( D3D12_INDIRECT_ARGUMENT_TYPE_DRAW + 1 ) ,
          D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH	= ( D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED + 1 ) ,
          D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW	= ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH + 1 ) ,
          D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW	= ( D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW + 1 ) ,
          D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT	= ( D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW + 1 ) ,
          D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW	= ( D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT + 1 ) ,
          D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW	= ( D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW + 1 ) ,
          D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW	= ( D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW + 1 ) 
      } 	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;
      _Field_size_full_(NumArgumentDescs)  const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs;
      UINT NodeMask;
      } 	D3D12_COMMAND_SIGNATURE_DESC;
  
  
  
  
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0003_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0003_v0_0_s_ifspec;
  
  #ifndef __ID3D12Pageable_INTERFACE_DEFINED__
  #define __ID3D12Pageable_INTERFACE_DEFINED__
  
  /* interface ID3D12Pageable */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12Pageable;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("63ee58fb-1268-4835-86da-f008ce62f0d6")
      ID3D12Pageable : public ID3D12DeviceChild
      {
      public:
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12PageableVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12Pageable * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12Pageable * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12Pageable * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12Pageable * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12Pageable * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12Pageable * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12Pageable * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12Pageable * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          END_INTERFACE
      } ID3D12PageableVtbl;
  
      interface ID3D12Pageable
      {
          CONST_VTBL struct ID3D12PageableVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12Pageable_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12Pageable_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12Pageable_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12Pageable_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12Pageable_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12Pageable_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12Heap_INTERFACE_DEFINED__
  #define __ID3D12Heap_INTERFACE_DEFINED__
  
  /* interface ID3D12Heap */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12Heap;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("6b3b2502-6e51-45b3-90ee-9884265e8df3")
      ID3D12Heap : public ID3D12Pageable
      {
      public:
          virtual D3D12_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12HeapVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12Heap * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12Heap * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12Heap * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12Heap * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12Heap * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12Heap * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12Heap * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12Heap * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          D3D12_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( 
              ID3D12Heap * This);
          
          END_INTERFACE
      } ID3D12HeapVtbl;
  
      interface ID3D12Heap
      {
          CONST_VTBL struct ID3D12HeapVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define ID3D12Heap_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define ID3D12Heap_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define ID3D12Heap_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define ID3D12Heap_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12Heap_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12Heap_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12Heap_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12Heap_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #define ID3D12Heap_GetDesc(This)	\
      ( (This)->lpVtbl -> GetDesc(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  
  
  
  
  #endif 	/* __ID3D12Heap_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12Resource_INTERFACE_DEFINED__
  #define __ID3D12Resource_INTERFACE_DEFINED__
  
  /* interface ID3D12Resource */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12Resource;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("696442be-a72e-4059-bc79-5b5c98040fad")
      ID3D12Resource : public ID3D12Pageable
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE Map( 
              UINT Subresource,
              _In_opt_  const D3D12_RANGE *pReadRange,
              _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData) = 0;
          
          virtual void STDMETHODCALLTYPE Unmap( 
              UINT Subresource,
              _In_opt_  const D3D12_RANGE *pWrittenRange) = 0;
          
          virtual D3D12_RESOURCE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
          
          virtual D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE GetGPUVirtualAddress( void) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE WriteToSubresource( 
              UINT DstSubresource,
              _In_opt_  const D3D12_BOX *pDstBox,
              _In_  const void *pSrcData,
              UINT SrcRowPitch,
              UINT SrcDepthPitch) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE ReadFromSubresource( 
              _Out_  void *pDstData,
              UINT DstRowPitch,
              UINT DstDepthPitch,
              UINT SrcSubresource,
              _In_opt_  const D3D12_BOX *pSrcBox) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetHeapProperties( 
              _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
              _Out_opt_  D3D12_HEAP_FLAGS *pHeapFlags) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12ResourceVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12Resource * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12Resource * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12Resource * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12Resource * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12Resource * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12Resource * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12Resource * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12Resource * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          HRESULT ( STDMETHODCALLTYPE *Map )( 
              ID3D12Resource * This,
              UINT Subresource,
              _In_opt_  const D3D12_RANGE *pReadRange,
              _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData);
          
          void ( STDMETHODCALLTYPE *Unmap )( 
              ID3D12Resource * This,
              UINT Subresource,
              _In_opt_  const D3D12_RANGE *pWrittenRange);
          
          D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
              ID3D12Resource * This);
          
          D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( 
              ID3D12Resource * This);
          
          HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( 
              ID3D12Resource * This,
              UINT DstSubresource,
              _In_opt_  const D3D12_BOX *pDstBox,
              _In_  const void *pSrcData,
              UINT SrcRowPitch,
              UINT SrcDepthPitch);
          
          HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( 
              ID3D12Resource * This,
              _Out_  void *pDstData,
              UINT DstRowPitch,
              UINT DstDepthPitch,
              UINT SrcSubresource,
              _In_opt_  const D3D12_BOX *pSrcBox);
          
          HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )( 
              ID3D12Resource * This,
              _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
              _Out_opt_  D3D12_HEAP_FLAGS *pHeapFlags);
          
          END_INTERFACE
      } ID3D12ResourceVtbl;
  
      interface ID3D12Resource
      {
          CONST_VTBL struct ID3D12ResourceVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12Resource_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12Resource_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12Resource_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12Resource_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12Resource_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #define ID3D12Resource_Map(This,Subresource,pReadRange,ppData)	\
      ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) ) 
  
  #define ID3D12Resource_Unmap(This,Subresource,pWrittenRange)	\
      ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) ) 
  
  #define ID3D12Resource_GetDesc(This)	\
      ( (This)->lpVtbl -> GetDesc(This) ) 
  
  #define ID3D12Resource_GetGPUVirtualAddress(This)	\
      ( (This)->lpVtbl -> GetGPUVirtualAddress(This) ) 
  
  #define ID3D12Resource_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)	\
      ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) 
  
  #define ID3D12Resource_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox)	\
      ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) ) 
  
  #define ID3D12Resource_GetHeapProperties(This,pHeapProperties,pHeapFlags)	\
      ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  
  
  
  
  #endif 	/* __ID3D12Resource_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12CommandAllocator_INTERFACE_DEFINED__
  #define __ID3D12CommandAllocator_INTERFACE_DEFINED__
  
  /* interface ID3D12CommandAllocator */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12CommandAllocator;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("6102dee4-af59-4b09-b999-b44d73f09b24")
      ID3D12CommandAllocator : public ID3D12Pageable
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12CommandAllocatorVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12CommandAllocator * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12CommandAllocator * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12CommandAllocator * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12CommandAllocator * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12CommandAllocator * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12CommandAllocator * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12CommandAllocator * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12CommandAllocator * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          HRESULT ( STDMETHODCALLTYPE *Reset )( 
              ID3D12CommandAllocator * This);
          
          END_INTERFACE
      } ID3D12CommandAllocatorVtbl;
  
      interface ID3D12CommandAllocator
      {
          CONST_VTBL struct ID3D12CommandAllocatorVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12CommandAllocator_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12CommandAllocator_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12CommandAllocator_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12CommandAllocator_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12CommandAllocator_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #define ID3D12CommandAllocator_Reset(This)	\
      ( (This)->lpVtbl -> Reset(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12CommandAllocator_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12Fence_INTERFACE_DEFINED__
  #define __ID3D12Fence_INTERFACE_DEFINED__
  
  /* interface ID3D12Fence */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12Fence;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("0a753dcf-c4d8-4b91-adf6-be5a60d95a76")
      ID3D12Fence : public ID3D12Pageable
      {
      public:
          virtual UINT64 STDMETHODCALLTYPE GetCompletedValue( void) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SetEventOnCompletion( 
              UINT64 Value,
              HANDLE hEvent) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Signal( 
              UINT64 Value) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12FenceVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12Fence * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12Fence * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12Fence * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12Fence * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12Fence * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12Fence * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12Fence * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12Fence * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          UINT64 ( STDMETHODCALLTYPE *GetCompletedValue )( 
              ID3D12Fence * This);
          
          HRESULT ( STDMETHODCALLTYPE *SetEventOnCompletion )( 
              ID3D12Fence * This,
              UINT64 Value,
              HANDLE hEvent);
          
          HRESULT ( STDMETHODCALLTYPE *Signal )( 
              ID3D12Fence * This,
              UINT64 Value);
          
          END_INTERFACE
      } ID3D12FenceVtbl;
  
      interface ID3D12Fence
      {
          CONST_VTBL struct ID3D12FenceVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12Fence_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12Fence_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12Fence_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12Fence_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12Fence_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #define ID3D12Fence_GetCompletedValue(This)	\
      ( (This)->lpVtbl -> GetCompletedValue(This) ) 
  
  #define ID3D12Fence_SetEventOnCompletion(This,Value,hEvent)	\
      ( (This)->lpVtbl -> SetEventOnCompletion(This,Value,hEvent) ) 
  
  #define ID3D12Fence_Signal(This,Value)	\
      ( (This)->lpVtbl -> Signal(This,Value) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12Fence_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12PipelineState_INTERFACE_DEFINED__
  #define __ID3D12PipelineState_INTERFACE_DEFINED__
  
  /* interface ID3D12PipelineState */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12PipelineState;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("765a30f3-f624-4c6f-a828-ace948622445")
      ID3D12PipelineState : public ID3D12Pageable
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE GetCachedBlob( 
              _COM_Outptr_  ID3DBlob **ppBlob) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12PipelineStateVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12PipelineState * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12PipelineState * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12PipelineState * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12PipelineState * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12PipelineState * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12PipelineState * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12PipelineState * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12PipelineState * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          HRESULT ( STDMETHODCALLTYPE *GetCachedBlob )( 
              ID3D12PipelineState * This,
              _COM_Outptr_  ID3DBlob **ppBlob);
          
          END_INTERFACE
      } ID3D12PipelineStateVtbl;
  
      interface ID3D12PipelineState
      {
          CONST_VTBL struct ID3D12PipelineStateVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12PipelineState_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12PipelineState_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12PipelineState_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12PipelineState_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12PipelineState_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #define ID3D12PipelineState_GetCachedBlob(This,ppBlob)	\
      ( (This)->lpVtbl -> GetCachedBlob(This,ppBlob) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12PipelineState_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12DescriptorHeap_INTERFACE_DEFINED__
  #define __ID3D12DescriptorHeap_INTERFACE_DEFINED__
  
  /* interface ID3D12DescriptorHeap */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12DescriptorHeap;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("8efb471d-616c-4f49-90f7-127bb763fa51")
      ID3D12DescriptorHeap : public ID3D12Pageable
      {
      public:
          virtual D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
          
          virtual D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart( void) = 0;
          
          virtual D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12DescriptorHeapVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12DescriptorHeap * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12DescriptorHeap * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12DescriptorHeap * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12DescriptorHeap * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12DescriptorHeap * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12DescriptorHeap * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12DescriptorHeap * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12DescriptorHeap * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          D3D12_DESCRIPTOR_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( 
              ID3D12DescriptorHeap * This);
          
          D3D12_CPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart )( 
              ID3D12DescriptorHeap * This);
          
          D3D12_GPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart )( 
              ID3D12DescriptorHeap * This);
          
          END_INTERFACE
      } ID3D12DescriptorHeapVtbl;
  
      interface ID3D12DescriptorHeap
      {
          CONST_VTBL struct ID3D12DescriptorHeapVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12DescriptorHeap_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12DescriptorHeap_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12DescriptorHeap_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12DescriptorHeap_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12DescriptorHeap_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #define ID3D12DescriptorHeap_GetDesc(This)	\
      ( (This)->lpVtbl -> GetDesc(This) ) 
  
  #define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This)	\
      ( (This)->lpVtbl -> GetCPUDescriptorHandleForHeapStart(This) ) 
  
  #define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This)	\
      ( (This)->lpVtbl -> GetGPUDescriptorHandleForHeapStart(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  #endif 	/* __ID3D12DescriptorHeap_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12QueryHeap_INTERFACE_DEFINED__
  #define __ID3D12QueryHeap_INTERFACE_DEFINED__
  
  /* interface ID3D12QueryHeap */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12QueryHeap;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("0d9658ae-ed45-469e-a61d-970ec583cab4")
      ID3D12QueryHeap : public ID3D12Pageable
      {
      public:
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12QueryHeapVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12QueryHeap * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12QueryHeap * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12QueryHeap * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12QueryHeap * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12QueryHeap * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12QueryHeap * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12QueryHeap * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12QueryHeap * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          END_INTERFACE
      } ID3D12QueryHeapVtbl;
  
      interface ID3D12QueryHeap
      {
          CONST_VTBL struct ID3D12QueryHeapVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12QueryHeap_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12QueryHeap_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12QueryHeap_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12QueryHeap_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12QueryHeap_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12QueryHeap_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12CommandSignature_INTERFACE_DEFINED__
  #define __ID3D12CommandSignature_INTERFACE_DEFINED__
  
  /* interface ID3D12CommandSignature */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12CommandSignature;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("c36a797c-ec80-4f0a-8985-a7b2475082d1")
      ID3D12CommandSignature : public ID3D12Pageable
      {
      public:
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12CommandSignatureVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12CommandSignature * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12CommandSignature * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12CommandSignature * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12CommandSignature * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12CommandSignature * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12CommandSignature * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12CommandSignature * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12CommandSignature * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          END_INTERFACE
      } ID3D12CommandSignatureVtbl;
  
      interface ID3D12CommandSignature
      {
          CONST_VTBL struct ID3D12CommandSignatureVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12CommandSignature_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12CommandSignature_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12CommandSignature_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12CommandSignature_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12CommandSignature_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12CommandSignature_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12CommandList_INTERFACE_DEFINED__
  #define __ID3D12CommandList_INTERFACE_DEFINED__
  
  /* interface ID3D12CommandList */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12CommandList;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("7116d91c-e7e4-47ce-b8c6-ec8168f437e5")
      ID3D12CommandList : public ID3D12DeviceChild
      {
      public:
          virtual D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE GetType( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12CommandListVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12CommandList * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12CommandList * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12CommandList * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12CommandList * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12CommandList * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12CommandList * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12CommandList * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12CommandList * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
              ID3D12CommandList * This);
          
          END_INTERFACE
      } ID3D12CommandListVtbl;
  
      interface ID3D12CommandList
      {
          CONST_VTBL struct ID3D12CommandListVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12CommandList_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12CommandList_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12CommandList_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12CommandList_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12CommandList_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  #define ID3D12CommandList_GetType(This)	\
      ( (This)->lpVtbl -> GetType(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12CommandList_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12GraphicsCommandList_INTERFACE_DEFINED__
  #define __ID3D12GraphicsCommandList_INTERFACE_DEFINED__
  
  /* interface ID3D12GraphicsCommandList */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12GraphicsCommandList;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("5b160d0f-ac1b-4185-8ba8-b3ae42a5a455")
      ID3D12GraphicsCommandList : public ID3D12CommandList
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE Close( void) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Reset( 
              _In_  ID3D12CommandAllocator *pAllocator,
              _In_opt_  ID3D12PipelineState *pInitialState) = 0;
          
          virtual void STDMETHODCALLTYPE ClearState( 
              _In_opt_  ID3D12PipelineState *pPipelineState) = 0;
          
          virtual void STDMETHODCALLTYPE DrawInstanced( 
              _In_  UINT VertexCountPerInstance,
              _In_  UINT InstanceCount,
              _In_  UINT StartVertexLocation,
              _In_  UINT StartInstanceLocation) = 0;
          
          virtual void STDMETHODCALLTYPE DrawIndexedInstanced( 
              _In_  UINT IndexCountPerInstance,
              _In_  UINT InstanceCount,
              _In_  UINT StartIndexLocation,
              _In_  INT BaseVertexLocation,
              _In_  UINT StartInstanceLocation) = 0;
          
          virtual void STDMETHODCALLTYPE Dispatch( 
              _In_  UINT ThreadGroupCountX,
              _In_  UINT ThreadGroupCountY,
              _In_  UINT ThreadGroupCountZ) = 0;
          
          virtual void STDMETHODCALLTYPE CopyBufferRegion( 
              _In_  ID3D12Resource *pDstBuffer,
              UINT64 DstOffset,
              _In_  ID3D12Resource *pSrcBuffer,
              UINT64 SrcOffset,
              UINT64 NumBytes) = 0;
          
          virtual void STDMETHODCALLTYPE CopyTextureRegion( 
              _In_  const D3D12_TEXTURE_COPY_LOCATION *pDst,
              UINT DstX,
              UINT DstY,
              UINT DstZ,
              _In_  const D3D12_TEXTURE_COPY_LOCATION *pSrc,
              _In_opt_  const D3D12_BOX *pSrcBox) = 0;
          
          virtual void STDMETHODCALLTYPE CopyResource( 
              _In_  ID3D12Resource *pDstResource,
              _In_  ID3D12Resource *pSrcResource) = 0;
          
          virtual void STDMETHODCALLTYPE CopyTiles( 
              _In_  ID3D12Resource *pTiledResource,
              _In_  const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
              _In_  const D3D12_TILE_REGION_SIZE *pTileRegionSize,
              _In_  ID3D12Resource *pBuffer,
              UINT64 BufferStartOffsetInBytes,
              D3D12_TILE_COPY_FLAGS Flags) = 0;
          
          virtual void STDMETHODCALLTYPE ResolveSubresource( 
              _In_  ID3D12Resource *pDstResource,
              _In_  UINT DstSubresource,
              _In_  ID3D12Resource *pSrcResource,
              _In_  UINT SrcSubresource,
              _In_  DXGI_FORMAT Format) = 0;
          
          virtual void STDMETHODCALLTYPE IASetPrimitiveTopology( 
              _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology) = 0;
          
          virtual void STDMETHODCALLTYPE RSSetViewports( 
              _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
              _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports) = 0;
          
          virtual void STDMETHODCALLTYPE RSSetScissorRects( 
              _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
              _In_reads_( NumRects)  const D3D12_RECT *pRects) = 0;
          
          virtual void STDMETHODCALLTYPE OMSetBlendFactor( 
              _In_opt_  const FLOAT BlendFactor[ 4 ]) = 0;
          
          virtual void STDMETHODCALLTYPE OMSetStencilRef( 
              _In_  UINT StencilRef) = 0;
          
          virtual void STDMETHODCALLTYPE SetPipelineState( 
              _In_  ID3D12PipelineState *pPipelineState) = 0;
          
          virtual void STDMETHODCALLTYPE ResourceBarrier( 
              _In_  UINT NumBarriers,
              _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers) = 0;
          
          virtual void STDMETHODCALLTYPE ExecuteBundle( 
              _In_  ID3D12GraphicsCommandList *pCommandList) = 0;
          
          virtual void STDMETHODCALLTYPE SetDescriptorHeaps( 
              _In_  UINT NumDescriptorHeaps,
              _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps) = 0;
          
          virtual void STDMETHODCALLTYPE SetComputeRootSignature( 
              _In_opt_  ID3D12RootSignature *pRootSignature) = 0;
          
          virtual void STDMETHODCALLTYPE SetGraphicsRootSignature( 
              _In_opt_  ID3D12RootSignature *pRootSignature) = 0;
          
          virtual void STDMETHODCALLTYPE SetComputeRootDescriptorTable( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE SetGraphicsRootDescriptorTable( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstant( 
              _In_  UINT RootParameterIndex,
              _In_  UINT SrcData,
              _In_  UINT DestOffsetIn32BitValues) = 0;
          
          virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstant( 
              _In_  UINT RootParameterIndex,
              _In_  UINT SrcData,
              _In_  UINT DestOffsetIn32BitValues) = 0;
          
          virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstants( 
              _In_  UINT RootParameterIndex,
              _In_  UINT Num32BitValuesToSet,
              _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
              _In_  UINT DestOffsetIn32BitValues) = 0;
          
          virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstants( 
              _In_  UINT RootParameterIndex,
              _In_  UINT Num32BitValuesToSet,
              _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
              _In_  UINT DestOffsetIn32BitValues) = 0;
          
          virtual void STDMETHODCALLTYPE SetComputeRootConstantBufferView( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
          
          virtual void STDMETHODCALLTYPE SetGraphicsRootConstantBufferView( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
          
          virtual void STDMETHODCALLTYPE SetComputeRootShaderResourceView( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
          
          virtual void STDMETHODCALLTYPE SetGraphicsRootShaderResourceView( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
          
          virtual void STDMETHODCALLTYPE SetComputeRootUnorderedAccessView( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
          
          virtual void STDMETHODCALLTYPE SetGraphicsRootUnorderedAccessView( 
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
          
          virtual void STDMETHODCALLTYPE IASetIndexBuffer( 
              _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView) = 0;
          
          virtual void STDMETHODCALLTYPE IASetVertexBuffers( 
              _In_  UINT StartSlot,
              _In_  UINT NumViews,
              _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews) = 0;
          
          virtual void STDMETHODCALLTYPE SOSetTargets( 
              _In_  UINT StartSlot,
              _In_  UINT NumViews,
              _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews) = 0;
          
          virtual void STDMETHODCALLTYPE OMSetRenderTargets( 
              _In_  UINT NumRenderTargetDescriptors,
              _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
              _In_  BOOL RTsSingleHandleToDescriptorRange,
              _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE ClearDepthStencilView( 
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
              _In_  D3D12_CLEAR_FLAGS ClearFlags,
              _In_  FLOAT Depth,
              _In_  UINT8 Stencil,
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
          
          virtual void STDMETHODCALLTYPE ClearRenderTargetView( 
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
              _In_  const FLOAT ColorRGBA[ 4 ],
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
          
          virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewUint( 
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
              _In_  ID3D12Resource *pResource,
              _In_  const UINT Values[ 4 ],
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
          
          virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewFloat( 
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
              _In_  ID3D12Resource *pResource,
              _In_  const FLOAT Values[ 4 ],
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
          
          virtual void STDMETHODCALLTYPE DiscardResource( 
              _In_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_DISCARD_REGION *pRegion) = 0;
          
          virtual void STDMETHODCALLTYPE BeginQuery( 
              _In_  ID3D12QueryHeap *pQueryHeap,
              _In_  D3D12_QUERY_TYPE Type,
              _In_  UINT Index) = 0;
          
          virtual void STDMETHODCALLTYPE EndQuery( 
              _In_  ID3D12QueryHeap *pQueryHeap,
              _In_  D3D12_QUERY_TYPE Type,
              _In_  UINT Index) = 0;
          
          virtual void STDMETHODCALLTYPE ResolveQueryData( 
              _In_  ID3D12QueryHeap *pQueryHeap,
              _In_  D3D12_QUERY_TYPE Type,
              _In_  UINT StartIndex,
              _In_  UINT NumQueries,
              _In_  ID3D12Resource *pDestinationBuffer,
              _In_  UINT64 AlignedDestinationBufferOffset) = 0;
          
          virtual void STDMETHODCALLTYPE SetPredication( 
              _In_opt_  ID3D12Resource *pBuffer,
              _In_  UINT64 AlignedBufferOffset,
              _In_  D3D12_PREDICATION_OP Operation) = 0;
          
          virtual void STDMETHODCALLTYPE SetMarker( 
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size) = 0;
          
          virtual void STDMETHODCALLTYPE BeginEvent( 
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size) = 0;
          
          virtual void STDMETHODCALLTYPE EndEvent( void) = 0;
          
          virtual void STDMETHODCALLTYPE ExecuteIndirect( 
              _In_  ID3D12CommandSignature *pCommandSignature,
              _In_  UINT MaxCommandCount,
              _In_  ID3D12Resource *pArgumentBuffer,
              _In_  UINT64 ArgumentBufferOffset,
              _In_opt_  ID3D12Resource *pCountBuffer,
              _In_  UINT64 CountBufferOffset) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12GraphicsCommandListVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12GraphicsCommandList * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12GraphicsCommandList * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12GraphicsCommandList * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12GraphicsCommandList * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12GraphicsCommandList * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12GraphicsCommandList * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12GraphicsCommandList * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12GraphicsCommandList * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
              ID3D12GraphicsCommandList * This);
          
          HRESULT ( STDMETHODCALLTYPE *Close )( 
              ID3D12GraphicsCommandList * This);
          
          HRESULT ( STDMETHODCALLTYPE *Reset )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12CommandAllocator *pAllocator,
              _In_opt_  ID3D12PipelineState *pInitialState);
          
          void ( STDMETHODCALLTYPE *ClearState )( 
              ID3D12GraphicsCommandList * This,
              _In_opt_  ID3D12PipelineState *pPipelineState);
          
          void ( STDMETHODCALLTYPE *DrawInstanced )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT VertexCountPerInstance,
              _In_  UINT InstanceCount,
              _In_  UINT StartVertexLocation,
              _In_  UINT StartInstanceLocation);
          
          void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT IndexCountPerInstance,
              _In_  UINT InstanceCount,
              _In_  UINT StartIndexLocation,
              _In_  INT BaseVertexLocation,
              _In_  UINT StartInstanceLocation);
          
          void ( STDMETHODCALLTYPE *Dispatch )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT ThreadGroupCountX,
              _In_  UINT ThreadGroupCountY,
              _In_  UINT ThreadGroupCountZ);
          
          void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12Resource *pDstBuffer,
              UINT64 DstOffset,
              _In_  ID3D12Resource *pSrcBuffer,
              UINT64 SrcOffset,
              UINT64 NumBytes);
          
          void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
              ID3D12GraphicsCommandList * This,
              _In_  const D3D12_TEXTURE_COPY_LOCATION *pDst,
              UINT DstX,
              UINT DstY,
              UINT DstZ,
              _In_  const D3D12_TEXTURE_COPY_LOCATION *pSrc,
              _In_opt_  const D3D12_BOX *pSrcBox);
          
          void ( STDMETHODCALLTYPE *CopyResource )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12Resource *pDstResource,
              _In_  ID3D12Resource *pSrcResource);
          
          void ( STDMETHODCALLTYPE *CopyTiles )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12Resource *pTiledResource,
              _In_  const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
              _In_  const D3D12_TILE_REGION_SIZE *pTileRegionSize,
              _In_  ID3D12Resource *pBuffer,
              UINT64 BufferStartOffsetInBytes,
              D3D12_TILE_COPY_FLAGS Flags);
          
          void ( STDMETHODCALLTYPE *ResolveSubresource )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12Resource *pDstResource,
              _In_  UINT DstSubresource,
              _In_  ID3D12Resource *pSrcResource,
              _In_  UINT SrcSubresource,
              _In_  DXGI_FORMAT Format);
          
          void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
              ID3D12GraphicsCommandList * This,
              _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
          
          void ( STDMETHODCALLTYPE *RSSetViewports )( 
              ID3D12GraphicsCommandList * This,
              _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
              _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
          
          void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
              ID3D12GraphicsCommandList * This,
              _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
              _In_reads_( NumRects)  const D3D12_RECT *pRects);
          
          void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
              ID3D12GraphicsCommandList * This,
              _In_opt_  const FLOAT BlendFactor[ 4 ]);
          
          void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT StencilRef);
          
          void ( STDMETHODCALLTYPE *SetPipelineState )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12PipelineState *pPipelineState);
          
          void ( STDMETHODCALLTYPE *ResourceBarrier )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT NumBarriers,
              _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
          
          void ( STDMETHODCALLTYPE *ExecuteBundle )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12GraphicsCommandList *pCommandList);
          
          void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT NumDescriptorHeaps,
              _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
          
          void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
              ID3D12GraphicsCommandList * This,
              _In_opt_  ID3D12RootSignature *pRootSignature);
          
          void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
              ID3D12GraphicsCommandList * This,
              _In_opt_  ID3D12RootSignature *pRootSignature);
          
          void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
          
          void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
          
          void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  UINT SrcData,
              _In_  UINT DestOffsetIn32BitValues);
          
          void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  UINT SrcData,
              _In_  UINT DestOffsetIn32BitValues);
          
          void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  UINT Num32BitValuesToSet,
              _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
              _In_  UINT DestOffsetIn32BitValues);
          
          void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  UINT Num32BitValuesToSet,
              _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
              _In_  UINT DestOffsetIn32BitValues);
          
          void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
          
          void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
          
          void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
          
          void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
          
          void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
          
          void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT RootParameterIndex,
              _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
          
          void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
              ID3D12GraphicsCommandList * This,
              _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
          
          void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT StartSlot,
              _In_  UINT NumViews,
              _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
          
          void ( STDMETHODCALLTYPE *SOSetTargets )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT StartSlot,
              _In_  UINT NumViews,
              _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
          
          void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
              ID3D12GraphicsCommandList * This,
              _In_  UINT NumRenderTargetDescriptors,
              _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
              _In_  BOOL RTsSingleHandleToDescriptorRange,
              _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
          
          void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
              ID3D12GraphicsCommandList * This,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
              _In_  D3D12_CLEAR_FLAGS ClearFlags,
              _In_  FLOAT Depth,
              _In_  UINT8 Stencil,
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects);
          
          void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
              ID3D12GraphicsCommandList * This,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
              _In_  const FLOAT ColorRGBA[ 4 ],
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects);
          
          void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
              ID3D12GraphicsCommandList * This,
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
              _In_  ID3D12Resource *pResource,
              _In_  const UINT Values[ 4 ],
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects);
          
          void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
              ID3D12GraphicsCommandList * This,
              _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
              _In_  ID3D12Resource *pResource,
              _In_  const FLOAT Values[ 4 ],
              _In_  UINT NumRects,
              _In_reads_(NumRects)  const D3D12_RECT *pRects);
          
          void ( STDMETHODCALLTYPE *DiscardResource )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_DISCARD_REGION *pRegion);
          
          void ( STDMETHODCALLTYPE *BeginQuery )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12QueryHeap *pQueryHeap,
              _In_  D3D12_QUERY_TYPE Type,
              _In_  UINT Index);
          
          void ( STDMETHODCALLTYPE *EndQuery )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12QueryHeap *pQueryHeap,
              _In_  D3D12_QUERY_TYPE Type,
              _In_  UINT Index);
          
          void ( STDMETHODCALLTYPE *ResolveQueryData )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12QueryHeap *pQueryHeap,
              _In_  D3D12_QUERY_TYPE Type,
              _In_  UINT StartIndex,
              _In_  UINT NumQueries,
              _In_  ID3D12Resource *pDestinationBuffer,
              _In_  UINT64 AlignedDestinationBufferOffset);
          
          void ( STDMETHODCALLTYPE *SetPredication )( 
              ID3D12GraphicsCommandList * This,
              _In_opt_  ID3D12Resource *pBuffer,
              _In_  UINT64 AlignedBufferOffset,
              _In_  D3D12_PREDICATION_OP Operation);
          
          void ( STDMETHODCALLTYPE *SetMarker )( 
              ID3D12GraphicsCommandList * This,
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size);
          
          void ( STDMETHODCALLTYPE *BeginEvent )( 
              ID3D12GraphicsCommandList * This,
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size);
          
          void ( STDMETHODCALLTYPE *EndEvent )( 
              ID3D12GraphicsCommandList * This);
          
          void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
              ID3D12GraphicsCommandList * This,
              _In_  ID3D12CommandSignature *pCommandSignature,
              _In_  UINT MaxCommandCount,
              _In_  ID3D12Resource *pArgumentBuffer,
              _In_  UINT64 ArgumentBufferOffset,
              _In_opt_  ID3D12Resource *pCountBuffer,
              _In_  UINT64 CountBufferOffset);
          
          END_INTERFACE
      } ID3D12GraphicsCommandListVtbl;
  
      interface ID3D12GraphicsCommandList
      {
          CONST_VTBL struct ID3D12GraphicsCommandListVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12GraphicsCommandList_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12GraphicsCommandList_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12GraphicsCommandList_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12GraphicsCommandList_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12GraphicsCommandList_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  #define ID3D12GraphicsCommandList_GetType(This)	\
      ( (This)->lpVtbl -> GetType(This) ) 
  
  
  #define ID3D12GraphicsCommandList_Close(This)	\
      ( (This)->lpVtbl -> Close(This) ) 
  
  #define ID3D12GraphicsCommandList_Reset(This,pAllocator,pInitialState)	\
      ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 
  
  #define ID3D12GraphicsCommandList_ClearState(This,pPipelineState)	\
      ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 
  
  #define ID3D12GraphicsCommandList_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
      ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 
  
  #define ID3D12GraphicsCommandList_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
      ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 
  
  #define ID3D12GraphicsCommandList_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
      ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 
  
  #define ID3D12GraphicsCommandList_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
      ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 
  
  #define ID3D12GraphicsCommandList_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
      ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 
  
  #define ID3D12GraphicsCommandList_CopyResource(This,pDstResource,pSrcResource)	\
      ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 
  
  #define ID3D12GraphicsCommandList_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
      ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 
  
  #define ID3D12GraphicsCommandList_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
      ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 
  
  #define ID3D12GraphicsCommandList_IASetPrimitiveTopology(This,PrimitiveTopology)	\
      ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 
  
  #define ID3D12GraphicsCommandList_RSSetViewports(This,NumViewports,pViewports)	\
      ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 
  
  #define ID3D12GraphicsCommandList_RSSetScissorRects(This,NumRects,pRects)	\
      ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 
  
  #define ID3D12GraphicsCommandList_OMSetBlendFactor(This,BlendFactor)	\
      ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 
  
  #define ID3D12GraphicsCommandList_OMSetStencilRef(This,StencilRef)	\
      ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 
  
  #define ID3D12GraphicsCommandList_SetPipelineState(This,pPipelineState)	\
      ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 
  
  #define ID3D12GraphicsCommandList_ResourceBarrier(This,NumBarriers,pBarriers)	\
      ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 
  
  #define ID3D12GraphicsCommandList_ExecuteBundle(This,pCommandList)	\
      ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 
  
  #define ID3D12GraphicsCommandList_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
      ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 
  
  #define ID3D12GraphicsCommandList_SetComputeRootSignature(This,pRootSignature)	\
      ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 
  
  #define ID3D12GraphicsCommandList_SetGraphicsRootSignature(This,pRootSignature)	\
      ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 
  
  #define ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
      ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 
  
  #define ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
      ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 
  
  #define ID3D12GraphicsCommandList_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
      ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 
  
  #define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
      ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 
  
  #define ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
      ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 
  
  #define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
      ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 
  
  #define ID3D12GraphicsCommandList_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
      ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 
  
  #define ID3D12GraphicsCommandList_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
      ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 
  
  #define ID3D12GraphicsCommandList_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
      ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 
  
  #define ID3D12GraphicsCommandList_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
      ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 
  
  #define ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
      ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 
  
  #define ID3D12GraphicsCommandList_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
      ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 
  
  #define ID3D12GraphicsCommandList_IASetIndexBuffer(This,pView)	\
      ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 
  
  #define ID3D12GraphicsCommandList_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
      ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 
  
  #define ID3D12GraphicsCommandList_SOSetTargets(This,StartSlot,NumViews,pViews)	\
      ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 
  
  #define ID3D12GraphicsCommandList_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
      ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 
  
  #define ID3D12GraphicsCommandList_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
      ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 
  
  #define ID3D12GraphicsCommandList_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
      ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 
  
  #define ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
      ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 
  
  #define ID3D12GraphicsCommandList_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
      ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 
  
  #define ID3D12GraphicsCommandList_DiscardResource(This,pResource,pRegion)	\
      ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 
  
  #define ID3D12GraphicsCommandList_BeginQuery(This,pQueryHeap,Type,Index)	\
      ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 
  
  #define ID3D12GraphicsCommandList_EndQuery(This,pQueryHeap,Type,Index)	\
      ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 
  
  #define ID3D12GraphicsCommandList_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
      ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 
  
  #define ID3D12GraphicsCommandList_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
      ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 
  
  #define ID3D12GraphicsCommandList_SetMarker(This,Metadata,pData,Size)	\
      ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 
  
  #define ID3D12GraphicsCommandList_BeginEvent(This,Metadata,pData,Size)	\
      ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 
  
  #define ID3D12GraphicsCommandList_EndEvent(This)	\
      ( (This)->lpVtbl -> EndEvent(This) ) 
  
  #define ID3D12GraphicsCommandList_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
      ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12GraphicsCommandList_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12CommandQueue_INTERFACE_DEFINED__
  #define __ID3D12CommandQueue_INTERFACE_DEFINED__
  
  /* interface ID3D12CommandQueue */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12CommandQueue;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("0ec870a6-5d7e-4c22-8cfc-5baae07616ed")
      ID3D12CommandQueue : public ID3D12Pageable
      {
      public:
          virtual void STDMETHODCALLTYPE UpdateTileMappings( 
              _In_  ID3D12Resource *pResource,
              UINT NumResourceRegions,
              _In_reads_opt_(NumResourceRegions)  const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates,
              _In_reads_opt_(NumResourceRegions)  const D3D12_TILE_REGION_SIZE *pResourceRegionSizes,
              _In_opt_  ID3D12Heap *pHeap,
              UINT NumRanges,
              _In_reads_opt_(NumRanges)  const D3D12_TILE_RANGE_FLAGS *pRangeFlags,
              _In_reads_opt_(NumRanges)  const UINT *pHeapRangeStartOffsets,
              _In_reads_opt_(NumRanges)  const UINT *pRangeTileCounts,
              D3D12_TILE_MAPPING_FLAGS Flags) = 0;
          
          virtual void STDMETHODCALLTYPE CopyTileMappings( 
              _In_  ID3D12Resource *pDstResource,
              _In_  const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate,
              _In_  ID3D12Resource *pSrcResource,
              _In_  const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate,
              _In_  const D3D12_TILE_REGION_SIZE *pRegionSize,
              D3D12_TILE_MAPPING_FLAGS Flags) = 0;
          
          virtual void STDMETHODCALLTYPE ExecuteCommandLists( 
              _In_  UINT NumCommandLists,
              _In_reads_(NumCommandLists)  ID3D12CommandList *const *ppCommandLists) = 0;
          
          virtual void STDMETHODCALLTYPE SetMarker( 
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size) = 0;
          
          virtual void STDMETHODCALLTYPE BeginEvent( 
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size) = 0;
          
          virtual void STDMETHODCALLTYPE EndEvent( void) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Signal( 
              ID3D12Fence *pFence,
              UINT64 Value) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Wait( 
              ID3D12Fence *pFence,
              UINT64 Value) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetTimestampFrequency( 
              _Out_  UINT64 *pFrequency) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetClockCalibration( 
              _Out_  UINT64 *pGpuTimestamp,
              _Out_  UINT64 *pCpuTimestamp) = 0;
          
          virtual D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12CommandQueueVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12CommandQueue * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12CommandQueue * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12CommandQueue * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12CommandQueue * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12CommandQueue * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12CommandQueue * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12CommandQueue * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12CommandQueue * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          void ( STDMETHODCALLTYPE *UpdateTileMappings )( 
              ID3D12CommandQueue * This,
              _In_  ID3D12Resource *pResource,
              UINT NumResourceRegions,
              _In_reads_opt_(NumResourceRegions)  const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates,
              _In_reads_opt_(NumResourceRegions)  const D3D12_TILE_REGION_SIZE *pResourceRegionSizes,
              _In_opt_  ID3D12Heap *pHeap,
              UINT NumRanges,
              _In_reads_opt_(NumRanges)  const D3D12_TILE_RANGE_FLAGS *pRangeFlags,
              _In_reads_opt_(NumRanges)  const UINT *pHeapRangeStartOffsets,
              _In_reads_opt_(NumRanges)  const UINT *pRangeTileCounts,
              D3D12_TILE_MAPPING_FLAGS Flags);
          
          void ( STDMETHODCALLTYPE *CopyTileMappings )( 
              ID3D12CommandQueue * This,
              _In_  ID3D12Resource *pDstResource,
              _In_  const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate,
              _In_  ID3D12Resource *pSrcResource,
              _In_  const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate,
              _In_  const D3D12_TILE_REGION_SIZE *pRegionSize,
              D3D12_TILE_MAPPING_FLAGS Flags);
          
          void ( STDMETHODCALLTYPE *ExecuteCommandLists )( 
              ID3D12CommandQueue * This,
              _In_  UINT NumCommandLists,
              _In_reads_(NumCommandLists)  ID3D12CommandList *const *ppCommandLists);
          
          void ( STDMETHODCALLTYPE *SetMarker )( 
              ID3D12CommandQueue * This,
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size);
          
          void ( STDMETHODCALLTYPE *BeginEvent )( 
              ID3D12CommandQueue * This,
              UINT Metadata,
              _In_reads_bytes_opt_(Size)  const void *pData,
              UINT Size);
          
          void ( STDMETHODCALLTYPE *EndEvent )( 
              ID3D12CommandQueue * This);
          
          HRESULT ( STDMETHODCALLTYPE *Signal )( 
              ID3D12CommandQueue * This,
              ID3D12Fence *pFence,
              UINT64 Value);
          
          HRESULT ( STDMETHODCALLTYPE *Wait )( 
              ID3D12CommandQueue * This,
              ID3D12Fence *pFence,
              UINT64 Value);
          
          HRESULT ( STDMETHODCALLTYPE *GetTimestampFrequency )( 
              ID3D12CommandQueue * This,
              _Out_  UINT64 *pFrequency);
          
          HRESULT ( STDMETHODCALLTYPE *GetClockCalibration )( 
              ID3D12CommandQueue * This,
              _Out_  UINT64 *pGpuTimestamp,
              _Out_  UINT64 *pCpuTimestamp);
          
          D3D12_COMMAND_QUEUE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
              ID3D12CommandQueue * This);
          
          END_INTERFACE
      } ID3D12CommandQueueVtbl;
  
      interface ID3D12CommandQueue
      {
          CONST_VTBL struct ID3D12CommandQueueVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12CommandQueue_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12CommandQueue_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12CommandQueue_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12CommandQueue_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12CommandQueue_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  
  #define ID3D12CommandQueue_UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags)	\
      ( (This)->lpVtbl -> UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) ) 
  
  #define ID3D12CommandQueue_CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags)	\
      ( (This)->lpVtbl -> CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) ) 
  
  #define ID3D12CommandQueue_ExecuteCommandLists(This,NumCommandLists,ppCommandLists)	\
      ( (This)->lpVtbl -> ExecuteCommandLists(This,NumCommandLists,ppCommandLists) ) 
  
  #define ID3D12CommandQueue_SetMarker(This,Metadata,pData,Size)	\
      ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 
  
  #define ID3D12CommandQueue_BeginEvent(This,Metadata,pData,Size)	\
      ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 
  
  #define ID3D12CommandQueue_EndEvent(This)	\
      ( (This)->lpVtbl -> EndEvent(This) ) 
  
  #define ID3D12CommandQueue_Signal(This,pFence,Value)	\
      ( (This)->lpVtbl -> Signal(This,pFence,Value) ) 
  
  #define ID3D12CommandQueue_Wait(This,pFence,Value)	\
      ( (This)->lpVtbl -> Wait(This,pFence,Value) ) 
  
  #define ID3D12CommandQueue_GetTimestampFrequency(This,pFrequency)	\
      ( (This)->lpVtbl -> GetTimestampFrequency(This,pFrequency) ) 
  
  #define ID3D12CommandQueue_GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp)	\
      ( (This)->lpVtbl -> GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) ) 
  
  #define ID3D12CommandQueue_GetDesc(This)	\
      ( (This)->lpVtbl -> GetDesc(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  
  
  
  
  #endif 	/* __ID3D12CommandQueue_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12Device_INTERFACE_DEFINED__
  #define __ID3D12Device_INTERFACE_DEFINED__
  
  /* interface ID3D12Device */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12Device;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("189819f1-1db6-4b57-be54-1821339b85f7")
      ID3D12Device : public ID3D12Object
      {
      public:
          virtual UINT STDMETHODCALLTYPE GetNodeCount( void) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateCommandQueue( 
              _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppCommandQueue) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateCommandAllocator( 
              _In_  D3D12_COMMAND_LIST_TYPE type,
              REFIID riid,
              _COM_Outptr_  void **ppCommandAllocator) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateGraphicsPipelineState( 
              _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateComputePipelineState( 
              _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateCommandList( 
              _In_  UINT nodeMask,
              _In_  D3D12_COMMAND_LIST_TYPE type,
              _In_  ID3D12CommandAllocator *pCommandAllocator,
              _In_opt_  ID3D12PipelineState *pInitialState,
              REFIID riid,
              _COM_Outptr_  void **ppCommandList) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport( 
              D3D12_FEATURE Feature,
              _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
              UINT FeatureSupportDataSize) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateDescriptorHeap( 
              _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
              REFIID riid,
              _COM_Outptr_  void **ppvHeap) = 0;
          
          virtual UINT STDMETHODCALLTYPE GetDescriptorHandleIncrementSize( 
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateRootSignature( 
              _In_  UINT nodeMask,
              _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
              _In_  SIZE_T blobLengthInBytes,
              REFIID riid,
              _COM_Outptr_  void **ppvRootSignature) = 0;
          
          virtual void STDMETHODCALLTYPE CreateConstantBufferView( 
              _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE CreateShaderResourceView( 
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE CreateUnorderedAccessView( 
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  ID3D12Resource *pCounterResource,
              _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE CreateRenderTargetView( 
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE CreateDepthStencilView( 
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE CreateSampler( 
              _In_  const D3D12_SAMPLER_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
          
          virtual void STDMETHODCALLTYPE CopyDescriptors( 
              _In_  UINT NumDestDescriptorRanges,
              _In_reads_(NumDestDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
              _In_reads_opt_(NumDestDescriptorRanges)  const UINT *pDestDescriptorRangeSizes,
              _In_  UINT NumSrcDescriptorRanges,
              _In_reads_(NumSrcDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
              _In_reads_opt_(NumSrcDescriptorRanges)  const UINT *pSrcDescriptorRangeSizes,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0;
          
          virtual void STDMETHODCALLTYPE CopyDescriptorsSimple( 
              _In_  UINT NumDescriptors,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0;
          
          virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo( 
              _In_  UINT visibleMask,
              _In_  UINT numResourceDescs,
              _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs) = 0;
          
          virtual D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE GetCustomHeapProperties( 
              _In_  UINT nodeMask,
              D3D12_HEAP_TYPE heapType) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource( 
              _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
              D3D12_HEAP_FLAGS HeapFlags,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialResourceState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riidResource,
              _COM_Outptr_opt_  void **ppvResource) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateHeap( 
              _In_  const D3D12_HEAP_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvHeap) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource( 
              _In_  ID3D12Heap *pHeap,
              UINT64 HeapOffset,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvResource) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateReservedResource( 
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvResource) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateSharedHandle( 
              _In_  ID3D12DeviceChild *pObject,
              _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
              DWORD Access,
              _In_opt_  LPCWSTR Name,
              _Out_  HANDLE *pHandle) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE OpenSharedHandle( 
              _In_  HANDLE NTHandle,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvObj) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE OpenSharedHandleByName( 
              _In_  LPCWSTR Name,
              DWORD Access,
              /* [annotation][out] */ 
              _Out_  HANDLE *pNTHandle) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE MakeResident( 
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Evict( 
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateFence( 
              UINT64 InitialValue,
              D3D12_FENCE_FLAGS Flags,
              REFIID riid,
              _COM_Outptr_  void **ppFence) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0;
          
          virtual void STDMETHODCALLTYPE GetCopyableFootprints( 
              _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
              _In_range_(0,D3D12_REQ_SUBRESOURCES)  UINT FirstSubresource,
              _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)  UINT NumSubresources,
              UINT64 BaseOffset,
              _Out_writes_opt_(NumSubresources)  D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
              _Out_writes_opt_(NumSubresources)  UINT *pNumRows,
              _Out_writes_opt_(NumSubresources)  UINT64 *pRowSizeInBytes,
              _Out_opt_  UINT64 *pTotalBytes) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateQueryHeap( 
              _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvHeap) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SetStablePowerState( 
              BOOL Enable) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CreateCommandSignature( 
              _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
              _In_opt_  ID3D12RootSignature *pRootSignature,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvCommandSignature) = 0;
          
          virtual void STDMETHODCALLTYPE GetResourceTiling( 
              _In_  ID3D12Resource *pTiledResource,
              _Out_opt_  UINT *pNumTilesForEntireResource,
              _Out_opt_  D3D12_PACKED_MIP_INFO *pPackedMipDesc,
              _Out_opt_  D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips,
              _Inout_opt_  UINT *pNumSubresourceTilings,
              _In_  UINT FirstSubresourceTilingToGet,
              _Out_writes_(*pNumSubresourceTilings)  D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips) = 0;
          
          virtual LUID STDMETHODCALLTYPE GetAdapterLuid( void) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12DeviceVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12Device * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12Device * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12Device * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12Device * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12Device * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12Device * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12Device * This,
              _In_z_  LPCWSTR Name);
          
          UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
              ID3D12Device * This);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
              ID3D12Device * This,
              _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppCommandQueue);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
              ID3D12Device * This,
              _In_  D3D12_COMMAND_LIST_TYPE type,
              REFIID riid,
              _COM_Outptr_  void **ppCommandAllocator);
          
          HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
              ID3D12Device * This,
              _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState);
          
          HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
              ID3D12Device * This,
              _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
              ID3D12Device * This,
              _In_  UINT nodeMask,
              _In_  D3D12_COMMAND_LIST_TYPE type,
              _In_  ID3D12CommandAllocator *pCommandAllocator,
              _In_opt_  ID3D12PipelineState *pInitialState,
              REFIID riid,
              _COM_Outptr_  void **ppCommandList);
          
          HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
              ID3D12Device * This,
              D3D12_FEATURE Feature,
              _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
              UINT FeatureSupportDataSize);
          
          HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
              ID3D12Device * This,
              _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
              REFIID riid,
              _COM_Outptr_  void **ppvHeap);
          
          UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
              ID3D12Device * This,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
          
          HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
              ID3D12Device * This,
              _In_  UINT nodeMask,
              _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
              _In_  SIZE_T blobLengthInBytes,
              REFIID riid,
              _COM_Outptr_  void **ppvRootSignature);
          
          void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
              ID3D12Device * This,
              _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
              ID3D12Device * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
              ID3D12Device * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  ID3D12Resource *pCounterResource,
              _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
              ID3D12Device * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
              ID3D12Device * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateSampler )( 
              ID3D12Device * This,
              _In_  const D3D12_SAMPLER_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CopyDescriptors )( 
              ID3D12Device * This,
              _In_  UINT NumDestDescriptorRanges,
              _In_reads_(NumDestDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
              _In_reads_opt_(NumDestDescriptorRanges)  const UINT *pDestDescriptorRangeSizes,
              _In_  UINT NumSrcDescriptorRanges,
              _In_reads_(NumSrcDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
              _In_reads_opt_(NumSrcDescriptorRanges)  const UINT *pSrcDescriptorRangeSizes,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
          
          void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
              ID3D12Device * This,
              _In_  UINT NumDescriptors,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
          
          D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
              ID3D12Device * This,
              _In_  UINT visibleMask,
              _In_  UINT numResourceDescs,
              _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
          
          D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
              ID3D12Device * This,
              _In_  UINT nodeMask,
              D3D12_HEAP_TYPE heapType);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
              ID3D12Device * This,
              _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
              D3D12_HEAP_FLAGS HeapFlags,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialResourceState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riidResource,
              _COM_Outptr_opt_  void **ppvResource);
          
          HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
              ID3D12Device * This,
              _In_  const D3D12_HEAP_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvHeap);
          
          HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
              ID3D12Device * This,
              _In_  ID3D12Heap *pHeap,
              UINT64 HeapOffset,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvResource);
          
          HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
              ID3D12Device * This,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvResource);
          
          HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
              ID3D12Device * This,
              _In_  ID3D12DeviceChild *pObject,
              _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
              DWORD Access,
              _In_opt_  LPCWSTR Name,
              _Out_  HANDLE *pHandle);
          
          HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
              ID3D12Device * This,
              _In_  HANDLE NTHandle,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvObj);
          
          HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
              ID3D12Device * This,
              _In_  LPCWSTR Name,
              DWORD Access,
              /* [annotation][out] */ 
              _Out_  HANDLE *pNTHandle);
          
          HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
              ID3D12Device * This,
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
          
          HRESULT ( STDMETHODCALLTYPE *Evict )( 
              ID3D12Device * This,
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
          
          HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
              ID3D12Device * This,
              UINT64 InitialValue,
              D3D12_FENCE_FLAGS Flags,
              REFIID riid,
              _COM_Outptr_  void **ppFence);
          
          HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
              ID3D12Device * This);
          
          void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
              ID3D12Device * This,
              _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
              _In_range_(0,D3D12_REQ_SUBRESOURCES)  UINT FirstSubresource,
              _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)  UINT NumSubresources,
              UINT64 BaseOffset,
              _Out_writes_opt_(NumSubresources)  D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
              _Out_writes_opt_(NumSubresources)  UINT *pNumRows,
              _Out_writes_opt_(NumSubresources)  UINT64 *pRowSizeInBytes,
              _Out_opt_  UINT64 *pTotalBytes);
          
          HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
              ID3D12Device * This,
              _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvHeap);
          
          HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
              ID3D12Device * This,
              BOOL Enable);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
              ID3D12Device * This,
              _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
              _In_opt_  ID3D12RootSignature *pRootSignature,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvCommandSignature);
          
          void ( STDMETHODCALLTYPE *GetResourceTiling )( 
              ID3D12Device * This,
              _In_  ID3D12Resource *pTiledResource,
              _Out_opt_  UINT *pNumTilesForEntireResource,
              _Out_opt_  D3D12_PACKED_MIP_INFO *pPackedMipDesc,
              _Out_opt_  D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips,
              _Inout_opt_  UINT *pNumSubresourceTilings,
              _In_  UINT FirstSubresourceTilingToGet,
              _Out_writes_(*pNumSubresourceTilings)  D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips);
          
          LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
              ID3D12Device * This);
          
          END_INTERFACE
      } ID3D12DeviceVtbl;
  
      interface ID3D12Device
      {
          CONST_VTBL struct ID3D12DeviceVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #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) ) 
  
  
  #define ID3D12Device_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12Device_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12Device_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12Device_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12Device_GetNodeCount(This)	\
      ( (This)->lpVtbl -> GetNodeCount(This) ) 
  
  #define ID3D12Device_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
      ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 
  
  #define ID3D12Device_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
      ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 
  
  #define ID3D12Device_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
      ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 
  
  #define ID3D12Device_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
      ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 
  
  #define ID3D12Device_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
      ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 
  
  #define ID3D12Device_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
      ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 
  
  #define ID3D12Device_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
      ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 
  
  #define ID3D12Device_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
      ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 
  
  #define ID3D12Device_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
      ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 
  
  #define ID3D12Device_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device_CreateSampler(This,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
      ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 
  
  #define ID3D12Device_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
      ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
  
  #define ID3D12Device_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
      ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
  
  #define ID3D12Device_GetCustomHeapProperties(This,nodeMask,heapType)	\
      ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
  
  #define ID3D12Device_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
      ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 
  
  #define ID3D12Device_CreateHeap(This,pDesc,riid,ppvHeap)	\
      ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 
  
  #define ID3D12Device_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
      ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 
  
  #define ID3D12Device_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
      ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 
  
  #define ID3D12Device_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
      ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 
  
  #define ID3D12Device_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
      ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 
  
  #define ID3D12Device_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
      ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 
  
  #define ID3D12Device_MakeResident(This,NumObjects,ppObjects)	\
      ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 
  
  #define ID3D12Device_Evict(This,NumObjects,ppObjects)	\
      ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 
  
  #define ID3D12Device_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
      ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 
  
  #define ID3D12Device_GetDeviceRemovedReason(This)	\
      ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 
  
  #define ID3D12Device_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
      ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 
  
  #define ID3D12Device_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
      ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 
  
  #define ID3D12Device_SetStablePowerState(This,Enable)	\
      ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 
  
  #define ID3D12Device_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
      ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 
  
  #define ID3D12Device_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
      ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
  
  #define ID3D12Device_GetAdapterLuid(This)	\
      ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  #endif 	/* __ID3D12Device_INTERFACE_DEFINED__ */
  
  
  #ifndef __ID3D12PipelineLibrary_INTERFACE_DEFINED__
  #define __ID3D12PipelineLibrary_INTERFACE_DEFINED__
  
  /* interface ID3D12PipelineLibrary */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12PipelineLibrary;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("c64226a8-9201-46af-b4cc-53fb9ff7414f")
      ID3D12PipelineLibrary : public ID3D12DeviceChild
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE StorePipeline( 
              _In_opt_  LPCWSTR pName,
              _In_  ID3D12PipelineState *pPipeline) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE LoadGraphicsPipeline( 
              _In_  LPCWSTR pName,
              _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE LoadComputePipeline( 
              _In_  LPCWSTR pName,
              _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState) = 0;
          
          virtual SIZE_T STDMETHODCALLTYPE GetSerializedSize( void) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Serialize( 
              _Out_writes_(DataSizeInBytes)  void *pData,
              SIZE_T DataSizeInBytes) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12PipelineLibraryVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12PipelineLibrary * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12PipelineLibrary * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12PipelineLibrary * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12PipelineLibrary * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12PipelineLibrary * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12PipelineLibrary * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12PipelineLibrary * This,
              _In_z_  LPCWSTR Name);
          
          HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
              ID3D12PipelineLibrary * This,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvDevice);
          
          HRESULT ( STDMETHODCALLTYPE *StorePipeline )( 
              ID3D12PipelineLibrary * This,
              _In_opt_  LPCWSTR pName,
              _In_  ID3D12PipelineState *pPipeline);
          
          HRESULT ( STDMETHODCALLTYPE *LoadGraphicsPipeline )( 
              ID3D12PipelineLibrary * This,
              _In_  LPCWSTR pName,
              _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState);
          
          HRESULT ( STDMETHODCALLTYPE *LoadComputePipeline )( 
              ID3D12PipelineLibrary * This,
              _In_  LPCWSTR pName,
              _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState);
          
          SIZE_T ( STDMETHODCALLTYPE *GetSerializedSize )( 
              ID3D12PipelineLibrary * This);
          
          HRESULT ( STDMETHODCALLTYPE *Serialize )( 
              ID3D12PipelineLibrary * This,
              _Out_writes_(DataSizeInBytes)  void *pData,
              SIZE_T DataSizeInBytes);
          
          END_INTERFACE
      } ID3D12PipelineLibraryVtbl;
  
      interface ID3D12PipelineLibrary
      {
          CONST_VTBL struct ID3D12PipelineLibraryVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define ID3D12PipelineLibrary_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define ID3D12PipelineLibrary_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define ID3D12PipelineLibrary_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define ID3D12PipelineLibrary_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12PipelineLibrary_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12PipelineLibrary_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12PipelineLibrary_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12PipelineLibrary_GetDevice(This,riid,ppvDevice)	\
      ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 
  
  
  #define ID3D12PipelineLibrary_StorePipeline(This,pName,pPipeline)	\
      ( (This)->lpVtbl -> StorePipeline(This,pName,pPipeline) ) 
  
  #define ID3D12PipelineLibrary_LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState)	\
      ( (This)->lpVtbl -> LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState) ) 
  
  #define ID3D12PipelineLibrary_LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState)	\
      ( (This)->lpVtbl -> LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState) ) 
  
  #define ID3D12PipelineLibrary_GetSerializedSize(This)	\
      ( (This)->lpVtbl -> GetSerializedSize(This) ) 
  
  #define ID3D12PipelineLibrary_Serialize(This,pData,DataSizeInBytes)	\
      ( (This)->lpVtbl -> Serialize(This,pData,DataSizeInBytes) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12PipelineLibrary_INTERFACE_DEFINED__ */
  
  
  /* interface __MIDL_itf_d3d12_0000_0019 */
  /* [local] */ 
  
  typedef 
  enum D3D12_MULTIPLE_FENCE_WAIT_FLAGS
      {
          D3D12_MULTIPLE_FENCE_WAIT_FLAG_NONE	= 0,
          D3D12_MULTIPLE_FENCE_WAIT_FLAG_ANY	= 0x1,
          D3D12_MULTIPLE_FENCE_WAIT_FLAG_ALL	= 0
      } 	D3D12_MULTIPLE_FENCE_WAIT_FLAGS;
  
  DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTIPLE_FENCE_WAIT_FLAGS );
  typedef 
  enum D3D12_RESIDENCY_PRIORITY
      {
          D3D12_RESIDENCY_PRIORITY_MINIMUM	= 0x28000000,
          D3D12_RESIDENCY_PRIORITY_LOW	= 0x50000000,
          D3D12_RESIDENCY_PRIORITY_NORMAL	= 0x78000000,
          D3D12_RESIDENCY_PRIORITY_HIGH	= 0xa0000000,
          D3D12_RESIDENCY_PRIORITY_MAXIMUM	= 0xc8000000
      } 	D3D12_RESIDENCY_PRIORITY;
  
  
  
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0019_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0019_v0_0_s_ifspec;
  
  #ifndef __ID3D12Device1_INTERFACE_DEFINED__
  #define __ID3D12Device1_INTERFACE_DEFINED__
  
  /* interface ID3D12Device1 */
  /* [unique][local][object][uuid] */ 
  
  
  EXTERN_C const IID IID_ID3D12Device1;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("77acce80-638e-4e65-8895-c1f23386863e")
      ID3D12Device1 : public ID3D12Device
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE CreatePipelineLibrary( 
              _In_reads_(BlobLength)  const void *pLibraryBlob,
              SIZE_T BlobLength,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineLibrary) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SetEventOnMultipleFenceCompletion( 
              _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
              _In_reads_(NumFences)  const UINT64 *pFenceValues,
              UINT NumFences,
              D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
              HANDLE hEvent) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SetResidencyPriority( 
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
              _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct ID3D12Device1Vtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              ID3D12Device1 * This,
              REFIID riid,
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              ID3D12Device1 * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              ID3D12Device1 * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
              ID3D12Device1 * This,
              _In_  REFGUID guid,
              _Inout_  UINT *pDataSize,
              _Out_writes_bytes_opt_( *pDataSize )  void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
              ID3D12Device1 * This,
              _In_  REFGUID guid,
              _In_  UINT DataSize,
              _In_reads_bytes_opt_( DataSize )  const void *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
              ID3D12Device1 * This,
              _In_  REFGUID guid,
              _In_opt_  const IUnknown *pData);
          
          HRESULT ( STDMETHODCALLTYPE *SetName )( 
              ID3D12Device1 * This,
              _In_z_  LPCWSTR Name);
          
          UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
              ID3D12Device1 * This);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
              ID3D12Device1 * This,
              _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppCommandQueue);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
              ID3D12Device1 * This,
              _In_  D3D12_COMMAND_LIST_TYPE type,
              REFIID riid,
              _COM_Outptr_  void **ppCommandAllocator);
          
          HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
              ID3D12Device1 * This,
              _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState);
          
          HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
              ID3D12Device1 * This,
              _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineState);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
              ID3D12Device1 * This,
              _In_  UINT nodeMask,
              _In_  D3D12_COMMAND_LIST_TYPE type,
              _In_  ID3D12CommandAllocator *pCommandAllocator,
              _In_opt_  ID3D12PipelineState *pInitialState,
              REFIID riid,
              _COM_Outptr_  void **ppCommandList);
          
          HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
              ID3D12Device1 * This,
              D3D12_FEATURE Feature,
              _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
              UINT FeatureSupportDataSize);
          
          HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
              ID3D12Device1 * This,
              _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
              REFIID riid,
              _COM_Outptr_  void **ppvHeap);
          
          UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
              ID3D12Device1 * This,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
          
          HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
              ID3D12Device1 * This,
              _In_  UINT nodeMask,
              _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
              _In_  SIZE_T blobLengthInBytes,
              REFIID riid,
              _COM_Outptr_  void **ppvRootSignature);
          
          void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
              ID3D12Device1 * This,
              _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
              ID3D12Device1 * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
              ID3D12Device1 * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  ID3D12Resource *pCounterResource,
              _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
              ID3D12Device1 * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
              ID3D12Device1 * This,
              _In_opt_  ID3D12Resource *pResource,
              _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CreateSampler )( 
              ID3D12Device1 * This,
              _In_  const D3D12_SAMPLER_DESC *pDesc,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
          
          void ( STDMETHODCALLTYPE *CopyDescriptors )( 
              ID3D12Device1 * This,
              _In_  UINT NumDestDescriptorRanges,
              _In_reads_(NumDestDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
              _In_reads_opt_(NumDestDescriptorRanges)  const UINT *pDestDescriptorRangeSizes,
              _In_  UINT NumSrcDescriptorRanges,
              _In_reads_(NumSrcDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
              _In_reads_opt_(NumSrcDescriptorRanges)  const UINT *pSrcDescriptorRangeSizes,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
          
          void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
              ID3D12Device1 * This,
              _In_  UINT NumDescriptors,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
              _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
              _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
          
          D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
              ID3D12Device1 * This,
              _In_  UINT visibleMask,
              _In_  UINT numResourceDescs,
              _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
          
          D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
              ID3D12Device1 * This,
              _In_  UINT nodeMask,
              D3D12_HEAP_TYPE heapType);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
              ID3D12Device1 * This,
              _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
              D3D12_HEAP_FLAGS HeapFlags,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialResourceState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riidResource,
              _COM_Outptr_opt_  void **ppvResource);
          
          HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
              ID3D12Device1 * This,
              _In_  const D3D12_HEAP_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvHeap);
          
          HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
              ID3D12Device1 * This,
              _In_  ID3D12Heap *pHeap,
              UINT64 HeapOffset,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvResource);
          
          HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
              ID3D12Device1 * This,
              _In_  const D3D12_RESOURCE_DESC *pDesc,
              D3D12_RESOURCE_STATES InitialState,
              _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvResource);
          
          HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
              ID3D12Device1 * This,
              _In_  ID3D12DeviceChild *pObject,
              _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
              DWORD Access,
              _In_opt_  LPCWSTR Name,
              _Out_  HANDLE *pHandle);
          
          HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
              ID3D12Device1 * This,
              _In_  HANDLE NTHandle,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvObj);
          
          HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
              ID3D12Device1 * This,
              _In_  LPCWSTR Name,
              DWORD Access,
              /* [annotation][out] */ 
              _Out_  HANDLE *pNTHandle);
          
          HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
              ID3D12Device1 * This,
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
          
          HRESULT ( STDMETHODCALLTYPE *Evict )( 
              ID3D12Device1 * This,
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
          
          HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
              ID3D12Device1 * This,
              UINT64 InitialValue,
              D3D12_FENCE_FLAGS Flags,
              REFIID riid,
              _COM_Outptr_  void **ppFence);
          
          HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
              ID3D12Device1 * This);
          
          void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
              ID3D12Device1 * This,
              _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
              _In_range_(0,D3D12_REQ_SUBRESOURCES)  UINT FirstSubresource,
              _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)  UINT NumSubresources,
              UINT64 BaseOffset,
              _Out_writes_opt_(NumSubresources)  D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
              _Out_writes_opt_(NumSubresources)  UINT *pNumRows,
              _Out_writes_opt_(NumSubresources)  UINT64 *pRowSizeInBytes,
              _Out_opt_  UINT64 *pTotalBytes);
          
          HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
              ID3D12Device1 * This,
              _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvHeap);
          
          HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
              ID3D12Device1 * This,
              BOOL Enable);
          
          HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
              ID3D12Device1 * This,
              _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
              _In_opt_  ID3D12RootSignature *pRootSignature,
              REFIID riid,
              _COM_Outptr_opt_  void **ppvCommandSignature);
          
          void ( STDMETHODCALLTYPE *GetResourceTiling )( 
              ID3D12Device1 * This,
              _In_  ID3D12Resource *pTiledResource,
              _Out_opt_  UINT *pNumTilesForEntireResource,
              _Out_opt_  D3D12_PACKED_MIP_INFO *pPackedMipDesc,
              _Out_opt_  D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips,
              _Inout_opt_  UINT *pNumSubresourceTilings,
              _In_  UINT FirstSubresourceTilingToGet,
              _Out_writes_(*pNumSubresourceTilings)  D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips);
          
          LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
              ID3D12Device1 * This);
          
          HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
              ID3D12Device1 * This,
              _In_reads_(BlobLength)  const void *pLibraryBlob,
              SIZE_T BlobLength,
              REFIID riid,
              _COM_Outptr_  void **ppPipelineLibrary);
          
          HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
              ID3D12Device1 * This,
              _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
              _In_reads_(NumFences)  const UINT64 *pFenceValues,
              UINT NumFences,
              D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
              HANDLE hEvent);
          
          HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
              ID3D12Device1 * This,
              UINT NumObjects,
              _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
              _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
          
          END_INTERFACE
      } ID3D12Device1Vtbl;
  
      interface ID3D12Device1
      {
          CONST_VTBL struct ID3D12Device1Vtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define ID3D12Device1_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define ID3D12Device1_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define ID3D12Device1_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define ID3D12Device1_GetPrivateData(This,guid,pDataSize,pData)	\
      ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 
  
  #define ID3D12Device1_SetPrivateData(This,guid,DataSize,pData)	\
      ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 
  
  #define ID3D12Device1_SetPrivateDataInterface(This,guid,pData)	\
      ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 
  
  #define ID3D12Device1_SetName(This,Name)	\
      ( (This)->lpVtbl -> SetName(This,Name) ) 
  
  
  #define ID3D12Device1_GetNodeCount(This)	\
      ( (This)->lpVtbl -> GetNodeCount(This) ) 
  
  #define ID3D12Device1_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
      ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 
  
  #define ID3D12Device1_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
      ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 
  
  #define ID3D12Device1_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
      ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 
  
  #define ID3D12Device1_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
      ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 
  
  #define ID3D12Device1_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
      ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 
  
  #define ID3D12Device1_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
      ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 
  
  #define ID3D12Device1_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
      ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 
  
  #define ID3D12Device1_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
      ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 
  
  #define ID3D12Device1_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
      ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 
  
  #define ID3D12Device1_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device1_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device1_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device1_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device1_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device1_CreateSampler(This,pDesc,DestDescriptor)	\
      ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 
  
  #define ID3D12Device1_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
      ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 
  
  #define ID3D12Device1_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
      ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
  
  #define ID3D12Device1_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
      ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
  
  #define ID3D12Device1_GetCustomHeapProperties(This,nodeMask,heapType)	\
      ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
  
  #define ID3D12Device1_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
      ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 
  
  #define ID3D12Device1_CreateHeap(This,pDesc,riid,ppvHeap)	\
      ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 
  
  #define ID3D12Device1_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
      ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 
  
  #define ID3D12Device1_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
      ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 
  
  #define ID3D12Device1_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
      ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 
  
  #define ID3D12Device1_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
      ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 
  
  #define ID3D12Device1_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
      ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 
  
  #define ID3D12Device1_MakeResident(This,NumObjects,ppObjects)	\
      ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 
  
  #define ID3D12Device1_Evict(This,NumObjects,ppObjects)	\
      ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 
  
  #define ID3D12Device1_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
      ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 
  
  #define ID3D12Device1_GetDeviceRemovedReason(This)	\
      ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 
  
  #define ID3D12Device1_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
      ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 
  
  #define ID3D12Device1_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
      ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 
  
  #define ID3D12Device1_SetStablePowerState(This,Enable)	\
      ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 
  
  #define ID3D12Device1_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
      ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 
  
  #define ID3D12Device1_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
      ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
  
  #define ID3D12Device1_GetAdapterLuid(This)	\
      ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
  
  
  #define ID3D12Device1_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
      ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 
  
  #define ID3D12Device1_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
      ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 
  
  #define ID3D12Device1_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
      ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __ID3D12Device1_INTERFACE_DEFINED__ */
  
  
  /* interface __MIDL_itf_d3d12_0000_0020 */
  /* [local] */ 
  
  typedef struct D3D12_SUBRESOURCE_DATA
      {
      const void *pData;
      LONG_PTR RowPitch;
      LONG_PTR SlicePitch;
      } 	D3D12_SUBRESOURCE_DATA;
  
  typedef struct D3D12_MEMCPY_DEST
      {
      void *pData;
      SIZE_T RowPitch;
      SIZE_T SlicePitch;
      } 	D3D12_MEMCPY_DEST;
  
  #if !defined( D3D12_IGNORE_SDK_LAYERS ) 
  #include "d3d12sdklayers.h" 
  #endif 
  
  ///////////////////////////////////////////////////////////////////////////
  // D3D12CreateDevice
  // ------------------
  //
  // pAdapter
  //      If NULL, D3D12CreateDevice will choose the primary adapter.
  //      If non-NULL, D3D12CreateDevice will use the provided adapter.
  // MinimumFeatureLevel
  //      The minimum feature level required for successful device creation.
  // riid
  //      The interface IID of the device to be returned. Expected: ID3D12Device.
  // ppDevice
  //      Pointer to returned interface. May be NULL.
  //
  // Return Values
  //  Any of those documented for 
  //          CreateDXGIFactory1
  //          IDXGIFactory::EnumAdapters
  //          D3D12CreateDevice
  //
  ///////////////////////////////////////////////////////////////////////////
  typedef HRESULT (WINAPI* PFN_D3D12_CREATE_DEVICE)( _In_opt_ IUnknown*, 
      D3D_FEATURE_LEVEL, 
      _In_ REFIID, _COM_Outptr_opt_ void** );
  
  HRESULT WINAPI D3D12CreateDevice(
      _In_opt_ IUnknown* pAdapter,
      D3D_FEATURE_LEVEL MinimumFeatureLevel,
      _In_ REFIID riid, // Expected: ID3D12Device
      _COM_Outptr_opt_ void** ppDevice );
  
  
  typedef HRESULT (WINAPI* PFN_D3D12_GET_DEBUG_INTERFACE)( _In_ REFIID, _COM_Outptr_opt_ void** );
  
  HRESULT WINAPI D3D12GetDebugInterface( _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug );
  
  #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
  #pragma endregion
  DEFINE_GUID(IID_ID3D12Object,0xc4fec28f,0x7966,0x4e95,0x9f,0x94,0xf4,0x31,0xcb,0x56,0xc3,0xb8);
  DEFINE_GUID(IID_ID3D12DeviceChild,0x905db94b,0xa00c,0x4140,0x9d,0xf5,0x2b,0x64,0xca,0x9e,0xa3,0x57);
  DEFINE_GUID(IID_ID3D12RootSignature,0xc54a6b66,0x72df,0x4ee8,0x8b,0xe5,0xa9,0x46,0xa1,0x42,0x92,0x14);
  DEFINE_GUID(IID_ID3D12RootSignatureDeserializer,0x34AB647B,0x3CC8,0x46AC,0x84,0x1B,0xC0,0x96,0x56,0x45,0xC0,0x46);
  DEFINE_GUID(IID_ID3D12VersionedRootSignatureDeserializer,0x7F91CE67,0x090C,0x4BB7,0xB7,0x8E,0xED,0x8F,0xF2,0xE3,0x1D,0xA0);
  DEFINE_GUID(IID_ID3D12Pageable,0x63ee58fb,0x1268,0x4835,0x86,0xda,0xf0,0x08,0xce,0x62,0xf0,0xd6);
  DEFINE_GUID(IID_ID3D12Heap,0x6b3b2502,0x6e51,0x45b3,0x90,0xee,0x98,0x84,0x26,0x5e,0x8d,0xf3);
  DEFINE_GUID(IID_ID3D12Resource,0x696442be,0xa72e,0x4059,0xbc,0x79,0x5b,0x5c,0x98,0x04,0x0f,0xad);
  DEFINE_GUID(IID_ID3D12CommandAllocator,0x6102dee4,0xaf59,0x4b09,0xb9,0x99,0xb4,0x4d,0x73,0xf0,0x9b,0x24);
  DEFINE_GUID(IID_ID3D12Fence,0x0a753dcf,0xc4d8,0x4b91,0xad,0xf6,0xbe,0x5a,0x60,0xd9,0x5a,0x76);
  DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45);
  DEFINE_GUID(IID_ID3D12DescriptorHeap,0x8efb471d,0x616c,0x4f49,0x90,0xf7,0x12,0x7b,0xb7,0x63,0xfa,0x51);
  DEFINE_GUID(IID_ID3D12QueryHeap,0x0d9658ae,0xed45,0x469e,0xa6,0x1d,0x97,0x0e,0xc5,0x83,0xca,0xb4);
  DEFINE_GUID(IID_ID3D12CommandSignature,0xc36a797c,0xec80,0x4f0a,0x89,0x85,0xa7,0xb2,0x47,0x50,0x82,0xd1);
  DEFINE_GUID(IID_ID3D12CommandList,0x7116d91c,0xe7e4,0x47ce,0xb8,0xc6,0xec,0x81,0x68,0xf4,0x37,0xe5);
  DEFINE_GUID(IID_ID3D12GraphicsCommandList,0x5b160d0f,0xac1b,0x4185,0x8b,0xa8,0xb3,0xae,0x42,0xa5,0xa4,0x55);
  DEFINE_GUID(IID_ID3D12CommandQueue,0x0ec870a6,0x5d7e,0x4c22,0x8c,0xfc,0x5b,0xaa,0xe0,0x76,0x16,0xed);
  DEFINE_GUID(IID_ID3D12Device,0x189819f1,0x1db6,0x4b57,0xbe,0x54,0x18,0x21,0x33,0x9b,0x85,0xf7);
  DEFINE_GUID(IID_ID3D12PipelineLibrary,0xc64226a8,0x9201,0x46af,0xb4,0xcc,0x53,0xfb,0x9f,0xf7,0x41,0x4f);
  DEFINE_GUID(IID_ID3D12Device1,0x77acce80,0x638e,0x4e65,0x88,0x95,0xc1,0xf2,0x33,0x86,0x86,0x3e);
  
  
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0020_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0020_v0_0_s_ifspec;
  
  /* Additional Prototypes for ALL interfaces */
  
  /* end of Additional Prototypes */
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif
  
  
  