/*** Autogenerated by WIDL 11.10 from ../include/vkd3d_core_interface.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __vkd3d_core_interface_h__
#define __vkd3d_core_interface_h__

/* Forward declarations */

#ifndef __IVKD3DCoreInterface_FWD_DEFINED__
#define __IVKD3DCoreInterface_FWD_DEFINED__
typedef interface IVKD3DCoreInterface IVKD3DCoreInterface;
#ifdef __cplusplus
interface IVKD3DCoreInterface;
#endif /* __cplusplus */
#endif

#ifndef __IVKD3DDebugControlInterface_FWD_DEFINED__
#define __IVKD3DDebugControlInterface_FWD_DEFINED__
typedef interface IVKD3DDebugControlInterface IVKD3DDebugControlInterface;
#ifdef __cplusplus
interface IVKD3DDebugControlInterface;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <vkd3d_d3d12.h>

#ifdef __cplusplus
extern "C" {
#endif

/*****************************************************************************
 * IVKD3DCoreInterface interface
 */
#ifndef __IVKD3DCoreInterface_INTERFACE_DEFINED__
#define __IVKD3DCoreInterface_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVKD3DCoreInterface, 0x18da885c, 0xa7b5, 0x464e, 0xa1,0x21, 0xcc,0xb7,0x5d,0x4d,0xfc,0x31);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("18da885c-a7b5-464e-a121-ccb75d4dfc31")
IVKD3DCoreInterface
{

    BEGIN_INTERFACE

    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IUnknown *adapter,
        D3D_FEATURE_LEVEL minimum_feature_level,
        REFIID iid,
        void **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRootSignatureDeserializer(
        const void *data,
        SIZE_T data_size,
        REFIID iid,
        void **deserializer) = 0;

    virtual HRESULT STDMETHODCALLTYPE SerializeRootSignature(
        const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc,
        D3D_ROOT_SIGNATURE_VERSION version,
        ID3DBlob **blob,
        ID3DBlob **error_blob) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateVersionedRootSignatureDeserializer(
        const void *data,
        SIZE_T data_size,
        REFIID iid,
        void **deserializer) = 0;

    virtual HRESULT STDMETHODCALLTYPE SerializeVersionedRootSignature(
        const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,
        ID3DBlob **blob,
        ID3DBlob **error_blob) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDebugInterface(
        REFIID iid,
        void **debug) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnableExperimentalFeatures(
        UINT feature_count,
        const IID *iids,
        void *configurations,
        UINT *configurations_sizes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInterface(
        REFCLSID rcslid,
        REFIID iid,
        void **debug) = 0;

    END_INTERFACE

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVKD3DCoreInterface, 0x18da885c, 0xa7b5, 0x464e, 0xa1,0x21, 0xcc,0xb7,0x5d,0x4d,0xfc,0x31)
#endif
#else
typedef struct IVKD3DCoreInterfaceVtbl {
    BEGIN_INTERFACE

    /*** IVKD3DCoreInterface methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        IVKD3DCoreInterface *This,
        IUnknown *adapter,
        D3D_FEATURE_LEVEL minimum_feature_level,
        REFIID iid,
        void **device);

    HRESULT (STDMETHODCALLTYPE *CreateRootSignatureDeserializer)(
        IVKD3DCoreInterface *This,
        const void *data,
        SIZE_T data_size,
        REFIID iid,
        void **deserializer);

    HRESULT (STDMETHODCALLTYPE *SerializeRootSignature)(
        IVKD3DCoreInterface *This,
        const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc,
        D3D_ROOT_SIGNATURE_VERSION version,
        ID3DBlob **blob,
        ID3DBlob **error_blob);

    HRESULT (STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializer)(
        IVKD3DCoreInterface *This,
        const void *data,
        SIZE_T data_size,
        REFIID iid,
        void **deserializer);

    HRESULT (STDMETHODCALLTYPE *SerializeVersionedRootSignature)(
        IVKD3DCoreInterface *This,
        const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,
        ID3DBlob **blob,
        ID3DBlob **error_blob);

    HRESULT (STDMETHODCALLTYPE *GetDebugInterface)(
        IVKD3DCoreInterface *This,
        REFIID iid,
        void **debug);

    HRESULT (STDMETHODCALLTYPE *EnableExperimentalFeatures)(
        IVKD3DCoreInterface *This,
        UINT feature_count,
        const IID *iids,
        void *configurations,
        UINT *configurations_sizes);

    HRESULT (STDMETHODCALLTYPE *GetInterface)(
        IVKD3DCoreInterface *This,
        REFCLSID rcslid,
        REFIID iid,
        void **debug);

    END_INTERFACE
} IVKD3DCoreInterfaceVtbl;

interface IVKD3DCoreInterface {
    CONST_VTBL IVKD3DCoreInterfaceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IVKD3DCoreInterface methods ***/
#define IVKD3DCoreInterface_CreateDevice(This,adapter,minimum_feature_level,iid,device) (This)->lpVtbl->CreateDevice(This,adapter,minimum_feature_level,iid,device)
#define IVKD3DCoreInterface_CreateRootSignatureDeserializer(This,data,data_size,iid,deserializer) (This)->lpVtbl->CreateRootSignatureDeserializer(This,data,data_size,iid,deserializer)
#define IVKD3DCoreInterface_SerializeRootSignature(This,root_signature_desc,version,blob,error_blob) (This)->lpVtbl->SerializeRootSignature(This,root_signature_desc,version,blob,error_blob)
#define IVKD3DCoreInterface_CreateVersionedRootSignatureDeserializer(This,data,data_size,iid,deserializer) (This)->lpVtbl->CreateVersionedRootSignatureDeserializer(This,data,data_size,iid,deserializer)
#define IVKD3DCoreInterface_SerializeVersionedRootSignature(This,desc,blob,error_blob) (This)->lpVtbl->SerializeVersionedRootSignature(This,desc,blob,error_blob)
#define IVKD3DCoreInterface_GetDebugInterface(This,iid,debug) (This)->lpVtbl->GetDebugInterface(This,iid,debug)
#define IVKD3DCoreInterface_EnableExperimentalFeatures(This,feature_count,iids,configurations,configurations_sizes) (This)->lpVtbl->EnableExperimentalFeatures(This,feature_count,iids,configurations,configurations_sizes)
#define IVKD3DCoreInterface_GetInterface(This,rcslid,iid,debug) (This)->lpVtbl->GetInterface(This,rcslid,iid,debug)
#else
/*** IVKD3DCoreInterface methods ***/
static inline HRESULT IVKD3DCoreInterface_CreateDevice(IVKD3DCoreInterface* This,IUnknown *adapter,D3D_FEATURE_LEVEL minimum_feature_level,REFIID iid,void **device) {
    return This->lpVtbl->CreateDevice(This,adapter,minimum_feature_level,iid,device);
}
static inline HRESULT IVKD3DCoreInterface_CreateRootSignatureDeserializer(IVKD3DCoreInterface* This,const void *data,SIZE_T data_size,REFIID iid,void **deserializer) {
    return This->lpVtbl->CreateRootSignatureDeserializer(This,data,data_size,iid,deserializer);
}
static inline HRESULT IVKD3DCoreInterface_SerializeRootSignature(IVKD3DCoreInterface* This,const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc,D3D_ROOT_SIGNATURE_VERSION version,ID3DBlob **blob,ID3DBlob **error_blob) {
    return This->lpVtbl->SerializeRootSignature(This,root_signature_desc,version,blob,error_blob);
}
static inline HRESULT IVKD3DCoreInterface_CreateVersionedRootSignatureDeserializer(IVKD3DCoreInterface* This,const void *data,SIZE_T data_size,REFIID iid,void **deserializer) {
    return This->lpVtbl->CreateVersionedRootSignatureDeserializer(This,data,data_size,iid,deserializer);
}
static inline HRESULT IVKD3DCoreInterface_SerializeVersionedRootSignature(IVKD3DCoreInterface* This,const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc,ID3DBlob **blob,ID3DBlob **error_blob) {
    return This->lpVtbl->SerializeVersionedRootSignature(This,desc,blob,error_blob);
}
static inline HRESULT IVKD3DCoreInterface_GetDebugInterface(IVKD3DCoreInterface* This,REFIID iid,void **debug) {
    return This->lpVtbl->GetDebugInterface(This,iid,debug);
}
static inline HRESULT IVKD3DCoreInterface_EnableExperimentalFeatures(IVKD3DCoreInterface* This,UINT feature_count,const IID *iids,void *configurations,UINT *configurations_sizes) {
    return This->lpVtbl->EnableExperimentalFeatures(This,feature_count,iids,configurations,configurations_sizes);
}
static inline HRESULT IVKD3DCoreInterface_GetInterface(IVKD3DCoreInterface* This,REFCLSID rcslid,REFIID iid,void **debug) {
    return This->lpVtbl->GetInterface(This,rcslid,iid,debug);
}
#endif
#endif

#endif


#endif  /* __IVKD3DCoreInterface_INTERFACE_DEFINED__ */

DEFINE_GUID(CLSID_VKD3DCore,       0xed53efad, 0xda21, 0x4d96, 0xa1, 0xbc, 0xe7, 0x34, 0xe0, 0x78, 0x87, 0x9c );
typedef enum VKD3D_DEBUG_CONTROL_OUT_OF_SPEC_BEHAVIOR {
    VKD3D_DEBUG_CONTROL_OUT_OF_SPEC_BEHAVIOR_SAMPLE_COUNT_MISMATCH = 0x0,
    VKD3D_DEBUG_CONTROL_OUT_OF_SPEC_BEHAVIOR_COUNT = 0x1
} VKD3D_DEBUG_CONTROL_OUT_OF_SPEC_BEHAVIOR;
typedef enum VKD3D_DEBUG_CONTROL_BEHAVIOR_FLAGS {
    VKD3D_DEBUG_CONTROL_BEHAVIOR_DEFAULT = 0,
    VKD3D_DEBUG_CONTROL_BEHAVIOR_ENABLE_TILER_SYNC = 0x1,
    VKD3D_DEBUG_CONTROL_BEHAVIOR_DISABLE_TILER_SYNC = 0x2,
    VKD3D_DEBUG_CONTROL_BEHAVIOR_ENABLE_SUSPEND_RESUME = 0x4,
    VKD3D_DEBUG_CONTROL_BEHAVIOR_DISABLE_SUSPEND_RESUME = 0x8
} VKD3D_DEBUG_CONTROL_BEHAVIOR_FLAGS;
DEFINE_ENUM_FLAG_OPERATORS(VKD3D_DEBUG_CONTROL_BEHAVIOR_FLAGS);
/*****************************************************************************
 * IVKD3DDebugControlInterface interface
 */
#ifndef __IVKD3DDebugControlInterface_INTERFACE_DEFINED__
#define __IVKD3DDebugControlInterface_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVKD3DDebugControlInterface, 0x7eef8448, 0x81b3, 0x4437, 0x96,0x2a, 0x18,0x8a,0x7f,0xdb,0xd9,0x26);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7eef8448-81b3-4437-962a-188a7fdbd926")
IVKD3DDebugControlInterface
{

    BEGIN_INTERFACE

    virtual HRESULT STDMETHODCALLTYPE SetRunningUnderTest(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetExplodeOnValidationError(
        BOOL enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE MuteValidationGlobal(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnmuteValidationGlobal(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MuteValidationMessageID(
        const char *vuid,
        const char *explanation) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnmuteValidationMessageID(
        const char *vuid) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutOfSpecTestBehavior(
        VKD3D_DEBUG_CONTROL_OUT_OF_SPEC_BEHAVIOR behavior,
        BOOL enable) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBehaviorFlags(
        VKD3D_DEBUG_CONTROL_BEHAVIOR_FLAGS behavior) = 0;

    END_INTERFACE

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVKD3DDebugControlInterface, 0x7eef8448, 0x81b3, 0x4437, 0x96,0x2a, 0x18,0x8a,0x7f,0xdb,0xd9,0x26)
#endif
#else
typedef struct IVKD3DDebugControlInterfaceVtbl {
    BEGIN_INTERFACE

    /*** IVKD3DDebugControlInterface methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRunningUnderTest)(
        IVKD3DDebugControlInterface *This);

    HRESULT (STDMETHODCALLTYPE *SetExplodeOnValidationError)(
        IVKD3DDebugControlInterface *This,
        BOOL enable);

    HRESULT (STDMETHODCALLTYPE *MuteValidationGlobal)(
        IVKD3DDebugControlInterface *This);

    HRESULT (STDMETHODCALLTYPE *UnmuteValidationGlobal)(
        IVKD3DDebugControlInterface *This);

    HRESULT (STDMETHODCALLTYPE *MuteValidationMessageID)(
        IVKD3DDebugControlInterface *This,
        const char *vuid,
        const char *explanation);

    HRESULT (STDMETHODCALLTYPE *UnmuteValidationMessageID)(
        IVKD3DDebugControlInterface *This,
        const char *vuid);

    HRESULT (STDMETHODCALLTYPE *SetOutOfSpecTestBehavior)(
        IVKD3DDebugControlInterface *This,
        VKD3D_DEBUG_CONTROL_OUT_OF_SPEC_BEHAVIOR behavior,
        BOOL enable);

    HRESULT (STDMETHODCALLTYPE *SetBehaviorFlags)(
        IVKD3DDebugControlInterface *This,
        VKD3D_DEBUG_CONTROL_BEHAVIOR_FLAGS behavior);

    END_INTERFACE
} IVKD3DDebugControlInterfaceVtbl;

interface IVKD3DDebugControlInterface {
    CONST_VTBL IVKD3DDebugControlInterfaceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IVKD3DDebugControlInterface methods ***/
#define IVKD3DDebugControlInterface_SetRunningUnderTest(This) (This)->lpVtbl->SetRunningUnderTest(This)
#define IVKD3DDebugControlInterface_SetExplodeOnValidationError(This,enable) (This)->lpVtbl->SetExplodeOnValidationError(This,enable)
#define IVKD3DDebugControlInterface_MuteValidationGlobal(This) (This)->lpVtbl->MuteValidationGlobal(This)
#define IVKD3DDebugControlInterface_UnmuteValidationGlobal(This) (This)->lpVtbl->UnmuteValidationGlobal(This)
#define IVKD3DDebugControlInterface_MuteValidationMessageID(This,vuid,explanation) (This)->lpVtbl->MuteValidationMessageID(This,vuid,explanation)
#define IVKD3DDebugControlInterface_UnmuteValidationMessageID(This,vuid) (This)->lpVtbl->UnmuteValidationMessageID(This,vuid)
#define IVKD3DDebugControlInterface_SetOutOfSpecTestBehavior(This,behavior,enable) (This)->lpVtbl->SetOutOfSpecTestBehavior(This,behavior,enable)
#define IVKD3DDebugControlInterface_SetBehaviorFlags(This,behavior) (This)->lpVtbl->SetBehaviorFlags(This,behavior)
#else
/*** IVKD3DDebugControlInterface methods ***/
static inline HRESULT IVKD3DDebugControlInterface_SetRunningUnderTest(IVKD3DDebugControlInterface* This) {
    return This->lpVtbl->SetRunningUnderTest(This);
}
static inline HRESULT IVKD3DDebugControlInterface_SetExplodeOnValidationError(IVKD3DDebugControlInterface* This,BOOL enable) {
    return This->lpVtbl->SetExplodeOnValidationError(This,enable);
}
static inline HRESULT IVKD3DDebugControlInterface_MuteValidationGlobal(IVKD3DDebugControlInterface* This) {
    return This->lpVtbl->MuteValidationGlobal(This);
}
static inline HRESULT IVKD3DDebugControlInterface_UnmuteValidationGlobal(IVKD3DDebugControlInterface* This) {
    return This->lpVtbl->UnmuteValidationGlobal(This);
}
static inline HRESULT IVKD3DDebugControlInterface_MuteValidationMessageID(IVKD3DDebugControlInterface* This,const char *vuid,const char *explanation) {
    return This->lpVtbl->MuteValidationMessageID(This,vuid,explanation);
}
static inline HRESULT IVKD3DDebugControlInterface_UnmuteValidationMessageID(IVKD3DDebugControlInterface* This,const char *vuid) {
    return This->lpVtbl->UnmuteValidationMessageID(This,vuid);
}
static inline HRESULT IVKD3DDebugControlInterface_SetOutOfSpecTestBehavior(IVKD3DDebugControlInterface* This,VKD3D_DEBUG_CONTROL_OUT_OF_SPEC_BEHAVIOR behavior,BOOL enable) {
    return This->lpVtbl->SetOutOfSpecTestBehavior(This,behavior,enable);
}
static inline HRESULT IVKD3DDebugControlInterface_SetBehaviorFlags(IVKD3DDebugControlInterface* This,VKD3D_DEBUG_CONTROL_BEHAVIOR_FLAGS behavior) {
    return This->lpVtbl->SetBehaviorFlags(This,behavior);
}
#endif
#endif

#endif


#endif  /* __IVKD3DDebugControlInterface_INTERFACE_DEFINED__ */

DEFINE_GUID(CLSID_VKD3DDebugControl,   0xca062def, 0x49e9, 0x4e2b, 0x80, 0x5d, 0x81, 0x79, 0xd0, 0xa7, 0x9b, 0x3b );
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __vkd3d_core_interface_h__ */
