/*-------------------------------------------------------------------------------------
 *
 * Copyright (c) Microsoft Corporation
 * Licensed under the MIT license
 *
 *-------------------------------------------------------------------------------------*/


/* this ALWAYS GENERATED file contains the definitions for the interfaces */


 /* File created by MIDL compiler version 8.01.0628 */



/* 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

#ifndef DECLSPEC_XFGVIRT
#if defined(_CONTROL_FLOW_GUARD_XFG)
#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func))
#else
#define DECLSPEC_XFGVIRT(base, func)
#endif
#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 __ID3D12Fence1_FWD_DEFINED__
#define __ID3D12Fence1_FWD_DEFINED__
typedef interface ID3D12Fence1 ID3D12Fence1;

#endif 	/* __ID3D12Fence1_FWD_DEFINED__ */


#ifndef __ID3D12PipelineState_FWD_DEFINED__
#define __ID3D12PipelineState_FWD_DEFINED__
typedef interface ID3D12PipelineState ID3D12PipelineState;

#endif 	/* __ID3D12PipelineState_FWD_DEFINED__ */


#ifndef __ID3D12PipelineState1_FWD_DEFINED__
#define __ID3D12PipelineState1_FWD_DEFINED__
typedef interface ID3D12PipelineState1 ID3D12PipelineState1;

#endif 	/* __ID3D12PipelineState1_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 __ID3D12GraphicsCommandList1_FWD_DEFINED__
#define __ID3D12GraphicsCommandList1_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList1 ID3D12GraphicsCommandList1;

#endif 	/* __ID3D12GraphicsCommandList1_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList2_FWD_DEFINED__
#define __ID3D12GraphicsCommandList2_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList2 ID3D12GraphicsCommandList2;

#endif 	/* __ID3D12GraphicsCommandList2_FWD_DEFINED__ */


#ifndef __ID3D12CommandQueue_FWD_DEFINED__
#define __ID3D12CommandQueue_FWD_DEFINED__
typedef interface ID3D12CommandQueue ID3D12CommandQueue;

#endif 	/* __ID3D12CommandQueue_FWD_DEFINED__ */


#ifndef __ID3D12CommandQueue1_FWD_DEFINED__
#define __ID3D12CommandQueue1_FWD_DEFINED__
typedef interface ID3D12CommandQueue1 ID3D12CommandQueue1;

#endif 	/* __ID3D12CommandQueue1_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 __ID3D12PipelineLibrary1_FWD_DEFINED__
#define __ID3D12PipelineLibrary1_FWD_DEFINED__
typedef interface ID3D12PipelineLibrary1 ID3D12PipelineLibrary1;

#endif 	/* __ID3D12PipelineLibrary1_FWD_DEFINED__ */


#ifndef __ID3D12Device1_FWD_DEFINED__
#define __ID3D12Device1_FWD_DEFINED__
typedef interface ID3D12Device1 ID3D12Device1;

#endif 	/* __ID3D12Device1_FWD_DEFINED__ */


#ifndef __ID3D12Device2_FWD_DEFINED__
#define __ID3D12Device2_FWD_DEFINED__
typedef interface ID3D12Device2 ID3D12Device2;

#endif 	/* __ID3D12Device2_FWD_DEFINED__ */


#ifndef __ID3D12Device3_FWD_DEFINED__
#define __ID3D12Device3_FWD_DEFINED__
typedef interface ID3D12Device3 ID3D12Device3;

#endif 	/* __ID3D12Device3_FWD_DEFINED__ */


#ifndef __ID3D12ProtectedSession_FWD_DEFINED__
#define __ID3D12ProtectedSession_FWD_DEFINED__
typedef interface ID3D12ProtectedSession ID3D12ProtectedSession;

#endif 	/* __ID3D12ProtectedSession_FWD_DEFINED__ */


#ifndef __ID3D12ProtectedResourceSession_FWD_DEFINED__
#define __ID3D12ProtectedResourceSession_FWD_DEFINED__
typedef interface ID3D12ProtectedResourceSession ID3D12ProtectedResourceSession;

#endif 	/* __ID3D12ProtectedResourceSession_FWD_DEFINED__ */


#ifndef __ID3D12Device4_FWD_DEFINED__
#define __ID3D12Device4_FWD_DEFINED__
typedef interface ID3D12Device4 ID3D12Device4;

#endif 	/* __ID3D12Device4_FWD_DEFINED__ */


#ifndef __ID3D12LifetimeOwner_FWD_DEFINED__
#define __ID3D12LifetimeOwner_FWD_DEFINED__
typedef interface ID3D12LifetimeOwner ID3D12LifetimeOwner;

#endif 	/* __ID3D12LifetimeOwner_FWD_DEFINED__ */


#ifndef __ID3D12SwapChainAssistant_FWD_DEFINED__
#define __ID3D12SwapChainAssistant_FWD_DEFINED__
typedef interface ID3D12SwapChainAssistant ID3D12SwapChainAssistant;

#endif 	/* __ID3D12SwapChainAssistant_FWD_DEFINED__ */


#ifndef __ID3D12LifetimeTracker_FWD_DEFINED__
#define __ID3D12LifetimeTracker_FWD_DEFINED__
typedef interface ID3D12LifetimeTracker ID3D12LifetimeTracker;

#endif 	/* __ID3D12LifetimeTracker_FWD_DEFINED__ */


#ifndef __ID3D12StateObject_FWD_DEFINED__
#define __ID3D12StateObject_FWD_DEFINED__
typedef interface ID3D12StateObject ID3D12StateObject;

#endif 	/* __ID3D12StateObject_FWD_DEFINED__ */


#ifndef __ID3D12StateObjectProperties_FWD_DEFINED__
#define __ID3D12StateObjectProperties_FWD_DEFINED__
typedef interface ID3D12StateObjectProperties ID3D12StateObjectProperties;

#endif 	/* __ID3D12StateObjectProperties_FWD_DEFINED__ */


#ifndef __ID3D12StateObjectProperties1_FWD_DEFINED__
#define __ID3D12StateObjectProperties1_FWD_DEFINED__
typedef interface ID3D12StateObjectProperties1 ID3D12StateObjectProperties1;

#endif 	/* __ID3D12StateObjectProperties1_FWD_DEFINED__ */


#ifndef __ID3D12StateObjectProperties2_FWD_DEFINED__
#define __ID3D12StateObjectProperties2_FWD_DEFINED__
typedef interface ID3D12StateObjectProperties2 ID3D12StateObjectProperties2;

#endif 	/* __ID3D12StateObjectProperties2_FWD_DEFINED__ */


#ifndef __ID3D12WorkGraphProperties_FWD_DEFINED__
#define __ID3D12WorkGraphProperties_FWD_DEFINED__
typedef interface ID3D12WorkGraphProperties ID3D12WorkGraphProperties;

#endif 	/* __ID3D12WorkGraphProperties_FWD_DEFINED__ */


#ifndef __ID3D12Device5_FWD_DEFINED__
#define __ID3D12Device5_FWD_DEFINED__
typedef interface ID3D12Device5 ID3D12Device5;

#endif 	/* __ID3D12Device5_FWD_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__
#define __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__
typedef interface ID3D12DeviceRemovedExtendedDataSettings ID3D12DeviceRemovedExtendedDataSettings;

#endif 	/* __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedDataSettings1_FWD_DEFINED__
#define __ID3D12DeviceRemovedExtendedDataSettings1_FWD_DEFINED__
typedef interface ID3D12DeviceRemovedExtendedDataSettings1 ID3D12DeviceRemovedExtendedDataSettings1;

#endif 	/* __ID3D12DeviceRemovedExtendedDataSettings1_FWD_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedDataSettings2_FWD_DEFINED__
#define __ID3D12DeviceRemovedExtendedDataSettings2_FWD_DEFINED__
typedef interface ID3D12DeviceRemovedExtendedDataSettings2 ID3D12DeviceRemovedExtendedDataSettings2;

#endif 	/* __ID3D12DeviceRemovedExtendedDataSettings2_FWD_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__
#define __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__
typedef interface ID3D12DeviceRemovedExtendedData ID3D12DeviceRemovedExtendedData;

#endif 	/* __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedData1_FWD_DEFINED__
#define __ID3D12DeviceRemovedExtendedData1_FWD_DEFINED__
typedef interface ID3D12DeviceRemovedExtendedData1 ID3D12DeviceRemovedExtendedData1;

#endif 	/* __ID3D12DeviceRemovedExtendedData1_FWD_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedData2_FWD_DEFINED__
#define __ID3D12DeviceRemovedExtendedData2_FWD_DEFINED__
typedef interface ID3D12DeviceRemovedExtendedData2 ID3D12DeviceRemovedExtendedData2;

#endif 	/* __ID3D12DeviceRemovedExtendedData2_FWD_DEFINED__ */


#ifndef __ID3D12Device6_FWD_DEFINED__
#define __ID3D12Device6_FWD_DEFINED__
typedef interface ID3D12Device6 ID3D12Device6;

#endif 	/* __ID3D12Device6_FWD_DEFINED__ */


#ifndef __ID3D12ProtectedResourceSession1_FWD_DEFINED__
#define __ID3D12ProtectedResourceSession1_FWD_DEFINED__
typedef interface ID3D12ProtectedResourceSession1 ID3D12ProtectedResourceSession1;

#endif 	/* __ID3D12ProtectedResourceSession1_FWD_DEFINED__ */


#ifndef __ID3D12Device7_FWD_DEFINED__
#define __ID3D12Device7_FWD_DEFINED__
typedef interface ID3D12Device7 ID3D12Device7;

#endif 	/* __ID3D12Device7_FWD_DEFINED__ */


#ifndef __ID3D12Device8_FWD_DEFINED__
#define __ID3D12Device8_FWD_DEFINED__
typedef interface ID3D12Device8 ID3D12Device8;

#endif 	/* __ID3D12Device8_FWD_DEFINED__ */


#ifndef __ID3D12Resource1_FWD_DEFINED__
#define __ID3D12Resource1_FWD_DEFINED__
typedef interface ID3D12Resource1 ID3D12Resource1;

#endif 	/* __ID3D12Resource1_FWD_DEFINED__ */


#ifndef __ID3D12Resource2_FWD_DEFINED__
#define __ID3D12Resource2_FWD_DEFINED__
typedef interface ID3D12Resource2 ID3D12Resource2;

#endif 	/* __ID3D12Resource2_FWD_DEFINED__ */


#ifndef __ID3D12Heap1_FWD_DEFINED__
#define __ID3D12Heap1_FWD_DEFINED__
typedef interface ID3D12Heap1 ID3D12Heap1;

#endif 	/* __ID3D12Heap1_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList3_FWD_DEFINED__
#define __ID3D12GraphicsCommandList3_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList3 ID3D12GraphicsCommandList3;

#endif 	/* __ID3D12GraphicsCommandList3_FWD_DEFINED__ */


#ifndef __ID3D12MetaCommand_FWD_DEFINED__
#define __ID3D12MetaCommand_FWD_DEFINED__
typedef interface ID3D12MetaCommand ID3D12MetaCommand;

#endif 	/* __ID3D12MetaCommand_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList4_FWD_DEFINED__
#define __ID3D12GraphicsCommandList4_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList4 ID3D12GraphicsCommandList4;

#endif 	/* __ID3D12GraphicsCommandList4_FWD_DEFINED__ */


#ifndef __ID3D12ShaderCacheSession_FWD_DEFINED__
#define __ID3D12ShaderCacheSession_FWD_DEFINED__
typedef interface ID3D12ShaderCacheSession ID3D12ShaderCacheSession;

#endif 	/* __ID3D12ShaderCacheSession_FWD_DEFINED__ */


#ifndef __ID3D12Device9_FWD_DEFINED__
#define __ID3D12Device9_FWD_DEFINED__
typedef interface ID3D12Device9 ID3D12Device9;

#endif 	/* __ID3D12Device9_FWD_DEFINED__ */


#ifndef __ID3D12Device10_FWD_DEFINED__
#define __ID3D12Device10_FWD_DEFINED__
typedef interface ID3D12Device10 ID3D12Device10;

#endif 	/* __ID3D12Device10_FWD_DEFINED__ */


#ifndef __ID3D12Device11_FWD_DEFINED__
#define __ID3D12Device11_FWD_DEFINED__
typedef interface ID3D12Device11 ID3D12Device11;

#endif 	/* __ID3D12Device11_FWD_DEFINED__ */


#ifndef __ID3D12Device12_FWD_DEFINED__
#define __ID3D12Device12_FWD_DEFINED__
typedef interface ID3D12Device12 ID3D12Device12;

#endif 	/* __ID3D12Device12_FWD_DEFINED__ */


#ifndef __ID3D12Device13_FWD_DEFINED__
#define __ID3D12Device13_FWD_DEFINED__
typedef interface ID3D12Device13 ID3D12Device13;

#endif 	/* __ID3D12Device13_FWD_DEFINED__ */


#ifndef __ID3D12Device14_FWD_DEFINED__
#define __ID3D12Device14_FWD_DEFINED__
typedef interface ID3D12Device14 ID3D12Device14;

#endif 	/* __ID3D12Device14_FWD_DEFINED__ */


#ifndef __ID3D12VirtualizationGuestDevice_FWD_DEFINED__
#define __ID3D12VirtualizationGuestDevice_FWD_DEFINED__
typedef interface ID3D12VirtualizationGuestDevice ID3D12VirtualizationGuestDevice;

#endif 	/* __ID3D12VirtualizationGuestDevice_FWD_DEFINED__ */


#ifndef __ID3D12Tools_FWD_DEFINED__
#define __ID3D12Tools_FWD_DEFINED__
typedef interface ID3D12Tools ID3D12Tools;

#endif 	/* __ID3D12Tools_FWD_DEFINED__ */


#ifndef __ID3D12Tools1_FWD_DEFINED__
#define __ID3D12Tools1_FWD_DEFINED__
typedef interface ID3D12Tools1 ID3D12Tools1;

#endif 	/* __ID3D12Tools1_FWD_DEFINED__ */


#ifndef __ID3D12Tools2_FWD_DEFINED__
#define __ID3D12Tools2_FWD_DEFINED__
typedef interface ID3D12Tools2 ID3D12Tools2;

#endif 	/* __ID3D12Tools2_FWD_DEFINED__ */


#ifndef __ID3D12PageableTools_FWD_DEFINED__
#define __ID3D12PageableTools_FWD_DEFINED__
typedef interface ID3D12PageableTools ID3D12PageableTools;

#endif 	/* __ID3D12PageableTools_FWD_DEFINED__ */


#ifndef __ID3D12DeviceTools_FWD_DEFINED__
#define __ID3D12DeviceTools_FWD_DEFINED__
typedef interface ID3D12DeviceTools ID3D12DeviceTools;

#endif 	/* __ID3D12DeviceTools_FWD_DEFINED__ */


#ifndef __ID3D12DeviceTools1_FWD_DEFINED__
#define __ID3D12DeviceTools1_FWD_DEFINED__
typedef interface ID3D12DeviceTools1 ID3D12DeviceTools1;

#endif 	/* __ID3D12DeviceTools1_FWD_DEFINED__ */


#ifndef __ID3D12SDKConfiguration_FWD_DEFINED__
#define __ID3D12SDKConfiguration_FWD_DEFINED__
typedef interface ID3D12SDKConfiguration ID3D12SDKConfiguration;

#endif 	/* __ID3D12SDKConfiguration_FWD_DEFINED__ */


#ifndef __ID3D12SDKConfiguration1_FWD_DEFINED__
#define __ID3D12SDKConfiguration1_FWD_DEFINED__
typedef interface ID3D12SDKConfiguration1 ID3D12SDKConfiguration1;

#endif 	/* __ID3D12SDKConfiguration1_FWD_DEFINED__ */


#ifndef __ID3D12DeviceFactory_FWD_DEFINED__
#define __ID3D12DeviceFactory_FWD_DEFINED__
typedef interface ID3D12DeviceFactory ID3D12DeviceFactory;

#endif 	/* __ID3D12DeviceFactory_FWD_DEFINED__ */


#ifndef __ID3D12DeviceConfiguration_FWD_DEFINED__
#define __ID3D12DeviceConfiguration_FWD_DEFINED__
typedef interface ID3D12DeviceConfiguration ID3D12DeviceConfiguration;

#endif 	/* __ID3D12DeviceConfiguration_FWD_DEFINED__ */


#ifndef __ID3D12DeviceConfiguration1_FWD_DEFINED__
#define __ID3D12DeviceConfiguration1_FWD_DEFINED__
typedef interface ID3D12DeviceConfiguration1 ID3D12DeviceConfiguration1;

#endif 	/* __ID3D12DeviceConfiguration1_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList5_FWD_DEFINED__
#define __ID3D12GraphicsCommandList5_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList5 ID3D12GraphicsCommandList5;

#endif 	/* __ID3D12GraphicsCommandList5_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList6_FWD_DEFINED__
#define __ID3D12GraphicsCommandList6_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList6 ID3D12GraphicsCommandList6;

#endif 	/* __ID3D12GraphicsCommandList6_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList7_FWD_DEFINED__
#define __ID3D12GraphicsCommandList7_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList7 ID3D12GraphicsCommandList7;

#endif 	/* __ID3D12GraphicsCommandList7_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList8_FWD_DEFINED__
#define __ID3D12GraphicsCommandList8_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList8 ID3D12GraphicsCommandList8;

#endif 	/* __ID3D12GraphicsCommandList8_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList9_FWD_DEFINED__
#define __ID3D12GraphicsCommandList9_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList9 ID3D12GraphicsCommandList9;

#endif 	/* __ID3D12GraphicsCommandList9_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList10_FWD_DEFINED__
#define __ID3D12GraphicsCommandList10_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList10 ID3D12GraphicsCommandList10;

#endif 	/* __ID3D12GraphicsCommandList10_FWD_DEFINED__ */


#ifndef __ID3D12DSRDeviceFactory_FWD_DEFINED__
#define __ID3D12DSRDeviceFactory_FWD_DEFINED__
typedef interface ID3D12DSRDeviceFactory ID3D12DSRDeviceFactory;

#endif 	/* __ID3D12DSRDeviceFactory_FWD_DEFINED__ */


#ifndef __ID3D12GBVDiagnostics_FWD_DEFINED__
#define __ID3D12GBVDiagnostics_FWD_DEFINED__
typedef interface ID3D12GBVDiagnostics ID3D12GBVDiagnostics;

#endif 	/* __ID3D12GBVDiagnostics_FWD_DEFINED__ */


/* header files for imported files */
#include "oaidl.h"
#include "ocidl.h"
#include "dxgicommon.h"
#include "dxgiformat.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 | WINAPI_PARTITION_GAMES)
#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_MAX_VIEW_INSTANCE_COUNT	( 4 )

#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_PREVIEW_SDK_VERSION	( 717 )

#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_RAYTRACING_AABB_BYTE_ALIGNMENT	( 8 )

#define	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT	( 256 )

#define	D3D12_RAYTRACING_INSTANCE_DESCS_BYTE_ALIGNMENT	( 16 )

#define	D3D12_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES	( 32 )

#define	D3D12_RAYTRACING_MAX_DECLARABLE_TRACE_RECURSION_DEPTH	( 31 )

#define	D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE	( 16777216 )

#define	D3D12_RAYTRACING_MAX_INSTANCES_PER_TOP_LEVEL_ACCELERATION_STRUCTURE	( 16777216 )

#define	D3D12_RAYTRACING_MAX_PRIMITIVES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE	( 536870912 )

#define	D3D12_RAYTRACING_MAX_RAY_GENERATION_SHADER_THREADS	( 1073741824 )

#define	D3D12_RAYTRACING_MAX_SHADER_RECORD_STRIDE	( 4096 )

#define	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_BYTE_ALIGNMENT	( 128 )

#define	D3D12_RAYTRACING_OPACITY_MICROMAP_OC1_MAX_SUBDIVISION_LEVEL	( 12 )

#define	D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT	( 32 )

#define	D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT	( 64 )

#define	D3D12_RAYTRACING_TRANSFORM3X4_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_RS_SET_SHADING_RATE_COMBINER_COUNT	( 2 )

#define	D3D12_SDK_VERSION	( 618 )

#define	D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES	( 32 )

#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_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNMENT	( 4096 )

#define	D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNMENT	( 8 )

#define	D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES	( 65536 )

#define	D3D12_TRACKED_WORKLOAD_MAX_INSTANCES	( 32 )

#define	D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT	( 4096 )

#define	D3D12_UAV_SLOT_COUNT	( 64 )

#define	D3D12_UNBOUND_MEMORY_ACCESS_RESULT	( 0 )

#define	D3D12_VIDEO_DECODE_MAX_ARGUMENTS	( 10 )

#define	D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS	( 4 )

#define	D3D12_VIDEO_DECODE_MIN_BITSTREAM_OFFSET_ALIGNMENT	( 256 )

#define	D3D12_VIDEO_DECODE_MIN_HISTOGRAM_OFFSET_ALIGNMENT	( 256 )

#define	D3D12_VIDEO_DECODE_STATUS_MACROBLOCKS_AFFECTED_UNKNOWN	( 0xffffffff )

#define	D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX	( 0xff )

#define	D3D12_VIDEO_ENCODER_AV1_MAX_TILE_COLS	( 64 )

#define	D3D12_VIDEO_ENCODER_AV1_MAX_TILE_ROWS	( 64 )

#define	D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN	( 9 )

#define	D3D12_VIDEO_ENCODER_AV1_SUPERRES_NUM	( 8 )

#define	D3D12_VIDEO_PROCESS_MAX_FILTERS	( 32 )

#define	D3D12_VIDEO_PROCESS_STEREO_VIEWS	( 2 )

#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 )

#define	D3D12_WORK_GRAPHS_BACKING_MEMORY_ALIGNMENT_IN_BYTES	( 8 )

#define	D3D12_WORK_GRAPHS_MAX_NODE_DEPTH	( 32 )

#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_VIDEO_DECODE	= 4,
        D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS	= 5,
        D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE	= 6,
        D3D12_COMMAND_LIST_TYPE_NONE	= -1
    } 	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_FLAG_ALLOW_DYNAMIC_PRIORITY	= 0x2
    } 	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_GLOBAL_REALTIME	= 10000
    } 	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;

#ifdef __midl
#ifndef LUID_DEFINED
#define LUID_DEFINED 1
typedef struct __LUID
    {
    DWORD LowPart;
    LONG HighPart;
    } 	LUID;

typedef struct __LUID *PLUID;

#endif
#endif
typedef 
enum D3D12_COMPARISON_FUNC
    {
        D3D12_COMPARISON_FUNC_NONE	= 0,
        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 struct D3D12_DEPTH_STENCIL_DESC1
    {
    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;
    BOOL DepthBoundsTestEnable;
    } 	D3D12_DEPTH_STENCIL_DESC1;

typedef struct D3D12_DEPTH_STENCILOP_DESC1
    {
    D3D12_STENCIL_OP StencilFailOp;
    D3D12_STENCIL_OP StencilDepthFailOp;
    D3D12_STENCIL_OP StencilPassOp;
    D3D12_COMPARISON_FUNC StencilFunc;
    UINT8 StencilReadMask;
    UINT8 StencilWriteMask;
    } 	D3D12_DEPTH_STENCILOP_DESC1;

typedef struct D3D12_DEPTH_STENCIL_DESC2
    {
    BOOL DepthEnable;
    D3D12_DEPTH_WRITE_MASK DepthWriteMask;
    D3D12_COMPARISON_FUNC DepthFunc;
    BOOL StencilEnable;
    D3D12_DEPTH_STENCILOP_DESC1 FrontFace;
    D3D12_DEPTH_STENCILOP_DESC1 BackFace;
    BOOL DepthBoundsTestEnable;
    } 	D3D12_DEPTH_STENCIL_DESC2;

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_ALPHA_FACTOR	= 20,
        D3D12_BLEND_INV_ALPHA_FACTOR	= 21
    } 	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;

typedef struct D3D12_RASTERIZER_DESC1
    {
    D3D12_FILL_MODE FillMode;
    D3D12_CULL_MODE CullMode;
    BOOL FrontCounterClockwise;
    FLOAT DepthBias;
    FLOAT DepthBiasClamp;
    FLOAT SlopeScaledDepthBias;
    BOOL DepthClipEnable;
    BOOL MultisampleEnable;
    BOOL AntialiasedLineEnable;
    UINT ForcedSampleCount;
    D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
    } 	D3D12_RASTERIZER_DESC1;

typedef 
enum D3D12_LINE_RASTERIZATION_MODE
    {
        D3D12_LINE_RASTERIZATION_MODE_ALIASED	= 0,
        D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED	= ( D3D12_LINE_RASTERIZATION_MODE_ALIASED + 1 ) ,
        D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE	= ( D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED + 1 ) ,
        D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_NARROW	= ( D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE + 1 ) 
    } 	D3D12_LINE_RASTERIZATION_MODE;

typedef struct D3D12_RASTERIZER_DESC2
    {
    D3D12_FILL_MODE FillMode;
    D3D12_CULL_MODE CullMode;
    BOOL FrontCounterClockwise;
    FLOAT DepthBias;
    FLOAT DepthBiasClamp;
    FLOAT SlopeScaledDepthBias;
    BOOL DepthClipEnable;
    D3D12_LINE_RASTERIZATION_MODE LineRasterizationMode;
    UINT ForcedSampleCount;
    D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
    } 	D3D12_RASTERIZER_DESC2;



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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Object * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Object * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Object * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Object * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Object * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Object * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceChild * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceChild * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceChild * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12DeviceChild * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12DeviceChild * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12DeviceChild * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12DeviceChild * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12RootSignature * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12RootSignature * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12RootSignature * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12RootSignature * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12RootSignature * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12RootSignature * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12RootSignature * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        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 
enum D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS
    {
        D3D12_STANDARD_MULTISAMPLE_PATTERN	= 0xffffffff,
        D3D12_CENTER_MULTISAMPLE_PATTERN	= 0xfffffffe
    } 	D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS;

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_FLAG_DYNAMIC_DEPTH_BIAS	= 0x4,
        D3D12_PIPELINE_STATE_FLAG_DYNAMIC_INDEX_BUFFER_STRIP_CUT	= 0x8
    } 	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 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_1_2	= 0x3
    } 	D3D_ROOT_SIGNATURE_VERSION;

typedef struct D3D12_SERIALIZED_ROOT_SIGNATURE_DESC
    {
    _Field_size_bytes_full_(SerializedBlobSizeInBytes)  const void *pSerializedBlob;
    SIZE_T SerializedBlobSizeInBytes;
    } 	D3D12_SERIALIZED_ROOT_SIGNATURE_DESC;

typedef struct D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE
    {
    D3D12_SERIALIZED_ROOT_SIGNATURE_DESC Desc;
    } 	D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE;

typedef struct D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE
    {
    D3D12_SERIALIZED_ROOT_SIGNATURE_DESC Desc;
    } 	D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE;

struct D3D12_RT_FORMAT_ARRAY
    {
    DXGI_FORMAT RTFormats[ 8 ];
    UINT NumRenderTargets;
    } ;
typedef struct D3D12_PIPELINE_STATE_STREAM_DESC
    {
    _In_  SIZE_T SizeInBytes;
    _In_reads_(_Inexpressible_("Dependent on size of subobjects"))  void *pPipelineStateSubobjectStream;
    } 	D3D12_PIPELINE_STATE_STREAM_DESC;

typedef 
enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE
    {
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE	= 0,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 + 1 ) ,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS	= 24,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS	= 25,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2	= 26,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1	= 27,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2	= 28,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE	= 29,
        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID	= ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE + 1 ) 
    } 	D3D12_PIPELINE_STATE_SUBOBJECT_TYPE;

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_PROTECTED_RESOURCE_SESSION_SUPPORT	= 10,
        D3D12_FEATURE_ROOT_SIGNATURE	= 12,
        D3D12_FEATURE_ARCHITECTURE1	= 16,
        D3D12_FEATURE_D3D12_OPTIONS2	= 18,
        D3D12_FEATURE_SHADER_CACHE	= 19,
        D3D12_FEATURE_COMMAND_QUEUE_PRIORITY	= 20,
        D3D12_FEATURE_D3D12_OPTIONS3	= 21,
        D3D12_FEATURE_EXISTING_HEAPS	= 22,
        D3D12_FEATURE_D3D12_OPTIONS4	= 23,
        D3D12_FEATURE_SERIALIZATION	= 24,
        D3D12_FEATURE_CROSS_NODE	= 25,
        D3D12_FEATURE_D3D12_OPTIONS5	= 27,
        D3D12_FEATURE_DISPLAYABLE	= 28,
        D3D12_FEATURE_D3D12_OPTIONS6	= 30,
        D3D12_FEATURE_QUERY_META_COMMAND	= 31,
        D3D12_FEATURE_D3D12_OPTIONS7	= 32,
        D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT	= 33,
        D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES	= 34,
        D3D12_FEATURE_D3D12_OPTIONS8	= 36,
        D3D12_FEATURE_D3D12_OPTIONS9	= 37,
        D3D12_FEATURE_D3D12_OPTIONS10	= 39,
        D3D12_FEATURE_D3D12_OPTIONS11	= 40,
        D3D12_FEATURE_D3D12_OPTIONS12	= 41,
        D3D12_FEATURE_D3D12_OPTIONS13	= 42,
        D3D12_FEATURE_D3D12_OPTIONS14	= 43,
        D3D12_FEATURE_D3D12_OPTIONS15	= 44,
        D3D12_FEATURE_D3D12_OPTIONS16	= 45,
        D3D12_FEATURE_D3D12_OPTIONS17	= 46,
        D3D12_FEATURE_D3D12_OPTIONS18	= 47,
        D3D12_FEATURE_D3D12_OPTIONS19	= 48,
        D3D12_FEATURE_D3D12_OPTIONS20	= 49,
        D3D12_FEATURE_PREDICATION	= 50,
        D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO	= 51,
        D3D12_FEATURE_HARDWARE_COPY	= 52,
        D3D12_FEATURE_D3D12_OPTIONS21	= 53,
        D3D12_FEATURE_D3D12_TIGHT_ALIGNMENT	= 54,
        D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE	= 56,
        D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED	= 57,
        D3D12_FEATURE_SHADER_CACHE_ABI_SUPPORT	= 61
    } 	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_4	= 4
    } 	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_SAMPLER_FEEDBACK	= 0x8000,
        D3D12_FORMAT_SUPPORT2_DISPLAYABLE	= 0x10000
    } 	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_3	= 4
    } 	D3D12_CROSS_NODE_SHARING_TIER;

typedef 
enum D3D12_RESOURCE_HEAP_TIER
    {
        D3D12_RESOURCE_HEAP_TIER_1	= 1,
        D3D12_RESOURCE_HEAP_TIER_2	= 2
    } 	D3D12_RESOURCE_HEAP_TIER;

typedef 
enum D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER
    {
        D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED	= 0,
        D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1	= 1,
        D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_2	= 2
    } 	D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER;

typedef 
enum D3D12_VIEW_INSTANCING_TIER
    {
        D3D12_VIEW_INSTANCING_TIER_NOT_SUPPORTED	= 0,
        D3D12_VIEW_INSTANCING_TIER_1	= 1,
        D3D12_VIEW_INSTANCING_TIER_2	= 2,
        D3D12_VIEW_INSTANCING_TIER_3	= 3
    } 	D3D12_VIEW_INSTANCING_TIER;

typedef 
enum D3D12_WORK_GRAPHS_TIER
    {
        D3D12_WORK_GRAPHS_TIER_NOT_SUPPORTED	= 0,
        D3D12_WORK_GRAPHS_TIER_1_0	= 10
    } 	D3D12_WORK_GRAPHS_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 struct D3D12_FEATURE_DATA_D3D12_OPTIONS2
    {
    _Out_  BOOL DepthBoundsTestSupported;
    _Out_  D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS2;

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_ARCHITECTURE1
    {
    _In_  UINT NodeIndex;
    _Out_  BOOL TileBasedRenderer;
    _Out_  BOOL UMA;
    _Out_  BOOL CacheCoherentUMA;
    _Out_  BOOL IsolatedMMU;
    } 	D3D12_FEATURE_DATA_ARCHITECTURE1;

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_NONE	= 0,
        D3D_SHADER_MODEL_5_1	= 0x51,
        D3D_SHADER_MODEL_6_0	= 0x60,
        D3D_SHADER_MODEL_6_1	= 0x61,
        D3D_SHADER_MODEL_6_2	= 0x62,
        D3D_SHADER_MODEL_6_3	= 0x63,
        D3D_SHADER_MODEL_6_4	= 0x64,
        D3D_SHADER_MODEL_6_5	= 0x65,
        D3D_SHADER_MODEL_6_6	= 0x66,
        D3D_SHADER_MODEL_6_7	= 0x67,
        D3D_SHADER_MODEL_6_8	= 0x68,
        D3D_SHADER_MODEL_6_9	= 0x69,
        D3D_HIGHEST_SHADER_MODEL	= D3D_SHADER_MODEL_6_9
    } 	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 
enum D3D12_SHADER_CACHE_SUPPORT_FLAGS
    {
        D3D12_SHADER_CACHE_SUPPORT_NONE	= 0,
        D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO	= 0x1,
        D3D12_SHADER_CACHE_SUPPORT_LIBRARY	= 0x2,
        D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE	= 0x4,
        D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE	= 0x8,
        D3D12_SHADER_CACHE_SUPPORT_DRIVER_MANAGED_CACHE	= 0x10,
        D3D12_SHADER_CACHE_SUPPORT_SHADER_CONTROL_CLEAR	= 0x20,
        D3D12_SHADER_CACHE_SUPPORT_SHADER_SESSION_DELETE	= 0x40
    } 	D3D12_SHADER_CACHE_SUPPORT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_SUPPORT_FLAGS )
typedef struct D3D12_FEATURE_DATA_SHADER_CACHE
    {
    _Out_  D3D12_SHADER_CACHE_SUPPORT_FLAGS SupportFlags;
    } 	D3D12_FEATURE_DATA_SHADER_CACHE;

typedef struct D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY
    {
    _In_  D3D12_COMMAND_LIST_TYPE CommandListType;
    _In_  UINT Priority;
    _Out_  BOOL PriorityForTypeIsSupported;
    } 	D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY;

typedef 
enum D3D12_COMMAND_LIST_SUPPORT_FLAGS
    {
        D3D12_COMMAND_LIST_SUPPORT_FLAG_NONE	= 0,
        D3D12_COMMAND_LIST_SUPPORT_FLAG_DIRECT	= ( 1 << D3D12_COMMAND_LIST_TYPE_DIRECT ) ,
        D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE	= ( 1 << D3D12_COMMAND_LIST_TYPE_BUNDLE ) ,
        D3D12_COMMAND_LIST_SUPPORT_FLAG_COMPUTE	= ( 1 << D3D12_COMMAND_LIST_TYPE_COMPUTE ) ,
        D3D12_COMMAND_LIST_SUPPORT_FLAG_COPY	= ( 1 << D3D12_COMMAND_LIST_TYPE_COPY ) ,
        D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_DECODE	= ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE ) ,
        D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_PROCESS	= ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS ) ,
        D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_ENCODE	= ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE ) 
    } 	D3D12_COMMAND_LIST_SUPPORT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_SUPPORT_FLAGS )
typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS3
    {
    _Out_  BOOL CopyQueueTimestampQueriesSupported;
    _Out_  BOOL CastingFullyTypedFormatSupported;
    _Out_  D3D12_COMMAND_LIST_SUPPORT_FLAGS WriteBufferImmediateSupportFlags;
    _Out_  D3D12_VIEW_INSTANCING_TIER ViewInstancingTier;
    _Out_  BOOL BarycentricsSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS3;

typedef struct D3D12_FEATURE_DATA_EXISTING_HEAPS
    {
    _Out_  BOOL Supported;
    } 	D3D12_FEATURE_DATA_EXISTING_HEAPS;

typedef 
enum D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER
    {
        D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_0	= 0,
        D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_1	= ( D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_0 + 1 ) ,
        D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_2	= ( D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_1 + 1 ) 
    } 	D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER;

typedef struct D3D12_FEATURE_DATA_DISPLAYABLE
    {
    _Out_  BOOL DisplayableTexture;
    _Out_  D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier;
    } 	D3D12_FEATURE_DATA_DISPLAYABLE;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS4
    {
    _Out_  BOOL MSAA64KBAlignedTextureSupported;
    _Out_  D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier;
    _Out_  BOOL Native16BitShaderOpsSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS4;

typedef 
enum D3D12_HEAP_SERIALIZATION_TIER
    {
        D3D12_HEAP_SERIALIZATION_TIER_0	= 0,
        D3D12_HEAP_SERIALIZATION_TIER_10	= 10
    } 	D3D12_HEAP_SERIALIZATION_TIER;

typedef struct D3D12_FEATURE_DATA_SERIALIZATION
    {
    _In_  UINT NodeIndex;
    _Out_  D3D12_HEAP_SERIALIZATION_TIER HeapSerializationTier;
    } 	D3D12_FEATURE_DATA_SERIALIZATION;

typedef struct D3D12_FEATURE_DATA_CROSS_NODE
    {
    D3D12_CROSS_NODE_SHARING_TIER SharingTier;
    BOOL AtomicShaderInstructions;
    } 	D3D12_FEATURE_DATA_CROSS_NODE;

typedef 
enum D3D12_RENDER_PASS_TIER
    {
        D3D12_RENDER_PASS_TIER_0	= 0,
        D3D12_RENDER_PASS_TIER_1	= 1,
        D3D12_RENDER_PASS_TIER_2	= 2
    } 	D3D12_RENDER_PASS_TIER;

typedef 
enum D3D12_RAYTRACING_TIER
    {
        D3D12_RAYTRACING_TIER_NOT_SUPPORTED	= 0,
        D3D12_RAYTRACING_TIER_1_0	= 10,
        D3D12_RAYTRACING_TIER_1_1	= 11,
        D3D12_RAYTRACING_TIER_1_2	= 12
    } 	D3D12_RAYTRACING_TIER;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5
    {
    _Out_  BOOL SRVOnlyTiledResourceTier3;
    _Out_  D3D12_RENDER_PASS_TIER RenderPassesTier;
    _Out_  D3D12_RAYTRACING_TIER RaytracingTier;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS5;

typedef 
enum D3D12_VARIABLE_SHADING_RATE_TIER
    {
        D3D12_VARIABLE_SHADING_RATE_TIER_NOT_SUPPORTED	= 0,
        D3D12_VARIABLE_SHADING_RATE_TIER_1	= 1,
        D3D12_VARIABLE_SHADING_RATE_TIER_2	= 2
    } 	D3D12_VARIABLE_SHADING_RATE_TIER;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS6
    {
    _Out_  BOOL AdditionalShadingRatesSupported;
    _Out_  BOOL PerPrimitiveShadingRateSupportedWithViewportIndexing;
    _Out_  D3D12_VARIABLE_SHADING_RATE_TIER VariableShadingRateTier;
    _Out_  UINT ShadingRateImageTileSize;
    _Out_  BOOL BackgroundProcessingSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS6;

typedef 
enum D3D12_MESH_SHADER_TIER
    {
        D3D12_MESH_SHADER_TIER_NOT_SUPPORTED	= 0,
        D3D12_MESH_SHADER_TIER_1	= 10
    } 	D3D12_MESH_SHADER_TIER;

typedef 
enum D3D12_SAMPLER_FEEDBACK_TIER
    {
        D3D12_SAMPLER_FEEDBACK_TIER_NOT_SUPPORTED	= 0,
        D3D12_SAMPLER_FEEDBACK_TIER_0_9	= 90,
        D3D12_SAMPLER_FEEDBACK_TIER_1_0	= 100
    } 	D3D12_SAMPLER_FEEDBACK_TIER;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS7
    {
    _Out_  D3D12_MESH_SHADER_TIER MeshShaderTier;
    _Out_  D3D12_SAMPLER_FEEDBACK_TIER SamplerFeedbackTier;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS7;

typedef struct D3D12_FEATURE_DATA_QUERY_META_COMMAND
    {
    _In_  GUID CommandId;
    _In_  UINT NodeMask;
    _Field_size_bytes_full_opt_( QueryInputDataSizeInBytes )  const void *pQueryInputData;
    _In_  SIZE_T QueryInputDataSizeInBytes;
    _Field_size_bytes_full_( QueryOutputDataSizeInBytes )  void *pQueryOutputData;
    _In_  SIZE_T QueryOutputDataSizeInBytes;
    } 	D3D12_FEATURE_DATA_QUERY_META_COMMAND;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS8
    {
    _Out_  BOOL UnalignedBlockTexturesSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS8;

typedef 
enum D3D12_WAVE_MMA_TIER
    {
        D3D12_WAVE_MMA_TIER_NOT_SUPPORTED	= 0,
        D3D12_WAVE_MMA_TIER_1_0	= 10
    } 	D3D12_WAVE_MMA_TIER;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS9
    {
    _Out_  BOOL MeshShaderPipelineStatsSupported;
    _Out_  BOOL MeshShaderSupportsFullRangeRenderTargetArrayIndex;
    _Out_  BOOL AtomicInt64OnTypedResourceSupported;
    _Out_  BOOL AtomicInt64OnGroupSharedSupported;
    _Out_  BOOL DerivativesInMeshAndAmplificationShadersSupported;
    _Out_  D3D12_WAVE_MMA_TIER WaveMMATier;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS9;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS10
    {
    _Out_  BOOL VariableRateShadingSumCombinerSupported;
    _Out_  BOOL MeshShaderPerPrimitiveShadingRateSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS10;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS11
    {
    _Out_  BOOL AtomicInt64OnDescriptorHeapResourceSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS11;

typedef 
enum D3D12_TRI_STATE
    {
        D3D12_TRI_STATE_UNKNOWN	= -1,
        D3D12_TRI_STATE_FALSE	= 0,
        D3D12_TRI_STATE_TRUE	= 1
    } 	D3D12_TRI_STATE;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS12
    {
    _Out_  D3D12_TRI_STATE MSPrimitivesPipelineStatisticIncludesCulledPrimitives;
    _Out_  BOOL EnhancedBarriersSupported;
    _Out_  BOOL RelaxedFormatCastingSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS12;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS13
    {
    _Out_  BOOL UnrestrictedBufferTextureCopyPitchSupported;
    _Out_  BOOL UnrestrictedVertexElementAlignmentSupported;
    _Out_  BOOL InvertedViewportHeightFlipsYSupported;
    _Out_  BOOL InvertedViewportDepthFlipsZSupported;
    _Out_  BOOL TextureCopyBetweenDimensionsSupported;
    _Out_  BOOL AlphaBlendFactorSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS13;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS14
    {
    _Out_  BOOL AdvancedTextureOpsSupported;
    _Out_  BOOL WriteableMSAATexturesSupported;
    _Out_  BOOL IndependentFrontAndBackStencilRefMaskSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS14;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS15
    {
    _Out_  BOOL TriangleFanSupported;
    _Out_  BOOL DynamicIndexBufferStripCutSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS15;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS16
    {
    _Out_  BOOL DynamicDepthBiasSupported;
    _Out_  BOOL GPUUploadHeapSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS16;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS17
    {
    _Out_  BOOL NonNormalizedCoordinateSamplersSupported;
    _Out_  BOOL ManualWriteTrackingResourceSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS17;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS18
    {
    _Out_  BOOL RenderPassesValid;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS18;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS19
    {
    BOOL MismatchingOutputDimensionsSupported;
    UINT SupportedSampleCountsWithNoOutputs;
    BOOL PointSamplingAddressesNeverRoundUp;
    BOOL RasterizerDesc2Supported;
    BOOL NarrowQuadrilateralLinesSupported;
    BOOL AnisoFilterWithPointMipSupported;
    UINT MaxSamplerDescriptorHeapSize;
    UINT MaxSamplerDescriptorHeapSizeWithStaticSamplers;
    UINT MaxViewDescriptorHeapSize;
    _Out_  BOOL ComputeOnlyCustomHeapSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS19;

typedef 
enum D3D12_RECREATE_AT_TIER
    {
        D3D12_RECREATE_AT_TIER_NOT_SUPPORTED	= 0,
        D3D12_RECREATE_AT_TIER_1	= 1
    } 	D3D12_RECREATE_AT_TIER;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS20
    {
    _Out_  BOOL ComputeOnlyWriteWatchSupported;
    D3D12_RECREATE_AT_TIER RecreateAtTier;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS20;

typedef 
enum D3D12_EXECUTE_INDIRECT_TIER
    {
        D3D12_EXECUTE_INDIRECT_TIER_1_0	= 10,
        D3D12_EXECUTE_INDIRECT_TIER_1_1	= 11
    } 	D3D12_EXECUTE_INDIRECT_TIER;

typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS21
    {
    _Out_  D3D12_WORK_GRAPHS_TIER WorkGraphsTier;
    _Out_  D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier;
    _Out_  BOOL SampleCmpGradientAndBiasSupported;
    _Out_  BOOL ExtendedCommandInfoSupported;
    } 	D3D12_FEATURE_DATA_D3D12_OPTIONS21;

typedef 
enum D3D12_TIGHT_ALIGNMENT_TIER
    {
        D3D12_TIGHT_ALIGNMENT_TIER_NOT_SUPPORTED	= 0,
        D3D12_TIGHT_ALIGNMENT_TIER_1	= ( D3D12_TIGHT_ALIGNMENT_TIER_NOT_SUPPORTED + 1 ) 
    } 	D3D12_TIGHT_ALIGNMENT_TIER;

typedef struct D3D12_FEATURE_DATA_TIGHT_ALIGNMENT
    {
    _Out_  D3D12_TIGHT_ALIGNMENT_TIER SupportTier;
    } 	D3D12_FEATURE_DATA_TIGHT_ALIGNMENT;

typedef struct D3D12_FEATURE_DATA_PREDICATION
    {
    _Out_  BOOL Supported;
    } 	D3D12_FEATURE_DATA_PREDICATION;

typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY
    {
    _Out_  BOOL Supported;
    } 	D3D12_FEATURE_DATA_HARDWARE_COPY;

typedef struct D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE
    {
    _Out_  BOOL Supported;
    } 	D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE;

typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED
    {
    _Out_  BOOL Supported;
    } 	D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED;

typedef struct D3D12_RESOURCE_ALLOCATION_INFO
    {
    UINT64 SizeInBytes;
    UINT64 Alignment;
    } 	D3D12_RESOURCE_ALLOCATION_INFO;

typedef struct D3D12_RESOURCE_ALLOCATION_INFO1
    {
    UINT64 Offset;
    UINT64 Alignment;
    UINT64 SizeInBytes;
    } 	D3D12_RESOURCE_ALLOCATION_INFO1;

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_GPU_UPLOAD	= 5
    } 	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_WRITE_WATCH	= 0x200,
        D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS	= 0x400,
        D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT	= 0x800,
        D3D12_HEAP_FLAG_CREATE_NOT_ZEROED	= 0x1000,
        D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING	= 0x2000,
        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 struct D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO
    {
    _In_  DXGI_FORMAT Format;
    _In_  D3D12_RESOURCE_DIMENSION Dimension;
    _In_  D3D12_HEAP_PROPERTIES DestHeapProperties;
    _Out_  BOOL Supported;
    } 	D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO;

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_FLAG_VIDEO_DECODE_REFERENCE_ONLY	= 0x40,
        D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY	= 0x80,
        D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE	= 0x100,
        D3D12_RESOURCE_FLAG_USE_TIGHT_ALIGNMENT	= 0x400
    } 	D3D12_RESOURCE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_FLAGS )
typedef struct D3D12_MIP_REGION
    {
    UINT Width;
    UINT Height;
    UINT Depth;
    } 	D3D12_MIP_REGION;

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_RESOURCE_DESC1
    {
    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_MIP_REGION SamplerFeedbackMipRegion;
    } 	D3D12_RESOURCE_DESC1;

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_RANGE_UINT64
    {
    UINT64 Begin;
    UINT64 End;
    } 	D3D12_RANGE_UINT64;

typedef struct D3D12_SUBRESOURCE_RANGE_UINT64
    {
    UINT Subresource;
    D3D12_RANGE_UINT64 Range;
    } 	D3D12_SUBRESOURCE_RANGE_UINT64;

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_RAYTRACING_ACCELERATION_STRUCTURE	= 0x400000,
        D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE	= 0x1000000,
        D3D12_RESOURCE_STATE_RESERVED_INTERNAL_8000	= 0x8000,
        D3D12_RESOURCE_STATE_RESERVED_INTERNAL_4000	= 0x4000,
        D3D12_RESOURCE_STATE_RESERVED_INTERNAL_100000	= 0x100000,
        D3D12_RESOURCE_STATE_RESERVED_INTERNAL_40000000	= 0x40000000,
        D3D12_RESOURCE_STATE_RESERVED_INTERNAL_80000000	= 0x80000000,
        D3D12_RESOURCE_STATE_GENERIC_READ	= ( ( ( ( ( 0x1 | 0x2 )  | 0x40 )  | 0x80 )  | 0x200 )  | 0x800 ) ,
        D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE	= ( 0x40 | 0x80 ) ,
        D3D12_RESOURCE_STATE_PRESENT	= 0,
        D3D12_RESOURCE_STATE_PREDICATION	= 0x200,
        D3D12_RESOURCE_STATE_VIDEO_DECODE_READ	= 0x10000,
        D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE	= 0x20000,
        D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ	= 0x40000,
        D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE	= 0x80000,
        D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ	= 0x200000,
        D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE	= 0x800000
    } 	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_RESOLVE_MODE
    {
        D3D12_RESOLVE_MODE_DECOMPRESS	= 0,
        D3D12_RESOLVE_MODE_MIN	= 1,
        D3D12_RESOLVE_MODE_MAX	= 2,
        D3D12_RESOLVE_MODE_AVERAGE	= 3,
        D3D12_RESOLVE_MODE_ENCODE_SAMPLER_FEEDBACK	= 4,
        D3D12_RESOLVE_MODE_DECODE_SAMPLER_FEEDBACK	= 5
    } 	D3D12_RESOLVE_MODE;

typedef struct D3D12_SAMPLE_POSITION
    {
    INT8 X;
    INT8 Y;
    } 	D3D12_SAMPLE_POSITION;

typedef struct D3D12_VIEW_INSTANCE_LOCATION
    {
    UINT ViewportArrayIndex;
    UINT RenderTargetArrayIndex;
    } 	D3D12_VIEW_INSTANCE_LOCATION;

typedef 
enum D3D12_VIEW_INSTANCING_FLAGS
    {
        D3D12_VIEW_INSTANCING_FLAG_NONE	= 0,
        D3D12_VIEW_INSTANCING_FLAG_ENABLE_VIEW_INSTANCE_MASKING	= 0x1
    } 	D3D12_VIEW_INSTANCING_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIEW_INSTANCING_FLAGS )
typedef struct D3D12_VIEW_INSTANCING_DESC
    {
    UINT ViewInstanceCount;
    _Field_size_full_(ViewInstanceCount)  const D3D12_VIEW_INSTANCE_LOCATION *pViewInstanceLocations;
    D3D12_VIEW_INSTANCING_FLAGS Flags;
    } 	D3D12_VIEW_INSTANCING_DESC;

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 struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV
    {
    D3D12_GPU_VIRTUAL_ADDRESS Location;
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_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_RAYTRACING_ACCELERATION_STRUCTURE	= 11
    } 	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_RAYTRACING_ACCELERATION_STRUCTURE_SRV RaytracingAccelerationStructure;
        } 	;
    } 	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_MIN_MAG_ANISOTROPIC_MIP_POINT	= 0x54,
        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_MIN_MAG_ANISOTROPIC_MIP_POINT	= 0xd4,
        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_MIN_MAG_ANISOTROPIC_MIP_POINT	= 0x154,
        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_MIN_MAG_ANISOTROPIC_MIP_POINT	= 0x1d4,
        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_ENCODE_MIN_MAG_ANISOTROPIC_MIP_POINT_FILTER( reduction )                                \
                                         ( ( D3D12_FILTER ) (                                         \
                                         D3D12_ANISOTROPIC_FILTERING_BIT |                            \
                                         D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR,         \
                                                                    D3D12_FILTER_TYPE_LINEAR,         \
                                                                    D3D12_FILTER_TYPE_POINT,          \
                                                                    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 ) ) )      
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_SAMPLER_FLAGS
    {
        D3D12_SAMPLER_FLAG_NONE	= 0,
        D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR	= 0x1,
        D3D12_SAMPLER_FLAG_NON_NORMALIZED_COORDINATES	= 0x2
    } 	D3D12_SAMPLER_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_SAMPLER_FLAGS )
typedef struct D3D12_SAMPLER_DESC2
    {
    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;
    union 
        {
        FLOAT FloatBorderColor[ 4 ];
        UINT UintBorderColor[ 4 ];
        } 	;
    FLOAT MinLOD;
    FLOAT MaxLOD;
    D3D12_SAMPLER_FLAGS Flags;
    } 	D3D12_SAMPLER_DESC2;

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_TEX2DMS_UAV
    {
    UINT UnusedField_NothingToDefine;
    } 	D3D12_TEX2DMS_UAV;

typedef struct D3D12_TEX2DMS_ARRAY_UAV
    {
    UINT FirstArraySlice;
    UINT ArraySize;
    } 	D3D12_TEX2DMS_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_TEXTURE2DMS	= 6,
        D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY	= 7,
        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_TEX2DMS_UAV Texture2DMS;
        D3D12_TEX2DMS_ARRAY_UAV Texture2DMSArray;
        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_FLAG_NON_MONITORED	= 0x4
    } 	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_AMPLIFICATION	= 6,
        D3D12_SHADER_VISIBILITY_MESH	= 7
    } 	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_FLAG_LOCAL_ROOT_SIGNATURE	= 0x80,
        D3D12_ROOT_SIGNATURE_FLAG_DENY_AMPLIFICATION_SHADER_ROOT_ACCESS	= 0x100,
        D3D12_ROOT_SIGNATURE_FLAG_DENY_MESH_SHADER_ROOT_ACCESS	= 0x200,
        D3D12_ROOT_SIGNATURE_FLAG_CBV_SRV_UAV_HEAP_DIRECTLY_INDEXED	= 0x400,
        D3D12_ROOT_SIGNATURE_FLAG_SAMPLER_HEAP_DIRECTLY_INDEXED	= 0x800
    } 	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_OPAQUE_BLACK_UINT	= ( D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE + 1 ) ,
        D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT	= ( D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT + 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_STATIC_SAMPLER_DESC1
    {
    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_SAMPLER_FLAGS Flags;
    } 	D3D12_STATIC_SAMPLER_DESC1;

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_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS	= 0x10000
    } 	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_ROOT_SIGNATURE_DESC2
    {
    UINT NumParameters;
    _Field_size_full_(NumParameters)  const D3D12_ROOT_PARAMETER1 *pParameters;
    UINT NumStaticSamplers;
    _Field_size_full_(NumStaticSamplers)  const D3D12_STATIC_SAMPLER_DESC1 *pStaticSamplers;
    D3D12_ROOT_SIGNATURE_FLAGS Flags;
    } 	D3D12_ROOT_SIGNATURE_DESC2;

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_ROOT_SIGNATURE_DESC2 Desc_1_2;
        } 	;
    } 	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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12RootSignatureDeserializer * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12RootSignatureDeserializer * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12RootSignatureDeserializer * This);
        
        DECLSPEC_XFGVIRT(ID3D12RootSignatureDeserializer, GetRootSignatureDesc)
        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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12VersionedRootSignatureDeserializer * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12VersionedRootSignatureDeserializer * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12VersionedRootSignatureDeserializer * This);
        
        DECLSPEC_XFGVIRT(ID3D12VersionedRootSignatureDeserializer, GetRootSignatureDescAtVersion)
        HRESULT ( STDMETHODCALLTYPE *GetRootSignatureDescAtVersion )( 
            ID3D12VersionedRootSignatureDeserializer * This,
            D3D_ROOT_SIGNATURE_VERSION convertToVersion,
            _Out_  const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **ppDesc);
        
        DECLSPEC_XFGVIRT(ID3D12VersionedRootSignatureDeserializer, GetUnconvertedRootSignatureDesc)
        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 HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER_FROM_SUBOBJECT_IN_LIBRARY)(
                                     _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
                                     _In_ SIZE_T SrcDataSizeInBytes,
                                     _In_ LPCWSTR RootSignatureSubobjectName,
                                     _In_ REFIID pRootSignatureDeserializerInterface,
                                     _Out_ void** ppRootSignatureDeserializer);

HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(
                                     _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
                                     _In_ SIZE_T SrcDataSizeInBytes,
                                     _In_opt_ LPCWSTR RootSignatureSubobjectName,
                                     _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_VIDEO_DECODE_STATISTICS	= 4,
        D3D12_QUERY_HEAP_TYPE_COPY_QUEUE_TIMESTAMP	= 5,
        D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS1	= 7
    } 	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_VIDEO_DECODE_STATISTICS	= 8,
        D3D12_QUERY_TYPE_PIPELINE_STATISTICS1	= 10
    } 	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_PIPELINE_STATISTICS1
    {
    UINT64 IAVertices;
    UINT64 IAPrimitives;
    UINT64 VSInvocations;
    UINT64 GSInvocations;
    UINT64 GSPrimitives;
    UINT64 CInvocations;
    UINT64 CPrimitives;
    UINT64 PSInvocations;
    UINT64 HSInvocations;
    UINT64 DSInvocations;
    UINT64 CSInvocations;
    UINT64 ASInvocations;
    UINT64 MSInvocations;
    UINT64 MSPrimitives;
    } 	D3D12_QUERY_DATA_PIPELINE_STATISTICS1;

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_DISPATCH_RAYS	= ( D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH	= ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_INCREMENTING_CONSTANT	= ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH + 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;
        struct 
            {
            UINT RootParameterIndex;
            UINT DestOffsetIn32BitValues;
            } 	IncrementingConstant;
        } 	;
    } 	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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Pageable * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Pageable * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Pageable * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Pageable * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Pageable * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Pageable * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Pageable * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        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:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
#else
        virtual D3D12_HEAP_DESC *STDMETHODCALLTYPE GetDesc( 
            D3D12_HEAP_DESC * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12HeapVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Heap * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Heap * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Heap * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Heap * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Heap * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Heap * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Heap * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Heap * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12Heap, GetDesc)
#if !defined(_WIN32)
        D3D12_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Heap * This);
        
#else
        D3D12_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Heap * This,
            D3D12_HEAP_DESC * RetVal);
        
#endif
        
        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) ) 


#if !defined(_WIN32)

#define ID3D12Heap_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12Heap_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#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;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_RESOURCE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
#else
        virtual D3D12_RESOURCE_DESC *STDMETHODCALLTYPE GetDesc( 
            D3D12_RESOURCE_DESC * RetVal) = 0;
#endif
        
        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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Resource * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Resource * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Resource * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Resource * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Resource * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Resource * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Resource * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Resource * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, Map)
        HRESULT ( STDMETHODCALLTYPE *Map )( 
            ID3D12Resource * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pReadRange,
            _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, Unmap)
        void ( STDMETHODCALLTYPE *Unmap )( 
            ID3D12Resource * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pWrittenRange);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetDesc)
#if !defined(_WIN32)
        D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Resource * This);
        
#else
        D3D12_RESOURCE_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Resource * This,
            D3D12_RESOURCE_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetGPUVirtualAddress)
        D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( 
            ID3D12Resource * This);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, WriteToSubresource)
        HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( 
            ID3D12Resource * This,
            UINT DstSubresource,
            _In_opt_  const D3D12_BOX *pDstBox,
            _In_  const void *pSrcData,
            UINT SrcRowPitch,
            UINT SrcDepthPitch);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, ReadFromSubresource)
        HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( 
            ID3D12Resource * This,
            _Out_  void *pDstData,
            UINT DstRowPitch,
            UINT DstDepthPitch,
            UINT SrcSubresource,
            _In_opt_  const D3D12_BOX *pSrcBox);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetHeapProperties)
        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) ) 
#if !defined(_WIN32)

#define ID3D12Resource_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12Resource_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12CommandAllocator * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12CommandAllocator * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12CommandAllocator * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12CommandAllocator * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12CommandAllocator * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12CommandAllocator * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12CommandAllocator * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12CommandAllocator * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandAllocator, Reset)
        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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Fence * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Fence * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Fence * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Fence * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Fence * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Fence * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Fence * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Fence * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12Fence, GetCompletedValue)
        UINT64 ( STDMETHODCALLTYPE *GetCompletedValue )( 
            ID3D12Fence * This);
        
        DECLSPEC_XFGVIRT(ID3D12Fence, SetEventOnCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnCompletion )( 
            ID3D12Fence * This,
            UINT64 Value,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Fence, Signal)
        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 __ID3D12Fence1_INTERFACE_DEFINED__
#define __ID3D12Fence1_INTERFACE_DEFINED__

/* interface ID3D12Fence1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Fence1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("433685fe-e22b-4ca0-a8db-b5b4f4dd0e4a")
    ID3D12Fence1 : public ID3D12Fence
    {
    public:
        virtual D3D12_FENCE_FLAGS STDMETHODCALLTYPE GetCreationFlags( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Fence1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Fence1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Fence1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Fence1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Fence1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Fence1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Fence1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Fence1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Fence1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12Fence, GetCompletedValue)
        UINT64 ( STDMETHODCALLTYPE *GetCompletedValue )( 
            ID3D12Fence1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Fence, SetEventOnCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnCompletion )( 
            ID3D12Fence1 * This,
            UINT64 Value,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Fence, Signal)
        HRESULT ( STDMETHODCALLTYPE *Signal )( 
            ID3D12Fence1 * This,
            UINT64 Value);
        
        DECLSPEC_XFGVIRT(ID3D12Fence1, GetCreationFlags)
        D3D12_FENCE_FLAGS ( STDMETHODCALLTYPE *GetCreationFlags )( 
            ID3D12Fence1 * This);
        
        END_INTERFACE
    } ID3D12Fence1Vtbl;

    interface ID3D12Fence1
    {
        CONST_VTBL struct ID3D12Fence1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Fence1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Fence1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Fence1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Fence1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Fence1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Fence1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Fence1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Fence1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 



#define ID3D12Fence1_GetCompletedValue(This)	\
    ( (This)->lpVtbl -> GetCompletedValue(This) ) 

#define ID3D12Fence1_SetEventOnCompletion(This,Value,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnCompletion(This,Value,hEvent) ) 

#define ID3D12Fence1_Signal(This,Value)	\
    ( (This)->lpVtbl -> Signal(This,Value) ) 


#define ID3D12Fence1_GetCreationFlags(This)	\
    ( (This)->lpVtbl -> GetCreationFlags(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Fence1_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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12PipelineState * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12PipelineState * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12PipelineState * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12PipelineState * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12PipelineState * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12PipelineState * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12PipelineState * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12PipelineState * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineState, GetCachedBlob)
        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 __ID3D12PipelineState1_INTERFACE_DEFINED__
#define __ID3D12PipelineState1_INTERFACE_DEFINED__

/* interface ID3D12PipelineState1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12PipelineState1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5646804c-9638-48f7-9182-b3ee5a6b60fb")
    ID3D12PipelineState1 : public ID3D12PipelineState
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetRootSignature( 
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12PipelineState1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12PipelineState1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12PipelineState1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12PipelineState1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12PipelineState1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12PipelineState1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12PipelineState1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12PipelineState1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12PipelineState1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineState, GetCachedBlob)
        HRESULT ( STDMETHODCALLTYPE *GetCachedBlob )( 
            ID3D12PipelineState1 * This,
            _COM_Outptr_  ID3DBlob **ppBlob);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineState1, GetRootSignature)
        HRESULT ( STDMETHODCALLTYPE *GetRootSignature )( 
            ID3D12PipelineState1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        END_INTERFACE
    } ID3D12PipelineState1Vtbl;

    interface ID3D12PipelineState1
    {
        CONST_VTBL struct ID3D12PipelineState1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12PipelineState1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12PipelineState1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12PipelineState1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12PipelineState1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12PipelineState1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12PipelineState1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12PipelineState1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12PipelineState1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 



#define ID3D12PipelineState1_GetCachedBlob(This,ppBlob)	\
    ( (This)->lpVtbl -> GetCachedBlob(This,ppBlob) ) 


#define ID3D12PipelineState1_GetRootSignature(This,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> GetRootSignature(This,riid,ppvRootSignature) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12PipelineState1_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:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
#else
        virtual D3D12_DESCRIPTOR_HEAP_DESC *STDMETHODCALLTYPE GetDesc( 
            D3D12_DESCRIPTOR_HEAP_DESC * RetVal) = 0;
#endif
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart( void) = 0;
#else
        virtual D3D12_CPU_DESCRIPTOR_HANDLE *STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart( 
            D3D12_CPU_DESCRIPTOR_HANDLE * RetVal) = 0;
#endif
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart( void) = 0;
#else
        virtual D3D12_GPU_DESCRIPTOR_HANDLE *STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart( 
            D3D12_GPU_DESCRIPTOR_HANDLE * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DescriptorHeapVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DescriptorHeap * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DescriptorHeap * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DescriptorHeap * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12DescriptorHeap * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12DescriptorHeap * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12DescriptorHeap * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12DescriptorHeap * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12DescriptorHeap * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12DescriptorHeap, GetDesc)
#if !defined(_WIN32)
        D3D12_DESCRIPTOR_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12DescriptorHeap * This);
        
#else
        D3D12_DESCRIPTOR_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12DescriptorHeap * This,
            D3D12_DESCRIPTOR_HEAP_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12DescriptorHeap, GetCPUDescriptorHandleForHeapStart)
#if !defined(_WIN32)
        D3D12_CPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart )( 
            ID3D12DescriptorHeap * This);
        
#else
        D3D12_CPU_DESCRIPTOR_HANDLE *( STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart )( 
            ID3D12DescriptorHeap * This,
            D3D12_CPU_DESCRIPTOR_HANDLE * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12DescriptorHeap, GetGPUDescriptorHandleForHeapStart)
#if !defined(_WIN32)
        D3D12_GPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart )( 
            ID3D12DescriptorHeap * This);
        
#else
        D3D12_GPU_DESCRIPTOR_HANDLE *( STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart )( 
            ID3D12DescriptorHeap * This,
            D3D12_GPU_DESCRIPTOR_HANDLE * RetVal);
        
#endif
        
        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) ) 


#if !defined(_WIN32)

#define ID3D12DescriptorHeap_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12DescriptorHeap_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif
#if !defined(_WIN32)

#define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This)	\
    ( (This)->lpVtbl -> GetCPUDescriptorHandleForHeapStart(This) ) 
#else
#define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This,RetVal)	\
    ( (This)->lpVtbl -> GetCPUDescriptorHandleForHeapStart(This,RetVal) ) 
#endif
#if !defined(_WIN32)

#define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This)	\
    ( (This)->lpVtbl -> GetGPUDescriptorHandleForHeapStart(This) ) 
#else
#define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This,RetVal)	\
    ( (This)->lpVtbl -> GetGPUDescriptorHandleForHeapStart(This,RetVal) ) 
#endif

#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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12QueryHeap * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12QueryHeap * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12QueryHeap * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12QueryHeap * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12QueryHeap * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12QueryHeap * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12QueryHeap * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12CommandSignature * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12CommandSignature * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12CommandSignature * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12CommandSignature * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12CommandSignature * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12CommandSignature * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12CommandSignature * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12CommandList * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12CommandList * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12CommandList * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12CommandList * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12CommandList * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12CommandList * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12CommandList * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12CommandList * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        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_reads_opt_(4)  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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        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 __ID3D12GraphicsCommandList1_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList1_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("553103fb-1fe7-4557-bb38-946d7d0e7ca7")
    ID3D12GraphicsCommandList1 : public ID3D12GraphicsCommandList
    {
    public:
        virtual void STDMETHODCALLTYPE AtomicCopyBufferUINT( 
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges) = 0;
        
        virtual void STDMETHODCALLTYPE AtomicCopyBufferUINT64( 
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges) = 0;
        
        virtual void STDMETHODCALLTYPE OMSetDepthBounds( 
            _In_  FLOAT Min,
            _In_  FLOAT Max) = 0;
        
        virtual void STDMETHODCALLTYPE SetSamplePositions( 
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions) = 0;
        
        virtual void STDMETHODCALLTYPE ResolveSubresourceRegion( 
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode) = 0;
        
        virtual void STDMETHODCALLTYPE SetViewInstanceMask( 
            _In_  UINT Mask) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList1 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList1 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList1 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList1 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList1 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList1 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList1 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList1 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList1 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList1 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList1 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList1 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList1 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList1 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList1 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList1 * This,
            _In_  UINT Mask);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList1Vtbl;

    interface ID3D12GraphicsCommandList1
    {
        CONST_VTBL struct ID3D12GraphicsCommandList1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList1_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList1_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList1_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList1_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList1_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList1_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList1_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList1_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList1_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList1_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList1_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList1_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList1_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList1_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList1_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList1_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList1_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList1_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList1_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList1_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList1_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList1_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList1_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList1_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList1_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList1_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList1_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList1_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList1_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList1_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList1_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList1_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList1_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList1_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList1_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList1_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList1_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList1_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList1_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList1_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList1_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList1_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList1_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList1_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList1_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList1_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList1_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList1_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList1_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList1_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList1_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList1_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList1_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList1_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList1_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList1_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList1_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList1_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList1_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0019 */
/* [local] */ 

typedef struct D3D12_WRITEBUFFERIMMEDIATE_PARAMETER
    {
    D3D12_GPU_VIRTUAL_ADDRESS Dest;
    UINT32 Value;
    } 	D3D12_WRITEBUFFERIMMEDIATE_PARAMETER;

typedef 
enum D3D12_WRITEBUFFERIMMEDIATE_MODE
    {
        D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT	= 0,
        D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN	= 0x1,
        D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT	= 0x2
    } 	D3D12_WRITEBUFFERIMMEDIATE_MODE;



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 __ID3D12GraphicsCommandList2_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList2_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList2 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("38C3E585-FF17-412C-9150-4FC6F9D72A28")
    ID3D12GraphicsCommandList2 : public ID3D12GraphicsCommandList1
    {
    public:
        virtual void STDMETHODCALLTYPE WriteBufferImmediate( 
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList2 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList2 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList2 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList2 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList2 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList2 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList2 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList2 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList2 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList2 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList2 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList2 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList2 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList2 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList2 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList2Vtbl;

    interface ID3D12GraphicsCommandList2
    {
        CONST_VTBL struct ID3D12GraphicsCommandList2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList2_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList2_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList2_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList2_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList2_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList2_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList2_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList2_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList2_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList2_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList2_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList2_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList2_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList2_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList2_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList2_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList2_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList2_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList2_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList2_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList2_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList2_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList2_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList2_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList2_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList2_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList2_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList2_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList2_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList2_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList2_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList2_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList2_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList2_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList2_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList2_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList2_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList2_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList2_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList2_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList2_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList2_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList2_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList2_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList2_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList2_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList2_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList2_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList2_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList2_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList2_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList2_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList2_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList2_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList2_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList2_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList2_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList2_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList2_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList2_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList2_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList2_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList2_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;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
#else
        virtual D3D12_COMMAND_QUEUE_DESC *STDMETHODCALLTYPE GetDesc( 
            D3D12_COMMAND_QUEUE_DESC * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12CommandQueueVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12CommandQueue * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12CommandQueue * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12CommandQueue * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12CommandQueue * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12CommandQueue * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12CommandQueue * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12CommandQueue * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12CommandQueue * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, UpdateTileMappings)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, CopyTileMappings)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, ExecuteCommandLists)
        void ( STDMETHODCALLTYPE *ExecuteCommandLists )( 
            ID3D12CommandQueue * This,
            _In_  UINT NumCommandLists,
            _In_reads_(NumCommandLists)  ID3D12CommandList *const *ppCommandLists);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12CommandQueue * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12CommandQueue * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12CommandQueue * This);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, Signal)
        HRESULT ( STDMETHODCALLTYPE *Signal )( 
            ID3D12CommandQueue * This,
            ID3D12Fence *pFence,
            UINT64 Value);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, Wait)
        HRESULT ( STDMETHODCALLTYPE *Wait )( 
            ID3D12CommandQueue * This,
            ID3D12Fence *pFence,
            UINT64 Value);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetTimestampFrequency)
        HRESULT ( STDMETHODCALLTYPE *GetTimestampFrequency )( 
            ID3D12CommandQueue * This,
            _Out_  UINT64 *pFrequency);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetClockCalibration)
        HRESULT ( STDMETHODCALLTYPE *GetClockCalibration )( 
            ID3D12CommandQueue * This,
            _Out_  UINT64 *pGpuTimestamp,
            _Out_  UINT64 *pCpuTimestamp);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetDesc)
#if !defined(_WIN32)
        D3D12_COMMAND_QUEUE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12CommandQueue * This);
        
#else
        D3D12_COMMAND_QUEUE_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12CommandQueue * This,
            D3D12_COMMAND_QUEUE_DESC * RetVal);
        
#endif
        
        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) ) 
#if !defined(_WIN32)

#define ID3D12CommandQueue_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12CommandQueue_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12CommandQueue_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0021 */
/* [local] */ 

typedef struct D3D12_FEATURE_DATA_HARDWARE_SCHEDULING_QUEUE_GROUPINGS
    {
    _Out_  UINT ComputeQueuesPer3DQueue;
    } 	D3D12_FEATURE_DATA_HARDWARE_SCHEDULING_QUEUE_GROUPINGS;

typedef 
enum D3D12_COMMAND_QUEUE_PROCESS_PRIORITY
    {
        D3D12_COMMAND_QUEUE_PROCESS_PRIORITY_NORMAL	= 0,
        D3D12_COMMAND_QUEUE_PROCESS_PRIORITY_HIGH	= 1
    } 	D3D12_COMMAND_QUEUE_PROCESS_PRIORITY;

typedef 
enum D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY
    {
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_IDLE	= 0,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_DEFAULT	= 1,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_NORMAL_0	= 2,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_0	= 18,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_1	= 19,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_2	= 20,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_3	= 21,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_4	= 22,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_5	= 23,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_6	= 24,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_7	= 25,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_8	= 26,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_9	= 27,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_10	= 28,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_11	= 29,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_12	= 30,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_13	= 31,
        D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_HARD_REALTIME	= 32
    } 	D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0021_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0021_v0_0_s_ifspec;

#ifndef __ID3D12CommandQueue1_INTERFACE_DEFINED__
#define __ID3D12CommandQueue1_INTERFACE_DEFINED__

/* interface ID3D12CommandQueue1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12CommandQueue1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("3a3c3165-0ee7-4b8e-a0af-6356b4c3bbb9")
    ID3D12CommandQueue1 : public ID3D12CommandQueue
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetProcessPriority( 
            D3D12_COMMAND_QUEUE_PROCESS_PRIORITY Priority) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetProcessPriority( 
            D3D12_COMMAND_QUEUE_PROCESS_PRIORITY *pOutValue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetGlobalPriority( 
            D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY Priority) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetGlobalPriority( 
            D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY *pOutValue) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12CommandQueue1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12CommandQueue1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12CommandQueue1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12CommandQueue1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12CommandQueue1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12CommandQueue1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12CommandQueue1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12CommandQueue1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12CommandQueue1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, UpdateTileMappings)
        void ( STDMETHODCALLTYPE *UpdateTileMappings )( 
            ID3D12CommandQueue1 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, CopyTileMappings)
        void ( STDMETHODCALLTYPE *CopyTileMappings )( 
            ID3D12CommandQueue1 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, ExecuteCommandLists)
        void ( STDMETHODCALLTYPE *ExecuteCommandLists )( 
            ID3D12CommandQueue1 * This,
            _In_  UINT NumCommandLists,
            _In_reads_(NumCommandLists)  ID3D12CommandList *const *ppCommandLists);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12CommandQueue1 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12CommandQueue1 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12CommandQueue1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, Signal)
        HRESULT ( STDMETHODCALLTYPE *Signal )( 
            ID3D12CommandQueue1 * This,
            ID3D12Fence *pFence,
            UINT64 Value);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, Wait)
        HRESULT ( STDMETHODCALLTYPE *Wait )( 
            ID3D12CommandQueue1 * This,
            ID3D12Fence *pFence,
            UINT64 Value);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetTimestampFrequency)
        HRESULT ( STDMETHODCALLTYPE *GetTimestampFrequency )( 
            ID3D12CommandQueue1 * This,
            _Out_  UINT64 *pFrequency);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetClockCalibration)
        HRESULT ( STDMETHODCALLTYPE *GetClockCalibration )( 
            ID3D12CommandQueue1 * This,
            _Out_  UINT64 *pGpuTimestamp,
            _Out_  UINT64 *pCpuTimestamp);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetDesc)
#if !defined(_WIN32)
        D3D12_COMMAND_QUEUE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12CommandQueue1 * This);
        
#else
        D3D12_COMMAND_QUEUE_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12CommandQueue1 * This,
            D3D12_COMMAND_QUEUE_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue1, SetProcessPriority)
        HRESULT ( STDMETHODCALLTYPE *SetProcessPriority )( 
            ID3D12CommandQueue1 * This,
            D3D12_COMMAND_QUEUE_PROCESS_PRIORITY Priority);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue1, GetProcessPriority)
        HRESULT ( STDMETHODCALLTYPE *GetProcessPriority )( 
            ID3D12CommandQueue1 * This,
            D3D12_COMMAND_QUEUE_PROCESS_PRIORITY *pOutValue);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue1, SetGlobalPriority)
        HRESULT ( STDMETHODCALLTYPE *SetGlobalPriority )( 
            ID3D12CommandQueue1 * This,
            D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY Priority);
        
        DECLSPEC_XFGVIRT(ID3D12CommandQueue1, GetGlobalPriority)
        HRESULT ( STDMETHODCALLTYPE *GetGlobalPriority )( 
            ID3D12CommandQueue1 * This,
            D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY *pOutValue);
        
        END_INTERFACE
    } ID3D12CommandQueue1Vtbl;

    interface ID3D12CommandQueue1
    {
        CONST_VTBL struct ID3D12CommandQueue1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12CommandQueue1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12CommandQueue1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12CommandQueue1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12CommandQueue1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12CommandQueue1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12CommandQueue1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12CommandQueue1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12CommandQueue1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 



#define ID3D12CommandQueue1_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 ID3D12CommandQueue1_CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags)	\
    ( (This)->lpVtbl -> CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) ) 

#define ID3D12CommandQueue1_ExecuteCommandLists(This,NumCommandLists,ppCommandLists)	\
    ( (This)->lpVtbl -> ExecuteCommandLists(This,NumCommandLists,ppCommandLists) ) 

#define ID3D12CommandQueue1_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12CommandQueue1_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12CommandQueue1_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12CommandQueue1_Signal(This,pFence,Value)	\
    ( (This)->lpVtbl -> Signal(This,pFence,Value) ) 

#define ID3D12CommandQueue1_Wait(This,pFence,Value)	\
    ( (This)->lpVtbl -> Wait(This,pFence,Value) ) 

#define ID3D12CommandQueue1_GetTimestampFrequency(This,pFrequency)	\
    ( (This)->lpVtbl -> GetTimestampFrequency(This,pFrequency) ) 

#define ID3D12CommandQueue1_GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp)	\
    ( (This)->lpVtbl -> GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) ) 
#if !defined(_WIN32)

#define ID3D12CommandQueue1_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12CommandQueue1_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif


#define ID3D12CommandQueue1_SetProcessPriority(This,Priority)	\
    ( (This)->lpVtbl -> SetProcessPriority(This,Priority) ) 

#define ID3D12CommandQueue1_GetProcessPriority(This,pOutValue)	\
    ( (This)->lpVtbl -> GetProcessPriority(This,pOutValue) ) 

#define ID3D12CommandQueue1_SetGlobalPriority(This,Priority)	\
    ( (This)->lpVtbl -> SetGlobalPriority(This,Priority) ) 

#define ID3D12CommandQueue1_GetGlobalPriority(This,pOutValue)	\
    ( (This)->lpVtbl -> GetGlobalPriority(This,pOutValue) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12CommandQueue1_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;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo( 
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs) = 0;
#else
        virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo( 
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs) = 0;
#endif
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE GetCustomHeapProperties( 
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType) = 0;
#else
        virtual D3D12_HEAP_PROPERTIES *STDMETHODCALLTYPE GetCustomHeapProperties( 
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType) = 0;
#endif
        
        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;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual LUID STDMETHODCALLTYPE GetAdapterLuid( void) = 0;
#else
        virtual LUID *STDMETHODCALLTYPE GetAdapterLuid( 
            LUID * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device * This,
            LUID * RetVal);
        
#endif
        
        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) ) 
#if !defined(_WIN32)

#define ID3D12Device_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#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) ) 
#if !defined(_WIN32)

#define ID3D12Device_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif

#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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12PipelineLibrary * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12PipelineLibrary * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12PipelineLibrary * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12PipelineLibrary * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12PipelineLibrary * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12PipelineLibrary * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12PipelineLibrary * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12PipelineLibrary * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, StorePipeline)
        HRESULT ( STDMETHODCALLTYPE *StorePipeline )( 
            ID3D12PipelineLibrary * This,
            _In_opt_  LPCWSTR pName,
            _In_  ID3D12PipelineState *pPipeline);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadGraphicsPipeline)
        HRESULT ( STDMETHODCALLTYPE *LoadGraphicsPipeline )( 
            ID3D12PipelineLibrary * This,
            _In_  LPCWSTR pName,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadComputePipeline)
        HRESULT ( STDMETHODCALLTYPE *LoadComputePipeline )( 
            ID3D12PipelineLibrary * This,
            _In_  LPCWSTR pName,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, GetSerializedSize)
        SIZE_T ( STDMETHODCALLTYPE *GetSerializedSize )( 
            ID3D12PipelineLibrary * This);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, Serialize)
        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__ */


#ifndef __ID3D12PipelineLibrary1_INTERFACE_DEFINED__
#define __ID3D12PipelineLibrary1_INTERFACE_DEFINED__

/* interface ID3D12PipelineLibrary1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12PipelineLibrary1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("80eabf42-2568-4e5e-bd82-c37f86961dc3")
    ID3D12PipelineLibrary1 : public ID3D12PipelineLibrary
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE LoadPipeline( 
            _In_  LPCWSTR pName,
            _In_  const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12PipelineLibrary1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12PipelineLibrary1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12PipelineLibrary1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12PipelineLibrary1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12PipelineLibrary1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12PipelineLibrary1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12PipelineLibrary1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12PipelineLibrary1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12PipelineLibrary1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, StorePipeline)
        HRESULT ( STDMETHODCALLTYPE *StorePipeline )( 
            ID3D12PipelineLibrary1 * This,
            _In_opt_  LPCWSTR pName,
            _In_  ID3D12PipelineState *pPipeline);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadGraphicsPipeline)
        HRESULT ( STDMETHODCALLTYPE *LoadGraphicsPipeline )( 
            ID3D12PipelineLibrary1 * This,
            _In_  LPCWSTR pName,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadComputePipeline)
        HRESULT ( STDMETHODCALLTYPE *LoadComputePipeline )( 
            ID3D12PipelineLibrary1 * This,
            _In_  LPCWSTR pName,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, GetSerializedSize)
        SIZE_T ( STDMETHODCALLTYPE *GetSerializedSize )( 
            ID3D12PipelineLibrary1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, Serialize)
        HRESULT ( STDMETHODCALLTYPE *Serialize )( 
            ID3D12PipelineLibrary1 * This,
            _Out_writes_(DataSizeInBytes)  void *pData,
            SIZE_T DataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12PipelineLibrary1, LoadPipeline)
        HRESULT ( STDMETHODCALLTYPE *LoadPipeline )( 
            ID3D12PipelineLibrary1 * This,
            _In_  LPCWSTR pName,
            _In_  const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        END_INTERFACE
    } ID3D12PipelineLibrary1Vtbl;

    interface ID3D12PipelineLibrary1
    {
        CONST_VTBL struct ID3D12PipelineLibrary1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12PipelineLibrary1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12PipelineLibrary1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12PipelineLibrary1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12PipelineLibrary1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12PipelineLibrary1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12PipelineLibrary1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12PipelineLibrary1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12PipelineLibrary1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12PipelineLibrary1_StorePipeline(This,pName,pPipeline)	\
    ( (This)->lpVtbl -> StorePipeline(This,pName,pPipeline) ) 

#define ID3D12PipelineLibrary1_LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState) ) 

#define ID3D12PipelineLibrary1_LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState) ) 

#define ID3D12PipelineLibrary1_GetSerializedSize(This)	\
    ( (This)->lpVtbl -> GetSerializedSize(This) ) 

#define ID3D12PipelineLibrary1_Serialize(This,pData,DataSizeInBytes)	\
    ( (This)->lpVtbl -> Serialize(This,pData,DataSizeInBytes) ) 


#define ID3D12PipelineLibrary1_LoadPipeline(This,pName,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> LoadPipeline(This,pName,pDesc,riid,ppPipelineState) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12PipelineLibrary1_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0025 */
/* [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	= 0xa0010000,
        D3D12_RESIDENCY_PRIORITY_MAXIMUM	= 0xc8000000
    } 	D3D12_RESIDENCY_PRIORITY;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_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
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device1 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device1 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device1 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device1 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device1 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device1 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device1 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device1 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device1 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device1 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device1 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device1 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device1 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device1 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device1 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device1 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device1 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device1 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device1 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device1 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device1 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device1 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device1 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device1 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device1 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device1 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device1 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device1 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device1 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device1 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        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);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        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) ) 
#if !defined(_WIN32)

#define ID3D12Device1_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device1_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device1_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device1_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#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) ) 
#if !defined(_WIN32)

#define ID3D12Device1_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device1_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#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__ */


#ifndef __ID3D12Device2_INTERFACE_DEFINED__
#define __ID3D12Device2_INTERFACE_DEFINED__

/* interface ID3D12Device2 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("30baa41e-b15b-475c-a0bb-1af5c5b64328")
    ID3D12Device2 : public ID3D12Device1
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreatePipelineState( 
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device2 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device2 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device2 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device2 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device2 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device2 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device2 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device2 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device2 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device2 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device2 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device2 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device2 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device2 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device2 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device2 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device2 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device2 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device2 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device2 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device2 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device2 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device2 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device2 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device2 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device2 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device2 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device2 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device2 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device2 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device2 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device2 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device2 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device2 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device2 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device2 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device2 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device2 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device2 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device2 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device2 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device2 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        END_INTERFACE
    } ID3D12Device2Vtbl;

    interface ID3D12Device2
    {
        CONST_VTBL struct ID3D12Device2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device2_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device2_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device2_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device2_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device2_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device2_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device2_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device2_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device2_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device2_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device2_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device2_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device2_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device2_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device2_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device2_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device2_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device2_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device2_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device2_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device2_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device2_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device2_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device2_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device2_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device2_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device2_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device2_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device2_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device2_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device2_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device2_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device2_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device2_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device2_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device2_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device2_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device2_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device2_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device2_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device2_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device2_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device2_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device2_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device2_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device2_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device2_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device2_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device2_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0027 */
/* [local] */ 

typedef 
enum D3D12_RESIDENCY_FLAGS
    {
        D3D12_RESIDENCY_FLAG_NONE	= 0,
        D3D12_RESIDENCY_FLAG_DENY_OVERBUDGET	= 0x1
    } 	D3D12_RESIDENCY_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESIDENCY_FLAGS )


extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_s_ifspec;

#ifndef __ID3D12Device3_INTERFACE_DEFINED__
#define __ID3D12Device3_INTERFACE_DEFINED__

/* interface ID3D12Device3 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device3;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("81dadc15-2bad-4392-93c5-101345c4aa98")
    ID3D12Device3 : public ID3D12Device2
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE OpenExistingHeapFromAddress( 
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE OpenExistingHeapFromFileMapping( 
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EnqueueMakeResident( 
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device3Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device3 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device3 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device3 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device3 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device3 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device3 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device3 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device3 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device3 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device3 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device3 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device3 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device3 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device3 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device3 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device3 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device3 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device3 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device3 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device3 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device3 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device3 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device3 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device3 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device3 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device3 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device3 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device3 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device3 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device3 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device3 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device3 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device3 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device3 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device3 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device3 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device3 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device3 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device3 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device3 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device3 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device3 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device3 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device3 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device3 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device3 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device3 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device3 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        END_INTERFACE
    } ID3D12Device3Vtbl;

    interface ID3D12Device3
    {
        CONST_VTBL struct ID3D12Device3Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device3_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device3_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device3_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device3_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device3_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device3_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device3_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device3_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device3_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device3_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device3_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device3_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device3_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device3_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device3_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device3_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device3_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device3_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device3_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device3_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device3_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device3_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device3_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device3_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device3_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device3_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device3_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device3_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device3_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device3_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device3_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device3_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device3_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device3_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device3_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device3_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device3_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device3_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device3_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device3_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device3_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device3_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device3_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device3_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device3_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device3_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device3_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device3_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device3_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device3_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device3_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device3_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device3_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device3_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device3_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0028 */
/* [local] */ 

typedef 
enum D3D12_COMMAND_LIST_FLAGS
    {
        D3D12_COMMAND_LIST_FLAG_NONE	= 0
    } 	D3D12_COMMAND_LIST_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_FLAGS )
typedef 
enum D3D12_COMMAND_POOL_FLAGS
    {
        D3D12_COMMAND_POOL_FLAG_NONE	= 0
    } 	D3D12_COMMAND_POOL_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_POOL_FLAGS )
typedef 
enum D3D12_COMMAND_RECORDER_FLAGS
    {
        D3D12_COMMAND_RECORDER_FLAG_NONE	= 0
    } 	D3D12_COMMAND_RECORDER_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_RECORDER_FLAGS )
typedef 
enum D3D12_PROTECTED_SESSION_STATUS
    {
        D3D12_PROTECTED_SESSION_STATUS_OK	= 0,
        D3D12_PROTECTED_SESSION_STATUS_INVALID	= 1
    } 	D3D12_PROTECTED_SESSION_STATUS;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0028_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0028_v0_0_s_ifspec;

#ifndef __ID3D12ProtectedSession_INTERFACE_DEFINED__
#define __ID3D12ProtectedSession_INTERFACE_DEFINED__

/* interface ID3D12ProtectedSession */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12ProtectedSession;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("A1533D18-0AC1-4084-85B9-89A96116806B")
    ID3D12ProtectedSession : public ID3D12DeviceChild
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetStatusFence( 
            REFIID riid,
            _COM_Outptr_opt_  void **ppFence) = 0;
        
        virtual D3D12_PROTECTED_SESSION_STATUS STDMETHODCALLTYPE GetSessionStatus( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12ProtectedSessionVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12ProtectedSession * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12ProtectedSession * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12ProtectedSession * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12ProtectedSession * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12ProtectedSession * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12ProtectedSession * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12ProtectedSession * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12ProtectedSession * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetStatusFence)
        HRESULT ( STDMETHODCALLTYPE *GetStatusFence )( 
            ID3D12ProtectedSession * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetSessionStatus)
        D3D12_PROTECTED_SESSION_STATUS ( STDMETHODCALLTYPE *GetSessionStatus )( 
            ID3D12ProtectedSession * This);
        
        END_INTERFACE
    } ID3D12ProtectedSessionVtbl;

    interface ID3D12ProtectedSession
    {
        CONST_VTBL struct ID3D12ProtectedSessionVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12ProtectedSession_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12ProtectedSession_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12ProtectedSession_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12ProtectedSession_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12ProtectedSession_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12ProtectedSession_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12ProtectedSession_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12ProtectedSession_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12ProtectedSession_GetStatusFence(This,riid,ppFence)	\
    ( (This)->lpVtbl -> GetStatusFence(This,riid,ppFence) ) 

#define ID3D12ProtectedSession_GetSessionStatus(This)	\
    ( (This)->lpVtbl -> GetSessionStatus(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12ProtectedSession_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0029 */
/* [local] */ 

typedef 
enum D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS
    {
        D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_NONE	= 0,
        D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_SUPPORTED	= 0x1
    } 	D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS )
typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT
    {
    UINT NodeIndex;
    D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS Support;
    } 	D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT;

typedef 
enum D3D12_PROTECTED_RESOURCE_SESSION_FLAGS
    {
        D3D12_PROTECTED_RESOURCE_SESSION_FLAG_NONE	= 0
    } 	D3D12_PROTECTED_RESOURCE_SESSION_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_FLAGS )
typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC
    {
    UINT NodeMask;
    D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags;
    } 	D3D12_PROTECTED_RESOURCE_SESSION_DESC;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_s_ifspec;

#ifndef __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__
#define __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__

/* interface ID3D12ProtectedResourceSession */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12ProtectedResourceSession;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("6CD696F4-F289-40CC-8091-5A6C0A099C3D")
    ID3D12ProtectedResourceSession : public ID3D12ProtectedSession
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
#else
        virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC *STDMETHODCALLTYPE GetDesc( 
            D3D12_PROTECTED_RESOURCE_SESSION_DESC * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12ProtectedResourceSessionVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12ProtectedResourceSession * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12ProtectedResourceSession * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12ProtectedResourceSession * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12ProtectedResourceSession * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12ProtectedResourceSession * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12ProtectedResourceSession * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12ProtectedResourceSession * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12ProtectedResourceSession * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetStatusFence)
        HRESULT ( STDMETHODCALLTYPE *GetStatusFence )( 
            ID3D12ProtectedResourceSession * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetSessionStatus)
        D3D12_PROTECTED_SESSION_STATUS ( STDMETHODCALLTYPE *GetSessionStatus )( 
            ID3D12ProtectedResourceSession * This);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedResourceSession, GetDesc)
#if !defined(_WIN32)
        D3D12_PROTECTED_RESOURCE_SESSION_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12ProtectedResourceSession * This);
        
#else
        D3D12_PROTECTED_RESOURCE_SESSION_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12ProtectedResourceSession * This,
            D3D12_PROTECTED_RESOURCE_SESSION_DESC * RetVal);
        
#endif
        
        END_INTERFACE
    } ID3D12ProtectedResourceSessionVtbl;

    interface ID3D12ProtectedResourceSession
    {
        CONST_VTBL struct ID3D12ProtectedResourceSessionVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12ProtectedResourceSession_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12ProtectedResourceSession_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12ProtectedResourceSession_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12ProtectedResourceSession_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12ProtectedResourceSession_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12ProtectedResourceSession_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12ProtectedResourceSession_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12ProtectedResourceSession_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12ProtectedResourceSession_GetStatusFence(This,riid,ppFence)	\
    ( (This)->lpVtbl -> GetStatusFence(This,riid,ppFence) ) 

#define ID3D12ProtectedResourceSession_GetSessionStatus(This)	\
    ( (This)->lpVtbl -> GetSessionStatus(This) ) 

#if !defined(_WIN32)

#define ID3D12ProtectedResourceSession_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12ProtectedResourceSession_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device4_INTERFACE_DEFINED__
#define __ID3D12Device4_INTERFACE_DEFINED__

/* interface ID3D12Device4 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device4;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("e865df17-a9ee-46f9-a463-3098315aa2e5")
    ID3D12Device4 : public ID3D12Device3
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateCommandList1( 
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateProtectedResourceSession( 
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource1( 
            _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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateHeap1( 
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateReservedResource1( 
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo1( 
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0;
#else
        virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo1( 
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device4Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device4 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device4 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device4 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device4 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device4 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device4 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device4 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device4 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device4 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device4 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device4 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device4 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device4 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device4 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device4 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device4 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device4 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device4 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device4 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device4 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device4 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device4 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device4 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device4 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device4 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device4 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device4 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device4 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device4 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device4 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device4 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device4 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device4 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device4 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device4 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device4 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device4 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device4 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device4 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device4 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device4 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device4 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device4 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device4 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device4 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device4 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device4 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device4 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device4 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device4 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device4 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device4 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        END_INTERFACE
    } ID3D12Device4Vtbl;

    interface ID3D12Device4
    {
        CONST_VTBL struct ID3D12Device4Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device4_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device4_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device4_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device4_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device4_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device4_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device4_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device4_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device4_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device4_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device4_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device4_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device4_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device4_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device4_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device4_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device4_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device4_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device4_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device4_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device4_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device4_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device4_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device4_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device4_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device4_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device4_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device4_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device4_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device4_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device4_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device4_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device4_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device4_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device4_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device4_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device4_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device4_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device4_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device4_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device4_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device4_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device4_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device4_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device4_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device4_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device4_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device4_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device4_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device4_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device4_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device4_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device4_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device4_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device4_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device4_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device4_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device4_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device4_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device4_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device4_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device4_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0031 */
/* [local] */ 

typedef 
enum D3D12_LIFETIME_STATE
    {
        D3D12_LIFETIME_STATE_IN_USE	= 0,
        D3D12_LIFETIME_STATE_NOT_IN_USE	= ( D3D12_LIFETIME_STATE_IN_USE + 1 ) 
    } 	D3D12_LIFETIME_STATE;




extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0031_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0031_v0_0_s_ifspec;

#ifndef __ID3D12LifetimeOwner_INTERFACE_DEFINED__
#define __ID3D12LifetimeOwner_INTERFACE_DEFINED__

/* interface ID3D12LifetimeOwner */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12LifetimeOwner;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("e667af9f-cd56-4f46-83ce-032e595d70a8")
    ID3D12LifetimeOwner : public IUnknown
    {
    public:
        virtual void STDMETHODCALLTYPE LifetimeStateUpdated( 
            D3D12_LIFETIME_STATE NewState) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12LifetimeOwnerVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12LifetimeOwner * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12LifetimeOwner * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12LifetimeOwner * This);
        
        DECLSPEC_XFGVIRT(ID3D12LifetimeOwner, LifetimeStateUpdated)
        void ( STDMETHODCALLTYPE *LifetimeStateUpdated )( 
            ID3D12LifetimeOwner * This,
            D3D12_LIFETIME_STATE NewState);
        
        END_INTERFACE
    } ID3D12LifetimeOwnerVtbl;

    interface ID3D12LifetimeOwner
    {
        CONST_VTBL struct ID3D12LifetimeOwnerVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12LifetimeOwner_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12LifetimeOwner_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12LifetimeOwner_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12LifetimeOwner_LifetimeStateUpdated(This,NewState)	\
    ( (This)->lpVtbl -> LifetimeStateUpdated(This,NewState) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12LifetimeOwner_INTERFACE_DEFINED__ */


#ifndef __ID3D12SwapChainAssistant_INTERFACE_DEFINED__
#define __ID3D12SwapChainAssistant_INTERFACE_DEFINED__

/* interface ID3D12SwapChainAssistant */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12SwapChainAssistant;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("f1df64b6-57fd-49cd-8807-c0eb88b45c8f")
    ID3D12SwapChainAssistant : public IUnknown
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual LUID STDMETHODCALLTYPE GetLUID( void) = 0;
#else
        virtual LUID *STDMETHODCALLTYPE GetLUID( 
            LUID * RetVal) = 0;
#endif
        
        virtual HRESULT STDMETHODCALLTYPE GetSwapChainObject( 
            REFIID riid,
            _COM_Outptr_  void **ppv) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCurrentResourceAndCommandQueue( 
            REFIID riidResource,
            _COM_Outptr_  void **ppvResource,
            REFIID riidQueue,
            _COM_Outptr_  void **ppvQueue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE InsertImplicitSync( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12SwapChainAssistantVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12SwapChainAssistant * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12SwapChainAssistant * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12SwapChainAssistant * This);
        
        DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, GetLUID)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetLUID )( 
            ID3D12SwapChainAssistant * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetLUID )( 
            ID3D12SwapChainAssistant * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, GetSwapChainObject)
        HRESULT ( STDMETHODCALLTYPE *GetSwapChainObject )( 
            ID3D12SwapChainAssistant * This,
            REFIID riid,
            _COM_Outptr_  void **ppv);
        
        DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, GetCurrentResourceAndCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentResourceAndCommandQueue )( 
            ID3D12SwapChainAssistant * This,
            REFIID riidResource,
            _COM_Outptr_  void **ppvResource,
            REFIID riidQueue,
            _COM_Outptr_  void **ppvQueue);
        
        DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, InsertImplicitSync)
        HRESULT ( STDMETHODCALLTYPE *InsertImplicitSync )( 
            ID3D12SwapChainAssistant * This);
        
        END_INTERFACE
    } ID3D12SwapChainAssistantVtbl;

    interface ID3D12SwapChainAssistant
    {
        CONST_VTBL struct ID3D12SwapChainAssistantVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12SwapChainAssistant_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12SwapChainAssistant_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12SwapChainAssistant_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 

#if !defined(_WIN32)

#define ID3D12SwapChainAssistant_GetLUID(This)	\
    ( (This)->lpVtbl -> GetLUID(This) ) 
#else
#define ID3D12SwapChainAssistant_GetLUID(This,RetVal)	\
    ( (This)->lpVtbl -> GetLUID(This,RetVal) ) 
#endif

#define ID3D12SwapChainAssistant_GetSwapChainObject(This,riid,ppv)	\
    ( (This)->lpVtbl -> GetSwapChainObject(This,riid,ppv) ) 

#define ID3D12SwapChainAssistant_GetCurrentResourceAndCommandQueue(This,riidResource,ppvResource,riidQueue,ppvQueue)	\
    ( (This)->lpVtbl -> GetCurrentResourceAndCommandQueue(This,riidResource,ppvResource,riidQueue,ppvQueue) ) 

#define ID3D12SwapChainAssistant_InsertImplicitSync(This)	\
    ( (This)->lpVtbl -> InsertImplicitSync(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12SwapChainAssistant_INTERFACE_DEFINED__ */


#ifndef __ID3D12LifetimeTracker_INTERFACE_DEFINED__
#define __ID3D12LifetimeTracker_INTERFACE_DEFINED__

/* interface ID3D12LifetimeTracker */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12LifetimeTracker;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("3fd03d36-4eb1-424a-a582-494ecb8ba813")
    ID3D12LifetimeTracker : public ID3D12DeviceChild
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE DestroyOwnedObject( 
            _In_  ID3D12DeviceChild *pObject) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12LifetimeTrackerVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12LifetimeTracker * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12LifetimeTracker * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12LifetimeTracker * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12LifetimeTracker * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12LifetimeTracker * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12LifetimeTracker * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12LifetimeTracker * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12LifetimeTracker * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12LifetimeTracker, DestroyOwnedObject)
        HRESULT ( STDMETHODCALLTYPE *DestroyOwnedObject )( 
            ID3D12LifetimeTracker * This,
            _In_  ID3D12DeviceChild *pObject);
        
        END_INTERFACE
    } ID3D12LifetimeTrackerVtbl;

    interface ID3D12LifetimeTracker
    {
        CONST_VTBL struct ID3D12LifetimeTrackerVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12LifetimeTracker_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12LifetimeTracker_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12LifetimeTracker_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12LifetimeTracker_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12LifetimeTracker_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12LifetimeTracker_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12LifetimeTracker_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12LifetimeTracker_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12LifetimeTracker_DestroyOwnedObject(This,pObject)	\
    ( (This)->lpVtbl -> DestroyOwnedObject(This,pObject) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12LifetimeTracker_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0034 */
/* [local] */ 

typedef 
enum D3D12_META_COMMAND_PARAMETER_TYPE
    {
        D3D12_META_COMMAND_PARAMETER_TYPE_FLOAT	= 0,
        D3D12_META_COMMAND_PARAMETER_TYPE_UINT64	= 1,
        D3D12_META_COMMAND_PARAMETER_TYPE_GPU_VIRTUAL_ADDRESS	= 2,
        D3D12_META_COMMAND_PARAMETER_TYPE_CPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV	= 3,
        D3D12_META_COMMAND_PARAMETER_TYPE_GPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV	= 4
    } 	D3D12_META_COMMAND_PARAMETER_TYPE;

typedef 
enum D3D12_META_COMMAND_PARAMETER_FLAGS
    {
        D3D12_META_COMMAND_PARAMETER_FLAG_INPUT	= 0x1,
        D3D12_META_COMMAND_PARAMETER_FLAG_OUTPUT	= 0x2
    } 	D3D12_META_COMMAND_PARAMETER_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_META_COMMAND_PARAMETER_FLAGS )
typedef 
enum D3D12_META_COMMAND_PARAMETER_STAGE
    {
        D3D12_META_COMMAND_PARAMETER_STAGE_CREATION	= 0,
        D3D12_META_COMMAND_PARAMETER_STAGE_INITIALIZATION	= 1,
        D3D12_META_COMMAND_PARAMETER_STAGE_EXECUTION	= 2
    } 	D3D12_META_COMMAND_PARAMETER_STAGE;

typedef struct D3D12_META_COMMAND_PARAMETER_DESC
    {
    LPCWSTR Name;
    D3D12_META_COMMAND_PARAMETER_TYPE Type;
    D3D12_META_COMMAND_PARAMETER_FLAGS Flags;
    D3D12_RESOURCE_STATES RequiredResourceState;
    UINT StructureOffset;
    } 	D3D12_META_COMMAND_PARAMETER_DESC;

typedef 
enum D3D12_GRAPHICS_STATES
    {
        D3D12_GRAPHICS_STATE_NONE	= 0,
        D3D12_GRAPHICS_STATE_IA_VERTEX_BUFFERS	= ( 1 << 0 ) ,
        D3D12_GRAPHICS_STATE_IA_INDEX_BUFFER	= ( 1 << 1 ) ,
        D3D12_GRAPHICS_STATE_IA_PRIMITIVE_TOPOLOGY	= ( 1 << 2 ) ,
        D3D12_GRAPHICS_STATE_DESCRIPTOR_HEAP	= ( 1 << 3 ) ,
        D3D12_GRAPHICS_STATE_GRAPHICS_ROOT_SIGNATURE	= ( 1 << 4 ) ,
        D3D12_GRAPHICS_STATE_COMPUTE_ROOT_SIGNATURE	= ( 1 << 5 ) ,
        D3D12_GRAPHICS_STATE_RS_VIEWPORTS	= ( 1 << 6 ) ,
        D3D12_GRAPHICS_STATE_RS_SCISSOR_RECTS	= ( 1 << 7 ) ,
        D3D12_GRAPHICS_STATE_PREDICATION	= ( 1 << 8 ) ,
        D3D12_GRAPHICS_STATE_OM_RENDER_TARGETS	= ( 1 << 9 ) ,
        D3D12_GRAPHICS_STATE_OM_STENCIL_REF	= ( 1 << 10 ) ,
        D3D12_GRAPHICS_STATE_OM_BLEND_FACTOR	= ( 1 << 11 ) ,
        D3D12_GRAPHICS_STATE_PIPELINE_STATE	= ( 1 << 12 ) ,
        D3D12_GRAPHICS_STATE_SO_TARGETS	= ( 1 << 13 ) ,
        D3D12_GRAPHICS_STATE_OM_DEPTH_BOUNDS	= ( 1 << 14 ) ,
        D3D12_GRAPHICS_STATE_SAMPLE_POSITIONS	= ( 1 << 15 ) ,
        D3D12_GRAPHICS_STATE_VIEW_INSTANCE_MASK	= ( 1 << 16 ) 
    } 	D3D12_GRAPHICS_STATES;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_GRAPHICS_STATES )
typedef struct D3D12_META_COMMAND_DESC
    {
    GUID Id;
    LPCWSTR Name;
    D3D12_GRAPHICS_STATES InitializationDirtyState;
    D3D12_GRAPHICS_STATES ExecutionDirtyState;
    } 	D3D12_META_COMMAND_DESC;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_s_ifspec;

#ifndef __ID3D12StateObject_INTERFACE_DEFINED__
#define __ID3D12StateObject_INTERFACE_DEFINED__

/* interface ID3D12StateObject */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12StateObject;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("47016943-fca8-4594-93ea-af258b55346d")
    ID3D12StateObject : public ID3D12Pageable
    {
    public:
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12StateObjectVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12StateObject * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12StateObject * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12StateObject * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12StateObject * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12StateObject * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12StateObject * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12StateObject * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12StateObject * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        END_INTERFACE
    } ID3D12StateObjectVtbl;

    interface ID3D12StateObject
    {
        CONST_VTBL struct ID3D12StateObjectVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12StateObject_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12StateObject_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12StateObject_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12StateObject_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12StateObject_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12StateObject_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12StateObject_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12StateObject_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 



#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12StateObject_INTERFACE_DEFINED__ */


#ifndef __ID3D12StateObjectProperties_INTERFACE_DEFINED__
#define __ID3D12StateObjectProperties_INTERFACE_DEFINED__

/* interface ID3D12StateObjectProperties */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12StateObjectProperties;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("de5fa827-9bf9-4f26-89ff-d7f56fde3860")
    ID3D12StateObjectProperties : public IUnknown
    {
    public:
        virtual void *STDMETHODCALLTYPE GetShaderIdentifier( 
            _In_  LPCWSTR pExportName) = 0;
        
        virtual UINT64 STDMETHODCALLTYPE GetShaderStackSize( 
            _In_  LPCWSTR pExportName) = 0;
        
        virtual UINT64 STDMETHODCALLTYPE GetPipelineStackSize( void) = 0;
        
        virtual void STDMETHODCALLTYPE SetPipelineStackSize( 
            UINT64 PipelineStackSizeInBytes) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12StateObjectPropertiesVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12StateObjectProperties * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12StateObjectProperties * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12StateObjectProperties * This);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderIdentifier)
        void *( STDMETHODCALLTYPE *GetShaderIdentifier )( 
            ID3D12StateObjectProperties * This,
            _In_  LPCWSTR pExportName);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderStackSize)
        UINT64 ( STDMETHODCALLTYPE *GetShaderStackSize )( 
            ID3D12StateObjectProperties * This,
            _In_  LPCWSTR pExportName);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetPipelineStackSize)
        UINT64 ( STDMETHODCALLTYPE *GetPipelineStackSize )( 
            ID3D12StateObjectProperties * This);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, SetPipelineStackSize)
        void ( STDMETHODCALLTYPE *SetPipelineStackSize )( 
            ID3D12StateObjectProperties * This,
            UINT64 PipelineStackSizeInBytes);
        
        END_INTERFACE
    } ID3D12StateObjectPropertiesVtbl;

    interface ID3D12StateObjectProperties
    {
        CONST_VTBL struct ID3D12StateObjectPropertiesVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12StateObjectProperties_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12StateObjectProperties_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12StateObjectProperties_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12StateObjectProperties_GetShaderIdentifier(This,pExportName)	\
    ( (This)->lpVtbl -> GetShaderIdentifier(This,pExportName) ) 

#define ID3D12StateObjectProperties_GetShaderStackSize(This,pExportName)	\
    ( (This)->lpVtbl -> GetShaderStackSize(This,pExportName) ) 

#define ID3D12StateObjectProperties_GetPipelineStackSize(This)	\
    ( (This)->lpVtbl -> GetPipelineStackSize(This) ) 

#define ID3D12StateObjectProperties_SetPipelineStackSize(This,PipelineStackSizeInBytes)	\
    ( (This)->lpVtbl -> SetPipelineStackSize(This,PipelineStackSizeInBytes) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12StateObjectProperties_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0036 */
/* [local] */ 

typedef struct D3D12_PROGRAM_IDENTIFIER
    {
    UINT64 OpaqueData[ 4 ];
    } 	D3D12_PROGRAM_IDENTIFIER;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0036_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0036_v0_0_s_ifspec;

#ifndef __ID3D12StateObjectProperties1_INTERFACE_DEFINED__
#define __ID3D12StateObjectProperties1_INTERFACE_DEFINED__

/* interface ID3D12StateObjectProperties1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12StateObjectProperties1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("460caac7-1d24-446a-a184-ca67db494138")
    ID3D12StateObjectProperties1 : public ID3D12StateObjectProperties
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_PROGRAM_IDENTIFIER STDMETHODCALLTYPE GetProgramIdentifier( 
            LPCWSTR pProgramName) = 0;
#else
        virtual D3D12_PROGRAM_IDENTIFIER *STDMETHODCALLTYPE GetProgramIdentifier( 
            D3D12_PROGRAM_IDENTIFIER * RetVal,
            LPCWSTR pProgramName) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12StateObjectProperties1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12StateObjectProperties1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12StateObjectProperties1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12StateObjectProperties1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderIdentifier)
        void *( STDMETHODCALLTYPE *GetShaderIdentifier )( 
            ID3D12StateObjectProperties1 * This,
            _In_  LPCWSTR pExportName);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderStackSize)
        UINT64 ( STDMETHODCALLTYPE *GetShaderStackSize )( 
            ID3D12StateObjectProperties1 * This,
            _In_  LPCWSTR pExportName);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetPipelineStackSize)
        UINT64 ( STDMETHODCALLTYPE *GetPipelineStackSize )( 
            ID3D12StateObjectProperties1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, SetPipelineStackSize)
        void ( STDMETHODCALLTYPE *SetPipelineStackSize )( 
            ID3D12StateObjectProperties1 * This,
            UINT64 PipelineStackSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties1, GetProgramIdentifier)
#if !defined(_WIN32)
        D3D12_PROGRAM_IDENTIFIER ( STDMETHODCALLTYPE *GetProgramIdentifier )( 
            ID3D12StateObjectProperties1 * This,
            LPCWSTR pProgramName);
        
#else
        D3D12_PROGRAM_IDENTIFIER *( STDMETHODCALLTYPE *GetProgramIdentifier )( 
            ID3D12StateObjectProperties1 * This,
            D3D12_PROGRAM_IDENTIFIER * RetVal,
            LPCWSTR pProgramName);
        
#endif
        
        END_INTERFACE
    } ID3D12StateObjectProperties1Vtbl;

    interface ID3D12StateObjectProperties1
    {
        CONST_VTBL struct ID3D12StateObjectProperties1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12StateObjectProperties1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12StateObjectProperties1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12StateObjectProperties1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12StateObjectProperties1_GetShaderIdentifier(This,pExportName)	\
    ( (This)->lpVtbl -> GetShaderIdentifier(This,pExportName) ) 

#define ID3D12StateObjectProperties1_GetShaderStackSize(This,pExportName)	\
    ( (This)->lpVtbl -> GetShaderStackSize(This,pExportName) ) 

#define ID3D12StateObjectProperties1_GetPipelineStackSize(This)	\
    ( (This)->lpVtbl -> GetPipelineStackSize(This) ) 

#define ID3D12StateObjectProperties1_SetPipelineStackSize(This,PipelineStackSizeInBytes)	\
    ( (This)->lpVtbl -> SetPipelineStackSize(This,PipelineStackSizeInBytes) ) 

#if !defined(_WIN32)

#define ID3D12StateObjectProperties1_GetProgramIdentifier(This,pProgramName)	\
    ( (This)->lpVtbl -> GetProgramIdentifier(This,pProgramName) ) 
#else
#define ID3D12StateObjectProperties1_GetProgramIdentifier(This,RetVal,pProgramName)	\
    ( (This)->lpVtbl -> GetProgramIdentifier(This,RetVal,pProgramName) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12StateObjectProperties1_INTERFACE_DEFINED__ */


#ifndef __ID3D12StateObjectProperties2_INTERFACE_DEFINED__
#define __ID3D12StateObjectProperties2_INTERFACE_DEFINED__

/* interface ID3D12StateObjectProperties2 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12StateObjectProperties2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("d5e82917-f0f1-44cf-ae5e-ce222dd0b884")
    ID3D12StateObjectProperties2 : public ID3D12StateObjectProperties1
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetGlobalRootSignatureForProgram( 
            LPCWSTR pProgramName,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetGlobalRootSignatureForShader( 
            LPCWSTR pExportName,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12StateObjectProperties2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12StateObjectProperties2 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12StateObjectProperties2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12StateObjectProperties2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderIdentifier)
        void *( STDMETHODCALLTYPE *GetShaderIdentifier )( 
            ID3D12StateObjectProperties2 * This,
            _In_  LPCWSTR pExportName);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderStackSize)
        UINT64 ( STDMETHODCALLTYPE *GetShaderStackSize )( 
            ID3D12StateObjectProperties2 * This,
            _In_  LPCWSTR pExportName);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetPipelineStackSize)
        UINT64 ( STDMETHODCALLTYPE *GetPipelineStackSize )( 
            ID3D12StateObjectProperties2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, SetPipelineStackSize)
        void ( STDMETHODCALLTYPE *SetPipelineStackSize )( 
            ID3D12StateObjectProperties2 * This,
            UINT64 PipelineStackSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties1, GetProgramIdentifier)
#if !defined(_WIN32)
        D3D12_PROGRAM_IDENTIFIER ( STDMETHODCALLTYPE *GetProgramIdentifier )( 
            ID3D12StateObjectProperties2 * This,
            LPCWSTR pProgramName);
        
#else
        D3D12_PROGRAM_IDENTIFIER *( STDMETHODCALLTYPE *GetProgramIdentifier )( 
            ID3D12StateObjectProperties2 * This,
            D3D12_PROGRAM_IDENTIFIER * RetVal,
            LPCWSTR pProgramName);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties2, GetGlobalRootSignatureForProgram)
        HRESULT ( STDMETHODCALLTYPE *GetGlobalRootSignatureForProgram )( 
            ID3D12StateObjectProperties2 * This,
            LPCWSTR pProgramName,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12StateObjectProperties2, GetGlobalRootSignatureForShader)
        HRESULT ( STDMETHODCALLTYPE *GetGlobalRootSignatureForShader )( 
            ID3D12StateObjectProperties2 * This,
            LPCWSTR pExportName,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        END_INTERFACE
    } ID3D12StateObjectProperties2Vtbl;

    interface ID3D12StateObjectProperties2
    {
        CONST_VTBL struct ID3D12StateObjectProperties2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12StateObjectProperties2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12StateObjectProperties2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12StateObjectProperties2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12StateObjectProperties2_GetShaderIdentifier(This,pExportName)	\
    ( (This)->lpVtbl -> GetShaderIdentifier(This,pExportName) ) 

#define ID3D12StateObjectProperties2_GetShaderStackSize(This,pExportName)	\
    ( (This)->lpVtbl -> GetShaderStackSize(This,pExportName) ) 

#define ID3D12StateObjectProperties2_GetPipelineStackSize(This)	\
    ( (This)->lpVtbl -> GetPipelineStackSize(This) ) 

#define ID3D12StateObjectProperties2_SetPipelineStackSize(This,PipelineStackSizeInBytes)	\
    ( (This)->lpVtbl -> SetPipelineStackSize(This,PipelineStackSizeInBytes) ) 

#if !defined(_WIN32)

#define ID3D12StateObjectProperties2_GetProgramIdentifier(This,pProgramName)	\
    ( (This)->lpVtbl -> GetProgramIdentifier(This,pProgramName) ) 
#else
#define ID3D12StateObjectProperties2_GetProgramIdentifier(This,RetVal,pProgramName)	\
    ( (This)->lpVtbl -> GetProgramIdentifier(This,RetVal,pProgramName) ) 
#endif


#define ID3D12StateObjectProperties2_GetGlobalRootSignatureForProgram(This,pProgramName,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> GetGlobalRootSignatureForProgram(This,pProgramName,riid,ppvRootSignature) ) 

#define ID3D12StateObjectProperties2_GetGlobalRootSignatureForShader(This,pExportName,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> GetGlobalRootSignatureForShader(This,pExportName,riid,ppvRootSignature) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12StateObjectProperties2_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0038 */
/* [local] */ 

typedef struct D3D12_NODE_ID
    {
    LPCWSTR Name;
    UINT ArrayIndex;
    } 	D3D12_NODE_ID;

typedef struct D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS
    {
    UINT64 MinSizeInBytes;
    UINT64 MaxSizeInBytes;
    UINT SizeGranularityInBytes;
    } 	D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0038_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0038_v0_0_s_ifspec;

#ifndef __ID3D12WorkGraphProperties_INTERFACE_DEFINED__
#define __ID3D12WorkGraphProperties_INTERFACE_DEFINED__

/* interface ID3D12WorkGraphProperties */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12WorkGraphProperties;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("065acf71-f863-4b89-82f4-02e4d5886757")
    ID3D12WorkGraphProperties : public IUnknown
    {
    public:
        virtual UINT STDMETHODCALLTYPE GetNumWorkGraphs( void) = 0;
        
        virtual LPCWSTR STDMETHODCALLTYPE GetProgramName( 
            UINT WorkGraphIndex) = 0;
        
        virtual UINT STDMETHODCALLTYPE GetWorkGraphIndex( 
            LPCWSTR pProgramName) = 0;
        
        virtual UINT STDMETHODCALLTYPE GetNumNodes( 
            UINT WorkGraphIndex) = 0;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_NODE_ID STDMETHODCALLTYPE GetNodeID( 
            UINT WorkGraphIndex,
            UINT NodeIndex) = 0;
#else
        virtual D3D12_NODE_ID *STDMETHODCALLTYPE GetNodeID( 
            D3D12_NODE_ID * RetVal,
            UINT WorkGraphIndex,
            UINT NodeIndex) = 0;
#endif
        
        virtual UINT STDMETHODCALLTYPE GetNodeIndex( 
            UINT WorkGraphIndex,
            D3D12_NODE_ID NodeID) = 0;
        
        virtual UINT STDMETHODCALLTYPE GetNodeLocalRootArgumentsTableIndex( 
            UINT WorkGraphIndex,
            UINT NodeIndex) = 0;
        
        virtual UINT STDMETHODCALLTYPE GetNumEntrypoints( 
            UINT WorkGraphIndex) = 0;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_NODE_ID STDMETHODCALLTYPE GetEntrypointID( 
            UINT WorkGraphIndex,
            UINT EntrypointIndex) = 0;
#else
        virtual D3D12_NODE_ID *STDMETHODCALLTYPE GetEntrypointID( 
            D3D12_NODE_ID * RetVal,
            UINT WorkGraphIndex,
            UINT EntrypointIndex) = 0;
#endif
        
        virtual UINT STDMETHODCALLTYPE GetEntrypointIndex( 
            UINT WorkGraphIndex,
            D3D12_NODE_ID NodeID) = 0;
        
        virtual UINT STDMETHODCALLTYPE GetEntrypointRecordSizeInBytes( 
            UINT WorkGraphIndex,
            UINT EntrypointIndex) = 0;
        
        virtual void STDMETHODCALLTYPE GetWorkGraphMemoryRequirements( 
            UINT WorkGraphIndex,
            _Out_  D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS *pWorkGraphMemoryRequirements) = 0;
        
        virtual UINT STDMETHODCALLTYPE GetEntrypointRecordAlignmentInBytes( 
            UINT WorkGraphIndex,
            UINT EntrypointIndex) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12WorkGraphPropertiesVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12WorkGraphProperties * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12WorkGraphProperties * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12WorkGraphProperties * This);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumWorkGraphs)
        UINT ( STDMETHODCALLTYPE *GetNumWorkGraphs )( 
            ID3D12WorkGraphProperties * This);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetProgramName)
        LPCWSTR ( STDMETHODCALLTYPE *GetProgramName )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetWorkGraphIndex)
        UINT ( STDMETHODCALLTYPE *GetWorkGraphIndex )( 
            ID3D12WorkGraphProperties * This,
            LPCWSTR pProgramName);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumNodes)
        UINT ( STDMETHODCALLTYPE *GetNumNodes )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeID)
#if !defined(_WIN32)
        D3D12_NODE_ID ( STDMETHODCALLTYPE *GetNodeID )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            UINT NodeIndex);
        
#else
        D3D12_NODE_ID *( STDMETHODCALLTYPE *GetNodeID )( 
            ID3D12WorkGraphProperties * This,
            D3D12_NODE_ID * RetVal,
            UINT WorkGraphIndex,
            UINT NodeIndex);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeIndex)
        UINT ( STDMETHODCALLTYPE *GetNodeIndex )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            D3D12_NODE_ID NodeID);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeLocalRootArgumentsTableIndex)
        UINT ( STDMETHODCALLTYPE *GetNodeLocalRootArgumentsTableIndex )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            UINT NodeIndex);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumEntrypoints)
        UINT ( STDMETHODCALLTYPE *GetNumEntrypoints )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointID)
#if !defined(_WIN32)
        D3D12_NODE_ID ( STDMETHODCALLTYPE *GetEntrypointID )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            UINT EntrypointIndex);
        
#else
        D3D12_NODE_ID *( STDMETHODCALLTYPE *GetEntrypointID )( 
            ID3D12WorkGraphProperties * This,
            D3D12_NODE_ID * RetVal,
            UINT WorkGraphIndex,
            UINT EntrypointIndex);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointIndex)
        UINT ( STDMETHODCALLTYPE *GetEntrypointIndex )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            D3D12_NODE_ID NodeID);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointRecordSizeInBytes)
        UINT ( STDMETHODCALLTYPE *GetEntrypointRecordSizeInBytes )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            UINT EntrypointIndex);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetWorkGraphMemoryRequirements)
        void ( STDMETHODCALLTYPE *GetWorkGraphMemoryRequirements )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            _Out_  D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS *pWorkGraphMemoryRequirements);
        
        DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointRecordAlignmentInBytes)
        UINT ( STDMETHODCALLTYPE *GetEntrypointRecordAlignmentInBytes )( 
            ID3D12WorkGraphProperties * This,
            UINT WorkGraphIndex,
            UINT EntrypointIndex);
        
        END_INTERFACE
    } ID3D12WorkGraphPropertiesVtbl;

    interface ID3D12WorkGraphProperties
    {
        CONST_VTBL struct ID3D12WorkGraphPropertiesVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12WorkGraphProperties_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12WorkGraphProperties_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12WorkGraphProperties_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12WorkGraphProperties_GetNumWorkGraphs(This)	\
    ( (This)->lpVtbl -> GetNumWorkGraphs(This) ) 

#define ID3D12WorkGraphProperties_GetProgramName(This,WorkGraphIndex)	\
    ( (This)->lpVtbl -> GetProgramName(This,WorkGraphIndex) ) 

#define ID3D12WorkGraphProperties_GetWorkGraphIndex(This,pProgramName)	\
    ( (This)->lpVtbl -> GetWorkGraphIndex(This,pProgramName) ) 

#define ID3D12WorkGraphProperties_GetNumNodes(This,WorkGraphIndex)	\
    ( (This)->lpVtbl -> GetNumNodes(This,WorkGraphIndex) ) 
#if !defined(_WIN32)

#define ID3D12WorkGraphProperties_GetNodeID(This,WorkGraphIndex,NodeIndex)	\
    ( (This)->lpVtbl -> GetNodeID(This,WorkGraphIndex,NodeIndex) ) 
#else
#define ID3D12WorkGraphProperties_GetNodeID(This,RetVal,WorkGraphIndex,NodeIndex)	\
    ( (This)->lpVtbl -> GetNodeID(This,RetVal,WorkGraphIndex,NodeIndex) ) 
#endif

#define ID3D12WorkGraphProperties_GetNodeIndex(This,WorkGraphIndex,NodeID)	\
    ( (This)->lpVtbl -> GetNodeIndex(This,WorkGraphIndex,NodeID) ) 

#define ID3D12WorkGraphProperties_GetNodeLocalRootArgumentsTableIndex(This,WorkGraphIndex,NodeIndex)	\
    ( (This)->lpVtbl -> GetNodeLocalRootArgumentsTableIndex(This,WorkGraphIndex,NodeIndex) ) 

#define ID3D12WorkGraphProperties_GetNumEntrypoints(This,WorkGraphIndex)	\
    ( (This)->lpVtbl -> GetNumEntrypoints(This,WorkGraphIndex) ) 
#if !defined(_WIN32)

#define ID3D12WorkGraphProperties_GetEntrypointID(This,WorkGraphIndex,EntrypointIndex)	\
    ( (This)->lpVtbl -> GetEntrypointID(This,WorkGraphIndex,EntrypointIndex) ) 
#else
#define ID3D12WorkGraphProperties_GetEntrypointID(This,RetVal,WorkGraphIndex,EntrypointIndex)	\
    ( (This)->lpVtbl -> GetEntrypointID(This,RetVal,WorkGraphIndex,EntrypointIndex) ) 
#endif

#define ID3D12WorkGraphProperties_GetEntrypointIndex(This,WorkGraphIndex,NodeID)	\
    ( (This)->lpVtbl -> GetEntrypointIndex(This,WorkGraphIndex,NodeID) ) 

#define ID3D12WorkGraphProperties_GetEntrypointRecordSizeInBytes(This,WorkGraphIndex,EntrypointIndex)	\
    ( (This)->lpVtbl -> GetEntrypointRecordSizeInBytes(This,WorkGraphIndex,EntrypointIndex) ) 

#define ID3D12WorkGraphProperties_GetWorkGraphMemoryRequirements(This,WorkGraphIndex,pWorkGraphMemoryRequirements)	\
    ( (This)->lpVtbl -> GetWorkGraphMemoryRequirements(This,WorkGraphIndex,pWorkGraphMemoryRequirements) ) 

#define ID3D12WorkGraphProperties_GetEntrypointRecordAlignmentInBytes(This,WorkGraphIndex,EntrypointIndex)	\
    ( (This)->lpVtbl -> GetEntrypointRecordAlignmentInBytes(This,WorkGraphIndex,EntrypointIndex) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12WorkGraphProperties_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0039 */
/* [local] */ 

typedef 
enum D3D12_STATE_SUBOBJECT_TYPE
    {
        D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG	= 0,
        D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE	= 1,
        D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE	= 2,
        D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK	= 3,
        D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY	= 5,
        D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION	= 6,
        D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION	= 7,
        D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION	= 8,
        D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG	= 9,
        D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG	= 10,
        D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP	= 11,
        D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1	= 12,
        D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH	= 13,
        D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT	= 14,
        D3D12_STATE_SUBOBJECT_TYPE_BLEND	= 15,
        D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK	= 16,
        D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER	= 17,
        D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL	= 18,
        D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT	= 19,
        D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE	= 20,
        D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY	= 21,
        D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS	= 22,
        D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT	= 23,
        D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC	= 24,
        D3D12_STATE_SUBOBJECT_TYPE_FLAGS	= 26,
        D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1	= 27,
        D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING	= 28,
        D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM	= 29,
        D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2	= 30,
        D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_SERIALIZED_ROOT_SIGNATURE	= 31,
        D3D12_STATE_SUBOBJECT_TYPE_LOCAL_SERIALIZED_ROOT_SIGNATURE	= 32,
        D3D12_STATE_SUBOBJECT_TYPE_COMPILER_EXISITING_COLLECTION	= 33,
        D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID	= ( D3D12_STATE_SUBOBJECT_TYPE_COMPILER_EXISITING_COLLECTION + 1 ) 
    } 	D3D12_STATE_SUBOBJECT_TYPE;

typedef struct D3D12_STATE_SUBOBJECT
    {
    D3D12_STATE_SUBOBJECT_TYPE Type;
    const void *pDesc;
    } 	D3D12_STATE_SUBOBJECT;

typedef 
enum D3D12_STATE_OBJECT_FLAGS
    {
        D3D12_STATE_OBJECT_FLAG_NONE	= 0,
        D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS	= 0x1,
        D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS	= 0x2,
        D3D12_STATE_OBJECT_FLAG_ALLOW_STATE_OBJECT_ADDITIONS	= 0x4
    } 	D3D12_STATE_OBJECT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_FLAGS )
typedef struct D3D12_STATE_OBJECT_CONFIG
    {
    D3D12_STATE_OBJECT_FLAGS Flags;
    } 	D3D12_STATE_OBJECT_CONFIG;

typedef struct D3D12_GLOBAL_ROOT_SIGNATURE
    {
    ID3D12RootSignature *pGlobalRootSignature;
    } 	D3D12_GLOBAL_ROOT_SIGNATURE;

typedef struct D3D12_LOCAL_ROOT_SIGNATURE
    {
    ID3D12RootSignature *pLocalRootSignature;
    } 	D3D12_LOCAL_ROOT_SIGNATURE;

typedef struct D3D12_NODE_MASK
    {
    UINT NodeMask;
    } 	D3D12_NODE_MASK;

typedef struct D3D12_SAMPLE_MASK
    {
    UINT SampleMask;
    } 	D3D12_SAMPLE_MASK;

typedef struct D3D12_IB_STRIP_CUT_VALUE
    {
    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IndexBufferStripCutValue;
    } 	D3D12_IB_STRIP_CUT_VALUE;

typedef struct D3D12_PRIMITIVE_TOPOLOGY_DESC
    {
    D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopology;
    } 	D3D12_PRIMITIVE_TOPOLOGY_DESC;

typedef struct D3D12_DEPTH_STENCIL_FORMAT
    {
    DXGI_FORMAT DepthStencilFormat;
    } 	D3D12_DEPTH_STENCIL_FORMAT;

typedef 
enum D3D12_EXPORT_FLAGS
    {
        D3D12_EXPORT_FLAG_NONE	= 0
    } 	D3D12_EXPORT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_EXPORT_FLAGS )
typedef struct D3D12_EXPORT_DESC
    {
    LPCWSTR Name;
    _In_opt_  LPCWSTR ExportToRename;
    D3D12_EXPORT_FLAGS Flags;
    } 	D3D12_EXPORT_DESC;

typedef struct D3D12_DXIL_LIBRARY_DESC
    {
    D3D12_SHADER_BYTECODE DXILLibrary;
    UINT NumExports;
    _In_reads_(NumExports)  const D3D12_EXPORT_DESC *pExports;
    } 	D3D12_DXIL_LIBRARY_DESC;

typedef struct D3D12_EXISTING_COLLECTION_DESC
    {
    ID3D12StateObject *pExistingCollection;
    UINT NumExports;
    _In_reads_(NumExports)  const D3D12_EXPORT_DESC *pExports;
    } 	D3D12_EXISTING_COLLECTION_DESC;

typedef struct D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION
    {
    const D3D12_STATE_SUBOBJECT *pSubobjectToAssociate;
    UINT NumExports;
    _In_reads_(NumExports)  LPCWSTR *pExports;
    } 	D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION;

typedef struct D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION
    {
    LPCWSTR SubobjectToAssociate;
    UINT NumExports;
    _In_reads_(NumExports)  LPCWSTR *pExports;
    } 	D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION;

typedef 
enum D3D12_HIT_GROUP_TYPE
    {
        D3D12_HIT_GROUP_TYPE_TRIANGLES	= 0,
        D3D12_HIT_GROUP_TYPE_PROCEDURAL_PRIMITIVE	= 0x1
    } 	D3D12_HIT_GROUP_TYPE;

typedef struct D3D12_HIT_GROUP_DESC
    {
    LPCWSTR HitGroupExport;
    D3D12_HIT_GROUP_TYPE Type;
    _In_opt_  LPCWSTR AnyHitShaderImport;
    _In_opt_  LPCWSTR ClosestHitShaderImport;
    _In_opt_  LPCWSTR IntersectionShaderImport;
    } 	D3D12_HIT_GROUP_DESC;

typedef struct D3D12_RAYTRACING_SHADER_CONFIG
    {
    UINT MaxPayloadSizeInBytes;
    UINT MaxAttributeSizeInBytes;
    } 	D3D12_RAYTRACING_SHADER_CONFIG;

typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG
    {
    UINT MaxTraceRecursionDepth;
    } 	D3D12_RAYTRACING_PIPELINE_CONFIG;

typedef 
enum D3D12_RAYTRACING_PIPELINE_FLAGS
    {
        D3D12_RAYTRACING_PIPELINE_FLAG_NONE	= 0,
        D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES	= 0x100,
        D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES	= 0x200,
        D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS	= 0x400
    } 	D3D12_RAYTRACING_PIPELINE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS )
typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG1
    {
    UINT MaxTraceRecursionDepth;
    D3D12_RAYTRACING_PIPELINE_FLAGS Flags;
    } 	D3D12_RAYTRACING_PIPELINE_CONFIG1;

typedef struct D3D12_NODE_OUTPUT_OVERRIDES
    {
    UINT OutputIndex;
    _In_opt_  const D3D12_NODE_ID *pNewName;
    _In_opt_  const BOOL *pAllowSparseNodes;
    _In_opt_  const UINT *pMaxRecords;
    _In_opt_  const UINT *pMaxRecordsSharedWithOutputIndex;
    } 	D3D12_NODE_OUTPUT_OVERRIDES;

typedef struct D3D12_BROADCASTING_LAUNCH_OVERRIDES
    {
    _In_opt_  const UINT *pLocalRootArgumentsTableIndex;
    _In_opt_  const BOOL *pProgramEntry;
    _In_opt_  const D3D12_NODE_ID *pNewName;
    _In_opt_   const D3D12_NODE_ID *pShareInputOf;
    _In_reads_opt_(3)  const UINT *pDispatchGrid;
    _In_reads_opt_(3)  const UINT *pMaxDispatchGrid;
    UINT NumOutputOverrides;
    _In_reads_opt_(NumOutputOverrides)  const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides;
    } 	D3D12_BROADCASTING_LAUNCH_OVERRIDES;

typedef struct D3D12_COALESCING_LAUNCH_OVERRIDES
    {
    _In_opt_  const UINT *pLocalRootArgumentsTableIndex;
    _In_opt_  const BOOL *pProgramEntry;
    _In_opt_  const D3D12_NODE_ID *pNewName;
    _In_opt_  const D3D12_NODE_ID *pShareInputOf;
    UINT NumOutputOverrides;
    _In_reads_opt_(NumOutputOverrides)  const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides;
    } 	D3D12_COALESCING_LAUNCH_OVERRIDES;

typedef struct D3D12_THREAD_LAUNCH_OVERRIDES
    {
    _In_opt_  const UINT *pLocalRootArgumentsTableIndex;
    _In_opt_  const BOOL *pProgramEntry;
    _In_opt_  const D3D12_NODE_ID *pNewName;
    _In_opt_  const D3D12_NODE_ID *pShareInputOf;
    UINT NumOutputOverrides;
    _In_reads_opt_(NumOutputOverrides)  const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides;
    } 	D3D12_THREAD_LAUNCH_OVERRIDES;

typedef struct D3D12_COMMON_COMPUTE_NODE_OVERRIDES
    {
    _In_opt_  const UINT *pLocalRootArgumentsTableIndex;
    _In_opt_  const BOOL *pProgramEntry;
    _In_opt_  const D3D12_NODE_ID *pNewName;
    _In_opt_  const D3D12_NODE_ID *pShareInputOf;
    UINT NumOutputOverrides;
    _In_reads_opt_(NumOutputOverrides)  const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides;
    } 	D3D12_COMMON_COMPUTE_NODE_OVERRIDES;

typedef 
enum D3D12_NODE_OVERRIDES_TYPE
    {
        D3D12_NODE_OVERRIDES_TYPE_NONE	= 0,
        D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH	= 1,
        D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH	= 2,
        D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH	= 3,
        D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE	= 4
    } 	D3D12_NODE_OVERRIDES_TYPE;

typedef struct D3D12_SHADER_NODE
    {
    LPCWSTR Shader;
    D3D12_NODE_OVERRIDES_TYPE OverridesType;
    union 
        {
        const D3D12_BROADCASTING_LAUNCH_OVERRIDES *pBroadcastingLaunchOverrides;
        const D3D12_COALESCING_LAUNCH_OVERRIDES *pCoalescingLaunchOverrides;
        const D3D12_THREAD_LAUNCH_OVERRIDES *pThreadLaunchOverrides;
        const D3D12_COMMON_COMPUTE_NODE_OVERRIDES *pCommonComputeNodeOverrides;
        } 	;
    } 	D3D12_SHADER_NODE;

typedef 
enum D3D12_NODE_TYPE
    {
        D3D12_NODE_TYPE_SHADER	= 0
    } 	D3D12_NODE_TYPE;

typedef struct D3D12_NODE
    {
    D3D12_NODE_TYPE NodeType;
    union 
        {
        D3D12_SHADER_NODE Shader;
        } 	;
    } 	D3D12_NODE;

typedef 
enum D3D12_WORK_GRAPH_FLAGS
    {
        D3D12_WORK_GRAPH_FLAG_NONE	= 0,
        D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES	= 0x1
    } 	D3D12_WORK_GRAPH_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_WORK_GRAPH_FLAGS )
typedef struct D3D12_WORK_GRAPH_DESC
    {
    LPCWSTR ProgramName;
    D3D12_WORK_GRAPH_FLAGS Flags;
    UINT NumEntrypoints;
    _In_reads_opt_(NumEntrypoints)  const D3D12_NODE_ID *pEntrypoints;
    UINT NumExplicitlyDefinedNodes;
    _In_reads_opt_(NumExplicitlyDefinedNodes)  const D3D12_NODE *pExplicitlyDefinedNodes;
    } 	D3D12_WORK_GRAPH_DESC;

typedef struct D3D12_GENERIC_PROGRAM_DESC
    {
    LPCWSTR ProgramName;
    UINT NumExports;
    _In_reads_(NumExports)  LPCWSTR *pExports;
    UINT NumSubobjects;
    _In_reads_opt_(NumSubobjects)  const D3D12_STATE_SUBOBJECT *const *ppSubobjects;
    } 	D3D12_GENERIC_PROGRAM_DESC;

typedef 
enum D3D12_STATE_OBJECT_TYPE
    {
        D3D12_STATE_OBJECT_TYPE_COLLECTION	= 0,
        D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE	= 3,
        D3D12_STATE_OBJECT_TYPE_EXECUTABLE	= 4
    } 	D3D12_STATE_OBJECT_TYPE;

typedef struct D3D12_STATE_OBJECT_DESC
    {
    D3D12_STATE_OBJECT_TYPE Type;
    UINT NumSubobjects;
    _In_reads_(NumSubobjects)  const D3D12_STATE_SUBOBJECT *pSubobjects;
    } 	D3D12_STATE_OBJECT_DESC;

typedef 
enum D3D12_RAYTRACING_GEOMETRY_FLAGS
    {
        D3D12_RAYTRACING_GEOMETRY_FLAG_NONE	= 0,
        D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE	= 0x1,
        D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION	= 0x2
    } 	D3D12_RAYTRACING_GEOMETRY_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_GEOMETRY_FLAGS )
typedef 
enum D3D12_RAYTRACING_GEOMETRY_TYPE
    {
        D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES	= 0,
        D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS	= ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) ,
        D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES	= ( D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS + 1 ) 
    } 	D3D12_RAYTRACING_GEOMETRY_TYPE;

typedef 
enum D3D12_RAYTRACING_INSTANCE_FLAGS
    {
        D3D12_RAYTRACING_INSTANCE_FLAG_NONE	= 0,
        D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE	= 0x1,
        D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE	= 0x2,
        D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE	= 0x4,
        D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE	= 0x8,
        D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE	= 0x10,
        D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS	= 0x20
    } 	D3D12_RAYTRACING_INSTANCE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS )
typedef struct D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE
    {
    D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
    UINT64 StrideInBytes;
    } 	D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE;

typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE
    {
    D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
    UINT64 SizeInBytes;
    } 	D3D12_GPU_VIRTUAL_ADDRESS_RANGE;

typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE
    {
    D3D12_GPU_VIRTUAL_ADDRESS StartAddress;
    UINT64 SizeInBytes;
    UINT64 StrideInBytes;
    } 	D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE;

typedef struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC
    {
    D3D12_GPU_VIRTUAL_ADDRESS Transform3x4;
    DXGI_FORMAT IndexFormat;
    DXGI_FORMAT VertexFormat;
    UINT IndexCount;
    UINT VertexCount;
    D3D12_GPU_VIRTUAL_ADDRESS IndexBuffer;
    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer;
    } 	D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC;

typedef struct D3D12_RAYTRACING_AABB
    {
    FLOAT MinX;
    FLOAT MinY;
    FLOAT MinZ;
    FLOAT MaxX;
    FLOAT MaxY;
    FLOAT MaxZ;
    } 	D3D12_RAYTRACING_AABB;

typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC
    {
    UINT64 AABBCount;
    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs;
    } 	D3D12_RAYTRACING_GEOMETRY_AABBS_DESC;

typedef 
enum D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX
    {
        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT	= -1,
        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE	= -2,
        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT	= -3,
        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE	= -4
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX;

typedef 
enum D3D12_RAYTRACING_OPACITY_MICROMAP_STATE
    {
        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT	= 0,
        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE	= 1,
        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT	= 2,
        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE	= 3
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_STATE;

typedef 
enum D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT
    {
        D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE	= 0x1,
        D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE	= 0x2
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT;

typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_DESC
{
    UINT ByteOffset;
    UINT SubdivisionLevel : 16;
    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format : 16;
} D3D12_RAYTRACING_OPACITY_MICROMAP_DESC;
typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC
    {
    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE OpacityMicromapIndexBuffer;
    DXGI_FORMAT OpacityMicromapIndexFormat;
    UINT OpacityMicromapBaseLocation;
    D3D12_GPU_VIRTUAL_ADDRESS OpacityMicromapArray;
    } 	D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC;

typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC
    {
    const D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC *pTriangles;
    const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC *pOmmLinkage;
    } 	D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC;

typedef 
enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS
    {
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_NONE	= 0,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_UPDATE	= 0x1,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_COMPACTION	= 0x2,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE	= 0x4,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD	= 0x8,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY	= 0x10,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE	= 0x20,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE	= 0x40,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS	= 0x80
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS )
typedef 
enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE
    {
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_CLONE	= 0,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_COMPACT	= 0x1,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_VISUALIZATION_DECODE_FOR_TOOLS	= 0x2,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_SERIALIZE	= 0x3,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_DESERIALIZE	= 0x4
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE;

typedef 
enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE
    {
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL	= 0,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL	= 0x1,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY	= 0x2
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE;

typedef 
enum D3D12_ELEMENTS_LAYOUT
    {
        D3D12_ELEMENTS_LAYOUT_ARRAY	= 0,
        D3D12_ELEMENTS_LAYOUT_ARRAY_OF_POINTERS	= 0x1
    } 	D3D12_ELEMENTS_LAYOUT;

typedef 
enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE
    {
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE	= 0,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION	= 0x1,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION	= 0x2,
        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE	= 0x3
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE;

typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC
    {
    D3D12_GPU_VIRTUAL_ADDRESS DestBuffer;
    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE InfoType;
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC;

typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC
    {
    UINT64 CompactedSizeInBytes;
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC;

typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC
    {
    UINT64 DecodedSizeInBytes;
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC;

typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER
    {
    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
    UINT NumDescs;
    } 	D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER;

// Regarding D3D12_BUILD_RAY_TRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER above,
// depending on Type field, NumDescs above is followed by either:
//       D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs]
//    or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs].
//    or D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC (NumDescs == 1 in this case).
//
// For D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC, the pOmmHistogram pointer becomes a GPUVA instead of CPU pointer
//
// There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU.

typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC
    {
    UINT64 SerializedSizeInBytes;
    union 
        {
        UINT64 NumBottomLevelAccelerationStructurePointers;
        UINT64 NumBottomLevelAccelerationStructureHeaderAndPointerListPairs;
        } 	;
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC;

typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER
    {
    GUID DriverOpaqueGUID;
    BYTE DriverOpaqueVersioningData[ 16 ];
    } 	D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER;

typedef 
enum D3D12_SERIALIZED_DATA_TYPE
    {
        D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE	= 0,
        D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE	= 0x1
    } 	D3D12_SERIALIZED_DATA_TYPE;

typedef 
enum D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS
    {
        D3D12_DRIVER_MATCHING_IDENTIFIER_COMPATIBLE_WITH_DEVICE	= 0,
        D3D12_DRIVER_MATCHING_IDENTIFIER_UNSUPPORTED_TYPE	= 0x1,
        D3D12_DRIVER_MATCHING_IDENTIFIER_UNRECOGNIZED	= 0x2,
        D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_VERSION	= 0x3,
        D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_TYPE	= 0x4
    } 	D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS;

typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER
    {
    D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier;
    UINT64 SerializedSizeInBytesIncludingHeader;
    UINT64 DeserializedSizeInBytes;
    UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader;
    } 	D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER;

typedef 
enum D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE
    {
        D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE	= 0,
        D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS	= 0,
        D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS	= 0xffffffff
    } 	D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE;

typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1
    {
    D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier;
    UINT64 SerializedSizeInBytesIncludingHeader;
    UINT64 DeserializedSizeInBytes;
    union 
        {
        UINT NumBottomLevelAccelerationStructurePointersAfterHeader;
        UINT NumBlocks;
        } 	;
    D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE HeaderPostambleType;
    } 	D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1;

typedef 
enum D3D12_SERIALIZED_BLOCK_TYPE
    {
        D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS	= 0
    } 	D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE;

typedef struct D3D12_RAYTRACING_SERIALIZED_BLOCK
    {
    D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE Type;
    UINT64 NumBlockPointersAfterHeader;
    } 	D3D12_RAYTRACING_SERIALIZED_BLOCK;

typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC
    {
    UINT64 CurrentSizeInBytes;
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC;

typedef struct D3D12_RAYTRACING_INSTANCE_DESC
    {
    FLOAT Transform[ 3 ][ 4 ];
    UINT InstanceID	: 24;
    UINT InstanceMask	: 8;
    UINT InstanceContributionToHitGroupIndex	: 24;
    UINT Flags	: 8;
    D3D12_GPU_VIRTUAL_ADDRESS AccelerationStructure;
    } 	D3D12_RAYTRACING_INSTANCE_DESC;

typedef struct D3D12_RAYTRACING_GEOMETRY_DESC
    {
    D3D12_RAYTRACING_GEOMETRY_TYPE Type;
    D3D12_RAYTRACING_GEOMETRY_FLAGS Flags;
    union 
        {
        D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles;
        D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs;
        D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC OmmTriangles;
        } 	;
    } 	D3D12_RAYTRACING_GEOMETRY_DESC;

typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY
    {
    UINT Count;
    UINT SubdivisionLevel;
    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format;
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY;

typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC
    {
    UINT NumOmmHistogramEntries;
    const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY *pOmmHistogram;
    D3D12_GPU_VIRTUAL_ADDRESS InputBuffer;
    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE PerOmmDescs;
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC;

typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
    {
    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS Flags;
    UINT NumDescs;
    D3D12_ELEMENTS_LAYOUT DescsLayout;
    union 
        {
        D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs;
        const D3D12_RAYTRACING_GEOMETRY_DESC *pGeometryDescs;
        const D3D12_RAYTRACING_GEOMETRY_DESC *const *ppGeometryDescs;
        const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC *pOpacityMicromapArrayDesc;
        } 	;
    } 	D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS;

typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC
    {
    D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData;
    D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS Inputs;
    _In_opt_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData;
    D3D12_GPU_VIRTUAL_ADDRESS ScratchAccelerationStructureData;
    } 	D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC;

typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO
    {
    UINT64 ResultDataMaxSizeInBytes;
    UINT64 ScratchDataSizeInBytes;
    UINT64 UpdateScratchDataSizeInBytes;
    } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO;

typedef 
enum D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE
    {
        D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE	= 0,
        D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION	= 0x1
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE;

typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC
    {
    D3D12_GPU_VIRTUAL_ADDRESS DestBuffer;
    D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE InfoType;
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC;

typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC
    {
    UINT64 CurrentSizeInBytes;
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC;

typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC
    {
    UINT64 DecodedSizeInBytes;
    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC;

typedef 
enum D3D12_RAY_FLAGS
    {
        D3D12_RAY_FLAG_NONE	= 0,
        D3D12_RAY_FLAG_FORCE_OPAQUE	= 0x1,
        D3D12_RAY_FLAG_FORCE_NON_OPAQUE	= 0x2,
        D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH	= 0x4,
        D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER	= 0x8,
        D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES	= 0x10,
        D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES	= 0x20,
        D3D12_RAY_FLAG_CULL_OPAQUE	= 0x40,
        D3D12_RAY_FLAG_CULL_NON_OPAQUE	= 0x80,
        D3D12_RAY_FLAG_SKIP_TRIANGLES	= 0x100,
        D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES	= 0x200,
        D3D12_RAY_FLAG_FORCE_OMM_2_STATE	= 0x400
    } 	D3D12_RAY_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS )
typedef 
enum D3D12_HIT_KIND
    {
        D3D12_HIT_KIND_TRIANGLE_FRONT_FACE	= 0xfe,
        D3D12_HIT_KIND_TRIANGLE_BACK_FACE	= 0xff
    } 	D3D12_HIT_KIND;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0039_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0039_v0_0_s_ifspec;

#ifndef __ID3D12Device5_INTERFACE_DEFINED__
#define __ID3D12Device5_INTERFACE_DEFINED__

/* interface ID3D12Device5 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device5;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8b4f173b-2fea-4b80-8f58-4307191ab95d")
    ID3D12Device5 : public ID3D12Device4
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateLifetimeTracker( 
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker) = 0;
        
        virtual void STDMETHODCALLTYPE RemoveDevice( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EnumerateMetaCommands( 
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EnumerateMetaCommandParameters( 
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateMetaCommand( 
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateStateObject( 
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject) = 0;
        
        virtual void STDMETHODCALLTYPE GetRaytracingAccelerationStructurePrebuildInfo( 
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo) = 0;
        
        virtual D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS STDMETHODCALLTYPE CheckDriverMatchingIdentifier( 
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device5Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device5 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device5 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device5 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device5 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device5 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device5 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device5 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device5 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device5 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device5 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device5 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device5 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device5 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device5 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device5 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device5 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device5 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device5 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device5 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device5 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device5 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device5 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device5 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device5 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device5 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device5 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device5 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device5 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device5 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device5 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device5 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device5 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device5 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device5 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device5 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device5 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device5 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device5 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device5 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device5 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device5 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device5 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device5 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device5 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device5 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device5 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device5 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device5 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device5 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device5 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device5 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device5 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device5 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device5 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device5 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device5 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device5 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device5 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device5 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        END_INTERFACE
    } ID3D12Device5Vtbl;

    interface ID3D12Device5
    {
        CONST_VTBL struct ID3D12Device5Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device5_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device5_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device5_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device5_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device5_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device5_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device5_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device5_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device5_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device5_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device5_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device5_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device5_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device5_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device5_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device5_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device5_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device5_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device5_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device5_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device5_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device5_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device5_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device5_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device5_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device5_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device5_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device5_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device5_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device5_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device5_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device5_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device5_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device5_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device5_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device5_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device5_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device5_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device5_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device5_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device5_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device5_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device5_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device5_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device5_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device5_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device5_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device5_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device5_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device5_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device5_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device5_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device5_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device5_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device5_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device5_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device5_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device5_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device5_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device5_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device5_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device5_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device5_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device5_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device5_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device5_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device5_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device5_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device5_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device5_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0040 */
/* [local] */ 

typedef 
enum D3D12_MARKER_API
    {
        D3D12_MARKER_API_SETMARKER	= 0,
        D3D12_MARKER_API_BEGINEVENT	= 1,
        D3D12_MARKER_API_ENDEVENT	= 2,
        D3D12_MARKER_API_DRAWINSTANCED	= 3,
        D3D12_MARKER_API_DRAWINDEXEDINSTANCED	= 4,
        D3D12_MARKER_API_EXECUTEINDIRECT	= 5,
        D3D12_MARKER_API_DISPATCH	= 6,
        D3D12_MARKER_API_COPYBUFFERREGION	= 7,
        D3D12_MARKER_API_COPYTEXTUREREGION	= 8,
        D3D12_MARKER_API_COPYRESOURCE	= 9,
        D3D12_MARKER_API_COPYTILES	= 10,
        D3D12_MARKER_API_RESOLVESUBRESOURCE	= 11,
        D3D12_MARKER_API_CLEARRENDERTARGETVIEW	= 12,
        D3D12_MARKER_API_CLEARUNORDEREDACCESSVIEW	= 13,
        D3D12_MARKER_API_CLEARDEPTHSTENCILVIEW	= 14,
        D3D12_MARKER_API_RESOURCEBARRIER	= 15,
        D3D12_MARKER_API_EXECUTEBUNDLE	= 16,
        D3D12_MARKER_API_PRESENT	= 17,
        D3D12_MARKER_API_RESOLVEQUERYDATA	= 18,
        D3D12_MARKER_API_BEGINSUBMISSION	= 19,
        D3D12_MARKER_API_ENDSUBMISSION	= 20,
        D3D12_MARKER_API_DECODEFRAME	= 21,
        D3D12_MARKER_API_PROCESSFRAMES	= 22,
        D3D12_MARKER_API_ATOMICCOPYBUFFERUINT	= 23,
        D3D12_MARKER_API_ATOMICCOPYBUFFERUINT64	= 24,
        D3D12_MARKER_API_RESOLVESUBRESOURCEREGION	= 25,
        D3D12_MARKER_API_WRITEBUFFERIMMEDIATE	= 26,
        D3D12_MARKER_API_DECODEFRAME1	= 27,
        D3D12_MARKER_API_SETPROTECTEDRESOURCESESSION	= 28,
        D3D12_MARKER_API_DECODEFRAME2	= 29,
        D3D12_MARKER_API_PROCESSFRAMES1	= 30,
        D3D12_MARKER_API_BUILDRAYTRACINGACCELERATIONSTRUCTURE	= 31,
        D3D12_MARKER_API_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO	= 32,
        D3D12_MARKER_API_COPYRAYTRACINGACCELERATIONSTRUCTURE	= 33,
        D3D12_MARKER_API_DISPATCHRAYS	= 34,
        D3D12_MARKER_API_INITIALIZEMETACOMMAND	= 35,
        D3D12_MARKER_API_EXECUTEMETACOMMAND	= 36,
        D3D12_MARKER_API_ESTIMATEMOTION	= 37,
        D3D12_MARKER_API_RESOLVEMOTIONVECTORHEAP	= 38,
        D3D12_MARKER_API_SETPIPELINESTATE1	= 39,
        D3D12_MARKER_API_INITIALIZEEXTENSIONCOMMAND	= 40,
        D3D12_MARKER_API_EXECUTEEXTENSIONCOMMAND	= 41,
        D3D12_MARKER_API_DISPATCHMESH	= 42,
        D3D12_MARKER_API_ENCODEFRAME	= 43,
        D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA	= 44,
        D3D12_MARKER_API_BARRIER	= 45,
        D3D12_MARKER_API_BEGIN_COMMAND_LIST	= 46,
        D3D12_MARKER_API_DISPATCHGRAPH	= 47,
        D3D12_MARKER_API_SETPROGRAM	= 48,
        D3D12_MARKER_API_ENCODEFRAME1	= 49,
        D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA1	= 50,
        D3D12_MARKER_API_RESOLVEINPUTPARAMLAYOUT	= 51,
        D3D12_MARKER_API_PROCESSFRAMES2	= 52,
        D3D12_MARKER_API_SET_WORK_GRAPH_MAXIMUM_GPU_INPUT_RECORDS	= 53
    } 	D3D12_MARKER_API;

typedef 
enum D3D12_AUTO_BREADCRUMB_OP
    {
        D3D12_AUTO_BREADCRUMB_OP_SETMARKER	= D3D12_MARKER_API_SETMARKER,
        D3D12_AUTO_BREADCRUMB_OP_BEGINEVENT	= D3D12_MARKER_API_BEGINEVENT,
        D3D12_AUTO_BREADCRUMB_OP_ENDEVENT	= D3D12_MARKER_API_ENDEVENT,
        D3D12_AUTO_BREADCRUMB_OP_DRAWINSTANCED	= D3D12_MARKER_API_DRAWINSTANCED,
        D3D12_AUTO_BREADCRUMB_OP_DRAWINDEXEDINSTANCED	= D3D12_MARKER_API_DRAWINDEXEDINSTANCED,
        D3D12_AUTO_BREADCRUMB_OP_EXECUTEINDIRECT	= D3D12_MARKER_API_EXECUTEINDIRECT,
        D3D12_AUTO_BREADCRUMB_OP_DISPATCH	= D3D12_MARKER_API_DISPATCH,
        D3D12_AUTO_BREADCRUMB_OP_COPYBUFFERREGION	= D3D12_MARKER_API_COPYBUFFERREGION,
        D3D12_AUTO_BREADCRUMB_OP_COPYTEXTUREREGION	= D3D12_MARKER_API_COPYTEXTUREREGION,
        D3D12_AUTO_BREADCRUMB_OP_COPYRESOURCE	= D3D12_MARKER_API_COPYRESOURCE,
        D3D12_AUTO_BREADCRUMB_OP_COPYTILES	= D3D12_MARKER_API_COPYTILES,
        D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCE	= D3D12_MARKER_API_RESOLVESUBRESOURCE,
        D3D12_AUTO_BREADCRUMB_OP_CLEARRENDERTARGETVIEW	= D3D12_MARKER_API_CLEARRENDERTARGETVIEW,
        D3D12_AUTO_BREADCRUMB_OP_CLEARUNORDEREDACCESSVIEW	= D3D12_MARKER_API_CLEARUNORDEREDACCESSVIEW,
        D3D12_AUTO_BREADCRUMB_OP_CLEARDEPTHSTENCILVIEW	= D3D12_MARKER_API_CLEARDEPTHSTENCILVIEW,
        D3D12_AUTO_BREADCRUMB_OP_RESOURCEBARRIER	= D3D12_MARKER_API_RESOURCEBARRIER,
        D3D12_AUTO_BREADCRUMB_OP_EXECUTEBUNDLE	= D3D12_MARKER_API_EXECUTEBUNDLE,
        D3D12_AUTO_BREADCRUMB_OP_PRESENT	= D3D12_MARKER_API_PRESENT,
        D3D12_AUTO_BREADCRUMB_OP_RESOLVEQUERYDATA	= D3D12_MARKER_API_RESOLVEQUERYDATA,
        D3D12_AUTO_BREADCRUMB_OP_BEGINSUBMISSION	= D3D12_MARKER_API_BEGINSUBMISSION,
        D3D12_AUTO_BREADCRUMB_OP_ENDSUBMISSION	= D3D12_MARKER_API_ENDSUBMISSION,
        D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME	= D3D12_MARKER_API_DECODEFRAME,
        D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES	= D3D12_MARKER_API_PROCESSFRAMES,
        D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT	= D3D12_MARKER_API_ATOMICCOPYBUFFERUINT,
        D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT64	= D3D12_MARKER_API_ATOMICCOPYBUFFERUINT64,
        D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCEREGION	= D3D12_MARKER_API_RESOLVESUBRESOURCEREGION,
        D3D12_AUTO_BREADCRUMB_OP_WRITEBUFFERIMMEDIATE	= D3D12_MARKER_API_WRITEBUFFERIMMEDIATE,
        D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME1	= D3D12_MARKER_API_DECODEFRAME1,
        D3D12_AUTO_BREADCRUMB_OP_SETPROTECTEDRESOURCESESSION	= D3D12_MARKER_API_SETPROTECTEDRESOURCESESSION,
        D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME2	= D3D12_MARKER_API_DECODEFRAME2,
        D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES1	= D3D12_MARKER_API_PROCESSFRAMES1,
        D3D12_AUTO_BREADCRUMB_OP_BUILDRAYTRACINGACCELERATIONSTRUCTURE	= D3D12_MARKER_API_BUILDRAYTRACINGACCELERATIONSTRUCTURE,
        D3D12_AUTO_BREADCRUMB_OP_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO	= D3D12_MARKER_API_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO,
        D3D12_AUTO_BREADCRUMB_OP_COPYRAYTRACINGACCELERATIONSTRUCTURE	= D3D12_MARKER_API_COPYRAYTRACINGACCELERATIONSTRUCTURE,
        D3D12_AUTO_BREADCRUMB_OP_DISPATCHRAYS	= D3D12_MARKER_API_DISPATCHRAYS,
        D3D12_AUTO_BREADCRUMB_OP_INITIALIZEMETACOMMAND	= D3D12_MARKER_API_INITIALIZEMETACOMMAND,
        D3D12_AUTO_BREADCRUMB_OP_EXECUTEMETACOMMAND	= D3D12_MARKER_API_EXECUTEMETACOMMAND,
        D3D12_AUTO_BREADCRUMB_OP_ESTIMATEMOTION	= D3D12_MARKER_API_ESTIMATEMOTION,
        D3D12_AUTO_BREADCRUMB_OP_RESOLVEMOTIONVECTORHEAP	= D3D12_MARKER_API_RESOLVEMOTIONVECTORHEAP,
        D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1	= D3D12_MARKER_API_SETPIPELINESTATE1,
        D3D12_AUTO_BREADCRUMB_OP_INITIALIZEEXTENSIONCOMMAND	= D3D12_MARKER_API_INITIALIZEEXTENSIONCOMMAND,
        D3D12_AUTO_BREADCRUMB_OP_EXECUTEEXTENSIONCOMMAND	= D3D12_MARKER_API_EXECUTEEXTENSIONCOMMAND,
        D3D12_AUTO_BREADCRUMB_OP_DISPATCHMESH	= D3D12_MARKER_API_DISPATCHMESH,
        D3D12_AUTO_BREADCRUMB_OP_ENCODEFRAME	= D3D12_MARKER_API_ENCODEFRAME,
        D3D12_AUTO_BREADCRUMB_OP_RESOLVEENCODEROUTPUTMETADATA	= D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA,
        D3D12_AUTO_BREADCRUMB_OP_BARRIER	= D3D12_MARKER_API_BARRIER,
        D3D12_AUTO_BREADCRUMB_OP_BEGIN_COMMAND_LIST	= D3D12_MARKER_API_BEGIN_COMMAND_LIST,
        D3D12_AUTO_BREADCRUMB_OP_DISPATCHGRAPH	= D3D12_MARKER_API_DISPATCHGRAPH,
        D3D12_AUTO_BREADCRUMB_OP_SETPROGRAM	= D3D12_MARKER_API_SETPROGRAM,
        D3D12_AUTO_BREADCRUMB_OP_ENCODEFRAME1	= D3D12_MARKER_API_ENCODEFRAME1,
        D3D12_AUTO_BREADCRUMB_OP_RESOLVEENCODEROUTPUTMETADATA1	= D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA1,
        D3D12_AUTO_BREADCRUMB_OP_RESOLVEINPUTPARAMLAYOUT	= D3D12_MARKER_API_RESOLVEINPUTPARAMLAYOUT,
        D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES2	= D3D12_MARKER_API_PROCESSFRAMES2,
        D3D12_AUTO_BREADCRUMB_OP_SET_WORK_GRAPH_MAXIMUM_GPU_INPUT_RECORDS	= D3D12_MARKER_API_SET_WORK_GRAPH_MAXIMUM_GPU_INPUT_RECORDS
    } 	D3D12_AUTO_BREADCRUMB_OP;

typedef struct D3D12_AUTO_BREADCRUMB_NODE
    {
    const char *pCommandListDebugNameA;
    const wchar_t *pCommandListDebugNameW;
    const char *pCommandQueueDebugNameA;
    const wchar_t *pCommandQueueDebugNameW;
    ID3D12GraphicsCommandList *pCommandList;
    ID3D12CommandQueue *pCommandQueue;
    UINT32 BreadcrumbCount;
    const UINT32 *pLastBreadcrumbValue;
    const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory;
    const struct D3D12_AUTO_BREADCRUMB_NODE *pNext;
    } 	D3D12_AUTO_BREADCRUMB_NODE;

typedef struct D3D12_DRED_BREADCRUMB_CONTEXT
    {
    UINT BreadcrumbIndex;
    const wchar_t *pContextString;
    } 	D3D12_DRED_BREADCRUMB_CONTEXT;

typedef struct D3D12_AUTO_BREADCRUMB_NODE1
    {
    const char *pCommandListDebugNameA;
    const wchar_t *pCommandListDebugNameW;
    const char *pCommandQueueDebugNameA;
    const wchar_t *pCommandQueueDebugNameW;
    ID3D12GraphicsCommandList *pCommandList;
    ID3D12CommandQueue *pCommandQueue;
    UINT BreadcrumbCount;
    const UINT *pLastBreadcrumbValue;
    const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory;
    const struct D3D12_AUTO_BREADCRUMB_NODE1 *pNext;
    UINT BreadcrumbContextsCount;
    D3D12_DRED_BREADCRUMB_CONTEXT *pBreadcrumbContexts;
    } 	D3D12_AUTO_BREADCRUMB_NODE1;

typedef 
enum D3D12_DRED_VERSION
    {
        D3D12_DRED_VERSION_1_0	= 0x1,
        D3D12_DRED_VERSION_1_1	= 0x2,
        D3D12_DRED_VERSION_1_2	= 0x3,
        D3D12_DRED_VERSION_1_3	= 0x4
    } 	D3D12_DRED_VERSION;

typedef 
enum D3D12_DRED_FLAGS
    {
        D3D12_DRED_FLAG_NONE	= 0,
        D3D12_DRED_FLAG_FORCE_ENABLE	= 1,
        D3D12_DRED_FLAG_DISABLE_AUTOBREADCRUMBS	= 2
    } 	D3D12_DRED_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_FLAGS )
typedef 
enum D3D12_DRED_ENABLEMENT
    {
        D3D12_DRED_ENABLEMENT_SYSTEM_CONTROLLED	= 0,
        D3D12_DRED_ENABLEMENT_FORCED_OFF	= 1,
        D3D12_DRED_ENABLEMENT_FORCED_ON	= 2
    } 	D3D12_DRED_ENABLEMENT;

typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA
    {
    _In_  D3D12_DRED_FLAGS Flags;
    _Out_  D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode;
    } 	D3D12_DEVICE_REMOVED_EXTENDED_DATA;

typedef 
enum D3D12_DRED_ALLOCATION_TYPE
    {
        D3D12_DRED_ALLOCATION_TYPE_COMMAND_QUEUE	= 19,
        D3D12_DRED_ALLOCATION_TYPE_COMMAND_ALLOCATOR	= 20,
        D3D12_DRED_ALLOCATION_TYPE_PIPELINE_STATE	= 21,
        D3D12_DRED_ALLOCATION_TYPE_COMMAND_LIST	= 22,
        D3D12_DRED_ALLOCATION_TYPE_FENCE	= 23,
        D3D12_DRED_ALLOCATION_TYPE_DESCRIPTOR_HEAP	= 24,
        D3D12_DRED_ALLOCATION_TYPE_HEAP	= 25,
        D3D12_DRED_ALLOCATION_TYPE_QUERY_HEAP	= 27,
        D3D12_DRED_ALLOCATION_TYPE_COMMAND_SIGNATURE	= 28,
        D3D12_DRED_ALLOCATION_TYPE_PIPELINE_LIBRARY	= 29,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER	= 30,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_PROCESSOR	= 32,
        D3D12_DRED_ALLOCATION_TYPE_RESOURCE	= 34,
        D3D12_DRED_ALLOCATION_TYPE_PASS	= 35,
        D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSION	= 36,
        D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSIONPOLICY	= 37,
        D3D12_DRED_ALLOCATION_TYPE_PROTECTEDRESOURCESESSION	= 38,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER_HEAP	= 39,
        D3D12_DRED_ALLOCATION_TYPE_COMMAND_POOL	= 40,
        D3D12_DRED_ALLOCATION_TYPE_COMMAND_RECORDER	= 41,
        D3D12_DRED_ALLOCATION_TYPE_STATE_OBJECT	= 42,
        D3D12_DRED_ALLOCATION_TYPE_METACOMMAND	= 43,
        D3D12_DRED_ALLOCATION_TYPE_SCHEDULINGGROUP	= 44,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_ESTIMATOR	= 45,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_VECTOR_HEAP	= 46,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_EXTENSION_COMMAND	= 47,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER	= 48,
        D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER_HEAP	= 49,
        D3D12_DRED_ALLOCATION_TYPE_INVALID	= 0xffffffff
    } 	D3D12_DRED_ALLOCATION_TYPE;

typedef struct D3D12_DRED_ALLOCATION_NODE
    {
    const char *ObjectNameA;
    const wchar_t *ObjectNameW;
    D3D12_DRED_ALLOCATION_TYPE AllocationType;
    const struct D3D12_DRED_ALLOCATION_NODE *pNext;
    } 	D3D12_DRED_ALLOCATION_NODE;

typedef struct D3D12_DRED_ALLOCATION_NODE1
    {
    const char *ObjectNameA;
    const wchar_t *ObjectNameW;
    D3D12_DRED_ALLOCATION_TYPE AllocationType;
    const struct D3D12_DRED_ALLOCATION_NODE1 *pNext;
    const IUnknown *pObject;
    } 	D3D12_DRED_ALLOCATION_NODE1;

typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT
    {
    _Out_  const D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode;
    } 	D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT;

typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1
    {
    _Out_  const D3D12_AUTO_BREADCRUMB_NODE1 *pHeadAutoBreadcrumbNode;
    } 	D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1;

typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT
    {
    D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA;
    _Out_  const D3D12_DRED_ALLOCATION_NODE *pHeadExistingAllocationNode;
    _Out_  const D3D12_DRED_ALLOCATION_NODE *pHeadRecentFreedAllocationNode;
    } 	D3D12_DRED_PAGE_FAULT_OUTPUT;

typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT1
    {
    D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA;
    _Out_  const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode;
    _Out_  const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode;
    } 	D3D12_DRED_PAGE_FAULT_OUTPUT1;

typedef 
enum D3D12_DRED_PAGE_FAULT_FLAGS
    {
        D3D12_DRED_PAGE_FAULT_FLAGS_NONE	= 0
    } 	D3D12_DRED_PAGE_FAULT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_PAGE_FAULT_FLAGS )
typedef 
enum D3D12_DRED_DEVICE_STATE
    {
        D3D12_DRED_DEVICE_STATE_UNKNOWN	= 0,
        D3D12_DRED_DEVICE_STATE_HUNG	= 3,
        D3D12_DRED_DEVICE_STATE_FAULT	= 6,
        D3D12_DRED_DEVICE_STATE_PAGEFAULT	= 7
    } 	D3D12_DRED_DEVICE_STATE;

typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT2
    {
    D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA;
    _Out_  const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode;
    _Out_  const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode;
    D3D12_DRED_PAGE_FAULT_FLAGS PageFaultFlags;
    } 	D3D12_DRED_PAGE_FAULT_OUTPUT2;

typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA1
    {
    HRESULT DeviceRemovedReason;
    D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT AutoBreadcrumbsOutput;
    D3D12_DRED_PAGE_FAULT_OUTPUT PageFaultOutput;
    } 	D3D12_DEVICE_REMOVED_EXTENDED_DATA1;

typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA2
    {
    HRESULT DeviceRemovedReason;
    D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput;
    D3D12_DRED_PAGE_FAULT_OUTPUT1 PageFaultOutput;
    } 	D3D12_DEVICE_REMOVED_EXTENDED_DATA2;

typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA3
    {
    HRESULT DeviceRemovedReason;
    D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput;
    D3D12_DRED_PAGE_FAULT_OUTPUT2 PageFaultOutput;
    D3D12_DRED_DEVICE_STATE DeviceState;
    } 	D3D12_DEVICE_REMOVED_EXTENDED_DATA3;

typedef struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA
    {
    D3D12_DRED_VERSION Version;
    union 
        {
        D3D12_DEVICE_REMOVED_EXTENDED_DATA Dred_1_0;
        D3D12_DEVICE_REMOVED_EXTENDED_DATA1 Dred_1_1;
        D3D12_DEVICE_REMOVED_EXTENDED_DATA2 Dred_1_2;
        D3D12_DEVICE_REMOVED_EXTENDED_DATA3 Dred_1_3;
        } 	;
    } 	D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0040_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0040_v0_0_s_ifspec;

#ifndef __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__
#define __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__

/* interface ID3D12DeviceRemovedExtendedDataSettings */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedDataSettings;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("82BC481C-6B9B-4030-AEDB-7EE3D1DF1E63")
    ID3D12DeviceRemovedExtendedDataSettings : public IUnknown
    {
    public:
        virtual void STDMETHODCALLTYPE SetAutoBreadcrumbsEnablement( 
            D3D12_DRED_ENABLEMENT Enablement) = 0;
        
        virtual void STDMETHODCALLTYPE SetPageFaultEnablement( 
            D3D12_DRED_ENABLEMENT Enablement) = 0;
        
        virtual void STDMETHODCALLTYPE SetWatsonDumpEnablement( 
            D3D12_DRED_ENABLEMENT Enablement) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceRemovedExtendedDataSettingsVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceRemovedExtendedDataSettings * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceRemovedExtendedDataSettings * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceRemovedExtendedDataSettings * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetAutoBreadcrumbsEnablement)
        void ( STDMETHODCALLTYPE *SetAutoBreadcrumbsEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetPageFaultEnablement)
        void ( STDMETHODCALLTYPE *SetPageFaultEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetWatsonDumpEnablement)
        void ( STDMETHODCALLTYPE *SetWatsonDumpEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        END_INTERFACE
    } ID3D12DeviceRemovedExtendedDataSettingsVtbl;

    interface ID3D12DeviceRemovedExtendedDataSettings
    {
        CONST_VTBL struct ID3D12DeviceRemovedExtendedDataSettingsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceRemovedExtendedDataSettings_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceRemovedExtendedDataSettings_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceRemovedExtendedDataSettings_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceRemovedExtendedDataSettings_SetAutoBreadcrumbsEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetAutoBreadcrumbsEnablement(This,Enablement) ) 

#define ID3D12DeviceRemovedExtendedDataSettings_SetPageFaultEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetPageFaultEnablement(This,Enablement) ) 

#define ID3D12DeviceRemovedExtendedDataSettings_SetWatsonDumpEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetWatsonDumpEnablement(This,Enablement) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedDataSettings1_INTERFACE_DEFINED__
#define __ID3D12DeviceRemovedExtendedDataSettings1_INTERFACE_DEFINED__

/* interface ID3D12DeviceRemovedExtendedDataSettings1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedDataSettings1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("DBD5AE51-3317-4F0A-ADF9-1D7CEDCAAE0B")
    ID3D12DeviceRemovedExtendedDataSettings1 : public ID3D12DeviceRemovedExtendedDataSettings
    {
    public:
        virtual void STDMETHODCALLTYPE SetBreadcrumbContextEnablement( 
            D3D12_DRED_ENABLEMENT Enablement) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceRemovedExtendedDataSettings1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceRemovedExtendedDataSettings1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceRemovedExtendedDataSettings1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceRemovedExtendedDataSettings1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetAutoBreadcrumbsEnablement)
        void ( STDMETHODCALLTYPE *SetAutoBreadcrumbsEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings1 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetPageFaultEnablement)
        void ( STDMETHODCALLTYPE *SetPageFaultEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings1 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetWatsonDumpEnablement)
        void ( STDMETHODCALLTYPE *SetWatsonDumpEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings1 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings1, SetBreadcrumbContextEnablement)
        void ( STDMETHODCALLTYPE *SetBreadcrumbContextEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings1 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        END_INTERFACE
    } ID3D12DeviceRemovedExtendedDataSettings1Vtbl;

    interface ID3D12DeviceRemovedExtendedDataSettings1
    {
        CONST_VTBL struct ID3D12DeviceRemovedExtendedDataSettings1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceRemovedExtendedDataSettings1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceRemovedExtendedDataSettings1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceRemovedExtendedDataSettings1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceRemovedExtendedDataSettings1_SetAutoBreadcrumbsEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetAutoBreadcrumbsEnablement(This,Enablement) ) 

#define ID3D12DeviceRemovedExtendedDataSettings1_SetPageFaultEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetPageFaultEnablement(This,Enablement) ) 

#define ID3D12DeviceRemovedExtendedDataSettings1_SetWatsonDumpEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetWatsonDumpEnablement(This,Enablement) ) 


#define ID3D12DeviceRemovedExtendedDataSettings1_SetBreadcrumbContextEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetBreadcrumbContextEnablement(This,Enablement) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceRemovedExtendedDataSettings1_INTERFACE_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedDataSettings2_INTERFACE_DEFINED__
#define __ID3D12DeviceRemovedExtendedDataSettings2_INTERFACE_DEFINED__

/* interface ID3D12DeviceRemovedExtendedDataSettings2 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedDataSettings2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("61552388-01ab-4008-a436-83db189566ea")
    ID3D12DeviceRemovedExtendedDataSettings2 : public ID3D12DeviceRemovedExtendedDataSettings1
    {
    public:
        virtual void STDMETHODCALLTYPE UseMarkersOnlyAutoBreadcrumbs( 
            BOOL MarkersOnly) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceRemovedExtendedDataSettings2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetAutoBreadcrumbsEnablement)
        void ( STDMETHODCALLTYPE *SetAutoBreadcrumbsEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetPageFaultEnablement)
        void ( STDMETHODCALLTYPE *SetPageFaultEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetWatsonDumpEnablement)
        void ( STDMETHODCALLTYPE *SetWatsonDumpEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings1, SetBreadcrumbContextEnablement)
        void ( STDMETHODCALLTYPE *SetBreadcrumbContextEnablement )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This,
            D3D12_DRED_ENABLEMENT Enablement);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings2, UseMarkersOnlyAutoBreadcrumbs)
        void ( STDMETHODCALLTYPE *UseMarkersOnlyAutoBreadcrumbs )( 
            ID3D12DeviceRemovedExtendedDataSettings2 * This,
            BOOL MarkersOnly);
        
        END_INTERFACE
    } ID3D12DeviceRemovedExtendedDataSettings2Vtbl;

    interface ID3D12DeviceRemovedExtendedDataSettings2
    {
        CONST_VTBL struct ID3D12DeviceRemovedExtendedDataSettings2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceRemovedExtendedDataSettings2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceRemovedExtendedDataSettings2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceRemovedExtendedDataSettings2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceRemovedExtendedDataSettings2_SetAutoBreadcrumbsEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetAutoBreadcrumbsEnablement(This,Enablement) ) 

#define ID3D12DeviceRemovedExtendedDataSettings2_SetPageFaultEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetPageFaultEnablement(This,Enablement) ) 

#define ID3D12DeviceRemovedExtendedDataSettings2_SetWatsonDumpEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetWatsonDumpEnablement(This,Enablement) ) 


#define ID3D12DeviceRemovedExtendedDataSettings2_SetBreadcrumbContextEnablement(This,Enablement)	\
    ( (This)->lpVtbl -> SetBreadcrumbContextEnablement(This,Enablement) ) 


#define ID3D12DeviceRemovedExtendedDataSettings2_UseMarkersOnlyAutoBreadcrumbs(This,MarkersOnly)	\
    ( (This)->lpVtbl -> UseMarkersOnlyAutoBreadcrumbs(This,MarkersOnly) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceRemovedExtendedDataSettings2_INTERFACE_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__
#define __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__

/* interface ID3D12DeviceRemovedExtendedData */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("98931D33-5AE8-4791-AA3C-1A73A2934E71")
    ID3D12DeviceRemovedExtendedData : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetAutoBreadcrumbsOutput( 
            _Out_  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput( 
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceRemovedExtendedDataVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceRemovedExtendedData * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceRemovedExtendedData * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceRemovedExtendedData * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetAutoBreadcrumbsOutput)
        HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput )( 
            ID3D12DeviceRemovedExtendedData * This,
            _Out_  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetPageFaultAllocationOutput)
        HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput )( 
            ID3D12DeviceRemovedExtendedData * This,
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput);
        
        END_INTERFACE
    } ID3D12DeviceRemovedExtendedDataVtbl;

    interface ID3D12DeviceRemovedExtendedData
    {
        CONST_VTBL struct ID3D12DeviceRemovedExtendedDataVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceRemovedExtendedData_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceRemovedExtendedData_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceRemovedExtendedData_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceRemovedExtendedData_GetAutoBreadcrumbsOutput(This,pOutput)	\
    ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput(This,pOutput) ) 

#define ID3D12DeviceRemovedExtendedData_GetPageFaultAllocationOutput(This,pOutput)	\
    ( (This)->lpVtbl -> GetPageFaultAllocationOutput(This,pOutput) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedData1_INTERFACE_DEFINED__
#define __ID3D12DeviceRemovedExtendedData1_INTERFACE_DEFINED__

/* interface ID3D12DeviceRemovedExtendedData1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("9727A022-CF1D-4DDA-9EBA-EFFA653FC506")
    ID3D12DeviceRemovedExtendedData1 : public ID3D12DeviceRemovedExtendedData
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetAutoBreadcrumbsOutput1( 
            _Out_  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput1( 
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceRemovedExtendedData1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceRemovedExtendedData1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceRemovedExtendedData1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceRemovedExtendedData1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetAutoBreadcrumbsOutput)
        HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput )( 
            ID3D12DeviceRemovedExtendedData1 * This,
            _Out_  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetPageFaultAllocationOutput)
        HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput )( 
            ID3D12DeviceRemovedExtendedData1 * This,
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetAutoBreadcrumbsOutput1)
        HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput1 )( 
            ID3D12DeviceRemovedExtendedData1 * This,
            _Out_  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetPageFaultAllocationOutput1)
        HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput1 )( 
            ID3D12DeviceRemovedExtendedData1 * This,
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput);
        
        END_INTERFACE
    } ID3D12DeviceRemovedExtendedData1Vtbl;

    interface ID3D12DeviceRemovedExtendedData1
    {
        CONST_VTBL struct ID3D12DeviceRemovedExtendedData1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceRemovedExtendedData1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceRemovedExtendedData1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceRemovedExtendedData1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceRemovedExtendedData1_GetAutoBreadcrumbsOutput(This,pOutput)	\
    ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput(This,pOutput) ) 

#define ID3D12DeviceRemovedExtendedData1_GetPageFaultAllocationOutput(This,pOutput)	\
    ( (This)->lpVtbl -> GetPageFaultAllocationOutput(This,pOutput) ) 


#define ID3D12DeviceRemovedExtendedData1_GetAutoBreadcrumbsOutput1(This,pOutput)	\
    ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput1(This,pOutput) ) 

#define ID3D12DeviceRemovedExtendedData1_GetPageFaultAllocationOutput1(This,pOutput)	\
    ( (This)->lpVtbl -> GetPageFaultAllocationOutput1(This,pOutput) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceRemovedExtendedData1_INTERFACE_DEFINED__ */


#ifndef __ID3D12DeviceRemovedExtendedData2_INTERFACE_DEFINED__
#define __ID3D12DeviceRemovedExtendedData2_INTERFACE_DEFINED__

/* interface ID3D12DeviceRemovedExtendedData2 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("67FC5816-E4CA-4915-BF18-42541272DA54")
    ID3D12DeviceRemovedExtendedData2 : public ID3D12DeviceRemovedExtendedData1
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput2( 
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT2 *pOutput) = 0;
        
        virtual D3D12_DRED_DEVICE_STATE STDMETHODCALLTYPE GetDeviceState( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceRemovedExtendedData2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceRemovedExtendedData2 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceRemovedExtendedData2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceRemovedExtendedData2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetAutoBreadcrumbsOutput)
        HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput )( 
            ID3D12DeviceRemovedExtendedData2 * This,
            _Out_  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetPageFaultAllocationOutput)
        HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput )( 
            ID3D12DeviceRemovedExtendedData2 * This,
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetAutoBreadcrumbsOutput1)
        HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput1 )( 
            ID3D12DeviceRemovedExtendedData2 * This,
            _Out_  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetPageFaultAllocationOutput1)
        HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput1 )( 
            ID3D12DeviceRemovedExtendedData2 * This,
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData2, GetPageFaultAllocationOutput2)
        HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput2 )( 
            ID3D12DeviceRemovedExtendedData2 * This,
            _Out_  D3D12_DRED_PAGE_FAULT_OUTPUT2 *pOutput);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData2, GetDeviceState)
        D3D12_DRED_DEVICE_STATE ( STDMETHODCALLTYPE *GetDeviceState )( 
            ID3D12DeviceRemovedExtendedData2 * This);
        
        END_INTERFACE
    } ID3D12DeviceRemovedExtendedData2Vtbl;

    interface ID3D12DeviceRemovedExtendedData2
    {
        CONST_VTBL struct ID3D12DeviceRemovedExtendedData2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceRemovedExtendedData2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceRemovedExtendedData2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceRemovedExtendedData2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceRemovedExtendedData2_GetAutoBreadcrumbsOutput(This,pOutput)	\
    ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput(This,pOutput) ) 

#define ID3D12DeviceRemovedExtendedData2_GetPageFaultAllocationOutput(This,pOutput)	\
    ( (This)->lpVtbl -> GetPageFaultAllocationOutput(This,pOutput) ) 


#define ID3D12DeviceRemovedExtendedData2_GetAutoBreadcrumbsOutput1(This,pOutput)	\
    ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput1(This,pOutput) ) 

#define ID3D12DeviceRemovedExtendedData2_GetPageFaultAllocationOutput1(This,pOutput)	\
    ( (This)->lpVtbl -> GetPageFaultAllocationOutput1(This,pOutput) ) 


#define ID3D12DeviceRemovedExtendedData2_GetPageFaultAllocationOutput2(This,pOutput)	\
    ( (This)->lpVtbl -> GetPageFaultAllocationOutput2(This,pOutput) ) 

#define ID3D12DeviceRemovedExtendedData2_GetDeviceState(This)	\
    ( (This)->lpVtbl -> GetDeviceState(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceRemovedExtendedData2_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0046 */
/* [local] */ 

typedef 
enum D3D12_BACKGROUND_PROCESSING_MODE
    {
        D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED	= 0,
        D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS	= ( D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED + 1 ) ,
        D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK	= ( D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS + 1 ) ,
        D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_PROFILING_BY_SYSTEM	= ( D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK + 1 ) 
    } 	D3D12_BACKGROUND_PROCESSING_MODE;

typedef 
enum D3D12_MEASUREMENTS_ACTION
    {
        D3D12_MEASUREMENTS_ACTION_KEEP_ALL	= 0,
        D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS	= ( D3D12_MEASUREMENTS_ACTION_KEEP_ALL + 1 ) ,
        D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY	= ( D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS + 1 ) ,
        D3D12_MEASUREMENTS_ACTION_DISCARD_PREVIOUS	= ( D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY + 1 ) 
    } 	D3D12_MEASUREMENTS_ACTION;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0046_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0046_v0_0_s_ifspec;

#ifndef __ID3D12Device6_INTERFACE_DEFINED__
#define __ID3D12Device6_INTERFACE_DEFINED__

/* interface ID3D12Device6 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device6;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("c70b221b-40e4-4a17-89af-025a0727a6dc")
    ID3D12Device6 : public ID3D12Device5
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetBackgroundProcessingMode( 
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device6Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device6 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device6 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device6 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device6 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device6 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device6 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device6 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device6 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device6 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device6 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device6 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device6 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device6 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device6 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device6 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device6 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device6 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device6 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device6 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device6 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device6 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device6 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device6 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device6 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device6 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device6 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device6 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device6 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device6 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device6 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device6 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device6 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device6 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device6 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device6 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device6 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device6 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device6 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device6 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device6 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device6 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device6 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device6 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device6 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device6 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device6 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device6 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device6 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device6 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device6 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device6 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device6 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device6 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device6 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device6 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device6 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device6 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device6 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device6 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device6 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        END_INTERFACE
    } ID3D12Device6Vtbl;

    interface ID3D12Device6
    {
        CONST_VTBL struct ID3D12Device6Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device6_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device6_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device6_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device6_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device6_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device6_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device6_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device6_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device6_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device6_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device6_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device6_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device6_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device6_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device6_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device6_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device6_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device6_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device6_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device6_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device6_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device6_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device6_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device6_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device6_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device6_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device6_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device6_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device6_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device6_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device6_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device6_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device6_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device6_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device6_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device6_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device6_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device6_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device6_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device6_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device6_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device6_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device6_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device6_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device6_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device6_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device6_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device6_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device6_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device6_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device6_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device6_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device6_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device6_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device6_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device6_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device6_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device6_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device6_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device6_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device6_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device6_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device6_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device6_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device6_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device6_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device6_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device6_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device6_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device6_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device6_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0047 */
/* [local] */ 

DEFINE_GUID(D3D12_PROTECTED_RESOURCES_SESSION_HARDWARE_PROTECTED,                           0x62B0084E, 0xC70E, 0x4DAA, 0xA1, 0x09, 0x30, 0xFF, 0x8D, 0x5A, 0x04, 0x82); 
typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT
    {
    UINT NodeIndex;
    UINT Count;
    } 	D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT;

typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES
    {
    UINT NodeIndex;
    UINT Count;
    GUID *pTypes;
    } 	D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES;

typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC1
    {
    UINT NodeMask;
    D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags;
    GUID ProtectionType;
    } 	D3D12_PROTECTED_RESOURCE_SESSION_DESC1;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0047_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0047_v0_0_s_ifspec;

#ifndef __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__
#define __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__

/* interface ID3D12ProtectedResourceSession1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12ProtectedResourceSession1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("D6F12DD6-76FB-406E-8961-4296EEFC0409")
    ID3D12ProtectedResourceSession1 : public ID3D12ProtectedResourceSession
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC1 STDMETHODCALLTYPE GetDesc1( void) = 0;
#else
        virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *STDMETHODCALLTYPE GetDesc1( 
            D3D12_PROTECTED_RESOURCE_SESSION_DESC1 * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12ProtectedResourceSession1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12ProtectedResourceSession1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12ProtectedResourceSession1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12ProtectedResourceSession1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12ProtectedResourceSession1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12ProtectedResourceSession1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12ProtectedResourceSession1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12ProtectedResourceSession1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12ProtectedResourceSession1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetStatusFence)
        HRESULT ( STDMETHODCALLTYPE *GetStatusFence )( 
            ID3D12ProtectedResourceSession1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetSessionStatus)
        D3D12_PROTECTED_SESSION_STATUS ( STDMETHODCALLTYPE *GetSessionStatus )( 
            ID3D12ProtectedResourceSession1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedResourceSession, GetDesc)
#if !defined(_WIN32)
        D3D12_PROTECTED_RESOURCE_SESSION_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12ProtectedResourceSession1 * This);
        
#else
        D3D12_PROTECTED_RESOURCE_SESSION_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12ProtectedResourceSession1 * This,
            D3D12_PROTECTED_RESOURCE_SESSION_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12ProtectedResourceSession1, GetDesc1)
#if !defined(_WIN32)
        D3D12_PROTECTED_RESOURCE_SESSION_DESC1 ( STDMETHODCALLTYPE *GetDesc1 )( 
            ID3D12ProtectedResourceSession1 * This);
        
#else
        D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *( STDMETHODCALLTYPE *GetDesc1 )( 
            ID3D12ProtectedResourceSession1 * This,
            D3D12_PROTECTED_RESOURCE_SESSION_DESC1 * RetVal);
        
#endif
        
        END_INTERFACE
    } ID3D12ProtectedResourceSession1Vtbl;

    interface ID3D12ProtectedResourceSession1
    {
        CONST_VTBL struct ID3D12ProtectedResourceSession1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12ProtectedResourceSession1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12ProtectedResourceSession1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12ProtectedResourceSession1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12ProtectedResourceSession1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12ProtectedResourceSession1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12ProtectedResourceSession1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12ProtectedResourceSession1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12ProtectedResourceSession1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12ProtectedResourceSession1_GetStatusFence(This,riid,ppFence)	\
    ( (This)->lpVtbl -> GetStatusFence(This,riid,ppFence) ) 

#define ID3D12ProtectedResourceSession1_GetSessionStatus(This)	\
    ( (This)->lpVtbl -> GetSessionStatus(This) ) 

#if !defined(_WIN32)

#define ID3D12ProtectedResourceSession1_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12ProtectedResourceSession1_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#if !defined(_WIN32)

#define ID3D12ProtectedResourceSession1_GetDesc1(This)	\
    ( (This)->lpVtbl -> GetDesc1(This) ) 
#else
#define ID3D12ProtectedResourceSession1_GetDesc1(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc1(This,RetVal) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device7_INTERFACE_DEFINED__
#define __ID3D12Device7_INTERFACE_DEFINED__

/* interface ID3D12Device7 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device7;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5c014b53-68a1-4b9b-8bd1-dd6046b9358b")
    ID3D12Device7 : public ID3D12Device6
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE AddToStateObject( 
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateProtectedResourceSession1( 
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device7Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device7 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device7 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device7 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device7 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device7 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device7 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device7 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device7 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device7 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device7 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device7 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device7 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device7 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device7 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device7 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device7 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device7 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device7 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device7 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device7 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device7 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device7 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device7 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device7 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device7 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device7 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device7 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device7 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device7 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device7 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device7 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device7 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device7 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device7 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device7 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device7 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device7 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device7 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device7 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device7 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device7 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device7 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device7 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device7 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device7 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device7 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device7 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device7 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device7 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device7 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device7 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device7 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device7 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device7 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device7 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device7 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device7 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device7 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device7 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device7 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device7 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device7 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        END_INTERFACE
    } ID3D12Device7Vtbl;

    interface ID3D12Device7
    {
        CONST_VTBL struct ID3D12Device7Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device7_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device7_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device7_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device7_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device7_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device7_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device7_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device7_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device7_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device7_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device7_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device7_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device7_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device7_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device7_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device7_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device7_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device7_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device7_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device7_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device7_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device7_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device7_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device7_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device7_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device7_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device7_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device7_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device7_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device7_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device7_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device7_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device7_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device7_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device7_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device7_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device7_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device7_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device7_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device7_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device7_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device7_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device7_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device7_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device7_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device7_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device7_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device7_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device7_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device7_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device7_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device7_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device7_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device7_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device7_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device7_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device7_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device7_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device7_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device7_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device7_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device7_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device7_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device7_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device7_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device7_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device7_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device7_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device7_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device7_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device7_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device7_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device7_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device8_INTERFACE_DEFINED__
#define __ID3D12Device8_INTERFACE_DEFINED__

/* interface ID3D12Device8 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device8;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("9218E6BB-F944-4F7E-A75C-B1B2C7B701F3")
    ID3D12Device8 : public ID3D12Device7
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo2( 
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0;
#else
        virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo2( 
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0;
#endif
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource2( 
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource1( 
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual void STDMETHODCALLTYPE CreateSamplerFeedbackUnorderedAccessView( 
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE GetCopyableFootprints1( 
            _In_  const D3D12_RESOURCE_DESC1 *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;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device8Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device8 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device8 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device8 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device8 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device8 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device8 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device8 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device8 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device8 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device8 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device8 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device8 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device8 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device8 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device8 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device8 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device8 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device8 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device8 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device8 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device8 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device8 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device8 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device8 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device8 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device8 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device8 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device8 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device8 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device8 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device8 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device8 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device8 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device8 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device8 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device8 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device8 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device8 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device8 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device8 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device8 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device8 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device8 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device8 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device8 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device8 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device8 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device8 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device8 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device8 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device8 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device8 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device8 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device8 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device8 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device8 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device8 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device8 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device8 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device8 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device8 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device8 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device8 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device8 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( 
            ID3D12Device8 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( 
            ID3D12Device8 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( 
            ID3D12Device8 * This,
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( 
            ID3D12Device8 * This,
            _In_  const D3D12_RESOURCE_DESC1 *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);
        
        END_INTERFACE
    } ID3D12Device8Vtbl;

    interface ID3D12Device8
    {
        CONST_VTBL struct ID3D12Device8Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device8_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device8_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device8_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device8_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device8_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device8_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device8_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device8_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device8_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device8_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device8_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device8_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device8_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device8_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device8_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device8_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device8_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device8_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device8_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device8_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device8_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device8_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device8_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device8_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device8_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device8_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device8_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device8_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device8_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device8_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device8_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device8_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device8_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device8_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device8_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device8_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device8_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device8_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device8_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device8_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device8_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device8_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device8_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device8_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device8_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device8_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device8_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device8_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device8_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device8_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device8_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device8_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device8_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device8_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device8_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device8_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device8_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device8_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device8_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device8_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device8_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device8_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device8_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device8_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device8_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device8_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device8_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device8_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device8_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device8_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device8_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device8_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#if !defined(_WIN32)

#define ID3D12Device8_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device8_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#define ID3D12Device8_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device8_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device8_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) 

#define ID3D12Device8_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device8_INTERFACE_DEFINED__ */


#ifndef __ID3D12Resource1_INTERFACE_DEFINED__
#define __ID3D12Resource1_INTERFACE_DEFINED__

/* interface ID3D12Resource1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Resource1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("9D5E227A-4430-4161-88B3-3ECA6BB16E19")
    ID3D12Resource1 : public ID3D12Resource
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( 
            REFIID riid,
            _COM_Outptr_opt_  void **ppProtectedSession) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Resource1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Resource1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Resource1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Resource1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Resource1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Resource1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Resource1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Resource1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Resource1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, Map)
        HRESULT ( STDMETHODCALLTYPE *Map )( 
            ID3D12Resource1 * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pReadRange,
            _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, Unmap)
        void ( STDMETHODCALLTYPE *Unmap )( 
            ID3D12Resource1 * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pWrittenRange);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetDesc)
#if !defined(_WIN32)
        D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Resource1 * This);
        
#else
        D3D12_RESOURCE_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Resource1 * This,
            D3D12_RESOURCE_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetGPUVirtualAddress)
        D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( 
            ID3D12Resource1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, WriteToSubresource)
        HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( 
            ID3D12Resource1 * This,
            UINT DstSubresource,
            _In_opt_  const D3D12_BOX *pDstBox,
            _In_  const void *pSrcData,
            UINT SrcRowPitch,
            UINT SrcDepthPitch);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, ReadFromSubresource)
        HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( 
            ID3D12Resource1 * This,
            _Out_  void *pDstData,
            UINT DstRowPitch,
            UINT DstDepthPitch,
            UINT SrcSubresource,
            _In_opt_  const D3D12_BOX *pSrcBox);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetHeapProperties)
        HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )( 
            ID3D12Resource1 * This,
            _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
            _Out_opt_  D3D12_HEAP_FLAGS *pHeapFlags);
        
        DECLSPEC_XFGVIRT(ID3D12Resource1, GetProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( 
            ID3D12Resource1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppProtectedSession);
        
        END_INTERFACE
    } ID3D12Resource1Vtbl;

    interface ID3D12Resource1
    {
        CONST_VTBL struct ID3D12Resource1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Resource1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Resource1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Resource1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Resource1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Resource1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Resource1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Resource1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Resource1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 



#define ID3D12Resource1_Map(This,Subresource,pReadRange,ppData)	\
    ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) ) 

#define ID3D12Resource1_Unmap(This,Subresource,pWrittenRange)	\
    ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) ) 
#if !defined(_WIN32)

#define ID3D12Resource1_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12Resource1_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#define ID3D12Resource1_GetGPUVirtualAddress(This)	\
    ( (This)->lpVtbl -> GetGPUVirtualAddress(This) ) 

#define ID3D12Resource1_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)	\
    ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) 

#define ID3D12Resource1_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox)	\
    ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) ) 

#define ID3D12Resource1_GetHeapProperties(This,pHeapProperties,pHeapFlags)	\
    ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) ) 


#define ID3D12Resource1_GetProtectedResourceSession(This,riid,ppProtectedSession)	\
    ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Resource1_INTERFACE_DEFINED__ */


#ifndef __ID3D12Resource2_INTERFACE_DEFINED__
#define __ID3D12Resource2_INTERFACE_DEFINED__

/* interface ID3D12Resource2 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Resource2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("BE36EC3B-EA85-4AEB-A45A-E9D76404A495")
    ID3D12Resource2 : public ID3D12Resource1
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_RESOURCE_DESC1 STDMETHODCALLTYPE GetDesc1( void) = 0;
#else
        virtual D3D12_RESOURCE_DESC1 *STDMETHODCALLTYPE GetDesc1( 
            D3D12_RESOURCE_DESC1 * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Resource2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Resource2 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Resource2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Resource2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Resource2 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Resource2 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Resource2 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Resource2 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Resource2 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, Map)
        HRESULT ( STDMETHODCALLTYPE *Map )( 
            ID3D12Resource2 * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pReadRange,
            _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, Unmap)
        void ( STDMETHODCALLTYPE *Unmap )( 
            ID3D12Resource2 * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pWrittenRange);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetDesc)
#if !defined(_WIN32)
        D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Resource2 * This);
        
#else
        D3D12_RESOURCE_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Resource2 * This,
            D3D12_RESOURCE_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetGPUVirtualAddress)
        D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( 
            ID3D12Resource2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, WriteToSubresource)
        HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( 
            ID3D12Resource2 * This,
            UINT DstSubresource,
            _In_opt_  const D3D12_BOX *pDstBox,
            _In_  const void *pSrcData,
            UINT SrcRowPitch,
            UINT SrcDepthPitch);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, ReadFromSubresource)
        HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( 
            ID3D12Resource2 * This,
            _Out_  void *pDstData,
            UINT DstRowPitch,
            UINT DstDepthPitch,
            UINT SrcSubresource,
            _In_opt_  const D3D12_BOX *pSrcBox);
        
        DECLSPEC_XFGVIRT(ID3D12Resource, GetHeapProperties)
        HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )( 
            ID3D12Resource2 * This,
            _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
            _Out_opt_  D3D12_HEAP_FLAGS *pHeapFlags);
        
        DECLSPEC_XFGVIRT(ID3D12Resource1, GetProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( 
            ID3D12Resource2 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppProtectedSession);
        
        DECLSPEC_XFGVIRT(ID3D12Resource2, GetDesc1)
#if !defined(_WIN32)
        D3D12_RESOURCE_DESC1 ( STDMETHODCALLTYPE *GetDesc1 )( 
            ID3D12Resource2 * This);
        
#else
        D3D12_RESOURCE_DESC1 *( STDMETHODCALLTYPE *GetDesc1 )( 
            ID3D12Resource2 * This,
            D3D12_RESOURCE_DESC1 * RetVal);
        
#endif
        
        END_INTERFACE
    } ID3D12Resource2Vtbl;

    interface ID3D12Resource2
    {
        CONST_VTBL struct ID3D12Resource2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Resource2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Resource2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Resource2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Resource2_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Resource2_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Resource2_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Resource2_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Resource2_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 



#define ID3D12Resource2_Map(This,Subresource,pReadRange,ppData)	\
    ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) ) 

#define ID3D12Resource2_Unmap(This,Subresource,pWrittenRange)	\
    ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) ) 
#if !defined(_WIN32)

#define ID3D12Resource2_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12Resource2_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#define ID3D12Resource2_GetGPUVirtualAddress(This)	\
    ( (This)->lpVtbl -> GetGPUVirtualAddress(This) ) 

#define ID3D12Resource2_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)	\
    ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) 

#define ID3D12Resource2_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox)	\
    ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) ) 

#define ID3D12Resource2_GetHeapProperties(This,pHeapProperties,pHeapFlags)	\
    ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) ) 


#define ID3D12Resource2_GetProtectedResourceSession(This,riid,ppProtectedSession)	\
    ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) 

#if !defined(_WIN32)

#define ID3D12Resource2_GetDesc1(This)	\
    ( (This)->lpVtbl -> GetDesc1(This) ) 
#else
#define ID3D12Resource2_GetDesc1(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc1(This,RetVal) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Resource2_INTERFACE_DEFINED__ */


#ifndef __ID3D12Heap1_INTERFACE_DEFINED__
#define __ID3D12Heap1_INTERFACE_DEFINED__

/* interface ID3D12Heap1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Heap1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("572F7389-2168-49E3-9693-D6DF5871BF6D")
    ID3D12Heap1 : public ID3D12Heap
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( 
            REFIID riid,
            _COM_Outptr_opt_  void **ppProtectedSession) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Heap1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Heap1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Heap1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Heap1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Heap1 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Heap1 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Heap1 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Heap1 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Heap1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12Heap, GetDesc)
#if !defined(_WIN32)
        D3D12_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Heap1 * This);
        
#else
        D3D12_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Heap1 * This,
            D3D12_HEAP_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Heap1, GetProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( 
            ID3D12Heap1 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppProtectedSession);
        
        END_INTERFACE
    } ID3D12Heap1Vtbl;

    interface ID3D12Heap1
    {
        CONST_VTBL struct ID3D12Heap1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Heap1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Heap1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Heap1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Heap1_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Heap1_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Heap1_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Heap1_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Heap1_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#if !defined(_WIN32)

#define ID3D12Heap1_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12Heap1_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif


#define ID3D12Heap1_GetProtectedResourceSession(This,riid,ppProtectedSession)	\
    ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Heap1_INTERFACE_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList3 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList3;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("6FDA83A7-B84C-4E38-9AC8-C7BD22016B3D")
    ID3D12GraphicsCommandList3 : public ID3D12GraphicsCommandList2
    {
    public:
        virtual void STDMETHODCALLTYPE SetProtectedResourceSession( 
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList3Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList3 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList3 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList3 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList3 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList3 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList3 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList3 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList3 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList3 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList3 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList3 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList3 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList3 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList3 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList3 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList3 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList3 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList3 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList3 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList3 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList3 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList3 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList3Vtbl;

    interface ID3D12GraphicsCommandList3
    {
        CONST_VTBL struct ID3D12GraphicsCommandList3Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList3_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList3_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList3_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList3_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList3_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList3_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList3_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList3_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList3_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList3_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList3_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList3_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList3_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList3_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList3_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList3_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList3_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList3_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList3_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList3_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList3_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList3_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList3_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList3_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList3_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList3_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList3_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList3_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList3_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList3_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList3_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList3_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList3_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList3_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList3_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList3_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList3_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList3_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList3_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList3_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList3_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList3_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList3_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList3_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList3_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList3_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList3_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList3_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList3_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList3_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList3_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList3_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList3_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList3_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList3_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList3_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList3_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList3_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList3_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList3_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList3_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList3_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList3_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList3_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList3_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList3_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList3_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList3_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0054 */
/* [local] */ 

typedef 
enum D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE
    {
        D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD	= 0,
        D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE	= ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD + 1 ) ,
        D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR	= ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE + 1 ) ,
        D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS	= ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR + 1 ) ,
        D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER	= ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS + 1 ) ,
        D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV	= ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER + 1 ) ,
        D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_UAV	= ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV + 1 ) 
    } 	D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE;

typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS
    {
    D3D12_CLEAR_VALUE ClearValue;
    } 	D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS;

typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS
    {
    UINT AdditionalWidth;
    UINT AdditionalHeight;
    } 	D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS;

typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS
    {
    D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE Type;
    union 
        {
        D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS Clear;
        D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal;
        } 	;
    } 	D3D12_RENDER_PASS_BEGINNING_ACCESS;

typedef 
enum D3D12_RENDER_PASS_ENDING_ACCESS_TYPE
    {
        D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD	= 0,
        D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE	= ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD + 1 ) ,
        D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE	= ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE + 1 ) ,
        D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS	= ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE + 1 ) ,
        D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER	= ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS + 1 ) ,
        D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV	= ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER + 1 ) ,
        D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_UAV	= ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV + 1 ) 
    } 	D3D12_RENDER_PASS_ENDING_ACCESS_TYPE;

typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS
    {
    UINT SrcSubresource;
    UINT DstSubresource;
    UINT DstX;
    UINT DstY;
    D3D12_RECT SrcRect;
    } 	D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS;

typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS
    {
    ID3D12Resource *pSrcResource;
    ID3D12Resource *pDstResource;
    UINT SubresourceCount;
    _Field_size_full_(SubresourceCount)  const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS *pSubresourceParameters;
    DXGI_FORMAT Format;
    D3D12_RESOLVE_MODE ResolveMode;
    BOOL PreserveResolveSource;
    } 	D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS;

typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS
    {
    UINT AdditionalWidth;
    UINT AdditionalHeight;
    } 	D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS;

typedef struct D3D12_RENDER_PASS_ENDING_ACCESS
    {
    D3D12_RENDER_PASS_ENDING_ACCESS_TYPE Type;
    union 
        {
        D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS Resolve;
        D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal;
        } 	;
    } 	D3D12_RENDER_PASS_ENDING_ACCESS;

typedef struct D3D12_RENDER_PASS_RENDER_TARGET_DESC
    {
    D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor;
    D3D12_RENDER_PASS_BEGINNING_ACCESS BeginningAccess;
    D3D12_RENDER_PASS_ENDING_ACCESS EndingAccess;
    } 	D3D12_RENDER_PASS_RENDER_TARGET_DESC;

typedef struct D3D12_RENDER_PASS_DEPTH_STENCIL_DESC
    {
    D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor;
    D3D12_RENDER_PASS_BEGINNING_ACCESS DepthBeginningAccess;
    D3D12_RENDER_PASS_BEGINNING_ACCESS StencilBeginningAccess;
    D3D12_RENDER_PASS_ENDING_ACCESS DepthEndingAccess;
    D3D12_RENDER_PASS_ENDING_ACCESS StencilEndingAccess;
    } 	D3D12_RENDER_PASS_DEPTH_STENCIL_DESC;

typedef 
enum D3D12_RENDER_PASS_FLAGS
    {
        D3D12_RENDER_PASS_FLAG_NONE	= 0,
        D3D12_RENDER_PASS_FLAG_ALLOW_UAV_WRITES	= 0x1,
        D3D12_RENDER_PASS_FLAG_SUSPENDING_PASS	= 0x2,
        D3D12_RENDER_PASS_FLAG_RESUMING_PASS	= 0x4,
        D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_DEPTH	= 0x8,
        D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_STENCIL	= 0x10
    } 	D3D12_RENDER_PASS_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RENDER_PASS_FLAGS )


extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0054_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0054_v0_0_s_ifspec;

#ifndef __ID3D12MetaCommand_INTERFACE_DEFINED__
#define __ID3D12MetaCommand_INTERFACE_DEFINED__

/* interface ID3D12MetaCommand */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12MetaCommand;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("DBB84C27-36CE-4FC9-B801-F048C46AC570")
    ID3D12MetaCommand : public ID3D12Pageable
    {
    public:
        virtual UINT64 STDMETHODCALLTYPE GetRequiredParameterResourceSize( 
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _In_  UINT ParameterIndex) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12MetaCommandVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12MetaCommand * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12MetaCommand * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12MetaCommand * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12MetaCommand * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12MetaCommand * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12MetaCommand * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12MetaCommand * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12MetaCommand * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12MetaCommand, GetRequiredParameterResourceSize)
        UINT64 ( STDMETHODCALLTYPE *GetRequiredParameterResourceSize )( 
            ID3D12MetaCommand * This,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _In_  UINT ParameterIndex);
        
        END_INTERFACE
    } ID3D12MetaCommandVtbl;

    interface ID3D12MetaCommand
    {
        CONST_VTBL struct ID3D12MetaCommandVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12MetaCommand_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12MetaCommand_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12MetaCommand_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12MetaCommand_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12MetaCommand_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12MetaCommand_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12MetaCommand_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12MetaCommand_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 



#define ID3D12MetaCommand_GetRequiredParameterResourceSize(This,Stage,ParameterIndex)	\
    ( (This)->lpVtbl -> GetRequiredParameterResourceSize(This,Stage,ParameterIndex) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12MetaCommand_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0055 */
/* [local] */ 

typedef struct D3D12_DISPATCH_RAYS_DESC
    {
    D3D12_GPU_VIRTUAL_ADDRESS_RANGE RayGenerationShaderRecord;
    D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE MissShaderTable;
    D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE HitGroupTable;
    D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE CallableShaderTable;
    UINT Width;
    UINT Height;
    UINT Depth;
    } 	D3D12_DISPATCH_RAYS_DESC;

typedef 
enum D3D12_SET_WORK_GRAPH_FLAGS
    {
        D3D12_SET_WORK_GRAPH_FLAG_NONE	= 0,
        D3D12_SET_WORK_GRAPH_FLAG_INITIALIZE	= 0x1
    } 	D3D12_SET_WORK_GRAPH_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_SET_WORK_GRAPH_FLAGS )
typedef struct D3D12_SET_WORK_GRAPH_DESC
    {
    D3D12_PROGRAM_IDENTIFIER ProgramIdentifier;
    D3D12_SET_WORK_GRAPH_FLAGS Flags;
    D3D12_GPU_VIRTUAL_ADDRESS_RANGE BackingMemory;
    D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE NodeLocalRootArgumentsTable;
    } 	D3D12_SET_WORK_GRAPH_DESC;

typedef struct D3D12_SET_RAYTRACING_PIPELINE_DESC
    {
    D3D12_PROGRAM_IDENTIFIER ProgramIdentifier;
    } 	D3D12_SET_RAYTRACING_PIPELINE_DESC;

typedef struct D3D12_SET_GENERIC_PIPELINE_DESC
    {
    D3D12_PROGRAM_IDENTIFIER ProgramIdentifier;
    } 	D3D12_SET_GENERIC_PIPELINE_DESC;

typedef 
enum D3D12_PROGRAM_TYPE
    {
        D3D12_PROGRAM_TYPE_GENERIC_PIPELINE	= 1,
        D3D12_PROGRAM_TYPE_RAYTRACING_PIPELINE	= 4,
        D3D12_PROGRAM_TYPE_WORK_GRAPH	= 5
    } 	D3D12_PROGRAM_TYPE;

typedef struct D3D12_SET_PROGRAM_DESC
    {
    D3D12_PROGRAM_TYPE Type;
    union 
        {
        D3D12_SET_GENERIC_PIPELINE_DESC GenericPipeline;
        D3D12_SET_RAYTRACING_PIPELINE_DESC RaytracingPipeline;
        D3D12_SET_WORK_GRAPH_DESC WorkGraph;
        } 	;
    } 	D3D12_SET_PROGRAM_DESC;

typedef 
enum D3D12_DISPATCH_MODE
    {
        D3D12_DISPATCH_MODE_NODE_CPU_INPUT	= 0,
        D3D12_DISPATCH_MODE_NODE_GPU_INPUT	= 1,
        D3D12_DISPATCH_MODE_MULTI_NODE_CPU_INPUT	= 2,
        D3D12_DISPATCH_MODE_MULTI_NODE_GPU_INPUT	= 3
    } 	D3D12_DISPATCH_MODE;

typedef struct D3D12_NODE_CPU_INPUT
    {
    UINT EntrypointIndex;
    UINT NumRecords;
    const void *pRecords;
    UINT64 RecordStrideInBytes;
    } 	D3D12_NODE_CPU_INPUT;

typedef struct D3D12_NODE_GPU_INPUT
    {
    UINT EntrypointIndex;
    UINT NumRecords;
    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE Records;
    } 	D3D12_NODE_GPU_INPUT;

typedef struct D3D12_MULTI_NODE_CPU_INPUT
    {
    UINT NumNodeInputs;
    const D3D12_NODE_CPU_INPUT *pNodeInputs;
    UINT64 NodeInputStrideInBytes;
    } 	D3D12_MULTI_NODE_CPU_INPUT;

typedef struct D3D12_MULTI_NODE_GPU_INPUT
    {
    UINT NumNodeInputs;
    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE NodeInputs;
    } 	D3D12_MULTI_NODE_GPU_INPUT;

typedef struct D3D12_DISPATCH_GRAPH_DESC
    {
    D3D12_DISPATCH_MODE Mode;
    union 
        {
        D3D12_NODE_CPU_INPUT NodeCPUInput;
        D3D12_GPU_VIRTUAL_ADDRESS NodeGPUInput;
        D3D12_MULTI_NODE_CPU_INPUT MultiNodeCPUInput;
        D3D12_GPU_VIRTUAL_ADDRESS MultiNodeGPUInput;
        } 	;
    } 	D3D12_DISPATCH_GRAPH_DESC;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0055_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0055_v0_0_s_ifspec;

#ifndef __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList4 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList4;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8754318e-d3a9-4541-98cf-645b50dc4874")
    ID3D12GraphicsCommandList4 : public ID3D12GraphicsCommandList3
    {
    public:
        virtual void STDMETHODCALLTYPE BeginRenderPass( 
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags) = 0;
        
        virtual void STDMETHODCALLTYPE EndRenderPass( void) = 0;
        
        virtual void STDMETHODCALLTYPE InitializeMetaCommand( 
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes) = 0;
        
        virtual void STDMETHODCALLTYPE ExecuteMetaCommand( 
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes) = 0;
        
        virtual void STDMETHODCALLTYPE BuildRaytracingAccelerationStructure( 
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs) = 0;
        
        virtual void STDMETHODCALLTYPE EmitRaytracingAccelerationStructurePostbuildInfo( 
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData) = 0;
        
        virtual void STDMETHODCALLTYPE CopyRaytracingAccelerationStructure( 
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode) = 0;
        
        virtual void STDMETHODCALLTYPE SetPipelineState1( 
            _In_  ID3D12StateObject *pStateObject) = 0;
        
        virtual void STDMETHODCALLTYPE DispatchRays( 
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList4Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList4 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList4 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList4 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList4 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList4 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList4 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList4 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList4 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList4 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList4 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList4 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList4 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList4 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList4 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList4 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList4 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList4 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass)
        void ( STDMETHODCALLTYPE *BeginRenderPass )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass)
        void ( STDMETHODCALLTYPE *EndRenderPass )( 
            ID3D12GraphicsCommandList4 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand)
        void ( STDMETHODCALLTYPE *InitializeMetaCommand )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand)
        void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo)
        void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1)
        void ( STDMETHODCALLTYPE *SetPipelineState1 )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  ID3D12StateObject *pStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays)
        void ( STDMETHODCALLTYPE *DispatchRays )( 
            ID3D12GraphicsCommandList4 * This,
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList4Vtbl;

    interface ID3D12GraphicsCommandList4
    {
        CONST_VTBL struct ID3D12GraphicsCommandList4Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList4_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList4_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList4_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList4_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList4_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList4_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList4_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList4_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList4_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList4_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList4_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList4_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList4_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList4_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList4_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList4_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList4_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList4_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList4_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList4_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList4_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList4_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList4_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList4_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList4_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList4_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList4_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList4_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList4_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList4_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList4_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList4_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList4_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList4_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList4_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList4_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList4_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList4_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList4_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList4_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList4_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList4_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList4_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList4_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList4_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList4_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList4_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList4_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList4_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList4_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList4_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList4_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList4_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList4_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList4_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList4_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList4_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList4_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList4_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList4_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList4_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList4_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList4_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList4_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList4_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList4_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList4_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList4_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 


#define ID3D12GraphicsCommandList4_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags)	\
    ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) 

#define ID3D12GraphicsCommandList4_EndRenderPass(This)	\
    ( (This)->lpVtbl -> EndRenderPass(This) ) 

#define ID3D12GraphicsCommandList4_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList4_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList4_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs)	\
    ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) 

#define ID3D12GraphicsCommandList4_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData)	\
    ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) 

#define ID3D12GraphicsCommandList4_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode)	\
    ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) 

#define ID3D12GraphicsCommandList4_SetPipelineState1(This,pStateObject)	\
    ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) 

#define ID3D12GraphicsCommandList4_DispatchRays(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0056 */
/* [local] */ 

typedef 
enum D3D12_SHADER_CACHE_MODE
    {
        D3D12_SHADER_CACHE_MODE_MEMORY	= 0,
        D3D12_SHADER_CACHE_MODE_DISK	= ( D3D12_SHADER_CACHE_MODE_MEMORY + 1 ) 
    } 	D3D12_SHADER_CACHE_MODE;

typedef 
enum D3D12_SHADER_CACHE_FLAGS
    {
        D3D12_SHADER_CACHE_FLAG_NONE	= 0,
        D3D12_SHADER_CACHE_FLAG_DRIVER_VERSIONED	= 0x1,
        D3D12_SHADER_CACHE_FLAG_USE_WORKING_DIR	= 0x2
    } 	D3D12_SHADER_CACHE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_FLAGS )
typedef struct D3D12_SHADER_CACHE_SESSION_DESC
    {
    GUID Identifier;
    D3D12_SHADER_CACHE_MODE Mode;
    D3D12_SHADER_CACHE_FLAGS Flags;
    UINT MaximumInMemoryCacheSizeBytes;
    UINT MaximumInMemoryCacheEntries;
    UINT MaximumValueFileSizeBytes;
    UINT64 Version;
    } 	D3D12_SHADER_CACHE_SESSION_DESC;

typedef 
enum D3D12_BARRIER_LAYOUT
    {
        D3D12_BARRIER_LAYOUT_UNDEFINED	= 0xffffffff,
        D3D12_BARRIER_LAYOUT_COMMON	= 0,
        D3D12_BARRIER_LAYOUT_PRESENT	= 0,
        D3D12_BARRIER_LAYOUT_GENERIC_READ	= 1,
        D3D12_BARRIER_LAYOUT_RENDER_TARGET	= 2,
        D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS	= 3,
        D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE	= 4,
        D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ	= 5,
        D3D12_BARRIER_LAYOUT_SHADER_RESOURCE	= 6,
        D3D12_BARRIER_LAYOUT_COPY_SOURCE	= 7,
        D3D12_BARRIER_LAYOUT_COPY_DEST	= 8,
        D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE	= 9,
        D3D12_BARRIER_LAYOUT_RESOLVE_DEST	= 10,
        D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE	= 11,
        D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ	= 12,
        D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE	= 13,
        D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ	= 14,
        D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE	= 15,
        D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ	= 16,
        D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE	= 17,
        D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON	= 18,
        D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ	= 19,
        D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS	= 20,
        D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE	= 21,
        D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE	= 22,
        D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST	= 23,
        D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON	= 24,
        D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ	= 25,
        D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS	= 26,
        D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE	= 27,
        D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE	= 28,
        D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST	= 29,
        D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ_COMPUTE_QUEUE_ACCESSIBLE	= 31
    } 	D3D12_BARRIER_LAYOUT;

typedef 
enum D3D12_BARRIER_SYNC
    {
        D3D12_BARRIER_SYNC_NONE	= 0,
        D3D12_BARRIER_SYNC_ALL	= 0x1,
        D3D12_BARRIER_SYNC_DRAW	= 0x2,
        D3D12_BARRIER_SYNC_INDEX_INPUT	= 0x4,
        D3D12_BARRIER_SYNC_VERTEX_SHADING	= 0x8,
        D3D12_BARRIER_SYNC_PIXEL_SHADING	= 0x10,
        D3D12_BARRIER_SYNC_DEPTH_STENCIL	= 0x20,
        D3D12_BARRIER_SYNC_RENDER_TARGET	= 0x40,
        D3D12_BARRIER_SYNC_COMPUTE_SHADING	= 0x80,
        D3D12_BARRIER_SYNC_RAYTRACING	= 0x100,
        D3D12_BARRIER_SYNC_COPY	= 0x200,
        D3D12_BARRIER_SYNC_RESOLVE	= 0x400,
        D3D12_BARRIER_SYNC_EXECUTE_INDIRECT	= 0x800,
        D3D12_BARRIER_SYNC_PREDICATION	= 0x800,
        D3D12_BARRIER_SYNC_ALL_SHADING	= 0x1000,
        D3D12_BARRIER_SYNC_NON_PIXEL_SHADING	= 0x2000,
        D3D12_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO	= 0x4000,
        D3D12_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW	= 0x8000,
        D3D12_BARRIER_SYNC_VIDEO_DECODE	= 0x100000,
        D3D12_BARRIER_SYNC_VIDEO_PROCESS	= 0x200000,
        D3D12_BARRIER_SYNC_VIDEO_ENCODE	= 0x400000,
        D3D12_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE	= 0x800000,
        D3D12_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE	= 0x1000000,
        D3D12_BARRIER_SYNC_SPLIT	= 0x80000000
    } 	D3D12_BARRIER_SYNC;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_SYNC )
typedef 
enum D3D12_BARRIER_ACCESS
    {
        D3D12_BARRIER_ACCESS_COMMON	= 0,
        D3D12_BARRIER_ACCESS_VERTEX_BUFFER	= 0x1,
        D3D12_BARRIER_ACCESS_CONSTANT_BUFFER	= 0x2,
        D3D12_BARRIER_ACCESS_INDEX_BUFFER	= 0x4,
        D3D12_BARRIER_ACCESS_RENDER_TARGET	= 0x8,
        D3D12_BARRIER_ACCESS_UNORDERED_ACCESS	= 0x10,
        D3D12_BARRIER_ACCESS_DEPTH_STENCIL_WRITE	= 0x20,
        D3D12_BARRIER_ACCESS_DEPTH_STENCIL_READ	= 0x40,
        D3D12_BARRIER_ACCESS_SHADER_RESOURCE	= 0x80,
        D3D12_BARRIER_ACCESS_STREAM_OUTPUT	= 0x100,
        D3D12_BARRIER_ACCESS_INDIRECT_ARGUMENT	= 0x200,
        D3D12_BARRIER_ACCESS_PREDICATION	= 0x200,
        D3D12_BARRIER_ACCESS_COPY_DEST	= 0x400,
        D3D12_BARRIER_ACCESS_COPY_SOURCE	= 0x800,
        D3D12_BARRIER_ACCESS_RESOLVE_DEST	= 0x1000,
        D3D12_BARRIER_ACCESS_RESOLVE_SOURCE	= 0x2000,
        D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_READ	= 0x4000,
        D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE	= 0x8000,
        D3D12_BARRIER_ACCESS_SHADING_RATE_SOURCE	= 0x10000,
        D3D12_BARRIER_ACCESS_VIDEO_DECODE_READ	= 0x20000,
        D3D12_BARRIER_ACCESS_VIDEO_DECODE_WRITE	= 0x40000,
        D3D12_BARRIER_ACCESS_VIDEO_PROCESS_READ	= 0x80000,
        D3D12_BARRIER_ACCESS_VIDEO_PROCESS_WRITE	= 0x100000,
        D3D12_BARRIER_ACCESS_VIDEO_ENCODE_READ	= 0x200000,
        D3D12_BARRIER_ACCESS_VIDEO_ENCODE_WRITE	= 0x400000,
        D3D12_BARRIER_ACCESS_NO_ACCESS	= 0x80000000
    } 	D3D12_BARRIER_ACCESS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_ACCESS )
typedef 
enum D3D12_BARRIER_TYPE
    {
        D3D12_BARRIER_TYPE_GLOBAL	= 0,
        D3D12_BARRIER_TYPE_TEXTURE	= ( D3D12_BARRIER_TYPE_GLOBAL + 1 ) ,
        D3D12_BARRIER_TYPE_BUFFER	= ( D3D12_BARRIER_TYPE_TEXTURE + 1 ) 
    } 	D3D12_BARRIER_TYPE;

typedef 
enum D3D12_TEXTURE_BARRIER_FLAGS
    {
        D3D12_TEXTURE_BARRIER_FLAG_NONE	= 0,
        D3D12_TEXTURE_BARRIER_FLAG_DISCARD	= 0x1
    } 	D3D12_TEXTURE_BARRIER_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_TEXTURE_BARRIER_FLAGS )
typedef struct D3D12_BARRIER_SUBRESOURCE_RANGE
    {
    UINT IndexOrFirstMipLevel;
    UINT NumMipLevels;
    UINT FirstArraySlice;
    UINT NumArraySlices;
    UINT FirstPlane;
    UINT NumPlanes;
    } 	D3D12_BARRIER_SUBRESOURCE_RANGE;

typedef struct D3D12_GLOBAL_BARRIER
    {
    D3D12_BARRIER_SYNC SyncBefore;
    D3D12_BARRIER_SYNC SyncAfter;
    D3D12_BARRIER_ACCESS AccessBefore;
    D3D12_BARRIER_ACCESS AccessAfter;
    } 	D3D12_GLOBAL_BARRIER;

typedef struct D3D12_TEXTURE_BARRIER
    {
    D3D12_BARRIER_SYNC SyncBefore;
    D3D12_BARRIER_SYNC SyncAfter;
    D3D12_BARRIER_ACCESS AccessBefore;
    D3D12_BARRIER_ACCESS AccessAfter;
    D3D12_BARRIER_LAYOUT LayoutBefore;
    D3D12_BARRIER_LAYOUT LayoutAfter;
    _In_  ID3D12Resource *pResource;
    D3D12_BARRIER_SUBRESOURCE_RANGE Subresources;
    D3D12_TEXTURE_BARRIER_FLAGS Flags;
    } 	D3D12_TEXTURE_BARRIER;

typedef struct D3D12_BUFFER_BARRIER
    {
    D3D12_BARRIER_SYNC SyncBefore;
    D3D12_BARRIER_SYNC SyncAfter;
    D3D12_BARRIER_ACCESS AccessBefore;
    D3D12_BARRIER_ACCESS AccessAfter;
    _In_  ID3D12Resource *pResource;
    UINT64 Offset;
    UINT64 Size;
    } 	D3D12_BUFFER_BARRIER;

typedef struct D3D12_BARRIER_GROUP
    {
    D3D12_BARRIER_TYPE Type;
    UINT32 NumBarriers;
    union 
        {
        _In_reads_(NumBarriers)  const D3D12_GLOBAL_BARRIER *pGlobalBarriers;
        _In_reads_(NumBarriers)  const D3D12_TEXTURE_BARRIER *pTextureBarriers;
        _In_reads_(NumBarriers)  const D3D12_BUFFER_BARRIER *pBufferBarriers;
        } 	;
    } 	D3D12_BARRIER_GROUP;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0056_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0056_v0_0_s_ifspec;

#ifndef __ID3D12ShaderCacheSession_INTERFACE_DEFINED__
#define __ID3D12ShaderCacheSession_INTERFACE_DEFINED__

/* interface ID3D12ShaderCacheSession */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12ShaderCacheSession;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("28e2495d-0f64-4ae4-a6ec-129255dc49a8")
    ID3D12ShaderCacheSession : public ID3D12DeviceChild
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE FindValue( 
            /* [annotation][in] */ 
            _In_reads_bytes_(KeySize)  const void *pKey,
            UINT KeySize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pValueSize)  void *pValue,
            _Inout_  UINT *pValueSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE StoreValue( 
            /* [annotation][in] */ 
            _In_reads_bytes_(KeySize)  const void *pKey,
            UINT KeySize,
            /* [annotation][in] */ 
            _In_reads_bytes_(ValueSize)  const void *pValue,
            UINT ValueSize) = 0;
        
        virtual void STDMETHODCALLTYPE SetDeleteOnDestroy( void) = 0;
        
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_SHADER_CACHE_SESSION_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
#else
        virtual D3D12_SHADER_CACHE_SESSION_DESC *STDMETHODCALLTYPE GetDesc( 
            D3D12_SHADER_CACHE_SESSION_DESC * RetVal) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12ShaderCacheSessionVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12ShaderCacheSession * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12ShaderCacheSession * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12ShaderCacheSession * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12ShaderCacheSession * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12ShaderCacheSession * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12ShaderCacheSession * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12ShaderCacheSession * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12ShaderCacheSession * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, FindValue)
        HRESULT ( STDMETHODCALLTYPE *FindValue )( 
            ID3D12ShaderCacheSession * This,
            /* [annotation][in] */ 
            _In_reads_bytes_(KeySize)  const void *pKey,
            UINT KeySize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pValueSize)  void *pValue,
            _Inout_  UINT *pValueSize);
        
        DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, StoreValue)
        HRESULT ( STDMETHODCALLTYPE *StoreValue )( 
            ID3D12ShaderCacheSession * This,
            /* [annotation][in] */ 
            _In_reads_bytes_(KeySize)  const void *pKey,
            UINT KeySize,
            /* [annotation][in] */ 
            _In_reads_bytes_(ValueSize)  const void *pValue,
            UINT ValueSize);
        
        DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, SetDeleteOnDestroy)
        void ( STDMETHODCALLTYPE *SetDeleteOnDestroy )( 
            ID3D12ShaderCacheSession * This);
        
        DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, GetDesc)
#if !defined(_WIN32)
        D3D12_SHADER_CACHE_SESSION_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12ShaderCacheSession * This);
        
#else
        D3D12_SHADER_CACHE_SESSION_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12ShaderCacheSession * This,
            D3D12_SHADER_CACHE_SESSION_DESC * RetVal);
        
#endif
        
        END_INTERFACE
    } ID3D12ShaderCacheSessionVtbl;

    interface ID3D12ShaderCacheSession
    {
        CONST_VTBL struct ID3D12ShaderCacheSessionVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12ShaderCacheSession_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12ShaderCacheSession_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12ShaderCacheSession_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12ShaderCacheSession_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12ShaderCacheSession_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12ShaderCacheSession_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12ShaderCacheSession_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12ShaderCacheSession_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12ShaderCacheSession_FindValue(This,pKey,KeySize,pValue,pValueSize)	\
    ( (This)->lpVtbl -> FindValue(This,pKey,KeySize,pValue,pValueSize) ) 

#define ID3D12ShaderCacheSession_StoreValue(This,pKey,KeySize,pValue,ValueSize)	\
    ( (This)->lpVtbl -> StoreValue(This,pKey,KeySize,pValue,ValueSize) ) 

#define ID3D12ShaderCacheSession_SetDeleteOnDestroy(This)	\
    ( (This)->lpVtbl -> SetDeleteOnDestroy(This) ) 
#if !defined(_WIN32)

#define ID3D12ShaderCacheSession_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12ShaderCacheSession_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12ShaderCacheSession_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0057 */
/* [local] */ 

typedef 
enum D3D12_SHADER_CACHE_KIND_FLAGS
    {
        D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CACHE_FOR_DRIVER	= 0x1,
        D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CONVERSIONS	= 0x2,
        D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_DRIVER_MANAGED	= 0x4,
        D3D12_SHADER_CACHE_KIND_FLAG_APPLICATION_MANAGED	= 0x8
    } 	D3D12_SHADER_CACHE_KIND_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_KIND_FLAGS )
typedef 
enum D3D12_SHADER_CACHE_CONTROL_FLAGS
    {
        D3D12_SHADER_CACHE_CONTROL_FLAG_DISABLE	= 0x1,
        D3D12_SHADER_CACHE_CONTROL_FLAG_ENABLE	= 0x2,
        D3D12_SHADER_CACHE_CONTROL_FLAG_CLEAR	= 0x4
    } 	D3D12_SHADER_CACHE_CONTROL_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_CONTROL_FLAGS )


extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0057_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0057_v0_0_s_ifspec;

#ifndef __ID3D12Device9_INTERFACE_DEFINED__
#define __ID3D12Device9_INTERFACE_DEFINED__

/* interface ID3D12Device9 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device9;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("4c80e962-f032-4f60-bc9e-ebc2cfa1d83c")
    ID3D12Device9 : public ID3D12Device8
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateShaderCacheSession( 
            _In_  const D3D12_SHADER_CACHE_SESSION_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvSession) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ShaderCacheControl( 
            D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
            D3D12_SHADER_CACHE_CONTROL_FLAGS Control) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommandQueue1( 
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID CreatorID,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device9Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device9 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device9 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device9 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device9 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device9 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device9 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device9 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device9 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device9 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device9 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device9 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device9 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device9 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device9 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device9 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device9 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device9 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device9 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device9 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device9 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device9 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device9 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device9 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device9 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device9 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device9 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device9 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device9 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device9 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device9 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device9 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device9 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device9 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device9 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device9 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device9 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device9 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device9 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device9 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device9 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device9 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device9 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device9 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device9 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device9 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device9 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device9 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device9 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device9 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device9 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device9 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device9 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device9 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device9 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device9 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device9 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device9 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device9 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device9 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device9 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device9 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device9 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device9 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device9 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( 
            ID3D12Device9 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( 
            ID3D12Device9 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( 
            ID3D12Device9 * This,
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( 
            ID3D12Device9 * This,
            _In_  const D3D12_RESOURCE_DESC1 *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);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession)
        HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( 
            ID3D12Device9 * This,
            _In_  const D3D12_SHADER_CACHE_SESSION_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl)
        HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( 
            ID3D12Device9 * This,
            D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
            D3D12_SHADER_CACHE_CONTROL_FLAGS Control);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( 
            ID3D12Device9 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID CreatorID,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        END_INTERFACE
    } ID3D12Device9Vtbl;

    interface ID3D12Device9
    {
        CONST_VTBL struct ID3D12Device9Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device9_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device9_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device9_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device9_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device9_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device9_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device9_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device9_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device9_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device9_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device9_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device9_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device9_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device9_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device9_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device9_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device9_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device9_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device9_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device9_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device9_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device9_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device9_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device9_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device9_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device9_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device9_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device9_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device9_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device9_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device9_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device9_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device9_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device9_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device9_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device9_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device9_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device9_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device9_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device9_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device9_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device9_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device9_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device9_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device9_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device9_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device9_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device9_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device9_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device9_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device9_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device9_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device9_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device9_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device9_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device9_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device9_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device9_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device9_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device9_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device9_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device9_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device9_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device9_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device9_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device9_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device9_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device9_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device9_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device9_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device9_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device9_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#if !defined(_WIN32)

#define ID3D12Device9_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device9_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#define ID3D12Device9_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device9_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device9_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) 

#define ID3D12Device9_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 


#define ID3D12Device9_CreateShaderCacheSession(This,pDesc,riid,ppvSession)	\
    ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) 

#define ID3D12Device9_ShaderCacheControl(This,Kinds,Control)	\
    ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) 

#define ID3D12Device9_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device9_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device10_INTERFACE_DEFINED__
#define __ID3D12Device10_INTERFACE_DEFINED__

/* interface ID3D12Device10 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device10;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("517f8718-aa66-49f9-b02b-a7ab89c06031")
    ID3D12Device10 : public ID3D12Device9
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource3( 
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource2( 
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateReservedResource2( 
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device10Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device10 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device10 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device10 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device10 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device10 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device10 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device10 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device10 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device10 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device10 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device10 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device10 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device10 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device10 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device10 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device10 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device10 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device10 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device10 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device10 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device10 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device10 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device10 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device10 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device10 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device10 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device10 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device10 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device10 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device10 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device10 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device10 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device10 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device10 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device10 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device10 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device10 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device10 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device10 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device10 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device10 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device10 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device10 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device10 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device10 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device10 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device10 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device10 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device10 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device10 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device10 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device10 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device10 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device10 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device10 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device10 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device10 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device10 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device10 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device10 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device10 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( 
            ID3D12Device10 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( 
            ID3D12Device10 * This,
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_RESOURCE_DESC1 *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);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession)
        HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( 
            ID3D12Device10 * This,
            _In_  const D3D12_SHADER_CACHE_SESSION_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl)
        HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( 
            ID3D12Device10 * This,
            D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
            D3D12_SHADER_CACHE_CONTROL_FLAGS Control);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID CreatorID,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( 
            ID3D12Device10 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( 
            ID3D12Device10 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        END_INTERFACE
    } ID3D12Device10Vtbl;

    interface ID3D12Device10
    {
        CONST_VTBL struct ID3D12Device10Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device10_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device10_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device10_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device10_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device10_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device10_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device10_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device10_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device10_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device10_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device10_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device10_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device10_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device10_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device10_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device10_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device10_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device10_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device10_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device10_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device10_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device10_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device10_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device10_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device10_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device10_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device10_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device10_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device10_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device10_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device10_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device10_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device10_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device10_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device10_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device10_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device10_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device10_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device10_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device10_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device10_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device10_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device10_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device10_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device10_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device10_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device10_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device10_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device10_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device10_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device10_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device10_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device10_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device10_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device10_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device10_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device10_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device10_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device10_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device10_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device10_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device10_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device10_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device10_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device10_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device10_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device10_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device10_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device10_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device10_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device10_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device10_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#if !defined(_WIN32)

#define ID3D12Device10_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device10_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#define ID3D12Device10_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device10_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device10_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) 

#define ID3D12Device10_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 


#define ID3D12Device10_CreateShaderCacheSession(This,pDesc,riid,ppvSession)	\
    ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) 

#define ID3D12Device10_ShaderCacheControl(This,Kinds,Control)	\
    ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) 

#define ID3D12Device10_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) 


#define ID3D12Device10_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) 

#define ID3D12Device10_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 

#define ID3D12Device10_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device10_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device11_INTERFACE_DEFINED__
#define __ID3D12Device11_INTERFACE_DEFINED__

/* interface ID3D12Device11 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device11;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5405c344-d457-444e-b4dd-2366e45aee39")
    ID3D12Device11 : public ID3D12Device10
    {
    public:
        virtual void STDMETHODCALLTYPE CreateSampler2( 
            _In_  const D3D12_SAMPLER_DESC2 *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device11Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device11 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device11 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device11 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device11 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device11 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device11 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device11 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device11 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device11 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device11 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device11 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device11 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device11 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device11 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device11 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device11 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device11 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device11 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device11 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device11 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device11 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device11 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device11 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device11 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device11 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device11 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device11 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device11 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device11 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device11 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device11 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device11 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device11 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device11 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device11 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device11 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device11 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device11 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device11 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device11 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device11 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device11 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device11 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device11 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device11 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device11 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device11 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device11 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device11 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device11 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device11 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device11 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device11 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device11 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device11 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device11 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device11 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device11 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device11 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device11 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device11 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device11 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device11 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device11 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device11 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device11 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device11 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device11 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device11 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device11 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device11 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( 
            ID3D12Device11 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( 
            ID3D12Device11 * This,
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_RESOURCE_DESC1 *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);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession)
        HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( 
            ID3D12Device11 * This,
            _In_  const D3D12_SHADER_CACHE_SESSION_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl)
        HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( 
            ID3D12Device11 * This,
            D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
            D3D12_SHADER_CACHE_CONTROL_FLAGS Control);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID CreatorID,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( 
            ID3D12Device11 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2)
        void ( STDMETHODCALLTYPE *CreateSampler2 )( 
            ID3D12Device11 * This,
            _In_  const D3D12_SAMPLER_DESC2 *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        END_INTERFACE
    } ID3D12Device11Vtbl;

    interface ID3D12Device11
    {
        CONST_VTBL struct ID3D12Device11Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device11_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device11_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device11_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device11_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device11_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device11_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device11_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device11_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device11_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device11_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device11_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device11_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device11_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device11_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device11_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device11_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device11_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device11_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device11_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device11_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device11_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device11_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device11_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device11_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device11_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device11_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device11_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device11_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device11_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device11_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device11_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device11_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device11_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device11_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device11_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device11_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device11_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device11_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device11_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device11_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device11_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device11_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device11_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device11_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device11_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device11_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device11_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device11_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device11_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device11_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device11_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device11_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device11_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device11_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device11_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device11_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device11_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device11_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device11_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device11_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device11_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device11_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device11_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device11_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device11_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device11_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device11_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device11_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device11_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device11_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device11_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device11_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#if !defined(_WIN32)

#define ID3D12Device11_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device11_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#define ID3D12Device11_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device11_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device11_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) 

#define ID3D12Device11_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 


#define ID3D12Device11_CreateShaderCacheSession(This,pDesc,riid,ppvSession)	\
    ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) 

#define ID3D12Device11_ShaderCacheControl(This,Kinds,Control)	\
    ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) 

#define ID3D12Device11_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) 


#define ID3D12Device11_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) 

#define ID3D12Device11_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 

#define ID3D12Device11_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 


#define ID3D12Device11_CreateSampler2(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device11_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device12_INTERFACE_DEFINED__
#define __ID3D12Device12_INTERFACE_DEFINED__

/* interface ID3D12Device12 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device12;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5af5c532-4c91-4cd0-b541-15a405395fc5")
    ID3D12Device12 : public ID3D12Device11
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo3( 
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0;
#else
        virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo3( 
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0;
#endif
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device12Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device12 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device12 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device12 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device12 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device12 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device12 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device12 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device12 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device12 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device12 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device12 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device12 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device12 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device12 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device12 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device12 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device12 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device12 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device12 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device12 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device12 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device12 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device12 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device12 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device12 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device12 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device12 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device12 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device12 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device12 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device12 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device12 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device12 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device12 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device12 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device12 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device12 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device12 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device12 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device12 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device12 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device12 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device12 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device12 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device12 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device12 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device12 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device12 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device12 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device12 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device12 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device12 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device12 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device12 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device12 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device12 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device12 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device12 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device12 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device12 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device12 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device12 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device12 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device12 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device12 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device12 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device12 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device12 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device12 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device12 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device12 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( 
            ID3D12Device12 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( 
            ID3D12Device12 * This,
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_RESOURCE_DESC1 *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);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession)
        HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( 
            ID3D12Device12 * This,
            _In_  const D3D12_SHADER_CACHE_SESSION_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl)
        HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( 
            ID3D12Device12 * This,
            D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
            D3D12_SHADER_CACHE_CONTROL_FLAGS Control);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID CreatorID,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( 
            ID3D12Device12 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2)
        void ( STDMETHODCALLTYPE *CreateSampler2 )( 
            ID3D12Device12 * This,
            _In_  const D3D12_SAMPLER_DESC2 *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device12, GetResourceAllocationInfo3)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( 
            ID3D12Device12 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( 
            ID3D12Device12 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        END_INTERFACE
    } ID3D12Device12Vtbl;

    interface ID3D12Device12
    {
        CONST_VTBL struct ID3D12Device12Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device12_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device12_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device12_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device12_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device12_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device12_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device12_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device12_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device12_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device12_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device12_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device12_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device12_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device12_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device12_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device12_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device12_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device12_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device12_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device12_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device12_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device12_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device12_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device12_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device12_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device12_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device12_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device12_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device12_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device12_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device12_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device12_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device12_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device12_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device12_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device12_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device12_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device12_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device12_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device12_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device12_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device12_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device12_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device12_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device12_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device12_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device12_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device12_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device12_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device12_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device12_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device12_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device12_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device12_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device12_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device12_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device12_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device12_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device12_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device12_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device12_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device12_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device12_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device12_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device12_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device12_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device12_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device12_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device12_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device12_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device12_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device12_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#if !defined(_WIN32)

#define ID3D12Device12_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device12_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#define ID3D12Device12_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device12_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device12_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) 

#define ID3D12Device12_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 


#define ID3D12Device12_CreateShaderCacheSession(This,pDesc,riid,ppvSession)	\
    ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) 

#define ID3D12Device12_ShaderCacheControl(This,Kinds,Control)	\
    ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) 

#define ID3D12Device12_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) 


#define ID3D12Device12_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) 

#define ID3D12Device12_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 

#define ID3D12Device12_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 


#define ID3D12Device12_CreateSampler2(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) 

#if !defined(_WIN32)

#define ID3D12Device12_GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device12_GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) 
#endif

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device12_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device13_INTERFACE_DEFINED__
#define __ID3D12Device13_INTERFACE_DEFINED__

/* interface ID3D12Device13 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device13;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("14eecffc-4df8-40f7-a118-5c816f45695e")
    ID3D12Device13 : public ID3D12Device12
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE OpenExistingHeapFromAddress1( 
            _In_  const void *pAddress,
            SIZE_T size,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device13Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device13 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device13 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device13 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device13 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device13 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device13 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device13 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device13 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device13 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device13 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device13 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device13 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device13 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device13 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device13 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device13 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device13 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device13 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device13 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device13 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device13 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device13 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device13 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device13 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device13 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device13 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device13 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device13 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device13 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device13 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device13 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device13 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device13 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device13 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device13 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device13 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device13 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device13 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device13 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device13 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device13 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device13 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device13 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device13 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device13 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device13 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device13 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device13 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device13 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device13 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device13 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device13 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device13 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device13 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device13 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device13 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device13 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device13 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device13 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device13 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device13 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device13 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device13 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device13 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device13 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device13 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device13 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device13 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device13 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device13 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device13 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( 
            ID3D12Device13 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( 
            ID3D12Device13 * This,
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_RESOURCE_DESC1 *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);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession)
        HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( 
            ID3D12Device13 * This,
            _In_  const D3D12_SHADER_CACHE_SESSION_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl)
        HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( 
            ID3D12Device13 * This,
            D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
            D3D12_SHADER_CACHE_CONTROL_FLAGS Control);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID CreatorID,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( 
            ID3D12Device13 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2)
        void ( STDMETHODCALLTYPE *CreateSampler2 )( 
            ID3D12Device13 * This,
            _In_  const D3D12_SAMPLER_DESC2 *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device12, GetResourceAllocationInfo3)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( 
            ID3D12Device13 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( 
            ID3D12Device13 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device13, OpenExistingHeapFromAddress1)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress1 )( 
            ID3D12Device13 * This,
            _In_  const void *pAddress,
            SIZE_T size,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        END_INTERFACE
    } ID3D12Device13Vtbl;

    interface ID3D12Device13
    {
        CONST_VTBL struct ID3D12Device13Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device13_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device13_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device13_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device13_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device13_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device13_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device13_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device13_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device13_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device13_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device13_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device13_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device13_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device13_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device13_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device13_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device13_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device13_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device13_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device13_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device13_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device13_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device13_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device13_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device13_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device13_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device13_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device13_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device13_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device13_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device13_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device13_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device13_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device13_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device13_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device13_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device13_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device13_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device13_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device13_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device13_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device13_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device13_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device13_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device13_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device13_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device13_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device13_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device13_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device13_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device13_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device13_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device13_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device13_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device13_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device13_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device13_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device13_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device13_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device13_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device13_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device13_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device13_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device13_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device13_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device13_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device13_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device13_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device13_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device13_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device13_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device13_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#if !defined(_WIN32)

#define ID3D12Device13_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device13_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#define ID3D12Device13_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device13_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device13_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) 

#define ID3D12Device13_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 


#define ID3D12Device13_CreateShaderCacheSession(This,pDesc,riid,ppvSession)	\
    ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) 

#define ID3D12Device13_ShaderCacheControl(This,Kinds,Control)	\
    ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) 

#define ID3D12Device13_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) 


#define ID3D12Device13_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) 

#define ID3D12Device13_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 

#define ID3D12Device13_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 


#define ID3D12Device13_CreateSampler2(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) 

#if !defined(_WIN32)

#define ID3D12Device13_GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device13_GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device13_OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device13_INTERFACE_DEFINED__ */


#ifndef __ID3D12Device14_INTERFACE_DEFINED__
#define __ID3D12Device14_INTERFACE_DEFINED__

/* interface ID3D12Device14 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Device14;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5f6e592d-d895-44c2-8e4a-88ad4926d323")
    ID3D12Device14 : public ID3D12Device13
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateRootSignatureFromSubobjectInLibrary( 
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pLibraryBlob,
            _In_  SIZE_T blobLengthInBytes,
            _In_opt_  LPCWSTR subobjectName,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Device14Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device14 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device14 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device14 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device14 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device14 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device14 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device14 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount)
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device14 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device14 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device14 * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device14 * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device14 * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device14 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport)
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device14 * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device14 * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize)
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device14 * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device14 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView)
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device14 * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView)
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device14 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device14 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView)
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device14 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView)
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device14 * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler)
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device14 * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors)
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device14 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple)
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device14 * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device14 * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device14 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties)
#if !defined(_WIN32)
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device14 * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#else
        D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device14 * This,
            D3D12_HEAP_PROPERTIES * RetVal,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device14 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device14 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device14 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device14 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device14 * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device14 * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName)
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device14 * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        DECLSPEC_XFGVIRT(ID3D12Device, MakeResident)
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device14 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, Evict)
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device14 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateFence)
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device14 * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason)
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device14 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device14 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap)
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device14 * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState)
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device14 * This,
            BOOL Enable);
        
        DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device14 * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling)
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device14 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid)
#if !defined(_WIN32)
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device14 * This);
        
#else
        LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device14 * This,
            LUID * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( 
            ID3D12Device14 * This,
            _In_reads_(BlobLength)  const void *pLibraryBlob,
            SIZE_T BlobLength,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineLibrary);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion)
        HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( 
            ID3D12Device14 * This,
            _In_reads_(NumFences)  ID3D12Fence *const *ppFences,
            _In_reads_(NumFences)  const UINT64 *pFenceValues,
            UINT NumFences,
            D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags,
            HANDLE hEvent);
        
        DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority)
        HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( 
            ID3D12Device14 * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_reads_(NumObjects)  const D3D12_RESIDENCY_PRIORITY *pPriorities);
        
        DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState)
        HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( 
            ID3D12Device14 * This,
            const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( 
            ID3D12Device14 * This,
            _In_  const void *pAddress,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( 
            ID3D12Device14 * This,
            _In_  HANDLE hFileMapping,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident)
        HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( 
            ID3D12Device14 * This,
            D3D12_RESIDENCY_FLAGS Flags,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
            _In_  ID3D12Fence *pFenceToSignal,
            UINT64 FenceValueToSignal);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( 
            ID3D12Device14 * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  D3D12_COMMAND_LIST_FLAGS flags,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( 
            ID3D12Device14 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( 
            ID3D12Device14 * 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,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1)
        HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device14 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( 
            ID3D12Device14 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker)
        HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( 
            ID3D12Device14 * This,
            _In_  ID3D12LifetimeOwner *pOwner,
            REFIID riid,
            _COM_Outptr_  void **ppvTracker);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice)
        void ( STDMETHODCALLTYPE *RemoveDevice )( 
            ID3D12Device14 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( 
            ID3D12Device14 * This,
            _Inout_  UINT *pNumMetaCommands,
            _Out_writes_opt_(*pNumMetaCommands)  D3D12_META_COMMAND_DESC *pDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters)
        HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( 
            ID3D12Device14 * This,
            _In_  REFGUID CommandId,
            _In_  D3D12_META_COMMAND_PARAMETER_STAGE Stage,
            _Out_opt_  UINT *pTotalStructureSizeInBytes,
            _Inout_  UINT *pParameterCount,
            _Out_writes_opt_(*pParameterCount)  D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand)
        HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( 
            ID3D12Device14 * This,
            _In_  REFGUID CommandId,
            _In_  UINT NodeMask,
            _In_reads_bytes_opt_(CreationParametersDataSizeInBytes)  const void *pCreationParametersData,
            _In_  SIZE_T CreationParametersDataSizeInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppMetaCommand);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject)
        HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( 
            ID3D12Device14 * This,
            const D3D12_STATE_OBJECT_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo)
        void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( 
            ID3D12Device14 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc,
            _Out_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo);
        
        DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier)
        D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( 
            ID3D12Device14 * This,
            _In_  D3D12_SERIALIZED_DATA_TYPE SerializedDataType,
            _In_  const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck);
        
        DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode)
        HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( 
            ID3D12Device14 * This,
            D3D12_BACKGROUND_PROCESSING_MODE Mode,
            D3D12_MEASUREMENTS_ACTION MeasurementsAction,
            _In_opt_  HANDLE hEventToSignalUponCompletion,
            _Out_opt_  BOOL *pbFurtherMeasurementsDesired);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject)
        HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( 
            ID3D12Device14 * This,
            const D3D12_STATE_OBJECT_DESC *pAddition,
            ID3D12StateObject *pStateObjectToGrowFrom,
            REFIID riid,
            _COM_Outptr_  void **ppNewStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1)
        HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc,
            _In_  REFIID riid,
            _COM_Outptr_  void **ppSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device14 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( 
            ID3D12Device14 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( 
            ID3D12Device14 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView)
        void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( 
            ID3D12Device14 * This,
            _In_opt_  ID3D12Resource *pTargetedResource,
            _In_opt_  ID3D12Resource *pFeedbackResource,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1)
        void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_RESOURCE_DESC1 *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);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession)
        HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( 
            ID3D12Device14 * This,
            _In_  const D3D12_SHADER_CACHE_SESSION_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvSession);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl)
        HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( 
            ID3D12Device14 * This,
            D3D12_SHADER_CACHE_KIND_FLAGS Kinds,
            D3D12_SHADER_CACHE_CONTROL_FLAGS Control);
        
        DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1)
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID CreatorID,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3)
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( 
            ID3D12Device14 * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC1 *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2)
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_BARRIER_LAYOUT InitialLayout,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedSession,
            UINT32 NumCastableFormats,
            _In_opt_count_(NumCastableFormats)  const DXGI_FORMAT *pCastableFormats,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2)
        void ( STDMETHODCALLTYPE *CreateSampler2 )( 
            ID3D12Device14 * This,
            _In_  const D3D12_SAMPLER_DESC2 *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12Device12, GetResourceAllocationInfo3)
#if !defined(_WIN32)
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( 
            ID3D12Device14 * This,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#else
        D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( 
            ID3D12Device14 * This,
            D3D12_RESOURCE_ALLOCATION_INFO * RetVal,
            UINT visibleMask,
            UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC1 *pResourceDescs,
            _In_opt_count_(numResourceDescs)  const UINT32 *pNumCastableFormats,
            _In_opt_count_(numResourceDescs)  const DXGI_FORMAT *const *ppCastableFormats,
            _Out_writes_opt_(numResourceDescs)  D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12Device13, OpenExistingHeapFromAddress1)
        HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress1 )( 
            ID3D12Device14 * This,
            _In_  const void *pAddress,
            SIZE_T size,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        DECLSPEC_XFGVIRT(ID3D12Device14, CreateRootSignatureFromSubobjectInLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignatureFromSubobjectInLibrary )( 
            ID3D12Device14 * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pLibraryBlob,
            _In_  SIZE_T blobLengthInBytes,
            _In_opt_  LPCWSTR subobjectName,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        END_INTERFACE
    } ID3D12Device14Vtbl;

    interface ID3D12Device14
    {
        CONST_VTBL struct ID3D12Device14Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Device14_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Device14_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Device14_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Device14_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12Device14_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12Device14_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12Device14_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12Device14_GetNodeCount(This)	\
    ( (This)->lpVtbl -> GetNodeCount(This) ) 

#define ID3D12Device14_CreateCommandQueue(This,pDesc,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) 

#define ID3D12Device14_CreateCommandAllocator(This,type,riid,ppCommandAllocator)	\
    ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) 

#define ID3D12Device14_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device14_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) 

#define ID3D12Device14_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) 

#define ID3D12Device14_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)	\
    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) 

#define ID3D12Device14_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) 

#define ID3D12Device14_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)	\
    ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) 

#define ID3D12Device14_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) 

#define ID3D12Device14_CreateConstantBufferView(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) 

#define ID3D12Device14_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device14_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) 

#define ID3D12Device14_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device14_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) 

#define ID3D12Device14_CreateSampler(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) 

#define ID3D12Device14_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) 

#define ID3D12Device14_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)	\
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 
#if !defined(_WIN32)

#define ID3D12Device14_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 
#else
#define ID3D12Device14_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) 
#endif
#if !defined(_WIN32)

#define ID3D12Device14_GetCustomHeapProperties(This,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) 
#else
#define ID3D12Device14_GetCustomHeapProperties(This,RetVal,nodeMask,heapType)	\
    ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) 
#endif

#define ID3D12Device14_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) 

#define ID3D12Device14_CreateHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device14_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device14_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device14_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)	\
    ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) 

#define ID3D12Device14_OpenSharedHandle(This,NTHandle,riid,ppvObj)	\
    ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) 

#define ID3D12Device14_OpenSharedHandleByName(This,Name,Access,pNTHandle)	\
    ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) 

#define ID3D12Device14_MakeResident(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) 

#define ID3D12Device14_Evict(This,NumObjects,ppObjects)	\
    ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) 

#define ID3D12Device14_CreateFence(This,InitialValue,Flags,riid,ppFence)	\
    ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) 

#define ID3D12Device14_GetDeviceRemovedReason(This)	\
    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) 

#define ID3D12Device14_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 

#define ID3D12Device14_CreateQueryHeap(This,pDesc,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) 

#define ID3D12Device14_SetStablePowerState(This,Enable)	\
    ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) 

#define ID3D12Device14_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature)	\
    ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) 

#define ID3D12Device14_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips)	\
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 
#if !defined(_WIN32)

#define ID3D12Device14_GetAdapterLuid(This)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 
#else
#define ID3D12Device14_GetAdapterLuid(This,RetVal)	\
    ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) 
#endif


#define ID3D12Device14_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary)	\
    ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) 

#define ID3D12Device14_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent)	\
    ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) 

#define ID3D12Device14_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities)	\
    ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) 


#define ID3D12Device14_CreatePipelineState(This,pDesc,riid,ppPipelineState)	\
    ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) 


#define ID3D12Device14_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) 

#define ID3D12Device14_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) 

#define ID3D12Device14_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal)	\
    ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) 


#define ID3D12Device14_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList)	\
    ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) 

#define ID3D12Device14_CreateProtectedResourceSession(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) 

#define ID3D12Device14_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device14_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap)	\
    ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) 

#define ID3D12Device14_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) 
#if !defined(_WIN32)

#define ID3D12Device14_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device14_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device14_CreateLifetimeTracker(This,pOwner,riid,ppvTracker)	\
    ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) 

#define ID3D12Device14_RemoveDevice(This)	\
    ( (This)->lpVtbl -> RemoveDevice(This) ) 

#define ID3D12Device14_EnumerateMetaCommands(This,pNumMetaCommands,pDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) 

#define ID3D12Device14_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs)	\
    ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) 

#define ID3D12Device14_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand)	\
    ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) 

#define ID3D12Device14_CreateStateObject(This,pDesc,riid,ppStateObject)	\
    ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) 

#define ID3D12Device14_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo)	\
    ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) 

#define ID3D12Device14_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck)	\
    ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) 


#define ID3D12Device14_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired)	\
    ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) 


#define ID3D12Device14_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject)	\
    ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) 

#define ID3D12Device14_CreateProtectedResourceSession1(This,pDesc,riid,ppSession)	\
    ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) 

#if !defined(_WIN32)

#define ID3D12Device14_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device14_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) 
#endif

#define ID3D12Device14_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) 

#define ID3D12Device14_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) 

#define ID3D12Device14_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) 

#define ID3D12Device14_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)	\
    ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) 


#define ID3D12Device14_CreateShaderCacheSession(This,pDesc,riid,ppvSession)	\
    ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) 

#define ID3D12Device14_ShaderCacheControl(This,Kinds,Control)	\
    ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) 

#define ID3D12Device14_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue)	\
    ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) 


#define ID3D12Device14_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource)	\
    ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) 

#define ID3D12Device14_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 

#define ID3D12Device14_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource)	\
    ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) 


#define ID3D12Device14_CreateSampler2(This,pDesc,DestDescriptor)	\
    ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) 

#if !defined(_WIN32)

#define ID3D12Device14_GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) 
#else
#define ID3D12Device14_GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1)	\
    ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) 
#endif


#define ID3D12Device14_OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap)	\
    ( (This)->lpVtbl -> OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) ) 


#define ID3D12Device14_CreateRootSignatureFromSubobjectInLibrary(This,nodeMask,pLibraryBlob,blobLengthInBytes,subobjectName,riid,ppvRootSignature)	\
    ( (This)->lpVtbl -> CreateRootSignatureFromSubobjectInLibrary(This,nodeMask,pLibraryBlob,blobLengthInBytes,subobjectName,riid,ppvRootSignature) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Device14_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0063 */
/* [local] */ 

typedef union D3D12_VERSION_NUMBER
    {
    UINT64 Version;
    UINT16 VersionParts[ 4 ];
    } 	D3D12_VERSION_NUMBER;

typedef struct D3D12_FEATURE_DATA_SHADERCACHE_ABI_SUPPORT
    {
    WCHAR szAdapterFamily[ 128 ];
    UINT64 MinimumABISupportVersion;
    UINT64 MaximumABISupportVersion;
    D3D12_VERSION_NUMBER CompilerVersion;
    D3D12_VERSION_NUMBER ApplicationProfileVersion;
    } 	D3D12_FEATURE_DATA_SHADERCACHE_ABI_SUPPORT;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0063_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0063_v0_0_s_ifspec;

#ifndef __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__
#define __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__

/* interface ID3D12VirtualizationGuestDevice */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12VirtualizationGuestDevice;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("bc66d368-7373-4943-8757-fc87dc79e476")
    ID3D12VirtualizationGuestDevice : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE ShareWithHost( 
            _In_  ID3D12DeviceChild *pObject,
            _Out_  HANDLE *pHandle) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateFenceFd( 
            _In_  ID3D12Fence *pFence,
            UINT64 FenceValue,
            _Out_  int *pFenceFd) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12VirtualizationGuestDeviceVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12VirtualizationGuestDevice * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12VirtualizationGuestDevice * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12VirtualizationGuestDevice * This);
        
        DECLSPEC_XFGVIRT(ID3D12VirtualizationGuestDevice, ShareWithHost)
        HRESULT ( STDMETHODCALLTYPE *ShareWithHost )( 
            ID3D12VirtualizationGuestDevice * This,
            _In_  ID3D12DeviceChild *pObject,
            _Out_  HANDLE *pHandle);
        
        DECLSPEC_XFGVIRT(ID3D12VirtualizationGuestDevice, CreateFenceFd)
        HRESULT ( STDMETHODCALLTYPE *CreateFenceFd )( 
            ID3D12VirtualizationGuestDevice * This,
            _In_  ID3D12Fence *pFence,
            UINT64 FenceValue,
            _Out_  int *pFenceFd);
        
        END_INTERFACE
    } ID3D12VirtualizationGuestDeviceVtbl;

    interface ID3D12VirtualizationGuestDevice
    {
        CONST_VTBL struct ID3D12VirtualizationGuestDeviceVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12VirtualizationGuestDevice_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12VirtualizationGuestDevice_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12VirtualizationGuestDevice_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12VirtualizationGuestDevice_ShareWithHost(This,pObject,pHandle)	\
    ( (This)->lpVtbl -> ShareWithHost(This,pObject,pHandle) ) 

#define ID3D12VirtualizationGuestDevice_CreateFenceFd(This,pFence,FenceValue,pFenceFd)	\
    ( (This)->lpVtbl -> CreateFenceFd(This,pFence,FenceValue,pFenceFd) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__ */


#ifndef __ID3D12Tools_INTERFACE_DEFINED__
#define __ID3D12Tools_INTERFACE_DEFINED__

/* interface ID3D12Tools */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Tools;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7071e1f0-e84b-4b33-974f-12fa49de65c5")
    ID3D12Tools : public IUnknown
    {
    public:
        virtual void STDMETHODCALLTYPE EnableShaderInstrumentation( 
            BOOL bEnable) = 0;
        
        virtual BOOL STDMETHODCALLTYPE ShaderInstrumentationEnabled( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12ToolsVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Tools * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Tools * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Tools * This);
        
        DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation)
        void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( 
            ID3D12Tools * This,
            BOOL bEnable);
        
        DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled)
        BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( 
            ID3D12Tools * This);
        
        END_INTERFACE
    } ID3D12ToolsVtbl;

    interface ID3D12Tools
    {
        CONST_VTBL struct ID3D12ToolsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Tools_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Tools_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Tools_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Tools_EnableShaderInstrumentation(This,bEnable)	\
    ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) 

#define ID3D12Tools_ShaderInstrumentationEnabled(This)	\
    ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Tools_INTERFACE_DEFINED__ */


#ifndef __ID3D12Tools1_INTERFACE_DEFINED__
#define __ID3D12Tools1_INTERFACE_DEFINED__

/* interface ID3D12Tools1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Tools1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("e4fbc019-dd3c-43e1-8f32-7f649575f0a0")
    ID3D12Tools1 : public ID3D12Tools
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE ReserveGPUVARangesAtCreate( 
            _In_reads_(uiNumRanges)  D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges,
            _In_  UINT uiNumRanges) = 0;
        
        virtual void STDMETHODCALLTYPE ClearReservedGPUVARangesList( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Tools1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Tools1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Tools1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Tools1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation)
        void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( 
            ID3D12Tools1 * This,
            BOOL bEnable);
        
        DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled)
        BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( 
            ID3D12Tools1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Tools1, ReserveGPUVARangesAtCreate)
        HRESULT ( STDMETHODCALLTYPE *ReserveGPUVARangesAtCreate )( 
            ID3D12Tools1 * This,
            _In_reads_(uiNumRanges)  D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges,
            _In_  UINT uiNumRanges);
        
        DECLSPEC_XFGVIRT(ID3D12Tools1, ClearReservedGPUVARangesList)
        void ( STDMETHODCALLTYPE *ClearReservedGPUVARangesList )( 
            ID3D12Tools1 * This);
        
        END_INTERFACE
    } ID3D12Tools1Vtbl;

    interface ID3D12Tools1
    {
        CONST_VTBL struct ID3D12Tools1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Tools1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Tools1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Tools1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Tools1_EnableShaderInstrumentation(This,bEnable)	\
    ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) 

#define ID3D12Tools1_ShaderInstrumentationEnabled(This)	\
    ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) 


#define ID3D12Tools1_ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges)	\
    ( (This)->lpVtbl -> ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) ) 

#define ID3D12Tools1_ClearReservedGPUVARangesList(This)	\
    ( (This)->lpVtbl -> ClearReservedGPUVARangesList(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Tools1_INTERFACE_DEFINED__ */


#ifndef __ID3D12Tools2_INTERFACE_DEFINED__
#define __ID3D12Tools2_INTERFACE_DEFINED__

/* interface ID3D12Tools2 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12Tools2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("01d393c5-c9b0-42a1-958c-c26b02d4d097")
    ID3D12Tools2 : public ID3D12Tools1
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetApplicationSpecificDriverState( 
            _In_  IUnknown *pAdapter,
            _In_opt_  ID3DBlob *pBlob) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12Tools2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Tools2 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Tools2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Tools2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation)
        void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( 
            ID3D12Tools2 * This,
            BOOL bEnable);
        
        DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled)
        BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( 
            ID3D12Tools2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Tools1, ReserveGPUVARangesAtCreate)
        HRESULT ( STDMETHODCALLTYPE *ReserveGPUVARangesAtCreate )( 
            ID3D12Tools2 * This,
            _In_reads_(uiNumRanges)  D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges,
            _In_  UINT uiNumRanges);
        
        DECLSPEC_XFGVIRT(ID3D12Tools1, ClearReservedGPUVARangesList)
        void ( STDMETHODCALLTYPE *ClearReservedGPUVARangesList )( 
            ID3D12Tools2 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Tools2, SetApplicationSpecificDriverState)
        HRESULT ( STDMETHODCALLTYPE *SetApplicationSpecificDriverState )( 
            ID3D12Tools2 * This,
            _In_  IUnknown *pAdapter,
            _In_opt_  ID3DBlob *pBlob);
        
        END_INTERFACE
    } ID3D12Tools2Vtbl;

    interface ID3D12Tools2
    {
        CONST_VTBL struct ID3D12Tools2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12Tools2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12Tools2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12Tools2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12Tools2_EnableShaderInstrumentation(This,bEnable)	\
    ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) 

#define ID3D12Tools2_ShaderInstrumentationEnabled(This)	\
    ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) 


#define ID3D12Tools2_ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges)	\
    ( (This)->lpVtbl -> ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) ) 

#define ID3D12Tools2_ClearReservedGPUVARangesList(This)	\
    ( (This)->lpVtbl -> ClearReservedGPUVARangesList(This) ) 


#define ID3D12Tools2_SetApplicationSpecificDriverState(This,pAdapter,pBlob)	\
    ( (This)->lpVtbl -> SetApplicationSpecificDriverState(This,pAdapter,pBlob) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12Tools2_INTERFACE_DEFINED__ */


#ifndef __ID3D12PageableTools_INTERFACE_DEFINED__
#define __ID3D12PageableTools_INTERFACE_DEFINED__

/* interface ID3D12PageableTools */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12PageableTools;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8f1359db-d8d1-42f9-b5cf-79f4cbad0d3d")
    ID3D12PageableTools : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetAllocation( 
            _Inout_  D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pAllocation) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12PageableToolsVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12PageableTools * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12PageableTools * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12PageableTools * This);
        
        DECLSPEC_XFGVIRT(ID3D12PageableTools, GetAllocation)
        HRESULT ( STDMETHODCALLTYPE *GetAllocation )( 
            ID3D12PageableTools * This,
            _Inout_  D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pAllocation);
        
        END_INTERFACE
    } ID3D12PageableToolsVtbl;

    interface ID3D12PageableTools
    {
        CONST_VTBL struct ID3D12PageableToolsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12PageableTools_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12PageableTools_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12PageableTools_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12PageableTools_GetAllocation(This,pAllocation)	\
    ( (This)->lpVtbl -> GetAllocation(This,pAllocation) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12PageableTools_INTERFACE_DEFINED__ */


#ifndef __ID3D12DeviceTools_INTERFACE_DEFINED__
#define __ID3D12DeviceTools_INTERFACE_DEFINED__

/* interface ID3D12DeviceTools */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceTools;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("2ea68e9c-19c3-4e47-a109-6cdadff0aca9")
    ID3D12DeviceTools : public IUnknown
    {
    public:
        virtual void STDMETHODCALLTYPE SetNextAllocationAddress( 
            _In_  D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceToolsVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceTools * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceTools * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceTools * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceTools, SetNextAllocationAddress)
        void ( STDMETHODCALLTYPE *SetNextAllocationAddress )( 
            ID3D12DeviceTools * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress);
        
        END_INTERFACE
    } ID3D12DeviceToolsVtbl;

    interface ID3D12DeviceTools
    {
        CONST_VTBL struct ID3D12DeviceToolsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceTools_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceTools_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceTools_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceTools_SetNextAllocationAddress(This,nextAllocationVirtualAddress)	\
    ( (This)->lpVtbl -> SetNextAllocationAddress(This,nextAllocationVirtualAddress) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceTools_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0069 */
/* [local] */ 

typedef 
enum D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS
    {
        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN	= 1,
        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED	= 2,
        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED	= 3,
        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED	= 4
    } 	D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0069_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0069_v0_0_s_ifspec;

#ifndef __ID3D12DeviceTools1_INTERFACE_DEFINED__
#define __ID3D12DeviceTools1_INTERFACE_DEFINED__

/* interface ID3D12DeviceTools1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceTools1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("e30e9fc7-e641-4d6e-8a81-9dd9206ec47a")
    ID3D12DeviceTools1 : public ID3D12DeviceTools
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetApplicationSpecificDriverState( 
            _COM_Outptr_  ID3DBlob **ppBlob) = 0;
        
        virtual D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS STDMETHODCALLTYPE GetApplicationSpecificDriverBlobStatus( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceTools1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceTools1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceTools1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceTools1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceTools, SetNextAllocationAddress)
        void ( STDMETHODCALLTYPE *SetNextAllocationAddress )( 
            ID3D12DeviceTools1 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverState)
        HRESULT ( STDMETHODCALLTYPE *GetApplicationSpecificDriverState )( 
            ID3D12DeviceTools1 * This,
            _COM_Outptr_  ID3DBlob **ppBlob);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverBlobStatus)
        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS ( STDMETHODCALLTYPE *GetApplicationSpecificDriverBlobStatus )( 
            ID3D12DeviceTools1 * This);
        
        END_INTERFACE
    } ID3D12DeviceTools1Vtbl;

    interface ID3D12DeviceTools1
    {
        CONST_VTBL struct ID3D12DeviceTools1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceTools1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceTools1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceTools1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceTools1_SetNextAllocationAddress(This,nextAllocationVirtualAddress)	\
    ( (This)->lpVtbl -> SetNextAllocationAddress(This,nextAllocationVirtualAddress) ) 


#define ID3D12DeviceTools1_GetApplicationSpecificDriverState(This,ppBlob)	\
    ( (This)->lpVtbl -> GetApplicationSpecificDriverState(This,ppBlob) ) 

#define ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(This)	\
    ( (This)->lpVtbl -> GetApplicationSpecificDriverBlobStatus(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceTools1_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0070 */
/* [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 );

// --------------------------------------------------------------------------------------------------------------------------------
// D3D12EnableExperimentalFeatures
//
// Pass in a list of feature GUIDs to be enabled together.
// 
// If a particular feature requires some configuration information on enablement, it will have
// a configuration struct that can be passed alongside the GUID.
// 
// Some features might use an interface IID as the GUID.  For these, once the feature is enabled via
// D3D12EnableExperimentalFeatures, D3D12GetDebugInterface can then be called with the IID to retrieve the interface
// for manipulating the feature.  This allows for control that might not cleanly be expressed by just 
// the configuration struct that D3D12EnableExperimentalFeatures provides.
//
// If this method is called and a change to existing feature enablement is made, 
// all current D3D12 devices are set to DEVICE_REMOVED state, since under the covers there is really only one
// singleton device for a process.  Removing the devices when configuration changes prevents
// mismatched expectations of how a device is supposed to work after it has been created from the app's point of view.
//
// The call returns E_NOINTERFACE if an unrecognized feature is passed in or Windows Developer mode is not on.
// The call returns E_INVALIDARG if the configuration of a feature is incorrect, the set of features passed
// in are known to be incompatible with each other, or other errors.
// Returns S_OK otherwise.
//
// --------------------------------------------------------------------------------------------------------------------------------
HRESULT WINAPI D3D12EnableExperimentalFeatures(
    UINT                                    NumFeatures,
    _In_count_(NumFeatures) const IID*     pIIDs,
    _In_opt_count_(NumFeatures) void*      pConfigurationStructs,
    _In_opt_count_(NumFeatures) UINT*      pConfigurationStructSizes);

// --------------------------------------------------------------------------------------------------------------------------------
// Experimental Feature: D3D12ExperimentalShaderModels
//
// Use with D3D12EnableExperimentalFeatures to enable experimental shader model support,
// meaning shader models that haven't been finalized for use in retail.
//
// Enabling D3D12ExperimentalShaderModels needs no configuration struct, pass NULL in the pConfigurationStructs array.
//
// --------------------------------------------------------------------------------------------------------------------------------
static const UUID D3D12ExperimentalShaderModels = { /* 76f5573e-f13a-40f5-b297-81ce9e18933f */
    0x76f5573e,
    0xf13a,
    0x40f5,
    { 0xb2, 0x97, 0x81, 0xce, 0x9e, 0x18, 0x93, 0x3f }
};
// --------------------------------------------------------------------------------------------------------------------------------
// Experimental Feature: D3D12TiledResourceTier4
//
// Use with D3D12EnableExperimentalFeatures to enable tiled resource tier 4 support,
// meaning texture tile data-inheritance is allowed.
//
// Enabling D3D12TiledResourceTier4 needs no configuration struct, pass NULL in the pConfigurationStructs array.
//
// --------------------------------------------------------------------------------------------------------------------------------
static const UUID D3D12TiledResourceTier4 = { /* c9c4725f-a81a-4f56-8c5b-c51039d694fb */
    0xc9c4725f,
    0xa81a,
    0x4f56,
    { 0x8c, 0x5b, 0xc5, 0x10, 0x39, 0xd6, 0x94, 0xfb }
};
// --------------------------------------------------------------------------------------------------------------------------------
// Experimental Feature: D3D12GPUUploadHeapsOnUnsupportedOS
//
// Use with D3D12EnableExperimentalFeatures to enable GPU upload heaps support on an unsupported OS, 
// driver support is still required for this feature.
//
// Enabling D3D12GPUUploadHeapsOnUnsupportedOS needs no configuration struct, pass NULL in the pConfigurationStructs array.
//
// --------------------------------------------------------------------------------------------------------------------------------
static const UUID D3D12GPUUploadHeapsOnUnsupportedOS = { /* 45dc51f3-767f-4588-b206-0baa2b16fbae */
    0x45dc51f3,
    0x767f,
    0x4588,
    { 0xb2, 0x06, 0x0b, 0xaa, 0x2b, 0x16, 0xfb, 0xae }
};
// --------------------------------------------------------------------------------------------------------------------------------
// D3D12GetInterface
//
// Retrieve Global D3D12 Interface.
//

DEFINE_GUID(CLSID_D3D12Debug,                        0xf2352aeb, 0xdd84, 0x49fe, 0xb9, 0x7b, 0xa9, 0xdc, 0xfd, 0xcc, 0x1b, 0x4f);
DEFINE_GUID(CLSID_D3D12Tools,                        0xe38216b1, 0x3c8c, 0x4833, 0xaa, 0x09, 0x0a, 0x06, 0xb6, 0x5d, 0x96, 0xc8);
DEFINE_GUID(CLSID_D3D12DeviceRemovedExtendedData,    0x4a75bbc4, 0x9ff4, 0x4ad8, 0x9f, 0x18, 0xab, 0xae, 0x84, 0xdc, 0x5f, 0xf2);
DEFINE_GUID(CLSID_D3D12SDKConfiguration,             0x7cda6aca, 0xa03e, 0x49c8, 0x94, 0x58, 0x03, 0x34, 0xd2, 0x0e, 0x07, 0xce);
DEFINE_GUID(CLSID_D3D12DeviceFactory,                0x114863bf, 0xc386, 0x4aee, 0xb3, 0x9d, 0x8f, 0x0b, 0xbb, 0x06, 0x29, 0x55);
DEFINE_GUID(CLSID_D3D12DSRDeviceFactory,             0xbb6dd27e, 0x94a9, 0x41a6, 0x9f, 0x1b, 0x13, 0x37, 0x72, 0x17, 0x24, 0x28);

typedef HRESULT (WINAPI* PFN_D3D12_GET_INTERFACE)( _In_ REFCLSID, _In_ REFIID, _COM_Outptr_opt_ void** );

HRESULT WINAPI D3D12GetInterface( _In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug );



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_s_ifspec;

#ifndef __ID3D12SDKConfiguration_INTERFACE_DEFINED__
#define __ID3D12SDKConfiguration_INTERFACE_DEFINED__

/* interface ID3D12SDKConfiguration */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12SDKConfiguration;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("e9eb5314-33aa-42b2-a718-d77f58b1f1c7")
    ID3D12SDKConfiguration : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetSDKVersion( 
            UINT SDKVersion,
            _In_z_  LPCSTR SDKPath) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12SDKConfigurationVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12SDKConfiguration * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12SDKConfiguration * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12SDKConfiguration * This);
        
        DECLSPEC_XFGVIRT(ID3D12SDKConfiguration, SetSDKVersion)
        HRESULT ( STDMETHODCALLTYPE *SetSDKVersion )( 
            ID3D12SDKConfiguration * This,
            UINT SDKVersion,
            _In_z_  LPCSTR SDKPath);
        
        END_INTERFACE
    } ID3D12SDKConfigurationVtbl;

    interface ID3D12SDKConfiguration
    {
        CONST_VTBL struct ID3D12SDKConfigurationVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12SDKConfiguration_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12SDKConfiguration_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12SDKConfiguration_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12SDKConfiguration_SetSDKVersion(This,SDKVersion,SDKPath)	\
    ( (This)->lpVtbl -> SetSDKVersion(This,SDKVersion,SDKPath) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12SDKConfiguration_INTERFACE_DEFINED__ */


#ifndef __ID3D12SDKConfiguration1_INTERFACE_DEFINED__
#define __ID3D12SDKConfiguration1_INTERFACE_DEFINED__

/* interface ID3D12SDKConfiguration1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12SDKConfiguration1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8aaf9303-ad25-48b9-9a57-d9c37e009d9f")
    ID3D12SDKConfiguration1 : public ID3D12SDKConfiguration
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateDeviceFactory( 
            UINT SDKVersion,
            _In_  LPCSTR SDKPath,
            REFIID riid,
            _COM_Outptr_  void **ppvFactory) = 0;
        
        virtual void STDMETHODCALLTYPE FreeUnusedSDKs( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12SDKConfiguration1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12SDKConfiguration1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12SDKConfiguration1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12SDKConfiguration1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12SDKConfiguration, SetSDKVersion)
        HRESULT ( STDMETHODCALLTYPE *SetSDKVersion )( 
            ID3D12SDKConfiguration1 * This,
            UINT SDKVersion,
            _In_z_  LPCSTR SDKPath);
        
        DECLSPEC_XFGVIRT(ID3D12SDKConfiguration1, CreateDeviceFactory)
        HRESULT ( STDMETHODCALLTYPE *CreateDeviceFactory )( 
            ID3D12SDKConfiguration1 * This,
            UINT SDKVersion,
            _In_  LPCSTR SDKPath,
            REFIID riid,
            _COM_Outptr_  void **ppvFactory);
        
        DECLSPEC_XFGVIRT(ID3D12SDKConfiguration1, FreeUnusedSDKs)
        void ( STDMETHODCALLTYPE *FreeUnusedSDKs )( 
            ID3D12SDKConfiguration1 * This);
        
        END_INTERFACE
    } ID3D12SDKConfiguration1Vtbl;

    interface ID3D12SDKConfiguration1
    {
        CONST_VTBL struct ID3D12SDKConfiguration1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12SDKConfiguration1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12SDKConfiguration1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12SDKConfiguration1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12SDKConfiguration1_SetSDKVersion(This,SDKVersion,SDKPath)	\
    ( (This)->lpVtbl -> SetSDKVersion(This,SDKVersion,SDKPath) ) 


#define ID3D12SDKConfiguration1_CreateDeviceFactory(This,SDKVersion,SDKPath,riid,ppvFactory)	\
    ( (This)->lpVtbl -> CreateDeviceFactory(This,SDKVersion,SDKPath,riid,ppvFactory) ) 

#define ID3D12SDKConfiguration1_FreeUnusedSDKs(This)	\
    ( (This)->lpVtbl -> FreeUnusedSDKs(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12SDKConfiguration1_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0072 */
/* [local] */ 

typedef 
enum D3D12_DEVICE_FACTORY_FLAGS
    {
        D3D12_DEVICE_FACTORY_FLAG_NONE	= 0,
        D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_EXISTING_DEVICE	= 0x1,
        D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_INCOMPATIBLE_EXISTING_DEVICE	= 0x2,
        D3D12_DEVICE_FACTORY_FLAG_DISALLOW_STORING_NEW_DEVICE_AS_SINGLETON	= 0x4
    } 	D3D12_DEVICE_FACTORY_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS )


extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0072_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0072_v0_0_s_ifspec;

#ifndef __ID3D12DeviceFactory_INTERFACE_DEFINED__
#define __ID3D12DeviceFactory_INTERFACE_DEFINED__

/* interface ID3D12DeviceFactory */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceFactory;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("61f307d3-d34e-4e7c-8374-3ba4de23cccb")
    ID3D12DeviceFactory : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE InitializeFromGlobalState( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ApplyToGlobalState( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetFlags( 
            D3D12_DEVICE_FACTORY_FLAGS flags) = 0;
        
        virtual D3D12_DEVICE_FACTORY_FLAGS STDMETHODCALLTYPE GetFlags( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetConfigurationInterface( 
            REFCLSID clsid,
            REFIID iid,
            _COM_Outptr_  void **ppv) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EnableExperimentalFeatures( 
            UINT NumFeatures,
            _In_reads_(NumFeatures)  const IID *pIIDs,
            _In_reads_opt_(NumFeatures)  void *pConfigurationStructs,
            _In_reads_opt_(NumFeatures)  UINT *pConfigurationStructSizes) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateDevice( 
            _In_opt_  IUnknown *adapter,
            D3D_FEATURE_LEVEL FeatureLevel,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceFactoryVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceFactory * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceFactory * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceFactory * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceFactory, InitializeFromGlobalState)
        HRESULT ( STDMETHODCALLTYPE *InitializeFromGlobalState )( 
            ID3D12DeviceFactory * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceFactory, ApplyToGlobalState)
        HRESULT ( STDMETHODCALLTYPE *ApplyToGlobalState )( 
            ID3D12DeviceFactory * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceFactory, SetFlags)
        HRESULT ( STDMETHODCALLTYPE *SetFlags )( 
            ID3D12DeviceFactory * This,
            D3D12_DEVICE_FACTORY_FLAGS flags);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceFactory, GetFlags)
        D3D12_DEVICE_FACTORY_FLAGS ( STDMETHODCALLTYPE *GetFlags )( 
            ID3D12DeviceFactory * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceFactory, GetConfigurationInterface)
        HRESULT ( STDMETHODCALLTYPE *GetConfigurationInterface )( 
            ID3D12DeviceFactory * This,
            REFCLSID clsid,
            REFIID iid,
            _COM_Outptr_  void **ppv);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceFactory, EnableExperimentalFeatures)
        HRESULT ( STDMETHODCALLTYPE *EnableExperimentalFeatures )( 
            ID3D12DeviceFactory * This,
            UINT NumFeatures,
            _In_reads_(NumFeatures)  const IID *pIIDs,
            _In_reads_opt_(NumFeatures)  void *pConfigurationStructs,
            _In_reads_opt_(NumFeatures)  UINT *pConfigurationStructSizes);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceFactory, CreateDevice)
        HRESULT ( STDMETHODCALLTYPE *CreateDevice )( 
            ID3D12DeviceFactory * This,
            _In_opt_  IUnknown *adapter,
            D3D_FEATURE_LEVEL FeatureLevel,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        END_INTERFACE
    } ID3D12DeviceFactoryVtbl;

    interface ID3D12DeviceFactory
    {
        CONST_VTBL struct ID3D12DeviceFactoryVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceFactory_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceFactory_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceFactory_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DeviceFactory_InitializeFromGlobalState(This)	\
    ( (This)->lpVtbl -> InitializeFromGlobalState(This) ) 

#define ID3D12DeviceFactory_ApplyToGlobalState(This)	\
    ( (This)->lpVtbl -> ApplyToGlobalState(This) ) 

#define ID3D12DeviceFactory_SetFlags(This,flags)	\
    ( (This)->lpVtbl -> SetFlags(This,flags) ) 

#define ID3D12DeviceFactory_GetFlags(This)	\
    ( (This)->lpVtbl -> GetFlags(This) ) 

#define ID3D12DeviceFactory_GetConfigurationInterface(This,clsid,iid,ppv)	\
    ( (This)->lpVtbl -> GetConfigurationInterface(This,clsid,iid,ppv) ) 

#define ID3D12DeviceFactory_EnableExperimentalFeatures(This,NumFeatures,pIIDs,pConfigurationStructs,pConfigurationStructSizes)	\
    ( (This)->lpVtbl -> EnableExperimentalFeatures(This,NumFeatures,pIIDs,pConfigurationStructs,pConfigurationStructSizes) ) 

#define ID3D12DeviceFactory_CreateDevice(This,adapter,FeatureLevel,riid,ppvDevice)	\
    ( (This)->lpVtbl -> CreateDevice(This,adapter,FeatureLevel,riid,ppvDevice) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceFactory_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0073 */
/* [local] */ 

typedef 
enum D3D12_DEVICE_FLAGS
    {
        D3D12_DEVICE_FLAG_NONE	= 0,
        D3D12_DEVICE_FLAG_DEBUG_LAYER_ENABLED	= 0x1,
        D3D12_DEVICE_FLAG_GPU_BASED_VALIDATION_ENABLED	= 0x2,
        D3D12_DEVICE_FLAG_SYNCHRONIZED_COMMAND_QUEUE_VALIDATION_DISABLED	= 0x4,
        D3D12_DEVICE_FLAG_DRED_AUTO_BREADCRUMBS_ENABLED	= 0x8,
        D3D12_DEVICE_FLAG_DRED_PAGE_FAULT_REPORTING_ENABLED	= 0x10,
        D3D12_DEVICE_FLAG_DRED_WATSON_REPORTING_ENABLED	= 0x20,
        D3D12_DEVICE_FLAG_DRED_BREADCRUMB_CONTEXT_ENABLED	= 0x40,
        D3D12_DEVICE_FLAG_DRED_USE_MARKERS_ONLY_BREADCRUMBS	= 0x80,
        D3D12_DEVICE_FLAG_SHADER_INSTRUMENTATION_ENABLED	= 0x100,
        D3D12_DEVICE_FLAG_AUTO_DEBUG_NAME_ENABLED	= 0x200,
        D3D12_DEVICE_FLAG_FORCE_LEGACY_STATE_VALIDATION	= 0x400
    } 	D3D12_DEVICE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FLAGS )
typedef struct D3D12_DEVICE_CONFIGURATION_DESC
    {
    D3D12_DEVICE_FLAGS Flags;
    UINT GpuBasedValidationFlags;
    UINT SDKVersion;
    UINT NumEnabledExperimentalFeatures;
    } 	D3D12_DEVICE_CONFIGURATION_DESC;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_s_ifspec;

#ifndef __ID3D12DeviceConfiguration_INTERFACE_DEFINED__
#define __ID3D12DeviceConfiguration_INTERFACE_DEFINED__

/* interface ID3D12DeviceConfiguration */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceConfiguration;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("78dbf87b-f766-422b-a61c-c8c446bdb9ad")
    ID3D12DeviceConfiguration : public IUnknown
    {
    public:
#if defined(_MSC_VER) || !defined(_WIN32)
        virtual D3D12_DEVICE_CONFIGURATION_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
#else
        virtual D3D12_DEVICE_CONFIGURATION_DESC *STDMETHODCALLTYPE GetDesc( 
            D3D12_DEVICE_CONFIGURATION_DESC * RetVal) = 0;
#endif
        
        virtual HRESULT STDMETHODCALLTYPE GetEnabledExperimentalFeatures( 
            _Out_writes_(NumGuids)  GUID *pGuids,
            UINT NumGuids) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SerializeVersionedRootSignature( 
            _In_  const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc,
            _COM_Outptr_  ID3DBlob **ppResult,
            _Always_(_Outptr_opt_result_maybenull_)  ID3DBlob **ppError) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateVersionedRootSignatureDeserializer( 
            _In_reads_bytes_(Size)  const void *pBlob,
            SIZE_T Size,
            REFIID riid,
            _COM_Outptr_  void **ppvDeserializer) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceConfigurationVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceConfiguration * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceConfiguration * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceConfiguration * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetDesc)
#if !defined(_WIN32)
        D3D12_DEVICE_CONFIGURATION_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12DeviceConfiguration * This);
        
#else
        D3D12_DEVICE_CONFIGURATION_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12DeviceConfiguration * This,
            D3D12_DEVICE_CONFIGURATION_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetEnabledExperimentalFeatures)
        HRESULT ( STDMETHODCALLTYPE *GetEnabledExperimentalFeatures )( 
            ID3D12DeviceConfiguration * This,
            _Out_writes_(NumGuids)  GUID *pGuids,
            UINT NumGuids);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, SerializeVersionedRootSignature)
        HRESULT ( STDMETHODCALLTYPE *SerializeVersionedRootSignature )( 
            ID3D12DeviceConfiguration * This,
            _In_  const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc,
            _COM_Outptr_  ID3DBlob **ppResult,
            _Always_(_Outptr_opt_result_maybenull_)  ID3DBlob **ppError);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, CreateVersionedRootSignatureDeserializer)
        HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializer )( 
            ID3D12DeviceConfiguration * This,
            _In_reads_bytes_(Size)  const void *pBlob,
            SIZE_T Size,
            REFIID riid,
            _COM_Outptr_  void **ppvDeserializer);
        
        END_INTERFACE
    } ID3D12DeviceConfigurationVtbl;

    interface ID3D12DeviceConfiguration
    {
        CONST_VTBL struct ID3D12DeviceConfigurationVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceConfiguration_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceConfiguration_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceConfiguration_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 

#if !defined(_WIN32)

#define ID3D12DeviceConfiguration_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12DeviceConfiguration_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#define ID3D12DeviceConfiguration_GetEnabledExperimentalFeatures(This,pGuids,NumGuids)	\
    ( (This)->lpVtbl -> GetEnabledExperimentalFeatures(This,pGuids,NumGuids) ) 

#define ID3D12DeviceConfiguration_SerializeVersionedRootSignature(This,pDesc,ppResult,ppError)	\
    ( (This)->lpVtbl -> SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) ) 

#define ID3D12DeviceConfiguration_CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer)	\
    ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ */


#ifndef __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__
#define __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__

/* interface ID3D12DeviceConfiguration1 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DeviceConfiguration1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("ed342442-6343-4e16-bb82-a3a577874e56")
    ID3D12DeviceConfiguration1 : public ID3D12DeviceConfiguration
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary( 
            _In_reads_bytes_(Size)  const void *pLibraryBlob,
            SIZE_T Size,
            LPCWSTR RootSignatureSubobjectName,
            REFIID riid,
            _COM_Outptr_  void **ppvDeserializer) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DeviceConfiguration1Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DeviceConfiguration1 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DeviceConfiguration1 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DeviceConfiguration1 * This);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetDesc)
#if !defined(_WIN32)
        D3D12_DEVICE_CONFIGURATION_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12DeviceConfiguration1 * This);
        
#else
        D3D12_DEVICE_CONFIGURATION_DESC *( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12DeviceConfiguration1 * This,
            D3D12_DEVICE_CONFIGURATION_DESC * RetVal);
        
#endif
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetEnabledExperimentalFeatures)
        HRESULT ( STDMETHODCALLTYPE *GetEnabledExperimentalFeatures )( 
            ID3D12DeviceConfiguration1 * This,
            _Out_writes_(NumGuids)  GUID *pGuids,
            UINT NumGuids);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, SerializeVersionedRootSignature)
        HRESULT ( STDMETHODCALLTYPE *SerializeVersionedRootSignature )( 
            ID3D12DeviceConfiguration1 * This,
            _In_  const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc,
            _COM_Outptr_  ID3DBlob **ppResult,
            _Always_(_Outptr_opt_result_maybenull_)  ID3DBlob **ppError);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, CreateVersionedRootSignatureDeserializer)
        HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializer )( 
            ID3D12DeviceConfiguration1 * This,
            _In_reads_bytes_(Size)  const void *pBlob,
            SIZE_T Size,
            REFIID riid,
            _COM_Outptr_  void **ppvDeserializer);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration1, CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary)
        HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary )( 
            ID3D12DeviceConfiguration1 * This,
            _In_reads_bytes_(Size)  const void *pLibraryBlob,
            SIZE_T Size,
            LPCWSTR RootSignatureSubobjectName,
            REFIID riid,
            _COM_Outptr_  void **ppvDeserializer);
        
        END_INTERFACE
    } ID3D12DeviceConfiguration1Vtbl;

    interface ID3D12DeviceConfiguration1
    {
        CONST_VTBL struct ID3D12DeviceConfiguration1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DeviceConfiguration1_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DeviceConfiguration1_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DeviceConfiguration1_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 

#if !defined(_WIN32)

#define ID3D12DeviceConfiguration1_GetDesc(This)	\
    ( (This)->lpVtbl -> GetDesc(This) ) 
#else
#define ID3D12DeviceConfiguration1_GetDesc(This,RetVal)	\
    ( (This)->lpVtbl -> GetDesc(This,RetVal) ) 
#endif

#define ID3D12DeviceConfiguration1_GetEnabledExperimentalFeatures(This,pGuids,NumGuids)	\
    ( (This)->lpVtbl -> GetEnabledExperimentalFeatures(This,pGuids,NumGuids) ) 

#define ID3D12DeviceConfiguration1_SerializeVersionedRootSignature(This,pDesc,ppResult,ppError)	\
    ( (This)->lpVtbl -> SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) ) 

#define ID3D12DeviceConfiguration1_CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer)	\
    ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) ) 


#define ID3D12DeviceConfiguration1_CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(This,pLibraryBlob,Size,RootSignatureSubobjectName,riid,ppvDeserializer)	\
    ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(This,pLibraryBlob,Size,RootSignatureSubobjectName,riid,ppvDeserializer) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0075 */
/* [local] */ 

typedef 
enum D3D12_AXIS_SHADING_RATE
    {
        D3D12_AXIS_SHADING_RATE_1X	= 0,
        D3D12_AXIS_SHADING_RATE_2X	= 0x1,
        D3D12_AXIS_SHADING_RATE_4X	= 0x2
    } 	D3D12_AXIS_SHADING_RATE;

#define D3D12_SHADING_RATE_X_AXIS_SHIFT 2
#define D3D12_SHADING_RATE_VALID_MASK 3
#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << D3D12_SHADING_RATE_X_AXIS_SHIFT | (y))
#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) (((x) >> D3D12_SHADING_RATE_X_AXIS_SHIFT) & D3D12_SHADING_RATE_VALID_MASK)
#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & D3D12_SHADING_RATE_VALID_MASK)
typedef 
enum D3D12_SHADING_RATE
    {
        D3D12_SHADING_RATE_1X1	= 0,
        D3D12_SHADING_RATE_1X2	= 0x1,
        D3D12_SHADING_RATE_2X1	= 0x4,
        D3D12_SHADING_RATE_2X2	= 0x5,
        D3D12_SHADING_RATE_2X4	= 0x6,
        D3D12_SHADING_RATE_4X2	= 0x9,
        D3D12_SHADING_RATE_4X4	= 0xa
    } 	D3D12_SHADING_RATE;

typedef 
enum D3D12_SHADING_RATE_COMBINER
    {
        D3D12_SHADING_RATE_COMBINER_PASSTHROUGH	= 0,
        D3D12_SHADING_RATE_COMBINER_OVERRIDE	= 1,
        D3D12_SHADING_RATE_COMBINER_MIN	= 2,
        D3D12_SHADING_RATE_COMBINER_MAX	= 3,
        D3D12_SHADING_RATE_COMBINER_SUM	= 4
    } 	D3D12_SHADING_RATE_COMBINER;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0075_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0075_v0_0_s_ifspec;

#ifndef __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList5 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList5;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("55050859-4024-474c-87f5-6472eaee44ea")
    ID3D12GraphicsCommandList5 : public ID3D12GraphicsCommandList4
    {
    public:
        virtual void STDMETHODCALLTYPE RSSetShadingRate( 
            _In_  D3D12_SHADING_RATE baseShadingRate,
            _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)  const D3D12_SHADING_RATE_COMBINER *combiners) = 0;
        
        virtual void STDMETHODCALLTYPE RSSetShadingRateImage( 
            _In_opt_  ID3D12Resource *shadingRateImage) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList5Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList5 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList5 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList5 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList5 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList5 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList5 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList5 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList5 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList5 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList5 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList5 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList5 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList5 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList5 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList5 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList5 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList5 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass)
        void ( STDMETHODCALLTYPE *BeginRenderPass )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass)
        void ( STDMETHODCALLTYPE *EndRenderPass )( 
            ID3D12GraphicsCommandList5 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand)
        void ( STDMETHODCALLTYPE *InitializeMetaCommand )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand)
        void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo)
        void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1)
        void ( STDMETHODCALLTYPE *SetPipelineState1 )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  ID3D12StateObject *pStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays)
        void ( STDMETHODCALLTYPE *DispatchRays )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate)
        void ( STDMETHODCALLTYPE *RSSetShadingRate )( 
            ID3D12GraphicsCommandList5 * This,
            _In_  D3D12_SHADING_RATE baseShadingRate,
            _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)  const D3D12_SHADING_RATE_COMBINER *combiners);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage)
        void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( 
            ID3D12GraphicsCommandList5 * This,
            _In_opt_  ID3D12Resource *shadingRateImage);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList5Vtbl;

    interface ID3D12GraphicsCommandList5
    {
        CONST_VTBL struct ID3D12GraphicsCommandList5Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList5_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList5_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList5_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList5_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList5_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList5_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList5_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList5_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList5_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList5_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList5_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList5_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList5_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList5_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList5_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList5_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList5_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList5_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList5_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList5_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList5_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList5_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList5_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList5_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList5_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList5_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList5_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList5_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList5_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList5_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList5_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList5_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList5_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList5_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList5_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList5_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList5_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList5_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList5_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList5_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList5_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList5_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList5_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList5_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList5_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList5_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList5_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList5_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList5_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList5_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList5_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList5_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList5_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList5_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList5_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList5_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList5_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList5_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList5_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList5_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList5_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList5_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList5_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList5_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList5_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList5_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList5_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList5_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 


#define ID3D12GraphicsCommandList5_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags)	\
    ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) 

#define ID3D12GraphicsCommandList5_EndRenderPass(This)	\
    ( (This)->lpVtbl -> EndRenderPass(This) ) 

#define ID3D12GraphicsCommandList5_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList5_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList5_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs)	\
    ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) 

#define ID3D12GraphicsCommandList5_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData)	\
    ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) 

#define ID3D12GraphicsCommandList5_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode)	\
    ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) 

#define ID3D12GraphicsCommandList5_SetPipelineState1(This,pStateObject)	\
    ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) 

#define ID3D12GraphicsCommandList5_DispatchRays(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) 


#define ID3D12GraphicsCommandList5_RSSetShadingRate(This,baseShadingRate,combiners)	\
    ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) 

#define ID3D12GraphicsCommandList5_RSSetShadingRateImage(This,shadingRateImage)	\
    ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0076 */
/* [local] */ 

typedef struct D3D12_DISPATCH_MESH_ARGUMENTS
    {
    UINT ThreadGroupCountX;
    UINT ThreadGroupCountY;
    UINT ThreadGroupCountZ;
    } 	D3D12_DISPATCH_MESH_ARGUMENTS;



extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0076_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0076_v0_0_s_ifspec;

#ifndef __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList6 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList6;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("c3827890-e548-4cfa-96cf-5689a9370f80")
    ID3D12GraphicsCommandList6 : public ID3D12GraphicsCommandList5
    {
    public:
        virtual void STDMETHODCALLTYPE DispatchMesh( 
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList6Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList6 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList6 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList6 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList6 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList6 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList6 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList6 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList6 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList6 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList6 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList6 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList6 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList6 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList6 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList6 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList6 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList6 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass)
        void ( STDMETHODCALLTYPE *BeginRenderPass )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass)
        void ( STDMETHODCALLTYPE *EndRenderPass )( 
            ID3D12GraphicsCommandList6 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand)
        void ( STDMETHODCALLTYPE *InitializeMetaCommand )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand)
        void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo)
        void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1)
        void ( STDMETHODCALLTYPE *SetPipelineState1 )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  ID3D12StateObject *pStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays)
        void ( STDMETHODCALLTYPE *DispatchRays )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate)
        void ( STDMETHODCALLTYPE *RSSetShadingRate )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  D3D12_SHADING_RATE baseShadingRate,
            _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)  const D3D12_SHADING_RATE_COMBINER *combiners);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage)
        void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( 
            ID3D12GraphicsCommandList6 * This,
            _In_opt_  ID3D12Resource *shadingRateImage);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh)
        void ( STDMETHODCALLTYPE *DispatchMesh )( 
            ID3D12GraphicsCommandList6 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList6Vtbl;

    interface ID3D12GraphicsCommandList6
    {
        CONST_VTBL struct ID3D12GraphicsCommandList6Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList6_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList6_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList6_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList6_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList6_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList6_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList6_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList6_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList6_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList6_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList6_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList6_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList6_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList6_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList6_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList6_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList6_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList6_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList6_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList6_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList6_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList6_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList6_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList6_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList6_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList6_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList6_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList6_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList6_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList6_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList6_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList6_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList6_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList6_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList6_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList6_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList6_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList6_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList6_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList6_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList6_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList6_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList6_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList6_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList6_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList6_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList6_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList6_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList6_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList6_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList6_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList6_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList6_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList6_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList6_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList6_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList6_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList6_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList6_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList6_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList6_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList6_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList6_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList6_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList6_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList6_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList6_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList6_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 


#define ID3D12GraphicsCommandList6_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags)	\
    ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) 

#define ID3D12GraphicsCommandList6_EndRenderPass(This)	\
    ( (This)->lpVtbl -> EndRenderPass(This) ) 

#define ID3D12GraphicsCommandList6_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList6_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList6_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs)	\
    ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) 

#define ID3D12GraphicsCommandList6_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData)	\
    ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) 

#define ID3D12GraphicsCommandList6_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode)	\
    ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) 

#define ID3D12GraphicsCommandList6_SetPipelineState1(This,pStateObject)	\
    ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) 

#define ID3D12GraphicsCommandList6_DispatchRays(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) 


#define ID3D12GraphicsCommandList6_RSSetShadingRate(This,baseShadingRate,combiners)	\
    ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) 

#define ID3D12GraphicsCommandList6_RSSetShadingRateImage(This,shadingRateImage)	\
    ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) 


#define ID3D12GraphicsCommandList6_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList7_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList7_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList7 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList7;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("dd171223-8b61-4769-90e3-160ccde4e2c1")
    ID3D12GraphicsCommandList7 : public ID3D12GraphicsCommandList6
    {
    public:
        virtual void STDMETHODCALLTYPE Barrier( 
            UINT32 NumBarrierGroups,
            _In_reads_(NumBarrierGroups)  const D3D12_BARRIER_GROUP *pBarrierGroups) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList7Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList7 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList7 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList7 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList7 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList7 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList7 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList7 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList7 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList7 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList7 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList7 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList7 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList7 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList7 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList7 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList7 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList7 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass)
        void ( STDMETHODCALLTYPE *BeginRenderPass )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass)
        void ( STDMETHODCALLTYPE *EndRenderPass )( 
            ID3D12GraphicsCommandList7 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand)
        void ( STDMETHODCALLTYPE *InitializeMetaCommand )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand)
        void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo)
        void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1)
        void ( STDMETHODCALLTYPE *SetPipelineState1 )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  ID3D12StateObject *pStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays)
        void ( STDMETHODCALLTYPE *DispatchRays )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate)
        void ( STDMETHODCALLTYPE *RSSetShadingRate )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  D3D12_SHADING_RATE baseShadingRate,
            _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)  const D3D12_SHADING_RATE_COMBINER *combiners);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage)
        void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( 
            ID3D12GraphicsCommandList7 * This,
            _In_opt_  ID3D12Resource *shadingRateImage);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh)
        void ( STDMETHODCALLTYPE *DispatchMesh )( 
            ID3D12GraphicsCommandList7 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier)
        void ( STDMETHODCALLTYPE *Barrier )( 
            ID3D12GraphicsCommandList7 * This,
            UINT32 NumBarrierGroups,
            _In_reads_(NumBarrierGroups)  const D3D12_BARRIER_GROUP *pBarrierGroups);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList7Vtbl;

    interface ID3D12GraphicsCommandList7
    {
        CONST_VTBL struct ID3D12GraphicsCommandList7Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList7_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList7_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList7_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList7_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList7_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList7_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList7_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList7_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList7_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList7_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList7_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList7_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList7_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList7_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList7_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList7_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList7_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList7_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList7_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList7_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList7_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList7_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList7_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList7_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList7_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList7_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList7_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList7_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList7_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList7_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList7_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList7_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList7_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList7_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList7_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList7_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList7_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList7_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList7_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList7_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList7_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList7_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList7_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList7_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList7_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList7_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList7_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList7_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList7_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList7_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList7_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList7_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList7_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList7_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList7_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList7_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList7_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList7_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList7_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList7_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList7_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList7_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList7_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList7_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList7_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList7_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList7_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList7_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 


#define ID3D12GraphicsCommandList7_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags)	\
    ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) 

#define ID3D12GraphicsCommandList7_EndRenderPass(This)	\
    ( (This)->lpVtbl -> EndRenderPass(This) ) 

#define ID3D12GraphicsCommandList7_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList7_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList7_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs)	\
    ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) 

#define ID3D12GraphicsCommandList7_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData)	\
    ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) 

#define ID3D12GraphicsCommandList7_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode)	\
    ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) 

#define ID3D12GraphicsCommandList7_SetPipelineState1(This,pStateObject)	\
    ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) 

#define ID3D12GraphicsCommandList7_DispatchRays(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) 


#define ID3D12GraphicsCommandList7_RSSetShadingRate(This,baseShadingRate,combiners)	\
    ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) 

#define ID3D12GraphicsCommandList7_RSSetShadingRateImage(This,shadingRateImage)	\
    ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) 


#define ID3D12GraphicsCommandList7_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 


#define ID3D12GraphicsCommandList7_Barrier(This,NumBarrierGroups,pBarrierGroups)	\
    ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList7_INTERFACE_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList8_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList8_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList8 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList8;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("ee936ef9-599d-4d28-938e-23c4ad05ce51")
    ID3D12GraphicsCommandList8 : public ID3D12GraphicsCommandList7
    {
    public:
        virtual void STDMETHODCALLTYPE OMSetFrontAndBackStencilRef( 
            _In_  UINT FrontStencilRef,
            _In_  UINT BackStencilRef) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList8Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList8 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList8 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList8 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList8 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList8 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList8 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList8 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList8 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList8 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList8 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList8 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList8 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList8 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList8 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList8 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList8 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList8 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass)
        void ( STDMETHODCALLTYPE *BeginRenderPass )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass)
        void ( STDMETHODCALLTYPE *EndRenderPass )( 
            ID3D12GraphicsCommandList8 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand)
        void ( STDMETHODCALLTYPE *InitializeMetaCommand )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand)
        void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo)
        void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1)
        void ( STDMETHODCALLTYPE *SetPipelineState1 )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  ID3D12StateObject *pStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays)
        void ( STDMETHODCALLTYPE *DispatchRays )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate)
        void ( STDMETHODCALLTYPE *RSSetShadingRate )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  D3D12_SHADING_RATE baseShadingRate,
            _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)  const D3D12_SHADING_RATE_COMBINER *combiners);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage)
        void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( 
            ID3D12GraphicsCommandList8 * This,
            _In_opt_  ID3D12Resource *shadingRateImage);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh)
        void ( STDMETHODCALLTYPE *DispatchMesh )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier)
        void ( STDMETHODCALLTYPE *Barrier )( 
            ID3D12GraphicsCommandList8 * This,
            UINT32 NumBarrierGroups,
            _In_reads_(NumBarrierGroups)  const D3D12_BARRIER_GROUP *pBarrierGroups);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList8, OMSetFrontAndBackStencilRef)
        void ( STDMETHODCALLTYPE *OMSetFrontAndBackStencilRef )( 
            ID3D12GraphicsCommandList8 * This,
            _In_  UINT FrontStencilRef,
            _In_  UINT BackStencilRef);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList8Vtbl;

    interface ID3D12GraphicsCommandList8
    {
        CONST_VTBL struct ID3D12GraphicsCommandList8Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList8_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList8_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList8_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList8_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList8_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList8_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList8_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList8_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList8_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList8_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList8_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList8_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList8_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList8_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList8_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList8_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList8_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList8_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList8_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList8_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList8_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList8_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList8_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList8_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList8_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList8_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList8_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList8_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList8_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList8_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList8_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList8_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList8_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList8_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList8_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList8_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList8_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList8_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList8_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList8_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList8_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList8_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList8_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList8_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList8_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList8_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList8_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList8_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList8_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList8_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList8_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList8_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList8_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList8_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList8_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList8_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList8_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList8_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList8_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList8_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList8_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList8_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList8_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList8_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList8_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList8_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList8_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList8_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 


#define ID3D12GraphicsCommandList8_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags)	\
    ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) 

#define ID3D12GraphicsCommandList8_EndRenderPass(This)	\
    ( (This)->lpVtbl -> EndRenderPass(This) ) 

#define ID3D12GraphicsCommandList8_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList8_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList8_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs)	\
    ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) 

#define ID3D12GraphicsCommandList8_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData)	\
    ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) 

#define ID3D12GraphicsCommandList8_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode)	\
    ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) 

#define ID3D12GraphicsCommandList8_SetPipelineState1(This,pStateObject)	\
    ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) 

#define ID3D12GraphicsCommandList8_DispatchRays(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) 


#define ID3D12GraphicsCommandList8_RSSetShadingRate(This,baseShadingRate,combiners)	\
    ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) 

#define ID3D12GraphicsCommandList8_RSSetShadingRateImage(This,shadingRateImage)	\
    ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) 


#define ID3D12GraphicsCommandList8_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 


#define ID3D12GraphicsCommandList8_Barrier(This,NumBarrierGroups,pBarrierGroups)	\
    ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) 


#define ID3D12GraphicsCommandList8_OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef)	\
    ( (This)->lpVtbl -> OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList8_INTERFACE_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList9_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList9_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList9 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList9;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("34ed2808-ffe6-4c2b-b11a-cabd2b0c59e1")
    ID3D12GraphicsCommandList9 : public ID3D12GraphicsCommandList8
    {
    public:
        virtual void STDMETHODCALLTYPE RSSetDepthBias( 
            _In_  FLOAT DepthBias,
            _In_  FLOAT DepthBiasClamp,
            _In_  FLOAT SlopeScaledDepthBias) = 0;
        
        virtual void STDMETHODCALLTYPE IASetIndexBufferStripCutValue( 
            _In_  D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList9Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList9 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList9 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList9 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList9 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList9 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList9 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList9 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList9 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList9 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList9 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList9 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList9 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList9 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList9 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList9 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList9 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList9 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass)
        void ( STDMETHODCALLTYPE *BeginRenderPass )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass)
        void ( STDMETHODCALLTYPE *EndRenderPass )( 
            ID3D12GraphicsCommandList9 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand)
        void ( STDMETHODCALLTYPE *InitializeMetaCommand )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand)
        void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo)
        void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1)
        void ( STDMETHODCALLTYPE *SetPipelineState1 )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  ID3D12StateObject *pStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays)
        void ( STDMETHODCALLTYPE *DispatchRays )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate)
        void ( STDMETHODCALLTYPE *RSSetShadingRate )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  D3D12_SHADING_RATE baseShadingRate,
            _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)  const D3D12_SHADING_RATE_COMBINER *combiners);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage)
        void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( 
            ID3D12GraphicsCommandList9 * This,
            _In_opt_  ID3D12Resource *shadingRateImage);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh)
        void ( STDMETHODCALLTYPE *DispatchMesh )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier)
        void ( STDMETHODCALLTYPE *Barrier )( 
            ID3D12GraphicsCommandList9 * This,
            UINT32 NumBarrierGroups,
            _In_reads_(NumBarrierGroups)  const D3D12_BARRIER_GROUP *pBarrierGroups);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList8, OMSetFrontAndBackStencilRef)
        void ( STDMETHODCALLTYPE *OMSetFrontAndBackStencilRef )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  UINT FrontStencilRef,
            _In_  UINT BackStencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, RSSetDepthBias)
        void ( STDMETHODCALLTYPE *RSSetDepthBias )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  FLOAT DepthBias,
            _In_  FLOAT DepthBiasClamp,
            _In_  FLOAT SlopeScaledDepthBias);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, IASetIndexBufferStripCutValue)
        void ( STDMETHODCALLTYPE *IASetIndexBufferStripCutValue )( 
            ID3D12GraphicsCommandList9 * This,
            _In_  D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList9Vtbl;

    interface ID3D12GraphicsCommandList9
    {
        CONST_VTBL struct ID3D12GraphicsCommandList9Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList9_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList9_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList9_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList9_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList9_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList9_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList9_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList9_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList9_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList9_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList9_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList9_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList9_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList9_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList9_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList9_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList9_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList9_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList9_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList9_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList9_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList9_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList9_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList9_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList9_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList9_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList9_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList9_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList9_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList9_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList9_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList9_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList9_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList9_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList9_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList9_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList9_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList9_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList9_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList9_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList9_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList9_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList9_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList9_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList9_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList9_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList9_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList9_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList9_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList9_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList9_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList9_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList9_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList9_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList9_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList9_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList9_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList9_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList9_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList9_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList9_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList9_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList9_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList9_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList9_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList9_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList9_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList9_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 


#define ID3D12GraphicsCommandList9_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags)	\
    ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) 

#define ID3D12GraphicsCommandList9_EndRenderPass(This)	\
    ( (This)->lpVtbl -> EndRenderPass(This) ) 

#define ID3D12GraphicsCommandList9_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList9_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList9_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs)	\
    ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) 

#define ID3D12GraphicsCommandList9_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData)	\
    ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) 

#define ID3D12GraphicsCommandList9_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode)	\
    ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) 

#define ID3D12GraphicsCommandList9_SetPipelineState1(This,pStateObject)	\
    ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) 

#define ID3D12GraphicsCommandList9_DispatchRays(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) 


#define ID3D12GraphicsCommandList9_RSSetShadingRate(This,baseShadingRate,combiners)	\
    ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) 

#define ID3D12GraphicsCommandList9_RSSetShadingRateImage(This,shadingRateImage)	\
    ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) 


#define ID3D12GraphicsCommandList9_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 


#define ID3D12GraphicsCommandList9_Barrier(This,NumBarrierGroups,pBarrierGroups)	\
    ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) 


#define ID3D12GraphicsCommandList9_OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef)	\
    ( (This)->lpVtbl -> OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) ) 


#define ID3D12GraphicsCommandList9_RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias)	\
    ( (This)->lpVtbl -> RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) ) 

#define ID3D12GraphicsCommandList9_IASetIndexBufferStripCutValue(This,IBStripCutValue)	\
    ( (This)->lpVtbl -> IASetIndexBufferStripCutValue(This,IBStripCutValue) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList9_INTERFACE_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__

/* interface ID3D12GraphicsCommandList10 */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GraphicsCommandList10;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7013c015-d161-4b63-a08c-238552dd8acc")
    ID3D12GraphicsCommandList10 : public ID3D12GraphicsCommandList9
    {
    public:
        virtual void STDMETHODCALLTYPE SetProgram( 
            _In_  const D3D12_SET_PROGRAM_DESC *pDesc) = 0;
        
        virtual void STDMETHODCALLTYPE DispatchGraph( 
            _In_  const D3D12_DISPATCH_GRAPH_DESC *pDesc) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GraphicsCommandList10Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList10 * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList10 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface)
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        DECLSPEC_XFGVIRT(ID3D12Object, SetName)
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList10 * This,
            _In_z_  LPCWSTR Name);
        
        DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice)
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList10 * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        DECLSPEC_XFGVIRT(ID3D12CommandList, GetType)
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close)
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState)
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList10 * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced)
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced)
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch)
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion)
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion)
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource)
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles)
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource)
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology)
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports)
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList10 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects)
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList10 * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor)
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList10 * This,
            _In_reads_opt_(4)  const FLOAT BlendFactor[ 4 ]);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef)
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT StencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState)
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier)
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle)
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps)
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature)
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList10 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature)
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList10 * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable)
        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants)
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView)
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer)
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList10 * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers)
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets)
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets)
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView)
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView)
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat)
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList10 * 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);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource)
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery)
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery)
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData)
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication)
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList10 * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker)
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList10 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent)
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList10 * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent)
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect)
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64)
        void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT Dependencies,
            _In_reads_(Dependencies)  ID3D12Resource *const *ppDependentResources,
            _In_reads_(Dependencies)  const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds)
        void ( STDMETHODCALLTYPE *OMSetDepthBounds )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  FLOAT Min,
            _In_  FLOAT Max);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions)
        void ( STDMETHODCALLTYPE *SetSamplePositions )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT NumSamplesPerPixel,
            _In_  UINT NumPixels,
            _In_reads_(NumSamplesPerPixel*NumPixels)  D3D12_SAMPLE_POSITION *pSamplePositions);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion)
        void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  UINT DstX,
            _In_  UINT DstY,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_opt_  D3D12_RECT *pSrcRect,
            _In_  DXGI_FORMAT Format,
            _In_  D3D12_RESOLVE_MODE ResolveMode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask)
        void ( STDMETHODCALLTYPE *SetViewInstanceMask )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT Mask);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate)
        void ( STDMETHODCALLTYPE *WriteBufferImmediate )( 
            ID3D12GraphicsCommandList10 * This,
            UINT Count,
            _In_reads_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams,
            _In_reads_opt_(Count)  const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession)
        void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( 
            ID3D12GraphicsCommandList10 * This,
            _In_opt_  ID3D12ProtectedResourceSession *pProtectedResourceSession);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass)
        void ( STDMETHODCALLTYPE *BeginRenderPass )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT NumRenderTargets,
            _In_reads_opt_(NumRenderTargets)  const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets,
            _In_opt_  const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil,
            D3D12_RENDER_PASS_FLAGS Flags);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass)
        void ( STDMETHODCALLTYPE *EndRenderPass )( 
            ID3D12GraphicsCommandList10 * This);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand)
        void ( STDMETHODCALLTYPE *InitializeMetaCommand )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)  const void *pInitializationParametersData,
            _In_  SIZE_T InitializationParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand)
        void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12MetaCommand *pMetaCommand,
            _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)  const void *pExecutionParametersData,
            _In_  SIZE_T ExecutionParametersDataSizeInBytes);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc,
            _In_  UINT NumPostbuildInfoDescs,
            _In_reads_opt_(NumPostbuildInfoDescs)  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo)
        void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc,
            _In_  UINT NumSourceAccelerationStructures,
            _In_reads_( NumSourceAccelerationStructures )  const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure)
        void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData,
            _In_  D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1)
        void ( STDMETHODCALLTYPE *SetPipelineState1 )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  ID3D12StateObject *pStateObject);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays)
        void ( STDMETHODCALLTYPE *DispatchRays )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  const D3D12_DISPATCH_RAYS_DESC *pDesc);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate)
        void ( STDMETHODCALLTYPE *RSSetShadingRate )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  D3D12_SHADING_RATE baseShadingRate,
            _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)  const D3D12_SHADING_RATE_COMBINER *combiners);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage)
        void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( 
            ID3D12GraphicsCommandList10 * This,
            _In_opt_  ID3D12Resource *shadingRateImage);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh)
        void ( STDMETHODCALLTYPE *DispatchMesh )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier)
        void ( STDMETHODCALLTYPE *Barrier )( 
            ID3D12GraphicsCommandList10 * This,
            UINT32 NumBarrierGroups,
            _In_reads_(NumBarrierGroups)  const D3D12_BARRIER_GROUP *pBarrierGroups);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList8, OMSetFrontAndBackStencilRef)
        void ( STDMETHODCALLTYPE *OMSetFrontAndBackStencilRef )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  UINT FrontStencilRef,
            _In_  UINT BackStencilRef);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, RSSetDepthBias)
        void ( STDMETHODCALLTYPE *RSSetDepthBias )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  FLOAT DepthBias,
            _In_  FLOAT DepthBiasClamp,
            _In_  FLOAT SlopeScaledDepthBias);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, IASetIndexBufferStripCutValue)
        void ( STDMETHODCALLTYPE *IASetIndexBufferStripCutValue )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList10, SetProgram)
        void ( STDMETHODCALLTYPE *SetProgram )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  const D3D12_SET_PROGRAM_DESC *pDesc);
        
        DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList10, DispatchGraph)
        void ( STDMETHODCALLTYPE *DispatchGraph )( 
            ID3D12GraphicsCommandList10 * This,
            _In_  const D3D12_DISPATCH_GRAPH_DESC *pDesc);
        
        END_INTERFACE
    } ID3D12GraphicsCommandList10Vtbl;

    interface ID3D12GraphicsCommandList10
    {
        CONST_VTBL struct ID3D12GraphicsCommandList10Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GraphicsCommandList10_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GraphicsCommandList10_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GraphicsCommandList10_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GraphicsCommandList10_GetPrivateData(This,guid,pDataSize,pData)	\
    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) 

#define ID3D12GraphicsCommandList10_SetPrivateData(This,guid,DataSize,pData)	\
    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) 

#define ID3D12GraphicsCommandList10_SetPrivateDataInterface(This,guid,pData)	\
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) 

#define ID3D12GraphicsCommandList10_SetName(This,Name)	\
    ( (This)->lpVtbl -> SetName(This,Name) ) 


#define ID3D12GraphicsCommandList10_GetDevice(This,riid,ppvDevice)	\
    ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) 


#define ID3D12GraphicsCommandList10_GetType(This)	\
    ( (This)->lpVtbl -> GetType(This) ) 


#define ID3D12GraphicsCommandList10_Close(This)	\
    ( (This)->lpVtbl -> Close(This) ) 

#define ID3D12GraphicsCommandList10_Reset(This,pAllocator,pInitialState)	\
    ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) 

#define ID3D12GraphicsCommandList10_ClearState(This,pPipelineState)	\
    ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList10_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList10_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)	\
    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) 

#define ID3D12GraphicsCommandList10_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 

#define ID3D12GraphicsCommandList10_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes)	\
    ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) 

#define ID3D12GraphicsCommandList10_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox)	\
    ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) 

#define ID3D12GraphicsCommandList10_CopyResource(This,pDstResource,pSrcResource)	\
    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) 

#define ID3D12GraphicsCommandList10_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)	\
    ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) 

#define ID3D12GraphicsCommandList10_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)	\
    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) 

#define ID3D12GraphicsCommandList10_IASetPrimitiveTopology(This,PrimitiveTopology)	\
    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) 

#define ID3D12GraphicsCommandList10_RSSetViewports(This,NumViewports,pViewports)	\
    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) 

#define ID3D12GraphicsCommandList10_RSSetScissorRects(This,NumRects,pRects)	\
    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList10_OMSetBlendFactor(This,BlendFactor)	\
    ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) 

#define ID3D12GraphicsCommandList10_OMSetStencilRef(This,StencilRef)	\
    ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) 

#define ID3D12GraphicsCommandList10_SetPipelineState(This,pPipelineState)	\
    ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) 

#define ID3D12GraphicsCommandList10_ResourceBarrier(This,NumBarriers,pBarriers)	\
    ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) 

#define ID3D12GraphicsCommandList10_ExecuteBundle(This,pCommandList)	\
    ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) 

#define ID3D12GraphicsCommandList10_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps)	\
    ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) 

#define ID3D12GraphicsCommandList10_SetComputeRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList10_SetGraphicsRootSignature(This,pRootSignature)	\
    ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) 

#define ID3D12GraphicsCommandList10_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList10_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)	\
    ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) 

#define ID3D12GraphicsCommandList10_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList10_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList10_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList10_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues)	\
    ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) 

#define ID3D12GraphicsCommandList10_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList10_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList10_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList10_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList10_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList10_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)	\
    ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) 

#define ID3D12GraphicsCommandList10_IASetIndexBuffer(This,pView)	\
    ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) 

#define ID3D12GraphicsCommandList10_IASetVertexBuffers(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList10_SOSetTargets(This,StartSlot,NumViews,pViews)	\
    ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) 

#define ID3D12GraphicsCommandList10_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor)	\
    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) 

#define ID3D12GraphicsCommandList10_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList10_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList10_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList10_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects)	\
    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) 

#define ID3D12GraphicsCommandList10_DiscardResource(This,pResource,pRegion)	\
    ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) 

#define ID3D12GraphicsCommandList10_BeginQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList10_EndQuery(This,pQueryHeap,Type,Index)	\
    ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) 

#define ID3D12GraphicsCommandList10_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset)	\
    ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) 

#define ID3D12GraphicsCommandList10_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)	\
    ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) 

#define ID3D12GraphicsCommandList10_SetMarker(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList10_BeginEvent(This,Metadata,pData,Size)	\
    ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) 

#define ID3D12GraphicsCommandList10_EndEvent(This)	\
    ( (This)->lpVtbl -> EndEvent(This) ) 

#define ID3D12GraphicsCommandList10_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)	\
    ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) 


#define ID3D12GraphicsCommandList10_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList10_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges)	\
    ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) 

#define ID3D12GraphicsCommandList10_OMSetDepthBounds(This,Min,Max)	\
    ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) 

#define ID3D12GraphicsCommandList10_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions)	\
    ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) 

#define ID3D12GraphicsCommandList10_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode)	\
    ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) 

#define ID3D12GraphicsCommandList10_SetViewInstanceMask(This,Mask)	\
    ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) 


#define ID3D12GraphicsCommandList10_WriteBufferImmediate(This,Count,pParams,pModes)	\
    ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) 


#define ID3D12GraphicsCommandList10_SetProtectedResourceSession(This,pProtectedResourceSession)	\
    ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) 


#define ID3D12GraphicsCommandList10_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags)	\
    ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) 

#define ID3D12GraphicsCommandList10_EndRenderPass(This)	\
    ( (This)->lpVtbl -> EndRenderPass(This) ) 

#define ID3D12GraphicsCommandList10_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList10_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes)	\
    ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) 

#define ID3D12GraphicsCommandList10_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs)	\
    ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) 

#define ID3D12GraphicsCommandList10_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData)	\
    ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) 

#define ID3D12GraphicsCommandList10_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode)	\
    ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) 

#define ID3D12GraphicsCommandList10_SetPipelineState1(This,pStateObject)	\
    ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) 

#define ID3D12GraphicsCommandList10_DispatchRays(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) 


#define ID3D12GraphicsCommandList10_RSSetShadingRate(This,baseShadingRate,combiners)	\
    ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) 

#define ID3D12GraphicsCommandList10_RSSetShadingRateImage(This,shadingRateImage)	\
    ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) 


#define ID3D12GraphicsCommandList10_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)	\
    ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) 


#define ID3D12GraphicsCommandList10_Barrier(This,NumBarrierGroups,pBarrierGroups)	\
    ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) 


#define ID3D12GraphicsCommandList10_OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef)	\
    ( (This)->lpVtbl -> OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) ) 


#define ID3D12GraphicsCommandList10_RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias)	\
    ( (This)->lpVtbl -> RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) ) 

#define ID3D12GraphicsCommandList10_IASetIndexBufferStripCutValue(This,IBStripCutValue)	\
    ( (This)->lpVtbl -> IASetIndexBufferStripCutValue(This,IBStripCutValue) ) 


#define ID3D12GraphicsCommandList10_SetProgram(This,pDesc)	\
    ( (This)->lpVtbl -> SetProgram(This,pDesc) ) 

#define ID3D12GraphicsCommandList10_DispatchGraph(This,pDesc)	\
    ( (This)->lpVtbl -> DispatchGraph(This,pDesc) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__ */


#ifndef __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__
#define __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__

/* interface ID3D12DSRDeviceFactory */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12DSRDeviceFactory;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("f343d1a0-afe3-439f-b13d-cd87a43b70ca")
    ID3D12DSRDeviceFactory : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateDSRDevice( 
            ID3D12Device *pD3D12Device,
            UINT NodeMask,
            REFIID riid,
            _COM_Outptr_  void **ppvDSRDevice) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12DSRDeviceFactoryVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12DSRDeviceFactory * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12DSRDeviceFactory * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12DSRDeviceFactory * This);
        
        DECLSPEC_XFGVIRT(ID3D12DSRDeviceFactory, CreateDSRDevice)
        HRESULT ( STDMETHODCALLTYPE *CreateDSRDevice )( 
            ID3D12DSRDeviceFactory * This,
            ID3D12Device *pD3D12Device,
            UINT NodeMask,
            REFIID riid,
            _COM_Outptr_  void **ppvDSRDevice);
        
        END_INTERFACE
    } ID3D12DSRDeviceFactoryVtbl;

    interface ID3D12DSRDeviceFactory
    {
        CONST_VTBL struct ID3D12DSRDeviceFactoryVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12DSRDeviceFactory_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12DSRDeviceFactory_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12DSRDeviceFactory_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12DSRDeviceFactory_CreateDSRDevice(This,pD3D12Device,NodeMask,riid,ppvDSRDevice)	\
    ( (This)->lpVtbl -> CreateDSRDevice(This,pD3D12Device,NodeMask,riid,ppvDSRDevice) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__ */


#ifndef __ID3D12GBVDiagnostics_INTERFACE_DEFINED__
#define __ID3D12GBVDiagnostics_INTERFACE_DEFINED__

/* interface ID3D12GBVDiagnostics */
/* [unique][local][object][uuid] */ 


EXTERN_C const IID IID_ID3D12GBVDiagnostics;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("597985ab-9b75-4dbb-be23-0761195bebee")
    ID3D12GBVDiagnostics : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetGBVEntireSubresourceStatesData( 
            _In_  ID3D12Resource *pResource,
            _Out_writes_bytes_(DataSize)  int *pData,
            UINT DataSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetGBVSubresourceState( 
            _In_  ID3D12Resource *pResource,
            UINT Subresource,
            _Out_  int *pData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetGBVResourceUniformState( 
            _In_  ID3D12Resource *pResource,
            _Out_  int *pData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetGBVResourceInfo( 
            _In_  ID3D12Resource *pResource,
            _In_opt_  D3D12_RESOURCE_DESC *pResourceDesc,
            _In_opt_  UINT32 *pResourceHash,
            _In_opt_  UINT32 *pSubresourceStatesByteOffset) = 0;
        
        virtual void STDMETHODCALLTYPE GBVReserved0( void) = 0;
        
        virtual void STDMETHODCALLTYPE GBVReserved1( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ID3D12GBVDiagnosticsVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GBVDiagnostics * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GBVDiagnostics * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GBVDiagnostics * This);
        
        DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVEntireSubresourceStatesData)
        HRESULT ( STDMETHODCALLTYPE *GetGBVEntireSubresourceStatesData )( 
            ID3D12GBVDiagnostics * This,
            _In_  ID3D12Resource *pResource,
            _Out_writes_bytes_(DataSize)  int *pData,
            UINT DataSize);
        
        DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVSubresourceState)
        HRESULT ( STDMETHODCALLTYPE *GetGBVSubresourceState )( 
            ID3D12GBVDiagnostics * This,
            _In_  ID3D12Resource *pResource,
            UINT Subresource,
            _Out_  int *pData);
        
        DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVResourceUniformState)
        HRESULT ( STDMETHODCALLTYPE *GetGBVResourceUniformState )( 
            ID3D12GBVDiagnostics * This,
            _In_  ID3D12Resource *pResource,
            _Out_  int *pData);
        
        DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVResourceInfo)
        HRESULT ( STDMETHODCALLTYPE *GetGBVResourceInfo )( 
            ID3D12GBVDiagnostics * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  D3D12_RESOURCE_DESC *pResourceDesc,
            _In_opt_  UINT32 *pResourceHash,
            _In_opt_  UINT32 *pSubresourceStatesByteOffset);
        
        DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GBVReserved0)
        void ( STDMETHODCALLTYPE *GBVReserved0 )( 
            ID3D12GBVDiagnostics * This);
        
        DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GBVReserved1)
        void ( STDMETHODCALLTYPE *GBVReserved1 )( 
            ID3D12GBVDiagnostics * This);
        
        END_INTERFACE
    } ID3D12GBVDiagnosticsVtbl;

    interface ID3D12GBVDiagnostics
    {
        CONST_VTBL struct ID3D12GBVDiagnosticsVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ID3D12GBVDiagnostics_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ID3D12GBVDiagnostics_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ID3D12GBVDiagnostics_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ID3D12GBVDiagnostics_GetGBVEntireSubresourceStatesData(This,pResource,pData,DataSize)	\
    ( (This)->lpVtbl -> GetGBVEntireSubresourceStatesData(This,pResource,pData,DataSize) ) 

#define ID3D12GBVDiagnostics_GetGBVSubresourceState(This,pResource,Subresource,pData)	\
    ( (This)->lpVtbl -> GetGBVSubresourceState(This,pResource,Subresource,pData) ) 

#define ID3D12GBVDiagnostics_GetGBVResourceUniformState(This,pResource,pData)	\
    ( (This)->lpVtbl -> GetGBVResourceUniformState(This,pResource,pData) ) 

#define ID3D12GBVDiagnostics_GetGBVResourceInfo(This,pResource,pResourceDesc,pResourceHash,pSubresourceStatesByteOffset)	\
    ( (This)->lpVtbl -> GetGBVResourceInfo(This,pResource,pResourceDesc,pResourceHash,pSubresourceStatesByteOffset) ) 

#define ID3D12GBVDiagnostics_GBVReserved0(This)	\
    ( (This)->lpVtbl -> GBVReserved0(This) ) 

#define ID3D12GBVDiagnostics_GBVReserved1(This)	\
    ( (This)->lpVtbl -> GBVReserved1(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_d3d12_0000_0083 */
/* [local] */ 

#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */
#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_ID3D12Fence1,0x433685fe,0xe22b,0x4ca0,0xa8,0xdb,0xb5,0xb4,0xf4,0xdd,0x0e,0x4a);
DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45);
DEFINE_GUID(IID_ID3D12PipelineState1,0x5646804c,0x9638,0x48f7,0x91,0x82,0xb3,0xee,0x5a,0x6b,0x60,0xfb);
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_ID3D12GraphicsCommandList1,0x553103fb,0x1fe7,0x4557,0xbb,0x38,0x94,0x6d,0x7d,0x0e,0x7c,0xa7);
DEFINE_GUID(IID_ID3D12GraphicsCommandList2,0x38C3E585,0xFF17,0x412C,0x91,0x50,0x4F,0xC6,0xF9,0xD7,0x2A,0x28);
DEFINE_GUID(IID_ID3D12CommandQueue,0x0ec870a6,0x5d7e,0x4c22,0x8c,0xfc,0x5b,0xaa,0xe0,0x76,0x16,0xed);
DEFINE_GUID(IID_ID3D12CommandQueue1,0x3a3c3165,0x0ee7,0x4b8e,0xa0,0xaf,0x63,0x56,0xb4,0xc3,0xbb,0xb9);
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_ID3D12PipelineLibrary1,0x80eabf42,0x2568,0x4e5e,0xbd,0x82,0xc3,0x7f,0x86,0x96,0x1d,0xc3);
DEFINE_GUID(IID_ID3D12Device1,0x77acce80,0x638e,0x4e65,0x88,0x95,0xc1,0xf2,0x33,0x86,0x86,0x3e);
DEFINE_GUID(IID_ID3D12Device2,0x30baa41e,0xb15b,0x475c,0xa0,0xbb,0x1a,0xf5,0xc5,0xb6,0x43,0x28);
DEFINE_GUID(IID_ID3D12Device3,0x81dadc15,0x2bad,0x4392,0x93,0xc5,0x10,0x13,0x45,0xc4,0xaa,0x98);
DEFINE_GUID(IID_ID3D12ProtectedSession,0xA1533D18,0x0AC1,0x4084,0x85,0xB9,0x89,0xA9,0x61,0x16,0x80,0x6B);
DEFINE_GUID(IID_ID3D12ProtectedResourceSession,0x6CD696F4,0xF289,0x40CC,0x80,0x91,0x5A,0x6C,0x0A,0x09,0x9C,0x3D);
DEFINE_GUID(IID_ID3D12Device4,0xe865df17,0xa9ee,0x46f9,0xa4,0x63,0x30,0x98,0x31,0x5a,0xa2,0xe5);
DEFINE_GUID(IID_ID3D12LifetimeOwner,0xe667af9f,0xcd56,0x4f46,0x83,0xce,0x03,0x2e,0x59,0x5d,0x70,0xa8);
DEFINE_GUID(IID_ID3D12SwapChainAssistant,0xf1df64b6,0x57fd,0x49cd,0x88,0x07,0xc0,0xeb,0x88,0xb4,0x5c,0x8f);
DEFINE_GUID(IID_ID3D12LifetimeTracker,0x3fd03d36,0x4eb1,0x424a,0xa5,0x82,0x49,0x4e,0xcb,0x8b,0xa8,0x13);
DEFINE_GUID(IID_ID3D12StateObject,0x47016943,0xfca8,0x4594,0x93,0xea,0xaf,0x25,0x8b,0x55,0x34,0x6d);
DEFINE_GUID(IID_ID3D12StateObjectProperties,0xde5fa827,0x9bf9,0x4f26,0x89,0xff,0xd7,0xf5,0x6f,0xde,0x38,0x60);
DEFINE_GUID(IID_ID3D12StateObjectProperties1,0x460caac7,0x1d24,0x446a,0xa1,0x84,0xca,0x67,0xdb,0x49,0x41,0x38);
DEFINE_GUID(IID_ID3D12StateObjectProperties2,0xd5e82917,0xf0f1,0x44cf,0xae,0x5e,0xce,0x22,0x2d,0xd0,0xb8,0x84);
DEFINE_GUID(IID_ID3D12WorkGraphProperties,0x065acf71,0xf863,0x4b89,0x82,0xf4,0x02,0xe4,0xd5,0x88,0x67,0x57);
DEFINE_GUID(IID_ID3D12Device5,0x8b4f173b,0x2fea,0x4b80,0x8f,0x58,0x43,0x07,0x19,0x1a,0xb9,0x5d);
DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings,0x82BC481C,0x6B9B,0x4030,0xAE,0xDB,0x7E,0xE3,0xD1,0xDF,0x1E,0x63);
DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings1,0xDBD5AE51,0x3317,0x4F0A,0xAD,0xF9,0x1D,0x7C,0xED,0xCA,0xAE,0x0B);
DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings2,0x61552388,0x01ab,0x4008,0xa4,0x36,0x83,0xdb,0x18,0x95,0x66,0xea);
DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData,0x98931D33,0x5AE8,0x4791,0xAA,0x3C,0x1A,0x73,0xA2,0x93,0x4E,0x71);
DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData1,0x9727A022,0xCF1D,0x4DDA,0x9E,0xBA,0xEF,0xFA,0x65,0x3F,0xC5,0x06);
DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData2,0x67FC5816,0xE4CA,0x4915,0xBF,0x18,0x42,0x54,0x12,0x72,0xDA,0x54);
DEFINE_GUID(IID_ID3D12Device6,0xc70b221b,0x40e4,0x4a17,0x89,0xaf,0x02,0x5a,0x07,0x27,0xa6,0xdc);
DEFINE_GUID(IID_ID3D12ProtectedResourceSession1,0xD6F12DD6,0x76FB,0x406E,0x89,0x61,0x42,0x96,0xEE,0xFC,0x04,0x09);
DEFINE_GUID(IID_ID3D12Device7,0x5c014b53,0x68a1,0x4b9b,0x8b,0xd1,0xdd,0x60,0x46,0xb9,0x35,0x8b);
DEFINE_GUID(IID_ID3D12Device8,0x9218E6BB,0xF944,0x4F7E,0xA7,0x5C,0xB1,0xB2,0xC7,0xB7,0x01,0xF3);
DEFINE_GUID(IID_ID3D12Resource1,0x9D5E227A,0x4430,0x4161,0x88,0xB3,0x3E,0xCA,0x6B,0xB1,0x6E,0x19);
DEFINE_GUID(IID_ID3D12Resource2,0xBE36EC3B,0xEA85,0x4AEB,0xA4,0x5A,0xE9,0xD7,0x64,0x04,0xA4,0x95);
DEFINE_GUID(IID_ID3D12Heap1,0x572F7389,0x2168,0x49E3,0x96,0x93,0xD6,0xDF,0x58,0x71,0xBF,0x6D);
DEFINE_GUID(IID_ID3D12GraphicsCommandList3,0x6FDA83A7,0xB84C,0x4E38,0x9A,0xC8,0xC7,0xBD,0x22,0x01,0x6B,0x3D);
DEFINE_GUID(IID_ID3D12MetaCommand,0xDBB84C27,0x36CE,0x4FC9,0xB8,0x01,0xF0,0x48,0xC4,0x6A,0xC5,0x70);
DEFINE_GUID(IID_ID3D12GraphicsCommandList4,0x8754318e,0xd3a9,0x4541,0x98,0xcf,0x64,0x5b,0x50,0xdc,0x48,0x74);
DEFINE_GUID(IID_ID3D12ShaderCacheSession,0x28e2495d,0x0f64,0x4ae4,0xa6,0xec,0x12,0x92,0x55,0xdc,0x49,0xa8);
DEFINE_GUID(IID_ID3D12Device9,0x4c80e962,0xf032,0x4f60,0xbc,0x9e,0xeb,0xc2,0xcf,0xa1,0xd8,0x3c);
DEFINE_GUID(IID_ID3D12Device10,0x517f8718,0xaa66,0x49f9,0xb0,0x2b,0xa7,0xab,0x89,0xc0,0x60,0x31);
DEFINE_GUID(IID_ID3D12Device11,0x5405c344,0xd457,0x444e,0xb4,0xdd,0x23,0x66,0xe4,0x5a,0xee,0x39);
DEFINE_GUID(IID_ID3D12Device12,0x5af5c532,0x4c91,0x4cd0,0xb5,0x41,0x15,0xa4,0x05,0x39,0x5f,0xc5);
DEFINE_GUID(IID_ID3D12Device13,0x14eecffc,0x4df8,0x40f7,0xa1,0x18,0x5c,0x81,0x6f,0x45,0x69,0x5e);
DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x88,0xad,0x49,0x26,0xd3,0x23);
DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76);
DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5);
DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0);
DEFINE_GUID(IID_ID3D12Tools2,0x01d393c5,0xc9b0,0x42a1,0x95,0x8c,0xc2,0x6b,0x02,0xd4,0xd0,0x97);
DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d);
DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9);
DEFINE_GUID(IID_ID3D12DeviceTools1,0xe30e9fc7,0xe641,0x4d6e,0x8a,0x81,0x9d,0xd9,0x20,0x6e,0xc4,0x7a);
DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7);
DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f);
DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb);
DEFINE_GUID(IID_ID3D12DeviceConfiguration,0x78dbf87b,0xf766,0x422b,0xa6,0x1c,0xc8,0xc4,0x46,0xbd,0xb9,0xad);
DEFINE_GUID(IID_ID3D12DeviceConfiguration1,0xed342442,0x6343,0x4e16,0xbb,0x82,0xa3,0xa5,0x77,0x87,0x4e,0x56);
DEFINE_GUID(IID_ID3D12GraphicsCommandList5,0x55050859,0x4024,0x474c,0x87,0xf5,0x64,0x72,0xea,0xee,0x44,0xea);
DEFINE_GUID(IID_ID3D12GraphicsCommandList6,0xc3827890,0xe548,0x4cfa,0x96,0xcf,0x56,0x89,0xa9,0x37,0x0f,0x80);
DEFINE_GUID(IID_ID3D12GraphicsCommandList7,0xdd171223,0x8b61,0x4769,0x90,0xe3,0x16,0x0c,0xcd,0xe4,0xe2,0xc1);
DEFINE_GUID(IID_ID3D12GraphicsCommandList8,0xee936ef9,0x599d,0x4d28,0x93,0x8e,0x23,0xc4,0xad,0x05,0xce,0x51);
DEFINE_GUID(IID_ID3D12GraphicsCommandList9,0x34ed2808,0xffe6,0x4c2b,0xb1,0x1a,0xca,0xbd,0x2b,0x0c,0x59,0xe1);
DEFINE_GUID(IID_ID3D12GraphicsCommandList10,0x7013c015,0xd161,0x4b63,0xa0,0x8c,0x23,0x85,0x52,0xdd,0x8a,0xcc);
DEFINE_GUID(IID_ID3D12DSRDeviceFactory,0xf343d1a0,0xafe3,0x439f,0xb1,0x3d,0xcd,0x87,0xa4,0x3b,0x70,0xca);
DEFINE_GUID(IID_ID3D12GBVDiagnostics,0x597985ab,0x9b75,0x4dbb,0xbe,0x23,0x07,0x61,0x19,0x5b,0xeb,0xee);


extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0083_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0083_v0_0_s_ifspec;

/* Additional Prototypes for ALL interfaces */

/* end of Additional Prototypes */

#ifdef __cplusplus
}
#endif

#endif


