Raw File
mini_d3d12.h
#ifndef __mini_d3d12_h__
#define __mini_d3d12_h__

#ifdef __clang__
//    #define __stdcall __attribute__ ((stdcall))
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wignored-attributes"
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wunused-value"
#define __export
#ifndef _WIN32
#define _WIN32 1
#endif//_WIN32
#ifdef BITS_64 // <- Halide back-end compilation flag (-DBITS_${j})
    #ifndef _WIN64
    #define _WIN64 1
    #endif//_WIN64
#else
    #define _STDCALL_SUPPORTED
#endif
#endif

#ifndef __midl
#define __midl
#endif//__midl

/* sal.h */
// Clear-out SAL macros (Source-code Annotation Language)
#ifndef _In_
#define _In_
#endif//_In_

#ifndef _In_z_
#define _In_z_
#endif//_In_z_

#ifndef _In_opt_
#define _In_opt_
#endif//_In_opt_

#ifndef _Out_
#define _Out_
#endif//_Out_

#ifndef _Out_opt_
#define _Out_opt_
#endif//_Out_opt_

#ifndef _Inout_
#define _Inout_
#endif//_Inout_

#ifndef _Inout_opt_
#define _Inout_opt_
#endif//_Inout_opt_

#ifndef _COM_Outptr_
#define _COM_Outptr_
#endif//_COM_Outptr_

#ifndef _COM_Outptr_opt_
#define _COM_Outptr_opt_
#endif//_COM_Outptr_opt_

#ifndef _Check_return_
#define _Check_return_
#endif//_Check_return_

#ifndef _Null_terminated_
#define _Null_terminated_
#endif//_Null_terminated_

#ifndef _Return_type_success_
#define _Return_type_success_(expr)
#endif//_Return_type_success_

#ifndef _Post_equal_to_
#define _Post_equal_to_(e)
#endif//_Post_equal_to_

#ifndef _Post_satisfies_
#define _Post_satisfies_(expr)
#endif//_Post_satisfies_

#ifndef _In_range_
#define _In_range_(lb,ub)
#endif//_In_range_

#ifndef _In_reads_
#define _In_reads_(size)
#endif//_In_reads_

#ifndef _In_reads_opt_
#define _In_reads_opt_(size)
#endif//_In_reads_opt_

#ifndef _In_reads_bytes_
#define _In_reads_bytes_(size)
#endif//_In_reads_bytes_

#ifndef _In_reads_bytes_opt_
#define _In_reads_bytes_opt_(size)
#endif//_In_reads_bytes_opt_

#ifndef _Out_writes_
#define _Out_writes_(size)
#endif//_Out_writes_

#ifndef _Out_writes_opt_
#define _Out_writes_opt_(size)
#endif//_Out_writes_opt_

#ifndef _Out_writes_bytes_
#define _Out_writes_bytes_(size)
#endif//_Out_writes_bytes_

#ifndef _Out_writes_bytes_opt_
#define _Out_writes_bytes_opt_(size)
#endif//_Out_writes_bytes_opt_

#ifndef _Inout_updates_bytes_
#define _Inout_updates_bytes_(size)
#endif//_Inout_updates_bytes_

#ifndef _Field_size_full_
#define _Field_size_full_(size)
#endif//_Field_size_full_

#ifndef _Field_size_bytes_full_
#define _Field_size_bytes_full_(size)
#endif//_Field_size_bytes_full_

#ifndef _Outptr_opt_result_bytebuffer_
#define _Outptr_opt_result_bytebuffer_(size)
#endif//_Outptr_opt_result_bytebuffer_

#ifndef _Must_inspect_result_
#define _Must_inspect_result_
#endif//_Must_inspect_result_

#ifndef __specstrings
#define __specstrings
#endif//__specstrings

#ifndef _Always_
#define _Always_(annos)
#endif//_Always_

/* rpcsal.h */
#ifndef __RPC_string
#define __RPC_string
#endif//__RPC_string

#ifndef __RPC__deref_out
#define __RPC__deref_out
#endif//__RPC__deref_out

/* minwindef.h */
/* 
 * On ARM and x64 processors, __stdcall is accepted and ignored by the compiler;
 * on ARM and x64 architectures, by convention, arguments are passed in registers
 * when possible, and subsequent arguments are passed on the stack.
 */
#define WINAPI      __stdcall

#define VOID            void
typedef char            CHAR;
typedef short           SHORT;
typedef unsigned char   BYTE;
typedef unsigned short  WORD;
#ifdef __clang__
// must enforce LLP64 for Windows x64 ...
typedef int32_t         LONG;   // long is 64bits on clang-x64
typedef int32_t         INT;    // and so is int as well...
typedef uint32_t        ULONG;
typedef uint32_t        UINT;
typedef uint32_t        DWORD;
#else
typedef long            LONG;
typedef int             INT;
typedef unsigned long   ULONG;
typedef unsigned int    UINT;
typedef unsigned long   DWORD;
#endif
typedef float           FLOAT;

#define CONST           const
#define far
#define near
typedef CONST void far  *LPCVOID;
typedef void far        *LPVOID;

typedef INT             BOOL;

#ifdef __clang__
typedef unsigned short  WCHAR;   // clang's wchar_t is 32bits by default...
#else
#ifndef _MAC
typedef wchar_t         WCHAR;  // Windows wchar_t : 16-bit UNICODE character
#else
// some Macintosh compilers don't define wchar_t in a convenient location, or define it as a char
typedef unsigned short  WCHAR;    // wc,   16-bit UNICODE character
#endif
#endif
typedef _Null_terminated_ CHAR *NPSTR, *LPSTR, *PSTR;
typedef _Null_terminated_ CONST CHAR *LPCSTR, *PCSTR;
typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR;

#define FAR                 far
#define NEAR                near

#ifndef FALSE
#define FALSE               0
#endif

#ifndef TRUE
#define TRUE                1
#endif

/* basestd.h */
typedef CHAR        INT8,   *PINT8;
typedef SHORT       INT16,  *PINT16;
typedef INT         INT32,  *PINT32;
typedef BYTE        UINT8,  *PUINT8;
typedef WORD        UINT16, *PUINT16;
typedef UINT        UINT32, *PUINT32;
#ifdef __clang__
typedef  int64_t     INT64,  *PINT64;
typedef uint64_t    UINT64, *PUINT64;
#else
typedef __int64              INT64,  *PINT64;
typedef unsigned __int64    UINT64, *PUINT64;
#endif
#if !defined(_W64)
#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86) || defined(_ARM_) || defined(_M_ARM)) && _MSC_VER >= 1300
#define _W64 __w64
#else
#define _W64
#endif
#endif
#if defined(_WIN64)
    typedef  INT64   INT_PTR,  *PINT_PTR;
    typedef UINT64  UINT_PTR, *PUINT_PTR;

    typedef  INT64   LONG_PTR,  *PLONG_PTR;
    typedef UINT64  ULONG_PTR, *PULONG_PTR;

    #define __int3264   INT64

#else
    typedef _W64  INT32   INT_PTR, *PINT_PTR;
    typedef _W64 UINT32 UINT_PTR, *PUINT_PTR;

    typedef _W64  INT32  LONG_PTR, *PLONG_PTR;
    typedef _W64 UINT32 ULONG_PTR, *PULONG_PTR;

    #define __int3264   INT32

#endif
typedef ULONG_PTR    SIZE_T,  *PSIZE_T;
typedef LONG_PTR    SSIZE_T, *PSSIZE_T;

#ifndef NO_STRICT
#ifndef STRICT
#define STRICT 1
#endif
#endif /* NO_STRICT */

/* minwinbase.h */
typedef struct _SECURITY_ATTRIBUTES {
    DWORD nLength;
    LPVOID lpSecurityDescriptor;
    BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;

/* winnt.h */
#ifdef __clang__
typedef int64_t LONGLONG;
#else
typedef __int64 LONGLONG;
#endif

typedef _Return_type_success_(return >= 0) LONG HRESULT;

#if defined(_WIN32) || defined(_MPPC_)

// Win32 doesn't support __export

#ifdef _68K_
#define STDMETHODCALLTYPE       __cdecl
#else
#define STDMETHODCALLTYPE       __stdcall
#endif
#define STDMETHODVCALLTYPE      __cdecl

#define STDAPICALLTYPE          __stdcall
#define STDAPIVCALLTYPE         __cdecl

#else

#define STDMETHODCALLTYPE       __export __stdcall
#define STDMETHODVCALLTYPE      __export __cdecl

#define STDAPICALLTYPE          __export __stdcall
#define STDAPIVCALLTYPE         __export __cdecl

#endif

#define DUMMYSTRUCTNAME

typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
    LONGLONG QuadPart;
} LARGE_INTEGER;

#ifdef __cplusplus
    #define EXTERN_C       extern "C"
    #define EXTERN_C_START extern "C" {
    #define EXTERN_C_END   }
#else
    #define EXTERN_C       extern
    #define EXTERN_C_START
    #define EXTERN_C_END
#endif

#if (defined(_M_IX86) || defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_ARM64)) && !defined(MIDL_PASS)
#define DECLSPEC_IMPORT __declspec(dllimport)
#else
#define DECLSPEC_IMPORT
#endif

#ifdef __cplusplus

// Define operator overloads to enable bit operations on enum values that are 
// used to define flags. Use DEFINE_ENUM_FLAG_OPERATORS(YOUR_TYPE) to enable these 
// operators on YOUR_TYPE.

// Moved here from objbase.w.

// Templates are defined here in order to avoid a dependency on C++ <type_traits> header file,
// or on compiler-specific contructs.
extern "C++" {

    template <size_t S>
    struct _ENUM_FLAG_INTEGER_FOR_SIZE;

    template <>
    struct _ENUM_FLAG_INTEGER_FOR_SIZE<1>
    {
        typedef INT8 type;
    };

    template <>
    struct _ENUM_FLAG_INTEGER_FOR_SIZE<2>
    {
        typedef INT16 type;
    };

    template <>
    struct _ENUM_FLAG_INTEGER_FOR_SIZE<4>
    {
        typedef INT32 type;
    };

    // used as an approximation of std::underlying_type<T>
    template <class T>
    struct _ENUM_FLAG_SIZED_INTEGER
    {
        typedef typename _ENUM_FLAG_INTEGER_FOR_SIZE<sizeof(T)>::type type;
    };

}

#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
extern "C++" { \
inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) | ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) |= ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) & ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) &= ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE operator ~ (ENUMTYPE a) { return ENUMTYPE(~((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a)); } \
inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) ^ ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) ^= ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
}
#else
#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) // NOP, C allows these operators.
#endif

#ifndef DECLSPEC_NOTHROW
#if (_MSC_VER >= 1200) && !defined(MIDL_PASS)
#define DECLSPEC_NOTHROW   __declspec(nothrow)
#else
#define DECLSPEC_NOTHROW
#endif
#endif

#ifdef STRICT
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;

/* windef.h */
typedef struct tagRECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

DECLARE_HANDLE            (HWND);

/* minwindef.h (2) */
DECLARE_HANDLE(HINSTANCE);
typedef HINSTANCE HMODULE;      /* HMODULEs can be used in place of HINSTANCEs */

/* winerror.h */
#define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
#define S_OK                             _HRESULT_TYPEDEF_(0x0L)
#define E_UNEXPECTED                     _HRESULT_TYPEDEF_(0x8000FFFFL)
#define DXGI_ERROR_NOT_FOUND             _HRESULT_TYPEDEF_(0x887a0002)
#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
#define FAILED(hr) (((HRESULT)(hr)) < 0)

/* guiddef.h */
typedef struct _GUID {
    DWORD Data1;
    WORD  Data2;
    WORD  Data3;
    BYTE  Data4 [8];
} GUID;
typedef GUID IID;
typedef IID *LPIID;

#ifdef __midl_proxy
#define __MIDL_CONST
#else
#define __MIDL_CONST const
#endif

#ifdef __cplusplus
    #define REFIID const IID &
#else
    #define REFIID const IID * __MIDL_CONST
#endif

#ifdef __cplusplus
#define REFGUID const GUID &
#else
#define REFGUID const GUID * __MIDL_CONST
#endif

#ifndef DECLSPEC_SELECTANY
#if (_MSC_VER >= 1100)
#define DECLSPEC_SELECTANY  __declspec(selectany)
#else
#define DECLSPEC_SELECTANY
#endif
#endif

#ifdef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
        EXTERN_C const GUID DECLSPEC_SELECTANY name \
                = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
    EXTERN_C const GUID FAR name
#endif // INITGUID

/* rpc.h */
#if defined(__specstrings)
typedef _Return_type_success_(return == 0) LONG RPC_STATUS;
#else
typedef LONG RPC_STATUS;
#endif

#if !defined(__RPC_MAC__) && ( (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) )
#       define __RPC_API  __stdcall
#       define __RPC_USER __stdcall
#       define __RPC_STUB __stdcall
#       define  RPC_ENTRY __stdcall
#else // Not Win32/Win64
#       define __RPC_API
#       define __RPC_USER
#       define __RPC_STUB
#       define RPC_ENTRY
#endif

#define __RPC_FAR

typedef void * I_RPC_HANDLE;

/* rpcdce.h */
#ifndef UUID_DEFINED
#define UUID_DEFINED
typedef GUID UUID;
#ifndef uuid_t
#define uuid_t UUID
#endif
#endif

typedef I_RPC_HANDLE RPC_BINDING_HANDLE;
typedef RPC_BINDING_HANDLE handle_t;
#define rpc_binding_handle_t RPC_BINDING_HANDLE

#define RPC_MGR_EPV void

/* rpcdcep.h */
//#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)

typedef struct _RPC_VERSION {
    unsigned short MajorVersion;
    unsigned short MinorVersion;
} RPC_VERSION;

typedef struct _RPC_SYNTAX_IDENTIFIER {
    GUID SyntaxGUID;
    RPC_VERSION SyntaxVersion;
} RPC_SYNTAX_IDENTIFIER, __RPC_FAR * PRPC_SYNTAX_IDENTIFIER;

typedef struct _RPC_MESSAGE
{
    RPC_BINDING_HANDLE Handle;
    unsigned long DataRepresentation;
    void __RPC_FAR * Buffer;
    unsigned int BufferLength;
    unsigned int ProcNum;
    PRPC_SYNTAX_IDENTIFIER TransferSyntax;
    void __RPC_FAR * RpcInterfaceInformation;
    void __RPC_FAR * ReservedForRuntime;
    RPC_MGR_EPV __RPC_FAR * ManagerEpv;
    void __RPC_FAR * ImportContext;
    unsigned long RpcFlags;
} RPC_MESSAGE, __RPC_FAR * PRPC_MESSAGE;

//#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */

/* rpcndr.h */
#ifndef DECLSPEC_NOVTABLE
#if (_MSC_VER >= 1100) && defined(__cplusplus)
#define DECLSPEC_NOVTABLE __declspec(novtable)
#else
#define DECLSPEC_NOVTABLE
#endif
#endif

#ifndef DECLSPEC_UUID
#if (_MSC_VER >= 1100) && defined(__cplusplus)
#define DECLSPEC_UUID(x) __declspec(uuid(x))
#else
#define DECLSPEC_UUID(x)
#endif
#endif

#define MIDL_INTERFACE(x)   struct DECLSPEC_UUID(x) DECLSPEC_NOVTABLE

/* combaseapi.h */
#define BEGIN_INTERFACE
#define END_INTERFACE

#ifdef _68K_
#ifndef REQUIRESAPPLEPASCAL
#define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT HRESULT PASCAL
#define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type PASCAL
#else
#define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT PASCAL HRESULT
#define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT PASCAL type
#endif
#else
#define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
#define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
#endif

#ifdef COM_STDMETHOD_CAN_THROW
#define COM_DECLSPEC_NOTHROW
#else
#define COM_DECLSPEC_NOTHROW DECLSPEC_NOTHROW
#endif

#if defined(__cplusplus) && !defined(CINTERFACE)

#ifdef COM_STDMETHOD_CAN_THROW
#define COM_DECLSPEC_NOTHROW
#else
#define COM_DECLSPEC_NOTHROW DECLSPEC_NOTHROW
#endif

#define __STRUCT__ struct
#define interface __STRUCT__
#define STDMETHOD(method)        virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method
#define STDMETHOD_(type,method)  virtual COM_DECLSPEC_NOTHROW type STDMETHODCALLTYPE method
#define STDMETHODV(method)       virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODVCALLTYPE method
#define STDMETHODV_(type,method) virtual COM_DECLSPEC_NOTHROW type STDMETHODVCALLTYPE method
#define PURE                    = 0
#define THIS_
#define THIS                    void
#define DECLARE_INTERFACE(iface)                        interface DECLSPEC_NOVTABLE iface
#define DECLARE_INTERFACE_(iface, baseiface)            interface DECLSPEC_NOVTABLE iface : public baseiface
#define DECLARE_INTERFACE_IID(iface, iid)               interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface
#define DECLARE_INTERFACE_IID_(iface, baseiface, iid)   interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public baseiface

#define IFACEMETHOD(method)         __override STDMETHOD(method)
#define IFACEMETHOD_(type,method)   __override STDMETHOD_(type,method)
#define IFACEMETHODV(method)        __override STDMETHODV(method)
#define IFACEMETHODV_(type,method)  __override STDMETHODV_(type,method)

#if !defined(BEGIN_INTERFACE)

#if defined(_MPPC_) && ((defined(_MSC_VER) || defined(__SC__) || defined(__MWERKS__)) && !defined(NO_NULL_VTABLE_ENTRY))
   #define BEGIN_INTERFACE virtual void a() {}
   #define END_INTERFACE
#else
   #define BEGIN_INTERFACE
   #define END_INTERFACE
#endif
#endif

//  IID_PPV_ARGS(ppType)
//      ppType is the variable of type IType that will be filled
//
//      RESULTS in:  IID_IType, ppvType
//      will create a compiler error if wrong level of indirection is used.
//

/* Unknwn.h */
#ifndef __IUnknown_FWD_DEFINED__
#define __IUnknown_FWD_DEFINED__
typedef interface IUnknown IUnknown;

#endif  /* __IUnknown_FWD_DEFINED__ */

extern "C++"
{
    template<typename T> _Post_equal_to_(pp) _Post_satisfies_(return == pp) void** IID_PPV_ARGS_Helper(T** pp) 
    {
#pragma prefast(suppress: 6269, "Tool issue with unused static_cast")
        static_cast<IUnknown*>(*pp);    // make sure everyone derives from IUnknown
        return reinterpret_cast<void**>(pp);
    }    
}

#define IID_PPV_ARGS(ppType) __uuidof(**(ppType)), IID_PPV_ARGS_Helper(ppType)

#else

#define interface               struct

#define STDMETHOD(method)       HRESULT (STDMETHODCALLTYPE * method)
#define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
#define STDMETHODV(method)       HRESULT (STDMETHODVCALLTYPE * method)
#define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE * method)

#define IFACEMETHOD(method)         __override STDMETHOD(method)
#define IFACEMETHOD_(type,method)   __override STDMETHOD_(type,method)
#define IFACEMETHODV(method)        __override STDMETHODV(method)
#define IFACEMETHODV_(type,method)  __override STDMETHODV_(type,method)


#if !defined(BEGIN_INTERFACE)

#if defined(_MPPC_)
    #define BEGIN_INTERFACE       void    *b;
    #define END_INTERFACE
#else
    #define BEGIN_INTERFACE
    #define END_INTERFACE
#endif
#endif


#define PURE
#define THIS_                   INTERFACE FAR* This,
#define THIS                    INTERFACE FAR* This
#ifdef CONST_VTABLE
#undef CONST_VTBL
#define CONST_VTBL const
#define DECLARE_INTERFACE(iface)    typedef interface iface { \
                                    const struct iface##Vtbl FAR* lpVtbl; \
                                } iface; \
                                typedef const struct iface##Vtbl iface##Vtbl; \
                                const struct iface##Vtbl
#else
#undef CONST_VTBL
#define CONST_VTBL
#define DECLARE_INTERFACE(iface)    typedef interface iface { \
                                    struct iface##Vtbl FAR* lpVtbl; \
                                } iface; \
                                typedef struct iface##Vtbl iface##Vtbl; \
                                struct iface##Vtbl
#endif
#define DECLARE_INTERFACE_(iface, baseiface)    DECLARE_INTERFACE(iface)
#define DECLARE_INTERFACE_IID(iface, iid)               DECLARE_INTERFACE(iface)
#define DECLARE_INTERFACE_IID_(iface, baseiface, iid)   DECLARE_INTERFACE_(iface, baseiface)
#endif

typedef interface    IRpcStubBuffer     IRpcStubBuffer;
typedef interface    IRpcChannelBuffer  IRpcChannelBuffer;

/* Unknwn.h */
#ifndef __IUnknown_FWD_DEFINED__
#define __IUnknown_FWD_DEFINED__
typedef interface IUnknown IUnknown;

#endif  /* __IUnknown_FWD_DEFINED__ */

#ifndef __IUnknown_INTERFACE_DEFINED__
#define __IUnknown_INTERFACE_DEFINED__

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

typedef /* [unique] */ IUnknown *LPUNKNOWN;

//////////////////////////////////////////////////////////////////
// IID_IUnknown and all other system IIDs are provided in UUID.LIB
// Link that library in with your proxies, clients and servers
//////////////////////////////////////////////////////////////////

#if (_MSC_VER >= 1100) && defined(__cplusplus) && !defined(CINTERFACE)
    EXTERN_C const IID IID_IUnknown;
    extern "C++"
    {
        MIDL_INTERFACE("00000000-0000-0000-C000-000000000046")
        IUnknown
        {
        public:
            BEGIN_INTERFACE
            virtual HRESULT STDMETHODCALLTYPE QueryInterface( 
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ _COM_Outptr_ void __RPC_FAR *__RPC_FAR *ppvObject) = 0;

            virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0;

            virtual ULONG STDMETHODCALLTYPE Release( void) = 0;

            template<class Q>
            HRESULT
#ifdef _M_CEE_PURE
            __clrcall
#else
            STDMETHODCALLTYPE
#endif
            QueryInterface(_COM_Outptr_ Q** pp)
            {
                return QueryInterface(__uuidof(Q), (void **)pp);
            }

            END_INTERFACE
        };
    } // extern C++
    HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(
        IUnknown __RPC_FAR * This,
        /* [in] */ REFIID riid,
        /* [iid_is][out] */ __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject);
    
    void __RPC_STUB IUnknown_QueryInterface_Stub(
        IRpcStubBuffer *This,
        IRpcChannelBuffer *_pRpcChannelBuffer,
        PRPC_MESSAGE _pRpcMessage,
        DWORD *_pdwStubPhase);
    
    ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(
        IUnknown __RPC_FAR * This);
    
    void __RPC_STUB IUnknown_AddRef_Stub(
        IRpcStubBuffer *This,
        IRpcChannelBuffer *_pRpcChannelBuffer,
        PRPC_MESSAGE _pRpcMessage,
        DWORD *_pdwStubPhase);
    
    ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(
        IUnknown __RPC_FAR * This);
    
    void __RPC_STUB IUnknown_Release_Stub(
        IRpcStubBuffer *This,
        IRpcChannelBuffer *_pRpcChannelBuffer,
        PRPC_MESSAGE _pRpcMessage,
        DWORD *_pdwStubPhase);
#else

EXTERN_C const IID IID_IUnknown;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("00000000-0000-0000-C000-000000000046")
    IUnknown
    {
    public:
        BEGIN_INTERFACE
        virtual HRESULT STDMETHODCALLTYPE QueryInterface( 
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject) = 0;
        
        virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0;
        
        virtual ULONG STDMETHODCALLTYPE Release( void) = 0;
        
        END_INTERFACE
    };
    
    
#else   /* C style interface */

    typedef struct IUnknownVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IUnknown * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IUnknown * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IUnknown * This);
        
        END_INTERFACE
    } IUnknownVtbl;

    interface IUnknown
    {
        CONST_VTBL struct IUnknownVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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

#endif /* COBJMACROS */


#endif /* C style interface */


#if 0
HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy( 
    IUnknown * This,
    /* [in] */ REFIID riid,
    /* [annotation][iid_is][out] */ 
    _COM_Outptr_  void **ppvObject);


void __RPC_STUB IUnknown_QueryInterface_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy( 
    IUnknown * This);


void __RPC_STUB IUnknown_AddRef_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy( 
    IUnknown * This);


void __RPC_STUB IUnknown_Release_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);
#endif


#endif /* LEGACY MSVC CHECK */

#endif /* __IUnknown_INTERFACE_DEFINED__ */

/* WTypesbase.h */
#if defined(_WIN32) && !defined(OLE2ANSI)
typedef WCHAR OLECHAR;

typedef /* [string] */  __RPC_string OLECHAR *LPOLESTR;

typedef /* [string] */  __RPC_string const OLECHAR *LPCOLESTR;

#define OLESTR(str) L##str

#else

typedef char      OLECHAR;
typedef LPSTR     LPOLESTR;
typedef LPCSTR    LPCOLESTR;
#define OLESTR(str) str
#endif

/* d3dcommon.h */
#ifdef __cplusplus
extern "C"{
#endif 

typedef
enum D3D_FEATURE_LEVEL
    {
        D3D_FEATURE_LEVEL_9_1   = 0x9100,
        D3D_FEATURE_LEVEL_9_2   = 0x9200,
        D3D_FEATURE_LEVEL_9_3   = 0x9300,
        D3D_FEATURE_LEVEL_10_0  = 0xa000,
        D3D_FEATURE_LEVEL_10_1  = 0xa100,
        D3D_FEATURE_LEVEL_11_0  = 0xb000,
        D3D_FEATURE_LEVEL_11_1  = 0xb100,
        D3D_FEATURE_LEVEL_12_0  = 0xc000,
        D3D_FEATURE_LEVEL_12_1  = 0xc100
    }   D3D_FEATURE_LEVEL;

typedef 
enum D3D_PRIMITIVE_TOPOLOGY
    {
        D3D_PRIMITIVE_TOPOLOGY_UNDEFINED        = 0,
        D3D_PRIMITIVE_TOPOLOGY_POINTLIST        = 1,
        D3D_PRIMITIVE_TOPOLOGY_LINELIST = 2,
        D3D_PRIMITIVE_TOPOLOGY_LINESTRIP        = 3,
        D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST     = 4,
        D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP    = 5,
        D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ     = 10,
        D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ    = 11,
        D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12,
        D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ        = 13,
        D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST        = 33,
        D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST        = 34,
        D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST        = 35,
        D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST        = 36,
        D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST        = 37,
        D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST        = 38,
        D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST        = 39,
        D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST        = 40,
        D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST        = 41,
        D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST       = 42,
        D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST       = 43,
        D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST       = 44,
        D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST       = 45,
        D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST       = 46,
        D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST       = 47,
        D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST       = 48,
        D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST       = 49,
        D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST       = 50,
        D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST       = 51,
        D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST       = 52,
        D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST       = 53,
        D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST       = 54,
        D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST       = 55,
        D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST       = 56,
        D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST       = 57,
        D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST       = 58,
        D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST       = 59,
        D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST       = 60,
        D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST       = 61,
        D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST       = 62,
        D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST       = 63,
        D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST       = 64,
        D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED      = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED,
        D3D10_PRIMITIVE_TOPOLOGY_POINTLIST      = D3D_PRIMITIVE_TOPOLOGY_POINTLIST,
        D3D10_PRIMITIVE_TOPOLOGY_LINELIST       = D3D_PRIMITIVE_TOPOLOGY_LINELIST,
        D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP      = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,
        D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST   = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
        D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP  = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
        D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ   = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ,
        D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ  = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
        D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ       = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
        D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ      = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
        D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED      = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED,
        D3D11_PRIMITIVE_TOPOLOGY_POINTLIST      = D3D_PRIMITIVE_TOPOLOGY_POINTLIST,
        D3D11_PRIMITIVE_TOPOLOGY_LINELIST       = D3D_PRIMITIVE_TOPOLOGY_LINELIST,
        D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP      = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,
        D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST   = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
        D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP  = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
        D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ   = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ,
        D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ  = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
        D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ       = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
        D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ      = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
        D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST      = D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,
        D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST     = D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST
    }   D3D_PRIMITIVE_TOPOLOGY;

#ifdef __cplusplus
}
#endif

/* dxgiformat.h */
typedef enum DXGI_FORMAT
{
    DXGI_FORMAT_UNKNOWN                     = 0,
    DXGI_FORMAT_R32G32B32A32_TYPELESS       = 1,
    DXGI_FORMAT_R32G32B32A32_FLOAT          = 2,
    DXGI_FORMAT_R32G32B32A32_UINT           = 3,
    DXGI_FORMAT_R32G32B32A32_SINT           = 4,
    DXGI_FORMAT_R32G32B32_TYPELESS          = 5,
    DXGI_FORMAT_R32G32B32_FLOAT             = 6,
    DXGI_FORMAT_R32G32B32_UINT              = 7,
    DXGI_FORMAT_R32G32B32_SINT              = 8,
    DXGI_FORMAT_R16G16B16A16_TYPELESS       = 9,
    DXGI_FORMAT_R16G16B16A16_FLOAT          = 10,
    DXGI_FORMAT_R16G16B16A16_UNORM          = 11,
    DXGI_FORMAT_R16G16B16A16_UINT           = 12,
    DXGI_FORMAT_R16G16B16A16_SNORM          = 13,
    DXGI_FORMAT_R16G16B16A16_SINT           = 14,
    DXGI_FORMAT_R32G32_TYPELESS             = 15,
    DXGI_FORMAT_R32G32_FLOAT                = 16,
    DXGI_FORMAT_R32G32_UINT                 = 17,
    DXGI_FORMAT_R32G32_SINT                 = 18,
    DXGI_FORMAT_R32G8X24_TYPELESS           = 19,
    DXGI_FORMAT_D32_FLOAT_S8X24_UINT        = 20,
    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS    = 21,
    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT     = 22,
    DXGI_FORMAT_R10G10B10A2_TYPELESS        = 23,
    DXGI_FORMAT_R10G10B10A2_UNORM           = 24,
    DXGI_FORMAT_R10G10B10A2_UINT            = 25,
    DXGI_FORMAT_R11G11B10_FLOAT             = 26,
    DXGI_FORMAT_R8G8B8A8_TYPELESS           = 27,
    DXGI_FORMAT_R8G8B8A8_UNORM              = 28,
    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB         = 29,
    DXGI_FORMAT_R8G8B8A8_UINT               = 30,
    DXGI_FORMAT_R8G8B8A8_SNORM              = 31,
    DXGI_FORMAT_R8G8B8A8_SINT               = 32,
    DXGI_FORMAT_R16G16_TYPELESS             = 33,
    DXGI_FORMAT_R16G16_FLOAT                = 34,
    DXGI_FORMAT_R16G16_UNORM                = 35,
    DXGI_FORMAT_R16G16_UINT                 = 36,
    DXGI_FORMAT_R16G16_SNORM                = 37,
    DXGI_FORMAT_R16G16_SINT                 = 38,
    DXGI_FORMAT_R32_TYPELESS                = 39,
    DXGI_FORMAT_D32_FLOAT                   = 40,
    DXGI_FORMAT_R32_FLOAT                   = 41,
    DXGI_FORMAT_R32_UINT                    = 42,
    DXGI_FORMAT_R32_SINT                    = 43,
    DXGI_FORMAT_R24G8_TYPELESS              = 44,
    DXGI_FORMAT_D24_UNORM_S8_UINT           = 45,
    DXGI_FORMAT_R24_UNORM_X8_TYPELESS       = 46,
    DXGI_FORMAT_X24_TYPELESS_G8_UINT        = 47,
    DXGI_FORMAT_R8G8_TYPELESS               = 48,
    DXGI_FORMAT_R8G8_UNORM                  = 49,
    DXGI_FORMAT_R8G8_UINT                   = 50,
    DXGI_FORMAT_R8G8_SNORM                  = 51,
    DXGI_FORMAT_R8G8_SINT                   = 52,
    DXGI_FORMAT_R16_TYPELESS                = 53,
    DXGI_FORMAT_R16_FLOAT                   = 54,
    DXGI_FORMAT_D16_UNORM                   = 55,
    DXGI_FORMAT_R16_UNORM                   = 56,
    DXGI_FORMAT_R16_UINT                    = 57,
    DXGI_FORMAT_R16_SNORM                   = 58,
    DXGI_FORMAT_R16_SINT                    = 59,
    DXGI_FORMAT_R8_TYPELESS                 = 60,
    DXGI_FORMAT_R8_UNORM                    = 61,
    DXGI_FORMAT_R8_UINT                     = 62,
    DXGI_FORMAT_R8_SNORM                    = 63,
    DXGI_FORMAT_R8_SINT                     = 64,
    DXGI_FORMAT_A8_UNORM                    = 65,
    DXGI_FORMAT_R1_UNORM                    = 66,
    DXGI_FORMAT_R9G9B9E5_SHAREDEXP          = 67,
    DXGI_FORMAT_R8G8_B8G8_UNORM             = 68,
    DXGI_FORMAT_G8R8_G8B8_UNORM             = 69,
    DXGI_FORMAT_BC1_TYPELESS                = 70,
    DXGI_FORMAT_BC1_UNORM                   = 71,
    DXGI_FORMAT_BC1_UNORM_SRGB              = 72,
    DXGI_FORMAT_BC2_TYPELESS                = 73,
    DXGI_FORMAT_BC2_UNORM                   = 74,
    DXGI_FORMAT_BC2_UNORM_SRGB              = 75,
    DXGI_FORMAT_BC3_TYPELESS                = 76,
    DXGI_FORMAT_BC3_UNORM                   = 77,
    DXGI_FORMAT_BC3_UNORM_SRGB              = 78,
    DXGI_FORMAT_BC4_TYPELESS                = 79,
    DXGI_FORMAT_BC4_UNORM                   = 80,
    DXGI_FORMAT_BC4_SNORM                   = 81,
    DXGI_FORMAT_BC5_TYPELESS                = 82,
    DXGI_FORMAT_BC5_UNORM                   = 83,
    DXGI_FORMAT_BC5_SNORM                   = 84,
    DXGI_FORMAT_B5G6R5_UNORM                = 85,
    DXGI_FORMAT_B5G5R5A1_UNORM              = 86,
    DXGI_FORMAT_B8G8R8A8_UNORM              = 87,
    DXGI_FORMAT_B8G8R8X8_UNORM              = 88,
    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM  = 89,
    DXGI_FORMAT_B8G8R8A8_TYPELESS           = 90,
    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB         = 91,
    DXGI_FORMAT_B8G8R8X8_TYPELESS           = 92,
    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB         = 93,
    DXGI_FORMAT_BC6H_TYPELESS               = 94,
    DXGI_FORMAT_BC6H_UF16                   = 95,
    DXGI_FORMAT_BC6H_SF16                   = 96,
    DXGI_FORMAT_BC7_TYPELESS                = 97,
    DXGI_FORMAT_BC7_UNORM                   = 98,
    DXGI_FORMAT_BC7_UNORM_SRGB              = 99,
    DXGI_FORMAT_AYUV                        = 100,
    DXGI_FORMAT_Y410                        = 101,
    DXGI_FORMAT_Y416                        = 102,
    DXGI_FORMAT_NV12                        = 103,
    DXGI_FORMAT_P010                        = 104,
    DXGI_FORMAT_P016                        = 105,
    DXGI_FORMAT_420_OPAQUE                  = 106,
    DXGI_FORMAT_YUY2                        = 107,
    DXGI_FORMAT_Y210                        = 108,
    DXGI_FORMAT_Y216                        = 109,
    DXGI_FORMAT_NV11                        = 110,
    DXGI_FORMAT_AI44                        = 111,
    DXGI_FORMAT_IA44                        = 112,
    DXGI_FORMAT_P8                          = 113,
    DXGI_FORMAT_A8P8                        = 114,
    DXGI_FORMAT_B4G4R4A4_UNORM              = 115,
    DXGI_FORMAT_FORCE_UINT                  = 0xffffffff
} DXGI_FORMAT;

/* dxgitype.h */
typedef struct DXGI_SAMPLE_DESC
{
    UINT Count;
    UINT Quality;
} DXGI_SAMPLE_DESC;

/* d3dcommon.h */
typedef 
enum _D3D_INCLUDE_TYPE
    {
        D3D_INCLUDE_LOCAL       = 0,
        D3D_INCLUDE_SYSTEM      = ( D3D_INCLUDE_LOCAL + 1 ) ,
        D3D10_INCLUDE_LOCAL     = D3D_INCLUDE_LOCAL,
        D3D10_INCLUDE_SYSTEM    = D3D_INCLUDE_SYSTEM,
        D3D_INCLUDE_FORCE_DWORD = 0x7fffffff
    }   D3D_INCLUDE_TYPE;

typedef interface ID3DInclude ID3DInclude;
#undef INTERFACE
#define INTERFACE ID3DInclude
DECLARE_INTERFACE(ID3DInclude)
{
    STDMETHOD(Open)(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE;
    STDMETHOD(Close)(THIS_ LPCVOID pData) PURE;
};

typedef struct _D3D_SHADER_MACRO
    {
    LPCSTR Name;
    LPCSTR Definition;
    }   D3D_SHADER_MACRO;

typedef struct _D3D_SHADER_MACRO *LPD3D_SHADER_MACRO;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8BA5FB08-5195-40e2-AC58-0D989C3A0102")
    ID3D10Blob : public IUnknown
    {
    public:
        virtual LPVOID STDMETHODCALLTYPE GetBufferPointer( void) = 0;
        
        virtual SIZE_T STDMETHODCALLTYPE GetBufferSize( void) = 0;
        
    };
    
    
#else   /* C style interface */

    #ifndef __ID3D10Blob_FWD_DEFINED__
    #define __ID3D10Blob_FWD_DEFINED__
    typedef interface ID3D10Blob ID3D10Blob;

    #endif      /* __ID3D10Blob_FWD_DEFINED__ */

    typedef struct ID3D10BlobVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D10Blob * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D10Blob * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D10Blob * This);
        
        LPVOID ( STDMETHODCALLTYPE *GetBufferPointer )( 
            ID3D10Blob * This);
        
        SIZE_T ( STDMETHODCALLTYPE *GetBufferSize )( 
            ID3D10Blob * This);
        
        END_INTERFACE
    } ID3D10BlobVtbl;

    interface ID3D10Blob
    {
        CONST_VTBL struct ID3D10BlobVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


#define ID3D10Blob_GetBufferPointer(This)       \
    ( (This)->lpVtbl -> GetBufferPointer(This) ) 

#define ID3D10Blob_GetBufferSize(This)  \
    ( (This)->lpVtbl -> GetBufferSize(This) ) 

#endif /* COBJMACROS */


#endif  /* C style interface */

typedef interface ID3D10Blob* LPD3D10BLOB;
typedef ID3D10Blob ID3DBlob;

typedef ID3DBlob* LPD3DBLOB;
#define IID_ID3DBlob IID_ID3D10Blob

/* d3d12.h */
/* Forward Declarations */ 

#ifndef __ID3D12Object_FWD_DEFINED__
#define __ID3D12Object_FWD_DEFINED__
typedef interface ID3D12Object ID3D12Object;

#endif  /* __ID3D12Object_FWD_DEFINED__ */


#ifndef __ID3D12DeviceChild_FWD_DEFINED__
#define __ID3D12DeviceChild_FWD_DEFINED__
typedef interface ID3D12DeviceChild ID3D12DeviceChild;

#endif  /* __ID3D12DeviceChild_FWD_DEFINED__ */


#ifndef __ID3D12RootSignature_FWD_DEFINED__
#define __ID3D12RootSignature_FWD_DEFINED__
typedef interface ID3D12RootSignature ID3D12RootSignature;

#endif  /* __ID3D12RootSignature_FWD_DEFINED__ */


#ifndef __ID3D12RootSignatureDeserializer_FWD_DEFINED__
#define __ID3D12RootSignatureDeserializer_FWD_DEFINED__
typedef interface ID3D12RootSignatureDeserializer ID3D12RootSignatureDeserializer;

#endif  /* __ID3D12RootSignatureDeserializer_FWD_DEFINED__ */


#ifndef __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__
#define __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__
typedef interface ID3D12VersionedRootSignatureDeserializer ID3D12VersionedRootSignatureDeserializer;

#endif  /* __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__ */


#ifndef __ID3D12Pageable_FWD_DEFINED__
#define __ID3D12Pageable_FWD_DEFINED__
typedef interface ID3D12Pageable ID3D12Pageable;

#endif  /* __ID3D12Pageable_FWD_DEFINED__ */


#ifndef __ID3D12Heap_FWD_DEFINED__
#define __ID3D12Heap_FWD_DEFINED__
typedef interface ID3D12Heap ID3D12Heap;

#endif  /* __ID3D12Heap_FWD_DEFINED__ */


#ifndef __ID3D12Resource_FWD_DEFINED__
#define __ID3D12Resource_FWD_DEFINED__
typedef interface ID3D12Resource ID3D12Resource;

#endif  /* __ID3D12Resource_FWD_DEFINED__ */


#ifndef __ID3D12CommandAllocator_FWD_DEFINED__
#define __ID3D12CommandAllocator_FWD_DEFINED__
typedef interface ID3D12CommandAllocator ID3D12CommandAllocator;

#endif  /* __ID3D12CommandAllocator_FWD_DEFINED__ */


#ifndef __ID3D12Fence_FWD_DEFINED__
#define __ID3D12Fence_FWD_DEFINED__
typedef interface ID3D12Fence ID3D12Fence;

#endif  /* __ID3D12Fence_FWD_DEFINED__ */


#ifndef __ID3D12PipelineState_FWD_DEFINED__
#define __ID3D12PipelineState_FWD_DEFINED__
typedef interface ID3D12PipelineState ID3D12PipelineState;

#endif  /* __ID3D12PipelineState_FWD_DEFINED__ */


#ifndef __ID3D12DescriptorHeap_FWD_DEFINED__
#define __ID3D12DescriptorHeap_FWD_DEFINED__
typedef interface ID3D12DescriptorHeap ID3D12DescriptorHeap;

#endif  /* __ID3D12DescriptorHeap_FWD_DEFINED__ */


#ifndef __ID3D12QueryHeap_FWD_DEFINED__
#define __ID3D12QueryHeap_FWD_DEFINED__
typedef interface ID3D12QueryHeap ID3D12QueryHeap;

#endif  /* __ID3D12QueryHeap_FWD_DEFINED__ */


#ifndef __ID3D12CommandSignature_FWD_DEFINED__
#define __ID3D12CommandSignature_FWD_DEFINED__
typedef interface ID3D12CommandSignature ID3D12CommandSignature;

#endif  /* __ID3D12CommandSignature_FWD_DEFINED__ */


#ifndef __ID3D12CommandList_FWD_DEFINED__
#define __ID3D12CommandList_FWD_DEFINED__
typedef interface ID3D12CommandList ID3D12CommandList;

#endif  /* __ID3D12CommandList_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList_FWD_DEFINED__
#define __ID3D12GraphicsCommandList_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList ID3D12GraphicsCommandList;

#endif  /* __ID3D12GraphicsCommandList_FWD_DEFINED__ */


#ifndef __ID3D12GraphicsCommandList1_FWD_DEFINED__
#define __ID3D12GraphicsCommandList1_FWD_DEFINED__
typedef interface ID3D12GraphicsCommandList1 ID3D12GraphicsCommandList1;

#endif  /* __ID3D12GraphicsCommandList1_FWD_DEFINED__ */


#ifndef __ID3D12CommandQueue_FWD_DEFINED__
#define __ID3D12CommandQueue_FWD_DEFINED__
typedef interface ID3D12CommandQueue ID3D12CommandQueue;

#endif  /* __ID3D12CommandQueue_FWD_DEFINED__ */


#ifndef __ID3D12Device_FWD_DEFINED__
#define __ID3D12Device_FWD_DEFINED__
typedef interface ID3D12Device ID3D12Device;

#endif  /* __ID3D12Device_FWD_DEFINED__ */


#ifndef __ID3D12PipelineLibrary_FWD_DEFINED__
#define __ID3D12PipelineLibrary_FWD_DEFINED__
typedef interface ID3D12PipelineLibrary ID3D12PipelineLibrary;

#endif  /* __ID3D12PipelineLibrary_FWD_DEFINED__ */


#ifndef __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 __ID3D12Tools_FWD_DEFINED__
#define __ID3D12Tools_FWD_DEFINED__
typedef interface ID3D12Tools ID3D12Tools;

#endif  /* __ID3D12Tools_FWD_DEFINED__ */

#ifdef __cplusplus
extern "C"{
#endif

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("c4fec28f-7966-4e95-9f94-f431cb56c3b8")
    ID3D12Object : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetPrivateData( 
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetPrivateData( 
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( 
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetName( 
            _In_z_  LPCWSTR Name) = 0;
        
    };
    
    
#else   /* C style interface */

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

    interface ID3D12Object
    {
        CONST_VTBL struct ID3D12ObjectVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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

#endif /* COBJMACROS */


#endif  /* C style interface */

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("905db94b-a00c-4140-9df5-2b64ca9ea357")
    ID3D12DeviceChild : public ID3D12Object
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetDevice( 
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice) = 0;
        
    };
    
    
#else   /* C style interface */

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

    interface ID3D12DeviceChild
    {
        CONST_VTBL struct ID3D12DeviceChildVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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

#endif /* COBJMACROS */


#endif  /* C style interface */

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("c54a6b66-72df-4ee8-8be5-a946a1429214")
    ID3D12RootSignature : public ID3D12DeviceChild
    {
    public:
    };
    
    
#else   /* C style interface */

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

    interface ID3D12RootSignature
    {
        CONST_VTBL struct ID3D12RootSignatureVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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


#endif /* COBJMACROS */


#endif  /* C style interface */

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("63ee58fb-1268-4835-86da-f008ce62f0d6")
    ID3D12Pageable : public ID3D12DeviceChild
    {
    public:
    };
    
    
#else   /* C style interface */

    #ifndef __ID3D12Pageable_FWD_DEFINED__
    #define __ID3D12Pageable_FWD_DEFINED__
    typedef interface ID3D12Pageable ID3D12Pageable;

    #endif      /* __ID3D12Pageable_FWD_DEFINED__ */

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

    interface ID3D12Pageable
    {
        CONST_VTBL struct ID3D12PageableVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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


#endif /* COBJMACROS */


#endif  /* C style interface */

typedef struct D3D12_RANGE
    {
    SIZE_T Begin;
    SIZE_T End;
    }   D3D12_RANGE;

typedef struct D3D12_BOX
    {
    UINT left;
    UINT top;
    UINT front;
    UINT right;
    UINT bottom;
    UINT back;
    }   D3D12_BOX;

typedef 
enum D3D12_COMMAND_LIST_TYPE
    {
        D3D12_COMMAND_LIST_TYPE_DIRECT  = 0,
        D3D12_COMMAND_LIST_TYPE_BUNDLE  = 1,
        D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
        D3D12_COMMAND_LIST_TYPE_COPY    = 3
    }   D3D12_COMMAND_LIST_TYPE;

typedef 
enum D3D12_COMMAND_QUEUE_FLAGS
    {
        D3D12_COMMAND_QUEUE_FLAG_NONE                   = 0,
        D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT    = 0x1
    }   D3D12_COMMAND_QUEUE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAGS );
typedef 
enum D3D12_COMMAND_QUEUE_PRIORITY
    {
        D3D12_COMMAND_QUEUE_PRIORITY_NORMAL             = 0,
        D3D12_COMMAND_QUEUE_PRIORITY_HIGH               = 100,
        D3D12_COMMAND_QUEUE_PRIORITY_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 struct D3D12_SHADER_BYTECODE
    {
    _Field_size_bytes_full_(BytecodeLength)  const void *pShaderBytecode;
    SIZE_T BytecodeLength;
    }   D3D12_SHADER_BYTECODE;

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_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 
enum D3D12_BLEND
    {
        D3D12_BLEND_ZERO                = 1,
        D3D12_BLEND_ONE                 = 2,
        D3D12_BLEND_SRC_COLOR           = 3,
        D3D12_BLEND_INV_SRC_COLOR       = 4,
        D3D12_BLEND_SRC_ALPHA           = 5,
        D3D12_BLEND_INV_SRC_ALPHA       = 6,
        D3D12_BLEND_DEST_ALPHA          = 7,
        D3D12_BLEND_INV_DEST_ALPHA      = 8,
        D3D12_BLEND_DEST_COLOR          = 9,
        D3D12_BLEND_INV_DEST_COLOR      = 10,
        D3D12_BLEND_SRC_ALPHA_SAT       = 11,
        D3D12_BLEND_BLEND_FACTOR        = 14,
        D3D12_BLEND_INV_BLEND_FACTOR    = 15,
        D3D12_BLEND_SRC1_COLOR          = 16,
        D3D12_BLEND_INV_SRC1_COLOR      = 17,
        D3D12_BLEND_SRC1_ALPHA          = 18,
        D3D12_BLEND_INV_SRC1_ALPHA      = 19
    }   D3D12_BLEND;

typedef 
enum D3D12_BLEND_OP
    {
        D3D12_BLEND_OP_ADD          = 1,
        D3D12_BLEND_OP_SUBTRACT     = 2,
        D3D12_BLEND_OP_REV_SUBTRACT = 3,
        D3D12_BLEND_OP_MIN          = 4,
        D3D12_BLEND_OP_MAX          = 5
    }   D3D12_BLEND_OP;

typedef 
enum D3D12_LOGIC_OP
    {
        D3D12_LOGIC_OP_CLEAR            = 0,
        D3D12_LOGIC_OP_SET              = ( 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;

typedef 
enum D3D12_FILL_MODE
    {
        D3D12_FILL_MODE_WIREFRAME       = 2,
        D3D12_FILL_MODE_SOLID   = 3
    }   D3D12_FILL_MODE;

typedef 
enum D3D12_CULL_MODE
    {
        D3D12_CULL_MODE_NONE    = 1,
        D3D12_CULL_MODE_FRONT   = 2,
        D3D12_CULL_MODE_BACK    = 3
    }   D3D12_CULL_MODE;

typedef 
enum D3D12_CONSERVATIVE_RASTERIZATION_MODE
    {
        D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF   = 0,
        D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON    = 1
    }   D3D12_CONSERVATIVE_RASTERIZATION_MODE;

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

typedef 
enum D3D12_DEPTH_WRITE_MASK
    {
        D3D12_DEPTH_WRITE_MASK_ZERO = 0,
        D3D12_DEPTH_WRITE_MASK_ALL  = 1
    }   D3D12_DEPTH_WRITE_MASK;

typedef 
enum D3D12_COMPARISON_FUNC
    {
        D3D12_COMPARISON_FUNC_NEVER         = 1,
        D3D12_COMPARISON_FUNC_LESS          = 2,
        D3D12_COMPARISON_FUNC_EQUAL         = 3,
        D3D12_COMPARISON_FUNC_LESS_EQUAL    = 4,
        D3D12_COMPARISON_FUNC_GREATER       = 5,
        D3D12_COMPARISON_FUNC_NOT_EQUAL     = 6,
        D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,
        D3D12_COMPARISON_FUNC_ALWAYS        = 8
    }   D3D12_COMPARISON_FUNC;

typedef 
enum D3D12_STENCIL_OP
    {
        D3D12_STENCIL_OP_KEEP       = 1,
        D3D12_STENCIL_OP_ZERO       = 2,
        D3D12_STENCIL_OP_REPLACE    = 3,
        D3D12_STENCIL_OP_INCR_SAT   = 4,
        D3D12_STENCIL_OP_DECR_SAT   = 5,
        D3D12_STENCIL_OP_INVERT     = 6,
        D3D12_STENCIL_OP_INCR       = 7,
        D3D12_STENCIL_OP_DECR       = 8
    }   D3D12_STENCIL_OP;

typedef struct D3D12_DEPTH_STENCILOP_DESC
    {
    D3D12_STENCIL_OP StencilFailOp;
    D3D12_STENCIL_OP StencilDepthFailOp;
    D3D12_STENCIL_OP StencilPassOp;
    D3D12_COMPARISON_FUNC StencilFunc;
    }   D3D12_DEPTH_STENCILOP_DESC;

typedef struct D3D12_DEPTH_STENCIL_DESC
    {
    BOOL DepthEnable;
    D3D12_DEPTH_WRITE_MASK DepthWriteMask;
    D3D12_COMPARISON_FUNC DepthFunc;
    BOOL StencilEnable;
    UINT8 StencilReadMask;
    UINT8 StencilWriteMask;
    D3D12_DEPTH_STENCILOP_DESC FrontFace;
    D3D12_DEPTH_STENCILOP_DESC BackFace;
    }   D3D12_DEPTH_STENCIL_DESC;

typedef 
enum D3D12_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 struct D3D12_INPUT_LAYOUT_DESC
    {
    _Field_size_full_(NumElements)  const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs;
    UINT NumElements;
    }   D3D12_INPUT_LAYOUT_DESC;

typedef 
enum D3D12_PIPELINE_STATE_FLAGS
    {
        D3D12_PIPELINE_STATE_FLAG_NONE          = 0,
        D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG    = 0x1
    }   D3D12_PIPELINE_STATE_FLAGS;

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_PRIMITIVE_TOPOLOGY_TYPE
    {
        D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
        D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT     = 1,
        D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE      = 2,
        D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE  = 3,
        D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH     = 4
    }   D3D12_PRIMITIVE_TOPOLOGY_TYPE;

typedef struct D3D12_CACHED_PIPELINE_STATE
    {
    _Field_size_bytes_full_(CachedBlobSizeInBytes)  const void *pCachedBlob;
    SIZE_T CachedBlobSizeInBytes;
    }   D3D12_CACHED_PIPELINE_STATE;

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 struct D3D12_RESOURCE_ALLOCATION_INFO
    {
    UINT64 SizeInBytes;
    UINT64 Alignment;
    }   D3D12_RESOURCE_ALLOCATION_INFO;

typedef 
enum D3D12_RESOURCE_DIMENSION
    {
        D3D12_RESOURCE_DIMENSION_UNKNOWN    = 0,
        D3D12_RESOURCE_DIMENSION_BUFFER     = 1,
        D3D12_RESOURCE_DIMENSION_TEXTURE1D  = 2,
        D3D12_RESOURCE_DIMENSION_TEXTURE2D  = 3,
        D3D12_RESOURCE_DIMENSION_TEXTURE3D  = 4
    }   D3D12_RESOURCE_DIMENSION;

typedef 
enum D3D12_TEXTURE_LAYOUT
    {
        D3D12_TEXTURE_LAYOUT_UNKNOWN                = 0,
        D3D12_TEXTURE_LAYOUT_ROW_MAJOR              = 1,
        D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
        D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE  = 3
    }   D3D12_TEXTURE_LAYOUT;

typedef 
enum D3D12_RESOURCE_FLAGS
    {
        D3D12_RESOURCE_FLAG_NONE                        = 0,
        D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET         = 0x1,
        D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL         = 0x2,
        D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS      = 0x4,
        D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE        = 0x8,
        D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER         = 0x10,
        D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS   = 0x20
    }   D3D12_RESOURCE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_FLAGS );
typedef struct D3D12_RESOURCE_DESC
    {
    D3D12_RESOURCE_DIMENSION Dimension;
    UINT64 Alignment;
    UINT64 Width;
    UINT Height;
    UINT16 DepthOrArraySize;
    UINT16 MipLevels;
    DXGI_FORMAT Format;
    DXGI_SAMPLE_DESC SampleDesc;
    D3D12_TEXTURE_LAYOUT Layout;
    D3D12_RESOURCE_FLAGS Flags;
    }   D3D12_RESOURCE_DESC;

typedef 
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 
enum D3D12_HEAP_TYPE
    {
        D3D12_HEAP_TYPE_DEFAULT  = 1,
        D3D12_HEAP_TYPE_UPLOAD   = 2,
        D3D12_HEAP_TYPE_READBACK = 3,
        D3D12_HEAP_TYPE_CUSTOM   = 4
    }   D3D12_HEAP_TYPE;

typedef 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_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;

typedef 
enum D3D12_TILE_MAPPING_FLAGS
    {
        D3D12_TILE_MAPPING_FLAG_NONE        = 0,
        D3D12_TILE_MAPPING_FLAG_NO_HAZARD   = 0x1
    }   D3D12_TILE_MAPPING_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAGS );
typedef 
enum D3D12_TILE_COPY_FLAGS
    {
        D3D12_TILE_COPY_FLAG_NONE                                       = 0,
        D3D12_TILE_COPY_FLAG_NO_HAZARD                                  = 0x1,
        D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE   = 0x2,
        D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER   = 0x4
    }   D3D12_TILE_COPY_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAGS );
typedef 
enum D3D12_RESOURCE_STATES
    {
        D3D12_RESOURCE_STATE_COMMON                     = 0,
        D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,
        D3D12_RESOURCE_STATE_INDEX_BUFFER               = 0x2,
        D3D12_RESOURCE_STATE_RENDER_TARGET              = 0x4,
        D3D12_RESOURCE_STATE_UNORDERED_ACCESS           = 0x8,
        D3D12_RESOURCE_STATE_DEPTH_WRITE                = 0x10,
        D3D12_RESOURCE_STATE_DEPTH_READ                 = 0x20,
        D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE  = 0x40,
        D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE      = 0x80,
        D3D12_RESOURCE_STATE_STREAM_OUT                 = 0x100,
        D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT          = 0x200,
        D3D12_RESOURCE_STATE_COPY_DEST                  = 0x400,
        D3D12_RESOURCE_STATE_COPY_SOURCE                = 0x800,
        D3D12_RESOURCE_STATE_RESOLVE_DEST               = 0x1000,
        D3D12_RESOURCE_STATE_RESOLVE_SOURCE             = 0x2000,
        D3D12_RESOURCE_STATE_GENERIC_READ               = ( ( ( ( ( 0x1 | 0x2 )  | 0x40 )  | 0x80 )  | 0x200 )  | 0x800 ) ,
        D3D12_RESOURCE_STATE_PRESENT                    = 0,
        D3D12_RESOURCE_STATE_PREDICATION                = 0x200
    }   D3D12_RESOURCE_STATES;

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 
enum D3D12_FEATURE
    {
        D3D12_FEATURE_D3D12_OPTIONS                 = 0,
        D3D12_FEATURE_ARCHITECTURE                  = 1,
        D3D12_FEATURE_FEATURE_LEVELS                = 2,
        D3D12_FEATURE_FORMAT_SUPPORT                = 3,
        D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS    = 4,
        D3D12_FEATURE_FORMAT_INFO                   = 5,
        D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT   = 6,
        D3D12_FEATURE_SHADER_MODEL                  = 7,
        D3D12_FEATURE_D3D12_OPTIONS1                = 8,
        D3D12_FEATURE_ROOT_SIGNATURE                = 12,
        D3D12_FEATURE_ARCHITECTURE1                 = 16,
        D3D12_FEATURE_D3D12_OPTIONS2                = 18,
        D3D12_FEATURE_SHADER_CACHE                  = 19,
        D3D12_FEATURE_COMMAND_QUEUE_PRIORITY        = 20
    }   D3D12_FEATURE;

typedef 
enum D3D12_CLEAR_FLAGS
    {
        D3D12_CLEAR_FLAG_DEPTH      = 0x1,
        D3D12_CLEAR_FLAG_STENCIL    = 0x2
    }   D3D12_CLEAR_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_CLEAR_FLAGS );
typedef 
enum D3D12_FENCE_FLAGS
    {
        D3D12_FENCE_FLAG_NONE                   = 0,
        D3D12_FENCE_FLAG_SHARED                 = 0x1,
        D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER   = 0x2
    }   D3D12_FENCE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_FLAGS );
typedef 
enum D3D12_DESCRIPTOR_HEAP_TYPE
    {
        D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV  = 0,
        D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER      = ( D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV + 1 ) ,
        D3D12_DESCRIPTOR_HEAP_TYPE_RTV          = ( D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER + 1 ) ,
        D3D12_DESCRIPTOR_HEAP_TYPE_DSV          = ( D3D12_DESCRIPTOR_HEAP_TYPE_RTV + 1 ) ,
        D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES    = ( D3D12_DESCRIPTOR_HEAP_TYPE_DSV + 1 ) 
    }   D3D12_DESCRIPTOR_HEAP_TYPE;

typedef 
enum D3D12_DESCRIPTOR_HEAP_FLAGS
    {
        D3D12_DESCRIPTOR_HEAP_FLAG_NONE             = 0,
        D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE   = 0x1
    }   D3D12_DESCRIPTOR_HEAP_FLAGS;

typedef 
enum D3D12_SHADER_COMPONENT_MAPPING
    {
        D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0  = 0,
        D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1  = 1,
        D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2  = 2,
        D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3  = 3,
        D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0    = 4,
        D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1    = 5
    }   D3D12_SHADER_COMPONENT_MAPPING;

#define D3D12_SHADER_COMPONENT_MAPPING_MASK 0x7 
#define D3D12_SHADER_COMPONENT_MAPPING_SHIFT 3 
#define D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES (1<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*4)) 
#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(Src0,Src1,Src2,Src3) ((((Src0)&D3D12_SHADER_COMPONENT_MAPPING_MASK)| \
                                                                      (((Src1)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<D3D12_SHADER_COMPONENT_MAPPING_SHIFT)| \
                                                                      (((Src2)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*2))| \
                                                                      (((Src3)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*3))| \
                                                                      D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES))
#define D3D12_DECODE_SHADER_4_COMPONENT_MAPPING(ComponentToExtract,Mapping) ((D3D12_SHADER_COMPONENT_MAPPING)(Mapping >> (D3D12_SHADER_COMPONENT_MAPPING_SHIFT*ComponentToExtract) & D3D12_SHADER_COMPONENT_MAPPING_MASK))
#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0,1,2,3) 

typedef 
enum D3D12_BUFFER_SRV_FLAGS
    {
        D3D12_BUFFER_SRV_FLAG_NONE      = 0,
        D3D12_BUFFER_SRV_FLAG_RAW       = 0x1
    }   D3D12_BUFFER_SRV_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAGS );
typedef struct D3D12_BUFFER_SRV
    {
    UINT64 FirstElement;
    UINT NumElements;
    UINT StructureByteStride;
    D3D12_BUFFER_SRV_FLAGS Flags;
    }   D3D12_BUFFER_SRV;

typedef struct D3D12_TEX1D_SRV
    {
    UINT MostDetailedMip;
    UINT MipLevels;
    FLOAT ResourceMinLODClamp;
    }   D3D12_TEX1D_SRV;

typedef struct D3D12_TEX1D_ARRAY_SRV
    {
    UINT MostDetailedMip;
    UINT MipLevels;
    UINT FirstArraySlice;
    UINT ArraySize;
    FLOAT ResourceMinLODClamp;
    }   D3D12_TEX1D_ARRAY_SRV;

typedef struct D3D12_TEX2D_SRV
    {
    UINT MostDetailedMip;
    UINT MipLevels;
    UINT PlaneSlice;
    FLOAT ResourceMinLODClamp;
    }   D3D12_TEX2D_SRV;

typedef struct D3D12_TEX2D_ARRAY_SRV
    {
    UINT MostDetailedMip;
    UINT MipLevels;
    UINT FirstArraySlice;
    UINT ArraySize;
    UINT PlaneSlice;
    FLOAT ResourceMinLODClamp;
    }   D3D12_TEX2D_ARRAY_SRV;

typedef struct D3D12_TEX3D_SRV
    {
    UINT MostDetailedMip;
    UINT MipLevels;
    FLOAT ResourceMinLODClamp;
    }   D3D12_TEX3D_SRV;

typedef struct D3D12_TEXCUBE_SRV
    {
    UINT MostDetailedMip;
    UINT MipLevels;
    FLOAT ResourceMinLODClamp;
    }   D3D12_TEXCUBE_SRV;

typedef struct D3D12_TEXCUBE_ARRAY_SRV
    {
    UINT MostDetailedMip;
    UINT MipLevels;
    UINT First2DArrayFace;
    UINT NumCubes;
    FLOAT ResourceMinLODClamp;
    }   D3D12_TEXCUBE_ARRAY_SRV;

typedef struct D3D12_TEX2DMS_SRV
    {
    UINT UnusedField_NothingToDefine;
    }   D3D12_TEX2DMS_SRV;

typedef struct D3D12_TEX2DMS_ARRAY_SRV
    {
    UINT FirstArraySlice;
    UINT ArraySize;
    }   D3D12_TEX2DMS_ARRAY_SRV;

typedef 
enum D3D12_SRV_DIMENSION
    {
        D3D12_SRV_DIMENSION_UNKNOWN             = 0,
        D3D12_SRV_DIMENSION_BUFFER              = 1,
        D3D12_SRV_DIMENSION_TEXTURE1D           = 2,
        D3D12_SRV_DIMENSION_TEXTURE1DARRAY      = 3,
        D3D12_SRV_DIMENSION_TEXTURE2D           = 4,
        D3D12_SRV_DIMENSION_TEXTURE2DARRAY      = 5,
        D3D12_SRV_DIMENSION_TEXTURE2DMS         = 6,
        D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY    = 7,
        D3D12_SRV_DIMENSION_TEXTURE3D           = 8,
        D3D12_SRV_DIMENSION_TEXTURECUBE         = 9,
        D3D12_SRV_DIMENSION_TEXTURECUBEARRAY    = 10
    }   D3D12_SRV_DIMENSION;

typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC
    {
    DXGI_FORMAT Format;
    D3D12_SRV_DIMENSION ViewDimension;
    UINT Shader4ComponentMapping;
    union 
        {
        D3D12_BUFFER_SRV Buffer;
        D3D12_TEX1D_SRV Texture1D;
        D3D12_TEX1D_ARRAY_SRV Texture1DArray;
        D3D12_TEX2D_SRV Texture2D;
        D3D12_TEX2D_ARRAY_SRV Texture2DArray;
        D3D12_TEX2DMS_SRV Texture2DMS;
        D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
        D3D12_TEX3D_SRV Texture3D;
        D3D12_TEXCUBE_SRV TextureCube;
        D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
        }       ;
    }   D3D12_SHADER_RESOURCE_VIEW_DESC;

typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS;

typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC
    {
    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
    UINT SizeInBytes;
    }   D3D12_CONSTANT_BUFFER_VIEW_DESC;

typedef struct D3D12_CPU_DESCRIPTOR_HANDLE
    {
    SIZE_T ptr;
    }   D3D12_CPU_DESCRIPTOR_HANDLE;

typedef struct D3D12_GPU_DESCRIPTOR_HANDLE
    {
    UINT64 ptr;
    }   D3D12_GPU_DESCRIPTOR_HANDLE;

typedef 
enum D3D12_BUFFER_UAV_FLAGS
    {
        D3D12_BUFFER_UAV_FLAG_NONE  = 0,
        D3D12_BUFFER_UAV_FLAG_RAW   = 0x1
    }   D3D12_BUFFER_UAV_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_UAV_FLAGS );
typedef struct D3D12_BUFFER_UAV
    {
    UINT64 FirstElement;
    UINT NumElements;
    UINT StructureByteStride;
    UINT64 CounterOffsetInBytes;
    D3D12_BUFFER_UAV_FLAGS Flags;
    }   D3D12_BUFFER_UAV;

typedef struct D3D12_TEX1D_UAV
    {
    UINT MipSlice;
    }   D3D12_TEX1D_UAV;

typedef struct D3D12_TEX1D_ARRAY_UAV
    {
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
    }   D3D12_TEX1D_ARRAY_UAV;

typedef struct D3D12_TEX2D_UAV
    {
    UINT MipSlice;
    UINT PlaneSlice;
    }   D3D12_TEX2D_UAV;

typedef struct D3D12_TEX2D_ARRAY_UAV
    {
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
    UINT PlaneSlice;
    }   D3D12_TEX2D_ARRAY_UAV;

typedef struct D3D12_TEX3D_UAV
    {
    UINT MipSlice;
    UINT FirstWSlice;
    UINT WSize;
    }   D3D12_TEX3D_UAV;

typedef 
enum D3D12_UAV_DIMENSION
    {
        D3D12_UAV_DIMENSION_UNKNOWN     = 0,
        D3D12_UAV_DIMENSION_BUFFER      = 1,
        D3D12_UAV_DIMENSION_TEXTURE1D   = 2,
        D3D12_UAV_DIMENSION_TEXTURE1DARRAY      = 3,
        D3D12_UAV_DIMENSION_TEXTURE2D   = 4,
        D3D12_UAV_DIMENSION_TEXTURE2DARRAY      = 5,
        D3D12_UAV_DIMENSION_TEXTURE3D   = 8
    }   D3D12_UAV_DIMENSION;

typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC
    {
    DXGI_FORMAT Format;
    D3D12_UAV_DIMENSION ViewDimension;
    union 
        {
        D3D12_BUFFER_UAV Buffer;
        D3D12_TEX1D_UAV Texture1D;
        D3D12_TEX1D_ARRAY_UAV Texture1DArray;
        D3D12_TEX2D_UAV Texture2D;
        D3D12_TEX2D_ARRAY_UAV Texture2DArray;
        D3D12_TEX3D_UAV Texture3D;
        }       ;
    }   D3D12_UNORDERED_ACCESS_VIEW_DESC;

typedef struct D3D12_BUFFER_RTV
    {
    UINT64 FirstElement;
    UINT NumElements;
    }   D3D12_BUFFER_RTV;

typedef struct D3D12_TEX1D_RTV
    {
    UINT MipSlice;
    }   D3D12_TEX1D_RTV;

typedef struct D3D12_TEX1D_ARRAY_RTV
    {
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
    }   D3D12_TEX1D_ARRAY_RTV;

typedef struct D3D12_TEX2D_RTV
    {
    UINT MipSlice;
    UINT PlaneSlice;
    }   D3D12_TEX2D_RTV;

typedef struct D3D12_TEX2DMS_RTV
    {
    UINT UnusedField_NothingToDefine;
    }   D3D12_TEX2DMS_RTV;

typedef struct D3D12_TEX2D_ARRAY_RTV
    {
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
    UINT PlaneSlice;
    }   D3D12_TEX2D_ARRAY_RTV;

typedef struct D3D12_TEX2DMS_ARRAY_RTV
    {
    UINT FirstArraySlice;
    UINT ArraySize;
    }   D3D12_TEX2DMS_ARRAY_RTV;

typedef struct D3D12_TEX3D_RTV
    {
    UINT MipSlice;
    UINT FirstWSlice;
    UINT WSize;
    }   D3D12_TEX3D_RTV;

typedef 
enum D3D12_RTV_DIMENSION
    {
        D3D12_RTV_DIMENSION_UNKNOWN             = 0,
        D3D12_RTV_DIMENSION_BUFFER              = 1,
        D3D12_RTV_DIMENSION_TEXTURE1D           = 2,
        D3D12_RTV_DIMENSION_TEXTURE1DARRAY      = 3,
        D3D12_RTV_DIMENSION_TEXTURE2D           = 4,
        D3D12_RTV_DIMENSION_TEXTURE2DARRAY      = 5,
        D3D12_RTV_DIMENSION_TEXTURE2DMS         = 6,
        D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY    = 7,
        D3D12_RTV_DIMENSION_TEXTURE3D           = 8
    }   D3D12_RTV_DIMENSION;

typedef struct D3D12_RENDER_TARGET_VIEW_DESC
    {
    DXGI_FORMAT Format;
    D3D12_RTV_DIMENSION ViewDimension;
    union 
        {
        D3D12_BUFFER_RTV Buffer;
        D3D12_TEX1D_RTV Texture1D;
        D3D12_TEX1D_ARRAY_RTV Texture1DArray;
        D3D12_TEX2D_RTV Texture2D;
        D3D12_TEX2D_ARRAY_RTV Texture2DArray;
        D3D12_TEX2DMS_RTV Texture2DMS;
        D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
        D3D12_TEX3D_RTV Texture3D;
        }       ;
    }   D3D12_RENDER_TARGET_VIEW_DESC;

typedef struct D3D12_TEX1D_DSV
    {
    UINT MipSlice;
    }   D3D12_TEX1D_DSV;

typedef struct D3D12_TEX1D_ARRAY_DSV
    {
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
    }   D3D12_TEX1D_ARRAY_DSV;

typedef struct D3D12_TEX2D_DSV
    {
    UINT MipSlice;
    }   D3D12_TEX2D_DSV;

typedef struct D3D12_TEX2D_ARRAY_DSV
    {
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
    }   D3D12_TEX2D_ARRAY_DSV;

typedef struct D3D12_TEX2DMS_DSV
    {
    UINT UnusedField_NothingToDefine;
    }   D3D12_TEX2DMS_DSV;

typedef struct D3D12_TEX2DMS_ARRAY_DSV
    {
    UINT FirstArraySlice;
    UINT ArraySize;
    }   D3D12_TEX2DMS_ARRAY_DSV;

typedef 
enum D3D12_DSV_FLAGS
    {
        D3D12_DSV_FLAG_NONE                     = 0,
        D3D12_DSV_FLAG_READ_ONLY_DEPTH      = 0x1,
        D3D12_DSV_FLAG_READ_ONLY_STENCIL    = 0x2
    }   D3D12_DSV_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_DSV_FLAGS );
typedef 
enum D3D12_DSV_DIMENSION
    {
        D3D12_DSV_DIMENSION_UNKNOWN             = 0,
        D3D12_DSV_DIMENSION_TEXTURE1D           = 1,
        D3D12_DSV_DIMENSION_TEXTURE1DARRAY      = 2,
        D3D12_DSV_DIMENSION_TEXTURE2D           = 3,
        D3D12_DSV_DIMENSION_TEXTURE2DARRAY      = 4,
        D3D12_DSV_DIMENSION_TEXTURE2DMS         = 5,
        D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY    = 6
    }   D3D12_DSV_DIMENSION;

typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC
    {
    DXGI_FORMAT Format;
    D3D12_DSV_DIMENSION ViewDimension;
    D3D12_DSV_FLAGS Flags;
    union 
        {
        D3D12_TEX1D_DSV Texture1D;
        D3D12_TEX1D_ARRAY_DSV Texture1DArray;
        D3D12_TEX2D_DSV Texture2D;
        D3D12_TEX2D_ARRAY_DSV Texture2DArray;
        D3D12_TEX2DMS_DSV Texture2DMS;
        D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
        }       ;
    }   D3D12_DEPTH_STENCIL_VIEW_DESC;

typedef 
enum D3D12_FILTER
    {
        D3D12_FILTER_MIN_MAG_MIP_POINT                          = 0,
        D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR                   = 0x1,
        D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT             = 0x4,
        D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR                   = 0x5,
        D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT                   = 0x10,
        D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR            = 0x11,
        D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT                   = 0x14,
        D3D12_FILTER_MIN_MAG_MIP_LINEAR                         = 0x15,
        D3D12_FILTER_ANISOTROPIC                                = 0x55,
        D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT               = 0x80,
        D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR        = 0x81,
        D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT  = 0x84,
        D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR        = 0x85,
        D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT        = 0x90,
        D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
        D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT        = 0x94,
        D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR              = 0x95,
        D3D12_FILTER_COMPARISON_ANISOTROPIC                     = 0xd5,
        D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT                  = 0x100,
        D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR           = 0x101,
        D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT     = 0x104,
        D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR           = 0x105,
        D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT           = 0x110,
        D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x111,
        D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT           = 0x114,
        D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR                 = 0x115,
        D3D12_FILTER_MINIMUM_ANISOTROPIC                        = 0x155,
        D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT                  = 0x180,
        D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR           = 0x181,
        D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT     = 0x184,
        D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR           = 0x185,
        D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT           = 0x190,
        D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x191,
        D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT           = 0x194,
        D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR                 = 0x195,
        D3D12_FILTER_MAXIMUM_ANISOTROPIC                        = 0x1d5
    }   D3D12_FILTER;

typedef 
enum D3D12_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;

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;

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 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_QUERY_HEAP_TYPE
    {
        D3D12_QUERY_HEAP_TYPE_OCCLUSION             = 0,
        D3D12_QUERY_HEAP_TYPE_TIMESTAMP             = 1,
        D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS   = 2,
        D3D12_QUERY_HEAP_TYPE_SO_STATISTICS         = 3
    }   D3D12_QUERY_HEAP_TYPE;

typedef struct D3D12_QUERY_HEAP_DESC
    {
    D3D12_QUERY_HEAP_TYPE Type;
    UINT Count;
    UINT NodeMask;
    }   D3D12_QUERY_HEAP_DESC;

typedef 
enum D3D12_INDIRECT_ARGUMENT_TYPE
    {
        D3D12_INDIRECT_ARGUMENT_TYPE_DRAW                   = 0,
        D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED           = ( D3D12_INDIRECT_ARGUMENT_TYPE_DRAW + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH               = ( D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW     = ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW      = ( D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT               = ( D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW   = ( D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW   = ( D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW + 1 ) ,
        D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW  = ( D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW + 1 ) 
    }   D3D12_INDIRECT_ARGUMENT_TYPE;

typedef struct D3D12_INDIRECT_ARGUMENT_DESC
    {
    D3D12_INDIRECT_ARGUMENT_TYPE Type;
    union 
        {
        struct 
            {
            UINT Slot;
            }   VertexBuffer;
        struct 
            {
            UINT RootParameterIndex;
            UINT DestOffsetIn32BitValues;
            UINT Num32BitValuesToSet;
            }   Constant;
        struct 
            {
            UINT RootParameterIndex;
            }   ConstantBufferView;
        struct 
            {
            UINT RootParameterIndex;
            }   ShaderResourceView;
        struct 
            {
            UINT RootParameterIndex;
            }   UnorderedAccessView;
        }       ;
    }   D3D12_INDIRECT_ARGUMENT_DESC;

typedef struct D3D12_COMMAND_SIGNATURE_DESC
    {
    UINT ByteStride;
    UINT NumArgumentDescs;
    _Field_size_full_(NumArgumentDescs)  const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs;
    UINT NodeMask;
    }   D3D12_COMMAND_SIGNATURE_DESC;

typedef struct D3D12_PACKED_MIP_INFO
    {
    UINT8 NumStandardMips;
    UINT8 NumPackedMips;
    UINT NumTilesForPackedMips;
    UINT StartTileIndexInOverallResource;
    }   D3D12_PACKED_MIP_INFO;

typedef struct D3D12_TILE_SHAPE
    {
    UINT WidthInTexels;
    UINT HeightInTexels;
    UINT DepthInTexels;
    }   D3D12_TILE_SHAPE;

typedef struct D3D12_SUBRESOURCE_TILING
    {
    UINT WidthInTiles;
    UINT16 HeightInTiles;
    UINT16 DepthInTiles;
    UINT StartTileIndexInOverallResource;
    }   D3D12_SUBRESOURCE_TILING;

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 
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 D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;

#define D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE    ( 16 )

typedef struct D3D12_INDEX_BUFFER_VIEW
    {
    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
    UINT SizeInBytes;
    DXGI_FORMAT Format;
    }   D3D12_INDEX_BUFFER_VIEW;

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_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_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;

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_VERTEX_BUFFER_VIEW
    {
    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
    UINT SizeInBytes;
    UINT StrideInBytes;
    }   D3D12_VERTEX_BUFFER_VIEW;

typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW
    {
    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
    UINT64 SizeInBytes;
    D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
    }   D3D12_STREAM_OUTPUT_BUFFER_VIEW;

typedef struct D3D12_DISCARD_REGION
    {
    UINT NumRects;
    _In_reads_(NumRects)  const D3D12_RECT *pRects;
    UINT FirstSubresource;
    UINT NumSubresources;
    }   D3D12_DISCARD_REGION;

typedef 
enum D3D12_QUERY_TYPE
    {
        D3D12_QUERY_TYPE_OCCLUSION              = 0,
        D3D12_QUERY_TYPE_BINARY_OCCLUSION       = 1,
        D3D12_QUERY_TYPE_TIMESTAMP              = 2,
        D3D12_QUERY_TYPE_PIPELINE_STATISTICS    = 3,
        D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0  = 4,
        D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1  = 5,
        D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2  = 6,
        D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3  = 7
    }   D3D12_QUERY_TYPE;

typedef 
enum D3D12_PREDICATION_OP
    {
        D3D12_PREDICATION_OP_EQUAL_ZERO     = 0,
        D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1
    }   D3D12_PREDICATION_OP;

typedef 
enum D3D12_ROOT_SIGNATURE_FLAGS
    {
        D3D12_ROOT_SIGNATURE_FLAG_NONE                                  = 0,
        D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT    = 0x1,
        D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS        = 0x2,
        D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS          = 0x4,
        D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS        = 0x8,
        D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS      = 0x10,
        D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS         = 0x20,
        D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT                   = 0x40
    }   D3D12_ROOT_SIGNATURE_FLAGS;

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 
enum D3D12_DESCRIPTOR_RANGE_TYPE
    {
        D3D12_DESCRIPTOR_RANGE_TYPE_SRV     = 0,
        D3D12_DESCRIPTOR_RANGE_TYPE_UAV     = ( D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1 ) ,
        D3D12_DESCRIPTOR_RANGE_TYPE_CBV     = ( D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1 ) ,
        D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = ( D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1 ) 
    }   D3D12_DESCRIPTOR_RANGE_TYPE;

typedef struct D3D12_DESCRIPTOR_RANGE
    {
    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
    UINT NumDescriptors;
    UINT BaseShaderRegister;
    UINT RegisterSpace;
    UINT OffsetInDescriptorsFromTableStart;
    }   D3D12_DESCRIPTOR_RANGE;

typedef struct D3D12_ROOT_DESCRIPTOR_TABLE
    {
    UINT NumDescriptorRanges;
    _Field_size_full_(NumDescriptorRanges)  const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges;
    }   D3D12_ROOT_DESCRIPTOR_TABLE;

typedef struct D3D12_ROOT_CONSTANTS
    {
    UINT ShaderRegister;
    UINT RegisterSpace;
    UINT Num32BitValues;
    }   D3D12_ROOT_CONSTANTS;

typedef struct D3D12_ROOT_DESCRIPTOR
    {
    UINT ShaderRegister;
    UINT RegisterSpace;
    }   D3D12_ROOT_DESCRIPTOR;

typedef 
enum D3D12_SHADER_VISIBILITY
    {
        D3D12_SHADER_VISIBILITY_ALL         = 0,
        D3D12_SHADER_VISIBILITY_VERTEX      = 1,
        D3D12_SHADER_VISIBILITY_HULL        = 2,
        D3D12_SHADER_VISIBILITY_DOMAIN      = 3,
        D3D12_SHADER_VISIBILITY_GEOMETRY    = 4,
        D3D12_SHADER_VISIBILITY_PIXEL       = 5
    }   D3D12_SHADER_VISIBILITY;

typedef 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;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS );
typedef 
enum D3D12_STATIC_BORDER_COLOR
    {
        D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,
        D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK      = ( D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK + 1 ) ,
        D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE      = ( D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK + 1 ) 
    }   D3D12_STATIC_BORDER_COLOR;

typedef struct D3D12_STATIC_SAMPLER_DESC
    {
    D3D12_FILTER Filter;
    D3D12_TEXTURE_ADDRESS_MODE AddressU;
    D3D12_TEXTURE_ADDRESS_MODE AddressV;
    D3D12_TEXTURE_ADDRESS_MODE AddressW;
    FLOAT MipLODBias;
    UINT MaxAnisotropy;
    D3D12_COMPARISON_FUNC ComparisonFunc;
    D3D12_STATIC_BORDER_COLOR BorderColor;
    FLOAT MinLOD;
    FLOAT MaxLOD;
    UINT ShaderRegister;
    UINT RegisterSpace;
    D3D12_SHADER_VISIBILITY ShaderVisibility;
    }   D3D12_STATIC_SAMPLER_DESC;

typedef struct D3D12_ROOT_SIGNATURE_DESC
    {
    UINT NumParameters;
    _Field_size_full_(NumParameters)  const D3D12_ROOT_PARAMETER *pParameters;
    UINT NumStaticSamplers;
    _Field_size_full_(NumStaticSamplers)  const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
    D3D12_ROOT_SIGNATURE_FLAGS Flags;
    }   D3D12_ROOT_SIGNATURE_DESC;

typedef 
enum D3D12_DESCRIPTOR_RANGE_FLAGS
    {
        D3D12_DESCRIPTOR_RANGE_FLAG_NONE                                = 0,
        D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE                = 0x1,
        D3D12_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE                       = 0x2,
        D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE    = 0x4,
        D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC                         = 0x8
    }   D3D12_DESCRIPTOR_RANGE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_RANGE_FLAGS );
typedef struct D3D12_DESCRIPTOR_RANGE1
    {
    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
    UINT NumDescriptors;
    UINT BaseShaderRegister;
    UINT RegisterSpace;
    D3D12_DESCRIPTOR_RANGE_FLAGS Flags;
    UINT OffsetInDescriptorsFromTableStart;
    }   D3D12_DESCRIPTOR_RANGE1;

typedef struct D3D12_ROOT_DESCRIPTOR_TABLE1
    {
    UINT NumDescriptorRanges;
    _Field_size_full_(NumDescriptorRanges)  const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges;
    }   D3D12_ROOT_DESCRIPTOR_TABLE1;

typedef 
enum D3D12_ROOT_DESCRIPTOR_FLAGS
    {
        D3D12_ROOT_DESCRIPTOR_FLAG_NONE                             = 0,
        D3D12_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE                    = 0x2,
        D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
        D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC                      = 0x8
    }   D3D12_ROOT_DESCRIPTOR_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_DESCRIPTOR_FLAGS );
typedef struct D3D12_ROOT_DESCRIPTOR1
    {
    UINT ShaderRegister;
    UINT RegisterSpace;
    D3D12_ROOT_DESCRIPTOR_FLAGS Flags;
    }   D3D12_ROOT_DESCRIPTOR1;

typedef struct D3D12_ROOT_PARAMETER1
    {
    D3D12_ROOT_PARAMETER_TYPE ParameterType;
    union 
        {
        D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable;
        D3D12_ROOT_CONSTANTS Constants;
        D3D12_ROOT_DESCRIPTOR1 Descriptor;
        }       ;
    D3D12_SHADER_VISIBILITY ShaderVisibility;
    }   D3D12_ROOT_PARAMETER1;

typedef struct D3D12_ROOT_SIGNATURE_DESC1
    {
    UINT NumParameters;
    _Field_size_full_(NumParameters)  const D3D12_ROOT_PARAMETER1 *pParameters;
    UINT NumStaticSamplers;
    _Field_size_full_(NumStaticSamplers)  const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;
    D3D12_ROOT_SIGNATURE_FLAGS Flags;
    }   D3D12_ROOT_SIGNATURE_DESC1;

typedef 
enum D3D_ROOT_SIGNATURE_VERSION
    {
        D3D_ROOT_SIGNATURE_VERSION_1    = 0x1,
        D3D_ROOT_SIGNATURE_VERSION_1_0  = 0x1,
        D3D_ROOT_SIGNATURE_VERSION_1_1  = 0x2
    }   D3D_ROOT_SIGNATURE_VERSION;

typedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC
    {
    D3D_ROOT_SIGNATURE_VERSION Version;
    union 
        {
        D3D12_ROOT_SIGNATURE_DESC Desc_1_0;
        D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1;
        }       ;
    }   D3D12_VERSIONED_ROOT_SIGNATURE_DESC;

#define D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND    ( 0xffffffff )



#ifndef __ID3D12Resource_INTERFACE_DEFINED__
#define __ID3D12Resource_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12Resource;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("696442be-a72e-4059-bc79-5b5c98040fad")
    ID3D12Resource : public ID3D12Pageable
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Map( 
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pReadRange,
            _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData) = 0;
        
        virtual void STDMETHODCALLTYPE Unmap( 
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pWrittenRange) = 0;
        
        virtual D3D12_RESOURCE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
        
        virtual D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE GetGPUVirtualAddress( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE WriteToSubresource( 
            UINT DstSubresource,
            _In_opt_  const D3D12_BOX *pDstBox,
            _In_  const void *pSrcData,
            UINT SrcRowPitch,
            UINT SrcDepthPitch) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ReadFromSubresource( 
            _Out_  void *pDstData,
            UINT DstRowPitch,
            UINT DstDepthPitch,
            UINT SrcSubresource,
            _In_opt_  const D3D12_BOX *pSrcBox) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetHeapProperties( 
            _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
            _Out_opt_  D3D12_HEAP_FLAGS *pHeapFlags) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct ID3D12ResourceVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Resource * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Resource * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Resource * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Resource * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Resource * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Resource * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Resource * This,
            _In_z_  LPCWSTR Name);
        
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12Resource * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        HRESULT ( STDMETHODCALLTYPE *Map )( 
            ID3D12Resource * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pReadRange,
            _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData);
        
        void ( STDMETHODCALLTYPE *Unmap )( 
            ID3D12Resource * This,
            UINT Subresource,
            _In_opt_  const D3D12_RANGE *pWrittenRange);
        
        D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12Resource * This);
        
        D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( 
            ID3D12Resource * This);
        
        HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( 
            ID3D12Resource * This,
            UINT DstSubresource,
            _In_opt_  const D3D12_BOX *pDstBox,
            _In_  const void *pSrcData,
            UINT SrcRowPitch,
            UINT SrcDepthPitch);
        
        HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( 
            ID3D12Resource * This,
            _Out_  void *pDstData,
            UINT DstRowPitch,
            UINT DstDepthPitch,
            UINT SrcSubresource,
            _In_opt_  const D3D12_BOX *pSrcBox);
        
        HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )( 
            ID3D12Resource * This,
            _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
            _Out_opt_  D3D12_HEAP_FLAGS *pHeapFlags);
        
        END_INTERFACE
    } ID3D12ResourceVtbl;

    interface ID3D12Resource
    {
        CONST_VTBL struct ID3D12ResourceVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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



#define ID3D12Resource_Map(This,Subresource,pReadRange,ppData)  \
    ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) ) 

#define ID3D12Resource_Unmap(This,Subresource,pWrittenRange)    \
    ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) ) 

#define ID3D12Resource_GetDesc(This)    \
    ( (This)->lpVtbl -> GetDesc(This) ) 

#define ID3D12Resource_GetGPUVirtualAddress(This)       \
    ( (This)->lpVtbl -> GetGPUVirtualAddress(This) ) 

#define ID3D12Resource_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)       \
    ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) 

#define ID3D12Resource_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox)      \
    ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) ) 

#define ID3D12Resource_GetHeapProperties(This,pHeapProperties,pHeapFlags)       \
    ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) ) 

#endif /* COBJMACROS */


#endif  /* C style interface */

#endif  /* __ID3D12Resource_INTERFACE_DEFINED__ */


#ifndef __ID3D12CommandAllocator_INTERFACE_DEFINED__
#define __ID3D12CommandAllocator_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12CommandAllocator;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("6102dee4-af59-4b09-b999-b44d73f09b24")
    ID3D12CommandAllocator : public ID3D12Pageable
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
        
    };
    
    
#else   /* C style interface */

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

    interface ID3D12CommandAllocator
    {
        CONST_VTBL struct ID3D12CommandAllocatorVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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



#define ID3D12CommandAllocator_Reset(This)      \
    ( (This)->lpVtbl -> Reset(This) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12CommandAllocator_INTERFACE_DEFINED__ */


#ifndef __ID3D12CommandList_INTERFACE_DEFINED__
#define __ID3D12CommandList_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12CommandList;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7116d91c-e7e4-47ce-b8c6-ec8168f437e5")
    ID3D12CommandList : public ID3D12DeviceChild
    {
    public:
        virtual D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE GetType( void) = 0;
        
    };
    
    
#else   /* C style interface */

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

    interface ID3D12CommandList
    {
        CONST_VTBL struct ID3D12CommandListVtbl *lpVtbl;
    };

#ifdef COBJMACROS

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

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

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


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

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

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

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


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


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

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12CommandList_INTERFACE_DEFINED__ */



#ifndef __ID3D12GraphicsCommandList_INTERFACE_DEFINED__
#define __ID3D12GraphicsCommandList_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12GraphicsCommandList;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5b160d0f-ac1b-4185-8ba8-b3ae42a5a455")
    ID3D12GraphicsCommandList : public ID3D12CommandList
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Close( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Reset( 
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState) = 0;
        
        virtual void STDMETHODCALLTYPE ClearState( 
            _In_opt_  ID3D12PipelineState *pPipelineState) = 0;
        
        virtual void STDMETHODCALLTYPE DrawInstanced( 
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation) = 0;
        
        virtual void STDMETHODCALLTYPE DrawIndexedInstanced( 
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation) = 0;
        
        virtual void STDMETHODCALLTYPE Dispatch( 
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ) = 0;
        
        virtual void STDMETHODCALLTYPE CopyBufferRegion( 
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes) = 0;
        
        virtual void STDMETHODCALLTYPE CopyTextureRegion( 
            _In_  const D3D12_TEXTURE_COPY_LOCATION *pDst,
            UINT DstX,
            UINT DstY,
            UINT DstZ,
            _In_  const D3D12_TEXTURE_COPY_LOCATION *pSrc,
            _In_opt_  const D3D12_BOX *pSrcBox) = 0;
        
        virtual void STDMETHODCALLTYPE CopyResource( 
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource) = 0;
        
        virtual void STDMETHODCALLTYPE CopyTiles( 
            _In_  ID3D12Resource *pTiledResource,
            _In_  const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
            _In_  const D3D12_TILE_REGION_SIZE *pTileRegionSize,
            _In_  ID3D12Resource *pBuffer,
            UINT64 BufferStartOffsetInBytes,
            D3D12_TILE_COPY_FLAGS Flags) = 0;
        
        virtual void STDMETHODCALLTYPE ResolveSubresource( 
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format) = 0;
        
        virtual void STDMETHODCALLTYPE IASetPrimitiveTopology( 
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology) = 0;
        
        virtual void STDMETHODCALLTYPE RSSetViewports( 
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports) = 0;
        
        virtual void STDMETHODCALLTYPE RSSetScissorRects( 
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects) = 0;
        
        virtual void STDMETHODCALLTYPE OMSetBlendFactor( 
            _In_opt_  const FLOAT BlendFactor[ 4 ]) = 0;
        
        virtual void STDMETHODCALLTYPE OMSetStencilRef( 
            _In_  UINT StencilRef) = 0;
        
        virtual void STDMETHODCALLTYPE SetPipelineState( 
            _In_  ID3D12PipelineState *pPipelineState) = 0;
        
        virtual void STDMETHODCALLTYPE ResourceBarrier( 
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers) = 0;
        
        virtual void STDMETHODCALLTYPE ExecuteBundle( 
            _In_  ID3D12GraphicsCommandList *pCommandList) = 0;
        
        virtual void STDMETHODCALLTYPE SetDescriptorHeaps( 
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps) = 0;
        
        virtual void STDMETHODCALLTYPE SetComputeRootSignature( 
            _In_opt_  ID3D12RootSignature *pRootSignature) = 0;
        
        virtual void STDMETHODCALLTYPE SetGraphicsRootSignature( 
            _In_opt_  ID3D12RootSignature *pRootSignature) = 0;

        virtual void STDMETHODCALLTYPE SetComputeRootDescriptorTable( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE SetGraphicsRootDescriptorTable( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0;

        virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstant( 
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues) = 0;
        
        virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstant( 
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues) = 0;
        
        virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstants( 
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues) = 0;
        
        virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstants( 
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues) = 0;
        
        virtual void STDMETHODCALLTYPE SetComputeRootConstantBufferView( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
        
        virtual void STDMETHODCALLTYPE SetGraphicsRootConstantBufferView( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
        
        virtual void STDMETHODCALLTYPE SetComputeRootShaderResourceView( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
        
        virtual void STDMETHODCALLTYPE SetGraphicsRootShaderResourceView( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
        
        virtual void STDMETHODCALLTYPE SetComputeRootUnorderedAccessView( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
        
        virtual void STDMETHODCALLTYPE SetGraphicsRootUnorderedAccessView( 
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
        
        virtual void STDMETHODCALLTYPE IASetIndexBuffer( 
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView) = 0;
        
        virtual void STDMETHODCALLTYPE IASetVertexBuffers( 
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews) = 0;
        
        virtual void STDMETHODCALLTYPE SOSetTargets( 
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews) = 0;
        
        virtual void STDMETHODCALLTYPE OMSetRenderTargets( 
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE ClearDepthStencilView( 
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
            _In_  D3D12_CLEAR_FLAGS ClearFlags,
            _In_  FLOAT Depth,
            _In_  UINT8 Stencil,
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
        
        virtual void STDMETHODCALLTYPE ClearRenderTargetView( 
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
        
        virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewUint( 
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
            _In_  ID3D12Resource *pResource,
            _In_  const UINT Values[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
        
        virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewFloat( 
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
            _In_  ID3D12Resource *pResource,
            _In_  const FLOAT Values[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects) = 0;
        
        virtual void STDMETHODCALLTYPE DiscardResource( 
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion) = 0;
        
        virtual void STDMETHODCALLTYPE BeginQuery( 
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index) = 0;
        
        virtual void STDMETHODCALLTYPE EndQuery( 
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index) = 0;
        
        virtual void STDMETHODCALLTYPE ResolveQueryData( 
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset) = 0;
        
        virtual void STDMETHODCALLTYPE SetPredication( 
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation) = 0;
        
        virtual void STDMETHODCALLTYPE SetMarker( 
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size) = 0;
        
        virtual void STDMETHODCALLTYPE BeginEvent( 
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size) = 0;
        
        virtual void STDMETHODCALLTYPE EndEvent( void) = 0;
        
        virtual void STDMETHODCALLTYPE ExecuteIndirect( 
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct ID3D12GraphicsCommandListVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12GraphicsCommandList * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12GraphicsCommandList * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12GraphicsCommandList * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12GraphicsCommandList * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12GraphicsCommandList * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12GraphicsCommandList * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12GraphicsCommandList * This,
            _In_z_  LPCWSTR Name);
        
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12GraphicsCommandList * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( 
            ID3D12GraphicsCommandList * This);
        
        HRESULT ( STDMETHODCALLTYPE *Close )( 
            ID3D12GraphicsCommandList * This);
        
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12CommandAllocator *pAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState);
        
        void ( STDMETHODCALLTYPE *ClearState )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12PipelineState *pPipelineState);
        
        void ( STDMETHODCALLTYPE *DrawInstanced )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT VertexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT IndexCountPerInstance,
            _In_  UINT InstanceCount,
            _In_  UINT StartIndexLocation,
            _In_  INT BaseVertexLocation,
            _In_  UINT StartInstanceLocation);
        
        void ( STDMETHODCALLTYPE *Dispatch )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT ThreadGroupCountX,
            _In_  UINT ThreadGroupCountY,
            _In_  UINT ThreadGroupCountZ);
        
        void ( STDMETHODCALLTYPE *CopyBufferRegion )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pDstBuffer,
            UINT64 DstOffset,
            _In_  ID3D12Resource *pSrcBuffer,
            UINT64 SrcOffset,
            UINT64 NumBytes);
        
        void ( STDMETHODCALLTYPE *CopyTextureRegion )( 
            ID3D12GraphicsCommandList * This,
            _In_  const D3D12_TEXTURE_COPY_LOCATION *pDst,
            UINT DstX,
            UINT DstY,
            UINT DstZ,
            _In_  const D3D12_TEXTURE_COPY_LOCATION *pSrc,
            _In_opt_  const D3D12_BOX *pSrcBox);
        
        void ( STDMETHODCALLTYPE *CopyResource )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  ID3D12Resource *pSrcResource);
        
        void ( STDMETHODCALLTYPE *CopyTiles )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pTiledResource,
            _In_  const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
            _In_  const D3D12_TILE_REGION_SIZE *pTileRegionSize,
            _In_  ID3D12Resource *pBuffer,
            UINT64 BufferStartOffsetInBytes,
            D3D12_TILE_COPY_FLAGS Flags);
        
        void ( STDMETHODCALLTYPE *ResolveSubresource )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  UINT DstSubresource,
            _In_  ID3D12Resource *pSrcResource,
            _In_  UINT SrcSubresource,
            _In_  DXGI_FORMAT Format);
        
        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( 
            ID3D12GraphicsCommandList * This,
            _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
        
        void ( STDMETHODCALLTYPE *RSSetViewports )( 
            ID3D12GraphicsCommandList * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,
            _In_reads_( NumViewports)  const D3D12_VIEWPORT *pViewports);
        
        void ( STDMETHODCALLTYPE *RSSetScissorRects )( 
            ID3D12GraphicsCommandList * This,
            _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,
            _In_reads_( NumRects)  const D3D12_RECT *pRects);
        
        void ( STDMETHODCALLTYPE *OMSetBlendFactor )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  const FLOAT BlendFactor[ 4 ]);
        
        void ( STDMETHODCALLTYPE *OMSetStencilRef )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT StencilRef);
        
        void ( STDMETHODCALLTYPE *SetPipelineState )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12PipelineState *pPipelineState);
        
        void ( STDMETHODCALLTYPE *ResourceBarrier )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT NumBarriers,
            _In_reads_(NumBarriers)  const D3D12_RESOURCE_BARRIER *pBarriers);
        
        void ( STDMETHODCALLTYPE *ExecuteBundle )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12GraphicsCommandList *pCommandList);
        
        void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT NumDescriptorHeaps,
            _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap *const *ppDescriptorHeaps);
        
        void ( STDMETHODCALLTYPE *SetComputeRootSignature )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);
        
        void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12RootSignature *pRootSignature);

        void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);

        void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
        
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT SrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  UINT Num32BitValuesToSet,
            _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
            _In_  UINT DestOffsetIn32BitValues);
        
        void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT RootParameterIndex,
            _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
        
        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pView);
        
        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_VERTEX_BUFFER_VIEW *pViews);
        
        void ( STDMETHODCALLTYPE *SOSetTargets )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT StartSlot,
            _In_  UINT NumViews,
            _In_reads_opt_(NumViews)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews);
        
        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( 
            ID3D12GraphicsCommandList * This,
            _In_  UINT NumRenderTargetDescriptors,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
            _In_  BOOL RTsSingleHandleToDescriptorRange,
            _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
        
        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( 
            ID3D12GraphicsCommandList * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
            _In_  D3D12_CLEAR_FLAGS ClearFlags,
            _In_  FLOAT Depth,
            _In_  UINT8 Stencil,
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( 
            ID3D12GraphicsCommandList * This,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
            _In_  const FLOAT ColorRGBA[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( 
            ID3D12GraphicsCommandList * This,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
            _In_  ID3D12Resource *pResource,
            _In_  const UINT Values[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( 
            ID3D12GraphicsCommandList * This,
            _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
            _In_  ID3D12Resource *pResource,
            _In_  const FLOAT Values[ 4 ],
            _In_  UINT NumRects,
            _In_reads_(NumRects)  const D3D12_RECT *pRects);
        
        void ( STDMETHODCALLTYPE *DiscardResource )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DISCARD_REGION *pRegion);
        
        void ( STDMETHODCALLTYPE *BeginQuery )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        void ( STDMETHODCALLTYPE *EndQuery )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT Index);
        
        void ( STDMETHODCALLTYPE *ResolveQueryData )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12QueryHeap *pQueryHeap,
            _In_  D3D12_QUERY_TYPE Type,
            _In_  UINT StartIndex,
            _In_  UINT NumQueries,
            _In_  ID3D12Resource *pDestinationBuffer,
            _In_  UINT64 AlignedDestinationBufferOffset);
        
        void ( STDMETHODCALLTYPE *SetPredication )( 
            ID3D12GraphicsCommandList * This,
            _In_opt_  ID3D12Resource *pBuffer,
            _In_  UINT64 AlignedBufferOffset,
            _In_  D3D12_PREDICATION_OP Operation);
        
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12GraphicsCommandList * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12GraphicsCommandList * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12GraphicsCommandList * This);
        
        void ( STDMETHODCALLTYPE *ExecuteIndirect )( 
            ID3D12GraphicsCommandList * This,
            _In_  ID3D12CommandSignature *pCommandSignature,
            _In_  UINT MaxCommandCount,
            _In_  ID3D12Resource *pArgumentBuffer,
            _In_  UINT64 ArgumentBufferOffset,
            _In_opt_  ID3D12Resource *pCountBuffer,
            _In_  UINT64 CountBufferOffset);
        
        END_INTERFACE
    } ID3D12GraphicsCommandListVtbl;

    interface ID3D12GraphicsCommandList
    {
        CONST_VTBL struct ID3D12GraphicsCommandListVtbl *lpVtbl;
    };

#ifdef COBJMACROS

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

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

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


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

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

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

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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12GraphicsCommandList_INTERFACE_DEFINED__ */


#ifndef __ID3D12CommandQueue_INTERFACE_DEFINED__
#define __ID3D12CommandQueue_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12CommandQueue;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("0ec870a6-5d7e-4c22-8cfc-5baae07616ed")
    ID3D12CommandQueue : public ID3D12Pageable
    {
    public:
        virtual void STDMETHODCALLTYPE UpdateTileMappings( 
            _In_  ID3D12Resource *pResource,
            UINT NumResourceRegions,
            _In_reads_opt_(NumResourceRegions)  const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates,
            _In_reads_opt_(NumResourceRegions)  const D3D12_TILE_REGION_SIZE *pResourceRegionSizes,
            _In_opt_  ID3D12Heap *pHeap,
            UINT NumRanges,
            _In_reads_opt_(NumRanges)  const D3D12_TILE_RANGE_FLAGS *pRangeFlags,
            _In_reads_opt_(NumRanges)  const UINT *pHeapRangeStartOffsets,
            _In_reads_opt_(NumRanges)  const UINT *pRangeTileCounts,
            D3D12_TILE_MAPPING_FLAGS Flags) = 0;
        
        virtual void STDMETHODCALLTYPE CopyTileMappings( 
            _In_  ID3D12Resource *pDstResource,
            _In_  const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate,
            _In_  ID3D12Resource *pSrcResource,
            _In_  const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate,
            _In_  const D3D12_TILE_REGION_SIZE *pRegionSize,
            D3D12_TILE_MAPPING_FLAGS Flags) = 0;
        
        virtual void STDMETHODCALLTYPE ExecuteCommandLists( 
            _In_  UINT NumCommandLists,
            _In_reads_(NumCommandLists)  ID3D12CommandList *const *ppCommandLists) = 0;
        
        virtual void STDMETHODCALLTYPE SetMarker( 
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size) = 0;
        
        virtual void STDMETHODCALLTYPE BeginEvent( 
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size) = 0;
        
        virtual void STDMETHODCALLTYPE EndEvent( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Signal( 
            ID3D12Fence *pFence,
            UINT64 Value) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Wait( 
            ID3D12Fence *pFence,
            UINT64 Value) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetTimestampFrequency( 
            _Out_  UINT64 *pFrequency) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetClockCalibration( 
            _Out_  UINT64 *pGpuTimestamp,
            _Out_  UINT64 *pCpuTimestamp) = 0;
        
        virtual D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct ID3D12CommandQueueVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12CommandQueue * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12CommandQueue * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12CommandQueue * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12CommandQueue * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12CommandQueue * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12CommandQueue * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12CommandQueue * This,
            _In_z_  LPCWSTR Name);
        
        HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
            ID3D12CommandQueue * This,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvDevice);
        
        void ( STDMETHODCALLTYPE *UpdateTileMappings )( 
            ID3D12CommandQueue * This,
            _In_  ID3D12Resource *pResource,
            UINT NumResourceRegions,
            _In_reads_opt_(NumResourceRegions)  const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates,
            _In_reads_opt_(NumResourceRegions)  const D3D12_TILE_REGION_SIZE *pResourceRegionSizes,
            _In_opt_  ID3D12Heap *pHeap,
            UINT NumRanges,
            _In_reads_opt_(NumRanges)  const D3D12_TILE_RANGE_FLAGS *pRangeFlags,
            _In_reads_opt_(NumRanges)  const UINT *pHeapRangeStartOffsets,
            _In_reads_opt_(NumRanges)  const UINT *pRangeTileCounts,
            D3D12_TILE_MAPPING_FLAGS Flags);
        
        void ( STDMETHODCALLTYPE *CopyTileMappings )( 
            ID3D12CommandQueue * This,
            _In_  ID3D12Resource *pDstResource,
            _In_  const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate,
            _In_  ID3D12Resource *pSrcResource,
            _In_  const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate,
            _In_  const D3D12_TILE_REGION_SIZE *pRegionSize,
            D3D12_TILE_MAPPING_FLAGS Flags);
        
        void ( STDMETHODCALLTYPE *ExecuteCommandLists )( 
            ID3D12CommandQueue * This,
            _In_  UINT NumCommandLists,
            _In_reads_(NumCommandLists)  ID3D12CommandList *const *ppCommandLists);
        
        void ( STDMETHODCALLTYPE *SetMarker )( 
            ID3D12CommandQueue * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        void ( STDMETHODCALLTYPE *BeginEvent )( 
            ID3D12CommandQueue * This,
            UINT Metadata,
            _In_reads_bytes_opt_(Size)  const void *pData,
            UINT Size);
        
        void ( STDMETHODCALLTYPE *EndEvent )( 
            ID3D12CommandQueue * This);
        
        HRESULT ( STDMETHODCALLTYPE *Signal )( 
            ID3D12CommandQueue * This,
            ID3D12Fence *pFence,
            UINT64 Value);
        
        HRESULT ( STDMETHODCALLTYPE *Wait )( 
            ID3D12CommandQueue * This,
            ID3D12Fence *pFence,
            UINT64 Value);
        
        HRESULT ( STDMETHODCALLTYPE *GetTimestampFrequency )( 
            ID3D12CommandQueue * This,
            _Out_  UINT64 *pFrequency);
        
        HRESULT ( STDMETHODCALLTYPE *GetClockCalibration )( 
            ID3D12CommandQueue * This,
            _Out_  UINT64 *pGpuTimestamp,
            _Out_  UINT64 *pCpuTimestamp);
        
        D3D12_COMMAND_QUEUE_DESC ( STDMETHODCALLTYPE *GetDesc )( 
            ID3D12CommandQueue * This);
        
        END_INTERFACE
    } ID3D12CommandQueueVtbl;

    interface ID3D12CommandQueue
    {
        CONST_VTBL struct ID3D12CommandQueueVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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



#define ID3D12CommandQueue_UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) \
    ( (This)->lpVtbl -> UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) ) 

#define ID3D12CommandQueue_CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags)       \
    ( (This)->lpVtbl -> CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) ) 

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

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

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

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

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

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

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

#define ID3D12CommandQueue_GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp)        \
    ( (This)->lpVtbl -> GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) ) 

#define ID3D12CommandQueue_GetDesc(This)        \
    ( (This)->lpVtbl -> GetDesc(This) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12CommandQueue_INTERFACE_DEFINED__ */



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

typedef struct __LUID *PLUID;

#endif
#endif

#define D3D12_REQ_SUBRESOURCES  ( 30720 )

#ifndef __ID3D12Device_INTERFACE_DEFINED__
#define __ID3D12Device_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12Device;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("189819f1-1db6-4b57-be54-1821339b85f7")
    ID3D12Device : public ID3D12Object
    {
    public:
        virtual UINT STDMETHODCALLTYPE GetNodeCount( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommandQueue( 
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommandAllocator( 
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateGraphicsPipelineState( 
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateComputePipelineState( 
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommandList( 
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport( 
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateDescriptorHeap( 
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap) = 0;
        
        virtual UINT STDMETHODCALLTYPE GetDescriptorHandleIncrementSize( 
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateRootSignature( 
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature) = 0;

        virtual void STDMETHODCALLTYPE CreateConstantBufferView( 
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;

        virtual void STDMETHODCALLTYPE CreateShaderResourceView( 
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE CreateUnorderedAccessView( 
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE CreateRenderTargetView( 
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE CreateDepthStencilView( 
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE CreateSampler( 
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
        
        virtual void STDMETHODCALLTYPE CopyDescriptors( 
            _In_  UINT NumDestDescriptorRanges,
            _In_reads_(NumDestDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
            _In_reads_opt_(NumDestDescriptorRanges)  const UINT *pDestDescriptorRangeSizes,
            _In_  UINT NumSrcDescriptorRanges,
            _In_reads_(NumSrcDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
            _In_reads_opt_(NumSrcDescriptorRanges)  const UINT *pSrcDescriptorRangeSizes,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0;
        
        virtual void STDMETHODCALLTYPE CopyDescriptorsSimple( 
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0;
        
        virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo( 
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs) = 0;
        
        virtual D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE GetCustomHeapProperties( 
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource( 
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateHeap( 
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource( 
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateReservedResource( 
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateSharedHandle( 
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE OpenSharedHandle( 
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE OpenSharedHandleByName( 
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE MakeResident( 
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Evict( 
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateFence( 
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0;
        
        virtual void STDMETHODCALLTYPE GetCopyableFootprints( 
            _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
            _In_range_(0,D3D12_REQ_SUBRESOURCES)  UINT FirstSubresource,
            _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)  UINT NumSubresources,
            UINT64 BaseOffset,
            _Out_writes_opt_(NumSubresources)  D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
            _Out_writes_opt_(NumSubresources)  UINT *pNumRows,
            _Out_writes_opt_(NumSubresources)  UINT64 *pRowSizeInBytes,
            _Out_opt_  UINT64 *pTotalBytes) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateQueryHeap( 
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetStablePowerState( 
            BOOL Enable) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateCommandSignature( 
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature) = 0;
        
        virtual void STDMETHODCALLTYPE GetResourceTiling( 
            _In_  ID3D12Resource *pTiledResource,
            _Out_opt_  UINT *pNumTilesForEntireResource,
            _Out_opt_  D3D12_PACKED_MIP_INFO *pPackedMipDesc,
            _Out_opt_  D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips,
            _Inout_opt_  UINT *pNumSubresourceTilings,
            _In_  UINT FirstSubresourceTilingToGet,
            _Out_writes_(*pNumSubresourceTilings)  D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips) = 0;
        
        virtual LUID STDMETHODCALLTYPE GetAdapterLuid( void) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct ID3D12DeviceVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Device * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Device * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Device * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            ID3D12Device * This,
            _In_  REFGUID guid,
            _Inout_  UINT *pDataSize,
            _Out_writes_bytes_opt_( *pDataSize )  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            ID3D12Device * This,
            _In_  REFGUID guid,
            _In_  UINT DataSize,
            _In_reads_bytes_opt_( DataSize )  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            ID3D12Device * This,
            _In_  REFGUID guid,
            _In_opt_  const IUnknown *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetName )( 
            ID3D12Device * This,
            _In_z_  LPCWSTR Name);
        
        UINT ( STDMETHODCALLTYPE *GetNodeCount )( 
            ID3D12Device * This);
        
        HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( 
            ID3D12Device * This,
            _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppCommandQueue);
        
        HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( 
            ID3D12Device * This,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            REFIID riid,
            _COM_Outptr_  void **ppCommandAllocator);
        
        HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( 
            ID3D12Device * This,
            _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( 
            ID3D12Device * This,
            _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_  void **ppPipelineState);
        
        HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( 
            ID3D12Device * This,
            _In_  UINT nodeMask,
            _In_  D3D12_COMMAND_LIST_TYPE type,
            _In_  ID3D12CommandAllocator *pCommandAllocator,
            _In_opt_  ID3D12PipelineState *pInitialState,
            REFIID riid,
            _COM_Outptr_  void **ppCommandList);
        
        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( 
            ID3D12Device * This,
            D3D12_FEATURE Feature,
            _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
            UINT FeatureSupportDataSize);
        
        HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( 
            ID3D12Device * This,
            _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
            REFIID riid,
            _COM_Outptr_  void **ppvHeap);
        
        UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( 
            ID3D12Device * This,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
        
        HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( 
            ID3D12Device * This,
            _In_  UINT nodeMask,
            _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
            _In_  SIZE_T blobLengthInBytes,
            REFIID riid,
            _COM_Outptr_  void **ppvRootSignature);
        
        void ( STDMETHODCALLTYPE *CreateConstantBufferView )( 
            ID3D12Device * This,
            _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        void ( STDMETHODCALLTYPE *CreateShaderResourceView )( 
            ID3D12Device * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( 
            ID3D12Device * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  ID3D12Resource *pCounterResource,
            _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        void ( STDMETHODCALLTYPE *CreateRenderTargetView )( 
            ID3D12Device * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        void ( STDMETHODCALLTYPE *CreateDepthStencilView )( 
            ID3D12Device * This,
            _In_opt_  ID3D12Resource *pResource,
            _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        void ( STDMETHODCALLTYPE *CreateSampler )( 
            ID3D12Device * This,
            _In_  const D3D12_SAMPLER_DESC *pDesc,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
        
        void ( STDMETHODCALLTYPE *CopyDescriptors )( 
            ID3D12Device * This,
            _In_  UINT NumDestDescriptorRanges,
            _In_reads_(NumDestDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
            _In_reads_opt_(NumDestDescriptorRanges)  const UINT *pDestDescriptorRangeSizes,
            _In_  UINT NumSrcDescriptorRanges,
            _In_reads_(NumSrcDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
            _In_reads_opt_(NumSrcDescriptorRanges)  const UINT *pSrcDescriptorRangeSizes,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( 
            ID3D12Device * This,
            _In_  UINT NumDescriptors,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
            _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
            _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
        
        D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( 
            ID3D12Device * This,
            _In_  UINT visibleMask,
            _In_  UINT numResourceDescs,
            _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
        
        D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( 
            ID3D12Device * This,
            _In_  UINT nodeMask,
            D3D12_HEAP_TYPE heapType);
        
        HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( 
            ID3D12Device * This,
            _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riidResource,
            _COM_Outptr_opt_  void **ppvResource);
        
        HRESULT ( STDMETHODCALLTYPE *CreateHeap )( 
            ID3D12Device * This,
            _In_  const D3D12_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( 
            ID3D12Device * This,
            _In_  ID3D12Heap *pHeap,
            UINT64 HeapOffset,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( 
            ID3D12Device * This,
            _In_  const D3D12_RESOURCE_DESC *pDesc,
            D3D12_RESOURCE_STATES InitialState,
            _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvResource);
        
        HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( 
            ID3D12Device * This,
            _In_  ID3D12DeviceChild *pObject,
            _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
            DWORD Access,
            _In_opt_  LPCWSTR Name,
            _Out_  HANDLE *pHandle);
        
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( 
            ID3D12Device * This,
            _In_  HANDLE NTHandle,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvObj);
        
        HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( 
            ID3D12Device * This,
            _In_  LPCWSTR Name,
            DWORD Access,
            /* [annotation][out] */ 
            _Out_  HANDLE *pNTHandle);
        
        HRESULT ( STDMETHODCALLTYPE *MakeResident )( 
            ID3D12Device * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        HRESULT ( STDMETHODCALLTYPE *Evict )( 
            ID3D12Device * This,
            UINT NumObjects,
            _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
        
        HRESULT ( STDMETHODCALLTYPE *CreateFence )( 
            ID3D12Device * This,
            UINT64 InitialValue,
            D3D12_FENCE_FLAGS Flags,
            REFIID riid,
            _COM_Outptr_  void **ppFence);
        
        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( 
            ID3D12Device * This);
        
        void ( STDMETHODCALLTYPE *GetCopyableFootprints )( 
            ID3D12Device * This,
            _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
            _In_range_(0,D3D12_REQ_SUBRESOURCES)  UINT FirstSubresource,
            _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)  UINT NumSubresources,
            UINT64 BaseOffset,
            _Out_writes_opt_(NumSubresources)  D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
            _Out_writes_opt_(NumSubresources)  UINT *pNumRows,
            _Out_writes_opt_(NumSubresources)  UINT64 *pRowSizeInBytes,
            _Out_opt_  UINT64 *pTotalBytes);
        
        HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( 
            ID3D12Device * This,
            _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvHeap);
        
        HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( 
            ID3D12Device * This,
            BOOL Enable);
        
        HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( 
            ID3D12Device * This,
            _In_  const D3D12_COMMAND_SIGNATURE_DESC *pDesc,
            _In_opt_  ID3D12RootSignature *pRootSignature,
            REFIID riid,
            _COM_Outptr_opt_  void **ppvCommandSignature);
        
        void ( STDMETHODCALLTYPE *GetResourceTiling )( 
            ID3D12Device * This,
            _In_  ID3D12Resource *pTiledResource,
            _Out_opt_  UINT *pNumTilesForEntireResource,
            _Out_opt_  D3D12_PACKED_MIP_INFO *pPackedMipDesc,
            _Out_opt_  D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips,
            _Inout_opt_  UINT *pNumSubresourceTilings,
            _In_  UINT FirstSubresourceTilingToGet,
            _Out_writes_(*pNumSubresourceTilings)  D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips);
        
        LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( 
            ID3D12Device * This);
        
        END_INTERFACE
    } ID3D12DeviceVtbl;

    interface ID3D12Device
    {
        CONST_VTBL struct ID3D12DeviceVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#define ID3D12Device_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType)    \
    ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) 

#define ID3D12Device_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)        \
    ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#define ID3D12Device_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \
    ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) 

#define ID3D12Device_GetAdapterLuid(This)       \
    ( (This)->lpVtbl -> GetAdapterLuid(This) ) 

#endif /* COBJMACROS */


#endif  /* C style interface */

#endif  /* __ID3D12Device_INTERFACE_DEFINED__ */


#ifndef __ID3D12Fence_INTERFACE_DEFINED__
#define __ID3D12Fence_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12Fence;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("0a753dcf-c4d8-4b91-adf6-be5a60d95a76")
    ID3D12Fence : public ID3D12Pageable
    {
    public:
        virtual UINT64 STDMETHODCALLTYPE GetCompletedValue( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEventOnCompletion( 
            UINT64 Value,
            HANDLE hEvent) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Signal( 
            UINT64 Value) = 0;
        
    };
    
    
#else   /* C style interface */

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

    interface ID3D12Fence
    {
        CONST_VTBL struct ID3D12FenceVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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



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

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

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

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12Fence_INTERFACE_DEFINED__ */


#ifndef __ID3D12PipelineState_INTERFACE_DEFINED__
#define __ID3D12PipelineState_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12PipelineState;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("765a30f3-f624-4c6f-a828-ace948622445")
    ID3D12PipelineState : public ID3D12Pageable
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetCachedBlob( 
            _COM_Outptr_  ID3DBlob **ppBlob) = 0;
        
    };
    
    
#else   /* C style interface */

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

    interface ID3D12PipelineState
    {
        CONST_VTBL struct ID3D12PipelineStateVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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



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

#endif /* COBJMACROS */


#endif  /* C style interface */

#endif  /* __ID3D12PipelineState_INTERFACE_DEFINED__ */


#ifndef __ID3D12DescriptorHeap_INTERFACE_DEFINED__
#define __ID3D12DescriptorHeap_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12DescriptorHeap;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8efb471d-616c-4f49-90f7-127bb763fa51")
    ID3D12DescriptorHeap : public ID3D12Pageable
    {
    public:
        virtual D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0;

        virtual D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart( void) = 0;

        virtual D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart( void) = 0;

    };
    
    
#else   /* C style interface */

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

        D3D12_DESCRIPTOR_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )(
            ID3D12DescriptorHeap * This);

        D3D12_CPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart )( 
            ID3D12DescriptorHeap * This);

        D3D12_GPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart )( 
            ID3D12DescriptorHeap * This);

        END_INTERFACE
    } ID3D12DescriptorHeapVtbl;

    interface ID3D12DescriptorHeap
    {
        CONST_VTBL struct ID3D12DescriptorHeapVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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



#define ID3D12DescriptorHeap_GetDesc(This)      \
    ( (This)->lpVtbl -> GetDesc(This) ) 

#define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This)   \
    ( (This)->lpVtbl -> GetCPUDescriptorHandleForHeapStart(This) ) 

#define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This)   \
    ( (This)->lpVtbl -> GetGPUDescriptorHandleForHeapStart(This) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12DescriptorHeap_INTERFACE_DEFINED__ */


#ifndef __ID3D12QueryHeap_INTERFACE_DEFINED__
#define __ID3D12QueryHeap_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12QueryHeap;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("0d9658ae-ed45-469e-a61d-970ec583cab4")
    ID3D12QueryHeap : public ID3D12Pageable
    {
    public:
    };
    
    
#else   /* C style interface */

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

    interface ID3D12QueryHeap
    {
        CONST_VTBL struct ID3D12QueryHeapVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


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

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

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

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


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


#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12QueryHeap_INTERFACE_DEFINED__ */


typedef HRESULT (WINAPI* PFN_D3D12_CREATE_DEVICE)( _In_opt_ IUnknown*, 
    D3D_FEATURE_LEVEL, 
    _In_ REFIID, _COM_Outptr_opt_ void** );

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

typedef HRESULT (WINAPI* PFN_D3D12_GET_DEBUG_INTERFACE)( _In_ REFIID, _COM_Outptr_opt_ void** );

DEFINE_GUID(IID_ID3D12Object,0xc4fec28f,0x7966,0x4e95,0x9f,0x94,0xf4,0x31,0xcb,0x56,0xc3,0xb8);
DEFINE_GUID(IID_ID3D12DeviceChild,0x905db94b,0xa00c,0x4140,0x9d,0xf5,0x2b,0x64,0xca,0x9e,0xa3,0x57);
DEFINE_GUID(IID_ID3D12RootSignature,0xc54a6b66,0x72df,0x4ee8,0x8b,0xe5,0xa9,0x46,0xa1,0x42,0x92,0x14);
DEFINE_GUID(IID_ID3D12RootSignatureDeserializer,0x34AB647B,0x3CC8,0x46AC,0x84,0x1B,0xC0,0x96,0x56,0x45,0xC0,0x46);
DEFINE_GUID(IID_ID3D12VersionedRootSignatureDeserializer,0x7F91CE67,0x090C,0x4BB7,0xB7,0x8E,0xED,0x8F,0xF2,0xE3,0x1D,0xA0);
DEFINE_GUID(IID_ID3D12Pageable,0x63ee58fb,0x1268,0x4835,0x86,0xda,0xf0,0x08,0xce,0x62,0xf0,0xd6);
DEFINE_GUID(IID_ID3D12Heap,0x6b3b2502,0x6e51,0x45b3,0x90,0xee,0x98,0x84,0x26,0x5e,0x8d,0xf3);
DEFINE_GUID(IID_ID3D12Resource,0x696442be,0xa72e,0x4059,0xbc,0x79,0x5b,0x5c,0x98,0x04,0x0f,0xad);
DEFINE_GUID(IID_ID3D12CommandAllocator,0x6102dee4,0xaf59,0x4b09,0xb9,0x99,0xb4,0x4d,0x73,0xf0,0x9b,0x24);
DEFINE_GUID(IID_ID3D12Fence,0x0a753dcf,0xc4d8,0x4b91,0xad,0xf6,0xbe,0x5a,0x60,0xd9,0x5a,0x76);
DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45);
DEFINE_GUID(IID_ID3D12DescriptorHeap,0x8efb471d,0x616c,0x4f49,0x90,0xf7,0x12,0x7b,0xb7,0x63,0xfa,0x51);
DEFINE_GUID(IID_ID3D12QueryHeap,0x0d9658ae,0xed45,0x469e,0xa6,0x1d,0x97,0x0e,0xc5,0x83,0xca,0xb4);
DEFINE_GUID(IID_ID3D12CommandSignature,0xc36a797c,0xec80,0x4f0a,0x89,0x85,0xa7,0xb2,0x47,0x50,0x82,0xd1);
DEFINE_GUID(IID_ID3D12CommandList,0x7116d91c,0xe7e4,0x47ce,0xb8,0xc6,0xec,0x81,0x68,0xf4,0x37,0xe5);
DEFINE_GUID(IID_ID3D12GraphicsCommandList,0x5b160d0f,0xac1b,0x4185,0x8b,0xa8,0xb3,0xae,0x42,0xa5,0xa4,0x55);
DEFINE_GUID(IID_ID3D12GraphicsCommandList1,0x553103fb,0x1fe7,0x4557,0xbb,0x38,0x94,0x6d,0x7d,0x0e,0x7c,0xa7);
DEFINE_GUID(IID_ID3D12CommandQueue,0x0ec870a6,0x5d7e,0x4c22,0x8c,0xfc,0x5b,0xaa,0xe0,0x76,0x16,0xed);
DEFINE_GUID(IID_ID3D12Device,0x189819f1,0x1db6,0x4b57,0xbe,0x54,0x18,0x21,0x33,0x9b,0x85,0xf7);
DEFINE_GUID(IID_ID3D12PipelineLibrary,0xc64226a8,0x9201,0x46af,0xb4,0xcc,0x53,0xfb,0x9f,0xf7,0x41,0x4f);
DEFINE_GUID(IID_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_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5);

#ifdef __cplusplus
}
#endif

/* d3d12sdklayers.h */
#ifndef __ID3D12Debug_FWD_DEFINED__
#define __ID3D12Debug_FWD_DEFINED__
typedef interface ID3D12Debug ID3D12Debug;

#endif  /* __ID3D12Debug_FWD_DEFINED__ */

#ifdef __cplusplus
extern "C"{
#endif 

#ifndef __ID3D12Debug_INTERFACE_DEFINED__
#define __ID3D12Debug_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_ID3D12Debug;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("344488b7-6846-474b-b989-f027448245e0")
    ID3D12Debug : public IUnknown
    {
    public:
        virtual void STDMETHODCALLTYPE EnableDebugLayer( void) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct ID3D12DebugVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ID3D12Debug * This,
            REFIID riid,
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ID3D12Debug * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ID3D12Debug * This);
        
        void ( STDMETHODCALLTYPE *EnableDebugLayer )( 
            ID3D12Debug * This);
        
        END_INTERFACE
    } ID3D12DebugVtbl;

    interface ID3D12Debug
    {
        CONST_VTBL struct ID3D12DebugVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


#define ID3D12Debug_EnableDebugLayer(This)      \
    ( (This)->lpVtbl -> EnableDebugLayer(This) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __ID3D12Debug_INTERFACE_DEFINED__ */

DEFINE_GUID(IID_ID3D12Debug,0x344488b7,0x6846,0x474b,0xb9,0x89,0xf0,0x27,0x44,0x82,0x45,0xe0);

#ifdef __cplusplus
}
#endif

/* dxgi.h */
#ifndef __IDXGIObject_FWD_DEFINED__
#define __IDXGIObject_FWD_DEFINED__
typedef interface IDXGIObject IDXGIObject;

#endif  /* __IDXGIObject_FWD_DEFINED__ */


#ifndef __IDXGIAdapter_FWD_DEFINED__
#define __IDXGIAdapter_FWD_DEFINED__
typedef interface IDXGIAdapter IDXGIAdapter;

#endif  /* __IDXGIAdapter_FWD_DEFINED__ */


#ifndef __IDXGIOutput_FWD_DEFINED__
#define __IDXGIOutput_FWD_DEFINED__
typedef interface IDXGIOutput IDXGIOutput;

#endif  /* __IDXGIOutput_FWD_DEFINED__ */


#ifndef __IDXGISwapChain_FWD_DEFINED__
#define __IDXGISwapChain_FWD_DEFINED__
typedef interface IDXGISwapChain IDXGISwapChain;

#endif  /* __IDXGISwapChain_FWD_DEFINED__ */


#ifndef __IDXGIFactory_FWD_DEFINED__
#define __IDXGIFactory_FWD_DEFINED__
typedef interface IDXGIFactory IDXGIFactory;

#endif  /* __IDXGIFactory_FWD_DEFINED__ */


#ifndef __IDXGIFactory1_FWD_DEFINED__
#define __IDXGIFactory1_FWD_DEFINED__
typedef interface IDXGIFactory1 IDXGIFactory1;

#endif  /* __IDXGIFactory1_FWD_DEFINED__ */


#ifndef __IDXGIAdapter1_FWD_DEFINED__
#define __IDXGIAdapter1_FWD_DEFINED__
typedef interface IDXGIAdapter1 IDXGIAdapter1;

#endif  /* __IDXGIAdapter1_FWD_DEFINED__ */


typedef struct DXGI_ADAPTER_DESC
    {
    WCHAR Description[ 128 ];
    UINT VendorId;
    UINT DeviceId;
    UINT SubSysId;
    UINT Revision;
    SIZE_T DedicatedVideoMemory;
    SIZE_T DedicatedSystemMemory;
    SIZE_T SharedSystemMemory;
    LUID AdapterLuid;
    }   DXGI_ADAPTER_DESC;

typedef 
enum DXGI_ADAPTER_FLAG
    {
        DXGI_ADAPTER_FLAG_NONE        = 0,
        DXGI_ADAPTER_FLAG_REMOTE      = 1,
        DXGI_ADAPTER_FLAG_SOFTWARE    = 2,
        DXGI_ADAPTER_FLAG_FORCE_DWORD = 0xffffffff
    }   DXGI_ADAPTER_FLAG;

typedef struct DXGI_ADAPTER_DESC1
    {
    WCHAR Description[ 128 ];
    UINT VendorId;
    UINT DeviceId;
    UINT SubSysId;
    UINT Revision;
    SIZE_T DedicatedVideoMemory;
    SIZE_T DedicatedSystemMemory;
    SIZE_T SharedSystemMemory;
    LUID AdapterLuid;
    UINT Flags;
    }   DXGI_ADAPTER_DESC1;

typedef struct DXGI_SWAP_CHAIN_DESC DXGI_SWAP_CHAIN_DESC;


#ifndef __IDXGIObject_INTERFACE_DEFINED__
#define __IDXGIObject_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_IDXGIObject;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("aec22fb8-76f3-4639-9be0-28eb43a67a2e")
    IDXGIObject : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetPrivateData( 
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [in] */ UINT DataSize,
            /* [annotation][in] */ 
            _In_reads_bytes_(DataSize)  const void *pData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( 
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][in] */ 
            _In_opt_  const IUnknown *pUnknown) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetPrivateData( 
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][out][in] */ 
            _Inout_  UINT *pDataSize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pDataSize)  void *pData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetParent( 
            /* [annotation][in] */ 
            _In_  REFIID riid,
            /* [annotation][retval][out] */ 
            _COM_Outptr_  void **ppParent) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct IDXGIObjectVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IDXGIObject * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IDXGIObject * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IDXGIObject * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            IDXGIObject * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [in] */ UINT DataSize,
            /* [annotation][in] */ 
            _In_reads_bytes_(DataSize)  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            IDXGIObject * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][in] */ 
            _In_opt_  const IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            IDXGIObject * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][out][in] */ 
            _Inout_  UINT *pDataSize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pDataSize)  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *GetParent )( 
            IDXGIObject * This,
            /* [annotation][in] */ 
            _In_  REFIID riid,
            /* [annotation][retval][out] */ 
            _COM_Outptr_  void **ppParent);
        
        END_INTERFACE
    } IDXGIObjectVtbl;

    interface IDXGIObject
    {
        CONST_VTBL struct IDXGIObjectVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


#define IDXGIObject_SetPrivateData(This,Name,DataSize,pData)    \
    ( (This)->lpVtbl -> SetPrivateData(This,Name,DataSize,pData) ) 

#define IDXGIObject_SetPrivateDataInterface(This,Name,pUnknown) \
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,Name,pUnknown) ) 

#define IDXGIObject_GetPrivateData(This,Name,pDataSize,pData)   \
    ( (This)->lpVtbl -> GetPrivateData(This,Name,pDataSize,pData) ) 

#define IDXGIObject_GetParent(This,riid,ppParent)       \
    ( (This)->lpVtbl -> GetParent(This,riid,ppParent) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __IDXGIObject_INTERFACE_DEFINED__ */


#ifndef __IDXGIFactory_INTERFACE_DEFINED__
#define __IDXGIFactory_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_IDXGIFactory;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7b7166ec-21c7-44ae-b21a-c9ae321ae369")
    IDXGIFactory : public IDXGIObject
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumAdapters( 
            /* [in] */ UINT Adapter,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter **ppAdapter) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE MakeWindowAssociation( 
            HWND WindowHandle,
            UINT Flags) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetWindowAssociation( 
            /* [annotation][out] */ 
            _Out_  HWND *pWindowHandle) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateSwapChain( 
            /* [annotation][in] */ 
            _In_  IUnknown *pDevice,
            /* [annotation][in] */ 
            _In_  DXGI_SWAP_CHAIN_DESC *pDesc,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGISwapChain **ppSwapChain) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CreateSoftwareAdapter( 
            /* [in] */ HMODULE Module,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter **ppAdapter) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct IDXGIFactoryVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IDXGIFactory * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IDXGIFactory * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IDXGIFactory * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            IDXGIFactory * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [in] */ UINT DataSize,
            /* [annotation][in] */ 
            _In_reads_bytes_(DataSize)  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            IDXGIFactory * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][in] */ 
            _In_opt_  const IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            IDXGIFactory * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][out][in] */ 
            _Inout_  UINT *pDataSize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pDataSize)  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *GetParent )( 
            IDXGIFactory * This,
            /* [annotation][in] */ 
            _In_  REFIID riid,
            /* [annotation][retval][out] */ 
            _COM_Outptr_  void **ppParent);
        
        HRESULT ( STDMETHODCALLTYPE *EnumAdapters )( 
            IDXGIFactory * This,
            /* [in] */ UINT Adapter,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter **ppAdapter);
        
        HRESULT ( STDMETHODCALLTYPE *MakeWindowAssociation )( 
            IDXGIFactory * This,
            HWND WindowHandle,
            UINT Flags);
        
        HRESULT ( STDMETHODCALLTYPE *GetWindowAssociation )( 
            IDXGIFactory * This,
            /* [annotation][out] */ 
            _Out_  HWND *pWindowHandle);
        
        HRESULT ( STDMETHODCALLTYPE *CreateSwapChain )( 
            IDXGIFactory * This,
            /* [annotation][in] */ 
            _In_  IUnknown *pDevice,
            /* [annotation][in] */ 
            _In_  DXGI_SWAP_CHAIN_DESC *pDesc,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGISwapChain **ppSwapChain);
        
        HRESULT ( STDMETHODCALLTYPE *CreateSoftwareAdapter )( 
            IDXGIFactory * This,
            /* [in] */ HMODULE Module,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter **ppAdapter);
        
        END_INTERFACE
    } IDXGIFactoryVtbl;

    interface IDXGIFactory
    {
        CONST_VTBL struct IDXGIFactoryVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


#define IDXGIFactory_SetPrivateData(This,Name,DataSize,pData)   \
    ( (This)->lpVtbl -> SetPrivateData(This,Name,DataSize,pData) ) 

#define IDXGIFactory_SetPrivateDataInterface(This,Name,pUnknown)        \
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,Name,pUnknown) ) 

#define IDXGIFactory_GetPrivateData(This,Name,pDataSize,pData)  \
    ( (This)->lpVtbl -> GetPrivateData(This,Name,pDataSize,pData) ) 

#define IDXGIFactory_GetParent(This,riid,ppParent)      \
    ( (This)->lpVtbl -> GetParent(This,riid,ppParent) ) 


#define IDXGIFactory_EnumAdapters(This,Adapter,ppAdapter)       \
    ( (This)->lpVtbl -> EnumAdapters(This,Adapter,ppAdapter) ) 

#define IDXGIFactory_MakeWindowAssociation(This,WindowHandle,Flags)     \
    ( (This)->lpVtbl -> MakeWindowAssociation(This,WindowHandle,Flags) ) 

#define IDXGIFactory_GetWindowAssociation(This,pWindowHandle)   \
    ( (This)->lpVtbl -> GetWindowAssociation(This,pWindowHandle) ) 

#define IDXGIFactory_CreateSwapChain(This,pDevice,pDesc,ppSwapChain)    \
    ( (This)->lpVtbl -> CreateSwapChain(This,pDevice,pDesc,ppSwapChain) ) 

#define IDXGIFactory_CreateSoftwareAdapter(This,Module,ppAdapter)       \
    ( (This)->lpVtbl -> CreateSoftwareAdapter(This,Module,ppAdapter) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __IDXGIFactory_INTERFACE_DEFINED__ */



   struct DXGI_ADAPTER_DESC;

#ifndef __IDXGIAdapter_INTERFACE_DEFINED__
#define __IDXGIAdapter_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_IDXGIAdapter;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("2411e7e1-12ac-4ccf-bd14-9798e8534dc0")
    IDXGIAdapter : public IDXGIObject
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumOutputs( 
            /* [in] */ UINT Output,
            /* [annotation][out][in] */ 
            _COM_Outptr_  IDXGIOutput **ppOutput) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetDesc( 
            /* [annotation][out] */ 
            _Out_  DXGI_ADAPTER_DESC *pDesc) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE CheckInterfaceSupport( 
            /* [annotation][in] */ 
            _In_  REFGUID InterfaceName,
            /* [annotation][out] */ 
            _Out_  LARGE_INTEGER *pUMDVersion) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct IDXGIAdapterVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IDXGIAdapter * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IDXGIAdapter * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IDXGIAdapter * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            IDXGIAdapter * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [in] */ UINT DataSize,
            /* [annotation][in] */ 
            _In_reads_bytes_(DataSize)  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            IDXGIAdapter * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][in] */ 
            _In_opt_  const IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            IDXGIAdapter * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][out][in] */ 
            _Inout_  UINT *pDataSize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pDataSize)  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *GetParent )( 
            IDXGIAdapter * This,
            /* [annotation][in] */ 
            _In_  REFIID riid,
            /* [annotation][retval][out] */ 
            _COM_Outptr_  void **ppParent);
        
        HRESULT ( STDMETHODCALLTYPE *EnumOutputs )( 
            IDXGIAdapter * This,
            /* [in] */ UINT Output,
            /* [annotation][out][in] */ 
            _COM_Outptr_  IDXGIOutput **ppOutput);
        
        HRESULT ( STDMETHODCALLTYPE *GetDesc )( 
            IDXGIAdapter * This,
            /* [annotation][out] */ 
            _Out_  DXGI_ADAPTER_DESC *pDesc);
        
        HRESULT ( STDMETHODCALLTYPE *CheckInterfaceSupport )( 
            IDXGIAdapter * This,
            /* [annotation][in] */ 
            _In_  REFGUID InterfaceName,
            /* [annotation][out] */ 
            _Out_  LARGE_INTEGER *pUMDVersion);
        
        END_INTERFACE
    } IDXGIAdapterVtbl;

    interface IDXGIAdapter
    {
        CONST_VTBL struct IDXGIAdapterVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


#define IDXGIAdapter_SetPrivateData(This,Name,DataSize,pData)   \
    ( (This)->lpVtbl -> SetPrivateData(This,Name,DataSize,pData) ) 

#define IDXGIAdapter_SetPrivateDataInterface(This,Name,pUnknown)        \
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,Name,pUnknown) ) 

#define IDXGIAdapter_GetPrivateData(This,Name,pDataSize,pData)  \
    ( (This)->lpVtbl -> GetPrivateData(This,Name,pDataSize,pData) ) 

#define IDXGIAdapter_GetParent(This,riid,ppParent)      \
    ( (This)->lpVtbl -> GetParent(This,riid,ppParent) ) 


#define IDXGIAdapter_EnumOutputs(This,Output,ppOutput)  \
    ( (This)->lpVtbl -> EnumOutputs(This,Output,ppOutput) ) 

#define IDXGIAdapter_GetDesc(This,pDesc)        \
    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) 

#define IDXGIAdapter_CheckInterfaceSupport(This,InterfaceName,pUMDVersion)      \
    ( (This)->lpVtbl -> CheckInterfaceSupport(This,InterfaceName,pUMDVersion) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __IDXGIAdapter_INTERFACE_DEFINED__ */



#ifndef __IDXGIFactory1_INTERFACE_DEFINED__
#define __IDXGIFactory1_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_IDXGIFactory1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("770aae78-f26f-4dba-a829-253c83d1b387")
    IDXGIFactory1 : public IDXGIFactory
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumAdapters1( 
            /* [in] */ UINT Adapter,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter1 **ppAdapter) = 0;
        
        virtual BOOL STDMETHODCALLTYPE IsCurrent( void) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct IDXGIFactory1Vtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IDXGIFactory1 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IDXGIFactory1 * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IDXGIFactory1 * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            IDXGIFactory1 * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [in] */ UINT DataSize,
            /* [annotation][in] */ 
            _In_reads_bytes_(DataSize)  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            IDXGIFactory1 * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][in] */ 
            _In_opt_  const IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            IDXGIFactory1 * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][out][in] */ 
            _Inout_  UINT *pDataSize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pDataSize)  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *GetParent )( 
            IDXGIFactory1 * This,
            /* [annotation][in] */ 
            _In_  REFIID riid,
            /* [annotation][retval][out] */ 
            _COM_Outptr_  void **ppParent);
        
        HRESULT ( STDMETHODCALLTYPE *EnumAdapters )( 
            IDXGIFactory1 * This,
            /* [in] */ UINT Adapter,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter **ppAdapter);
        
        HRESULT ( STDMETHODCALLTYPE *MakeWindowAssociation )( 
            IDXGIFactory1 * This,
            HWND WindowHandle,
            UINT Flags);
        
        HRESULT ( STDMETHODCALLTYPE *GetWindowAssociation )( 
            IDXGIFactory1 * This,
            /* [annotation][out] */ 
            _Out_  HWND *pWindowHandle);
        
        HRESULT ( STDMETHODCALLTYPE *CreateSwapChain )( 
            IDXGIFactory1 * This,
            /* [annotation][in] */ 
            _In_  IUnknown *pDevice,
            /* [annotation][in] */ 
            _In_  DXGI_SWAP_CHAIN_DESC *pDesc,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGISwapChain **ppSwapChain);
        
        HRESULT ( STDMETHODCALLTYPE *CreateSoftwareAdapter )( 
            IDXGIFactory1 * This,
            /* [in] */ HMODULE Module,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter **ppAdapter);
        
        HRESULT ( STDMETHODCALLTYPE *EnumAdapters1 )( 
            IDXGIFactory1 * This,
            /* [in] */ UINT Adapter,
            /* [annotation][out] */ 
            _COM_Outptr_  IDXGIAdapter1 **ppAdapter);
        
        BOOL ( STDMETHODCALLTYPE *IsCurrent )( 
            IDXGIFactory1 * This);
        
        END_INTERFACE
    } IDXGIFactory1Vtbl;

    interface IDXGIFactory1
    {
        CONST_VTBL struct IDXGIFactory1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


#define IDXGIFactory1_SetPrivateData(This,Name,DataSize,pData)  \
    ( (This)->lpVtbl -> SetPrivateData(This,Name,DataSize,pData) ) 

#define IDXGIFactory1_SetPrivateDataInterface(This,Name,pUnknown)       \
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,Name,pUnknown) ) 

#define IDXGIFactory1_GetPrivateData(This,Name,pDataSize,pData) \
    ( (This)->lpVtbl -> GetPrivateData(This,Name,pDataSize,pData) ) 

#define IDXGIFactory1_GetParent(This,riid,ppParent)     \
    ( (This)->lpVtbl -> GetParent(This,riid,ppParent) ) 


#define IDXGIFactory1_EnumAdapters(This,Adapter,ppAdapter)      \
    ( (This)->lpVtbl -> EnumAdapters(This,Adapter,ppAdapter) ) 

#define IDXGIFactory1_MakeWindowAssociation(This,WindowHandle,Flags)    \
    ( (This)->lpVtbl -> MakeWindowAssociation(This,WindowHandle,Flags) ) 

#define IDXGIFactory1_GetWindowAssociation(This,pWindowHandle)  \
    ( (This)->lpVtbl -> GetWindowAssociation(This,pWindowHandle) ) 

#define IDXGIFactory1_CreateSwapChain(This,pDevice,pDesc,ppSwapChain)   \
    ( (This)->lpVtbl -> CreateSwapChain(This,pDevice,pDesc,ppSwapChain) ) 

#define IDXGIFactory1_CreateSoftwareAdapter(This,Module,ppAdapter)      \
    ( (This)->lpVtbl -> CreateSoftwareAdapter(This,Module,ppAdapter) ) 


#define IDXGIFactory1_EnumAdapters1(This,Adapter,ppAdapter)     \
    ( (This)->lpVtbl -> EnumAdapters1(This,Adapter,ppAdapter) ) 

#define IDXGIFactory1_IsCurrent(This)   \
    ( (This)->lpVtbl -> IsCurrent(This) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __IDXGIFactory1_INTERFACE_DEFINED__ */



#ifndef __IDXGIAdapter1_INTERFACE_DEFINED__
#define __IDXGIAdapter1_INTERFACE_DEFINED__

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


EXTERN_C const IID IID_IDXGIAdapter1;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("29038f61-3839-4626-91fd-086879011a05")
    IDXGIAdapter1 : public IDXGIAdapter
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetDesc1( 
            /* [annotation][out] */ 
            _Out_  DXGI_ADAPTER_DESC1 *pDesc) = 0;
        
    };
    
    
#else   /* C style interface */

    typedef struct IDXGIAdapter1Vtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IDXGIAdapter1 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IDXGIAdapter1 * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IDXGIAdapter1 * This);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( 
            IDXGIAdapter1 * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [in] */ UINT DataSize,
            /* [annotation][in] */ 
            _In_reads_bytes_(DataSize)  const void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( 
            IDXGIAdapter1 * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][in] */ 
            _In_opt_  const IUnknown *pUnknown);
        
        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( 
            IDXGIAdapter1 * This,
            /* [annotation][in] */ 
            _In_  REFGUID Name,
            /* [annotation][out][in] */ 
            _Inout_  UINT *pDataSize,
            /* [annotation][out] */ 
            _Out_writes_bytes_(*pDataSize)  void *pData);
        
        HRESULT ( STDMETHODCALLTYPE *GetParent )( 
            IDXGIAdapter1 * This,
            /* [annotation][in] */ 
            _In_  REFIID riid,
            /* [annotation][retval][out] */ 
            _COM_Outptr_  void **ppParent);
        
        HRESULT ( STDMETHODCALLTYPE *EnumOutputs )( 
            IDXGIAdapter1 * This,
            /* [in] */ UINT Output,
            /* [annotation][out][in] */ 
            _COM_Outptr_  IDXGIOutput **ppOutput);
        
        HRESULT ( STDMETHODCALLTYPE *GetDesc )( 
            IDXGIAdapter1 * This,
            /* [annotation][out] */ 
            _Out_  DXGI_ADAPTER_DESC *pDesc);
        
        HRESULT ( STDMETHODCALLTYPE *CheckInterfaceSupport )( 
            IDXGIAdapter1 * This,
            /* [annotation][in] */ 
            _In_  REFGUID InterfaceName,
            /* [annotation][out] */ 
            _Out_  LARGE_INTEGER *pUMDVersion);
        
        HRESULT ( STDMETHODCALLTYPE *GetDesc1 )( 
            IDXGIAdapter1 * This,
            /* [annotation][out] */ 
            _Out_  DXGI_ADAPTER_DESC1 *pDesc);
        
        END_INTERFACE
    } IDXGIAdapter1Vtbl;

    interface IDXGIAdapter1
    {
        CONST_VTBL struct IDXGIAdapter1Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


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

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

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


#define IDXGIAdapter1_SetPrivateData(This,Name,DataSize,pData)  \
    ( (This)->lpVtbl -> SetPrivateData(This,Name,DataSize,pData) ) 

#define IDXGIAdapter1_SetPrivateDataInterface(This,Name,pUnknown)       \
    ( (This)->lpVtbl -> SetPrivateDataInterface(This,Name,pUnknown) ) 

#define IDXGIAdapter1_GetPrivateData(This,Name,pDataSize,pData) \
    ( (This)->lpVtbl -> GetPrivateData(This,Name,pDataSize,pData) ) 

#define IDXGIAdapter1_GetParent(This,riid,ppParent)     \
    ( (This)->lpVtbl -> GetParent(This,riid,ppParent) ) 


#define IDXGIAdapter1_EnumOutputs(This,Output,ppOutput) \
    ( (This)->lpVtbl -> EnumOutputs(This,Output,ppOutput) ) 

#define IDXGIAdapter1_GetDesc(This,pDesc)       \
    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) 

#define IDXGIAdapter1_CheckInterfaceSupport(This,InterfaceName,pUMDVersion)     \
    ( (This)->lpVtbl -> CheckInterfaceSupport(This,InterfaceName,pUMDVersion) ) 


#define IDXGIAdapter1_GetDesc1(This,pDesc)      \
    ( (This)->lpVtbl -> GetDesc1(This,pDesc) ) 

#endif /* COBJMACROS */

#endif  /* C style interface */

#endif  /* __IDXGIAdapter1_INTERFACE_DEFINED__ */

 // NOTE(marcos): declaring CreateDXGIFactory "1" since it works on UWP as well
//HRESULT WINAPI CreateDXGIFactory1(REFIID riid, _COM_Outptr_ void **ppFactory);
typedef HRESULT(WINAPI* PFN_CREATEDXGIFACORY1)(REFIID riid, _COM_Outptr_ void **ppFactory);

DEFINE_GUID(IID_IDXGIObject,0xaec22fb8,0x76f3,0x4639,0x9b,0xe0,0x28,0xeb,0x43,0xa6,0x7a,0x2e);
DEFINE_GUID(IID_IDXGIDeviceSubObject,0x3d3e0379,0xf9de,0x4d58,0xbb,0x6c,0x18,0xd6,0x29,0x92,0xf1,0xa6);
DEFINE_GUID(IID_IDXGIResource,0x035f3ab4,0x482e,0x4e50,0xb4,0x1f,0x8a,0x7f,0x8b,0xd8,0x96,0x0b);
DEFINE_GUID(IID_IDXGIKeyedMutex,0x9d8e1289,0xd7b3,0x465f,0x81,0x26,0x25,0x0e,0x34,0x9a,0xf8,0x5d);
DEFINE_GUID(IID_IDXGISurface,0xcafcb56c,0x6ac3,0x4889,0xbf,0x47,0x9e,0x23,0xbb,0xd2,0x60,0xec);
DEFINE_GUID(IID_IDXGISurface1,0x4AE63092,0x6327,0x4c1b,0x80,0xAE,0xBF,0xE1,0x2E,0xA3,0x2B,0x86);
DEFINE_GUID(IID_IDXGIAdapter,0x2411e7e1,0x12ac,0x4ccf,0xbd,0x14,0x97,0x98,0xe8,0x53,0x4d,0xc0);
DEFINE_GUID(IID_IDXGIOutput,0xae02eedb,0xc735,0x4690,0x8d,0x52,0x5a,0x8d,0xc2,0x02,0x13,0xaa);
DEFINE_GUID(IID_IDXGISwapChain,0x310d36a0,0xd2e7,0x4c0a,0xaa,0x04,0x6a,0x9d,0x23,0xb8,0x88,0x6a);
DEFINE_GUID(IID_IDXGIFactory,0x7b7166ec,0x21c7,0x44ae,0xb2,0x1a,0xc9,0xae,0x32,0x1a,0xe3,0x69);
DEFINE_GUID(IID_IDXGIDevice,0x54ec77fa,0x1377,0x44e6,0x8c,0x32,0x88,0xfd,0x5f,0x44,0xc8,0x4c);
DEFINE_GUID(IID_IDXGIFactory1,0x770aae78,0xf26f,0x4dba,0xa8,0x29,0x25,0x3c,0x83,0xd1,0xb3,0x87);
DEFINE_GUID(IID_IDXGIAdapter1,0x29038f61,0x3839,0x4626,0x91,0xfd,0x08,0x68,0x79,0x01,0x1a,0x05);
DEFINE_GUID(IID_IDXGIDevice1,0x77db970f,0x6276,0x48ba,0xba,0x28,0x07,0x01,0x43,0xb4,0x39,0x2c);



/* d3dcompiler.h */
typedef HRESULT(WINAPI* PFN_D3DCOMPILE)(
           _In_reads_bytes_(SrcDataSize) LPCVOID pSrcData,
           _In_ SIZE_T SrcDataSize,
           _In_opt_ LPCSTR pSourceName,
           _In_reads_opt_(_Inexpressible_(pDefines->Name != NULL)) CONST D3D_SHADER_MACRO* pDefines,
           _In_opt_ ID3DInclude* pInclude,
           _In_opt_ LPCSTR pEntrypoint,
           _In_ LPCSTR pTarget,
           _In_ UINT Flags1,
           _In_ UINT Flags2,
           _Out_ ID3DBlob** ppCode,
           _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorMsgs);

#define D3DCOMPILE_DEBUG                                (1 << 0)
#define D3DCOMPILE_SKIP_VALIDATION                      (1 << 1)
#define D3DCOMPILE_SKIP_OPTIMIZATION                    (1 << 2)
#define D3DCOMPILE_PACK_MATRIX_ROW_MAJOR                (1 << 3)
#define D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR             (1 << 4)
#define D3DCOMPILE_PARTIAL_PRECISION                    (1 << 5)
#define D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT             (1 << 6)
#define D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT             (1 << 7)
#define D3DCOMPILE_NO_PRESHADER                         (1 << 8)
#define D3DCOMPILE_AVOID_FLOW_CONTROL                   (1 << 9)
#define D3DCOMPILE_PREFER_FLOW_CONTROL                  (1 << 10)
#define D3DCOMPILE_ENABLE_STRICTNESS                    (1 << 11)
#define D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY       (1 << 12)
#define D3DCOMPILE_IEEE_STRICTNESS                      (1 << 13)
#define D3DCOMPILE_OPTIMIZATION_LEVEL0                  (1 << 14)
#define D3DCOMPILE_OPTIMIZATION_LEVEL1                  0
#define D3DCOMPILE_OPTIMIZATION_LEVEL2                  ((1 << 14) | (1 << 15))
#define D3DCOMPILE_OPTIMIZATION_LEVEL3                  (1 << 15)
#define D3DCOMPILE_RESERVED16                           (1 << 16)
#define D3DCOMPILE_RESERVED17                           (1 << 17)
#define D3DCOMPILE_WARNINGS_ARE_ERRORS                  (1 << 18)
#define D3DCOMPILE_RESOURCES_MAY_ALIAS                  (1 << 19)
#define D3DCOMPILE_ENABLE_UNBOUNDED_DESCRIPTOR_TABLES   (1 << 20)
#define D3DCOMPILE_ALL_RESOURCES_BOUND                  (1 << 21)

#ifdef __clang__
#pragma clang diagnostic pop
#endif

#endif/*__mini_d3d12_h__*/
back to top