/*** Autogenerated by WIDL 11.10 from ../include/vkd3d_swapchain_factory.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_swapchain_factory_h__
#define __vkd3d_swapchain_factory_h__

/* Forward declarations */

#ifndef __IDXGIVkSurfaceFactory_FWD_DEFINED__
#define __IDXGIVkSurfaceFactory_FWD_DEFINED__
typedef interface IDXGIVkSurfaceFactory IDXGIVkSurfaceFactory;
#ifdef __cplusplus
interface IDXGIVkSurfaceFactory;
#endif /* __cplusplus */
#endif

#ifndef __IDXGIVkSwapChain_FWD_DEFINED__
#define __IDXGIVkSwapChain_FWD_DEFINED__
typedef interface IDXGIVkSwapChain IDXGIVkSwapChain;
#ifdef __cplusplus
interface IDXGIVkSwapChain;
#endif /* __cplusplus */
#endif

#ifndef __IDXGIVkSwapChain1_FWD_DEFINED__
#define __IDXGIVkSwapChain1_FWD_DEFINED__
typedef interface IDXGIVkSwapChain1 IDXGIVkSwapChain1;
#ifdef __cplusplus
interface IDXGIVkSwapChain1;
#endif /* __cplusplus */
#endif

#ifndef __IDXGIVkSwapChain2_FWD_DEFINED__
#define __IDXGIVkSwapChain2_FWD_DEFINED__
typedef interface IDXGIVkSwapChain2 IDXGIVkSwapChain2;
#ifdef __cplusplus
interface IDXGIVkSwapChain2;
#endif /* __cplusplus */
#endif

#ifndef __IDXGIVkSwapChainFactory_FWD_DEFINED__
#define __IDXGIVkSwapChainFactory_FWD_DEFINED__
typedef interface IDXGIVkSwapChainFactory IDXGIVkSwapChainFactory;
#ifdef __cplusplus
interface IDXGIVkSwapChainFactory;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <vkd3d_windows.h>
#include <vkd3d_dxgibase.h>
#include <vkd3d_dxgi1_5.h>
#include <vkd3d_vk_includes.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct DXGI_VK_HDR_METADATA {
    DXGI_HDR_METADATA_TYPE Type;
    __C89_NAMELESS union {
        DXGI_HDR_METADATA_HDR10 HDR10;
    } __C89_NAMELESSUNIONNAME;
} DXGI_VK_HDR_METADATA;
typedef struct DXGI_VK_FRAME_STATISTICS {
    UINT64 PresentCount;
    UINT64 PresentQPCTime;
} DXGI_VK_FRAME_STATISTICS;
/*****************************************************************************
 * IDXGIVkSurfaceFactory interface
 */
#ifndef __IDXGIVkSurfaceFactory_INTERFACE_DEFINED__
#define __IDXGIVkSurfaceFactory_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDXGIVkSurfaceFactory, 0x1e7895a1, 0x1bc3, 0x4f9c, 0xa6,0x70, 0x29,0x0a,0x4b,0xc9,0x58,0x1a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1e7895a1-1bc3-4f9c-a670-290a4bc9581a")
IDXGIVkSurfaceFactory : public IUnknown
{
    virtual VkResult STDMETHODCALLTYPE CreateSurface(
        VkInstance instance,
        VkPhysicalDevice adapter,
        VkSurfaceKHR *pSurface) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDXGIVkSurfaceFactory, 0x1e7895a1, 0x1bc3, 0x4f9c, 0xa6,0x70, 0x29,0x0a,0x4b,0xc9,0x58,0x1a)
#endif
#else
typedef struct IDXGIVkSurfaceFactoryVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDXGIVkSurfaceFactory *This,
        REFIID riid,
        void **object);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDXGIVkSurfaceFactory *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDXGIVkSurfaceFactory *This);

    /*** IDXGIVkSurfaceFactory methods ***/
    VkResult (STDMETHODCALLTYPE *CreateSurface)(
        IDXGIVkSurfaceFactory *This,
        VkInstance instance,
        VkPhysicalDevice adapter,
        VkSurfaceKHR *pSurface);

    END_INTERFACE
} IDXGIVkSurfaceFactoryVtbl;

interface IDXGIVkSurfaceFactory {
    CONST_VTBL IDXGIVkSurfaceFactoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDXGIVkSurfaceFactory_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDXGIVkSurfaceFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDXGIVkSurfaceFactory_Release(This) (This)->lpVtbl->Release(This)
/*** IDXGIVkSurfaceFactory methods ***/
#define IDXGIVkSurfaceFactory_CreateSurface(This,instance,adapter,pSurface) (This)->lpVtbl->CreateSurface(This,instance,adapter,pSurface)
#else
/*** IUnknown methods ***/
static inline HRESULT IDXGIVkSurfaceFactory_QueryInterface(IDXGIVkSurfaceFactory* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDXGIVkSurfaceFactory_AddRef(IDXGIVkSurfaceFactory* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDXGIVkSurfaceFactory_Release(IDXGIVkSurfaceFactory* This) {
    return This->lpVtbl->Release(This);
}
/*** IDXGIVkSurfaceFactory methods ***/
static inline VkResult IDXGIVkSurfaceFactory_CreateSurface(IDXGIVkSurfaceFactory* This,VkInstance instance,VkPhysicalDevice adapter,VkSurfaceKHR *pSurface) {
    return This->lpVtbl->CreateSurface(This,instance,adapter,pSurface);
}
#endif
#endif

#endif


#endif  /* __IDXGIVkSurfaceFactory_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDXGIVkSwapChain interface
 */
#ifndef __IDXGIVkSwapChain_INTERFACE_DEFINED__
#define __IDXGIVkSwapChain_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDXGIVkSwapChain, 0xe4a9059e, 0xb569, 0x46ab, 0x8d,0xe7, 0x50,0x1b,0xd2,0xbc,0x7f,0x7a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e4a9059e-b569-46ab-8de7-501bd2bc7f7a")
IDXGIVkSwapChain : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDesc(
        DXGI_SWAP_CHAIN_DESC1 *pDesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAdapter(
        REFIID riid,
        void **ppvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDevice(
        REFIID riid,
        void **ppDevice) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetImage(
        UINT BufferId,
        REFIID riid,
        void **ppBuffer) = 0;

    virtual UINT STDMETHODCALLTYPE GetImageIndex(
        ) = 0;

    virtual UINT STDMETHODCALLTYPE GetFrameLatency(
        ) = 0;

    virtual HANDLE STDMETHODCALLTYPE GetFrameLatencyEvent(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ChangeProperties(
        const DXGI_SWAP_CHAIN_DESC1 *pDesc,
        const UINT *pNodeMasks,
        IUnknown *const *ppPresentQueues) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPresentRegion(
        const RECT *pRegion) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGammaControl(
        UINT NumControlPoints,
        const DXGI_RGB *pControlPoints) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetFrameLatency(
        UINT MaxLatency) = 0;

    virtual HRESULT STDMETHODCALLTYPE Present(
        UINT SyncInterval,
        UINT PresentFlags,
        const DXGI_PRESENT_PARAMETERS *pPresentParameters) = 0;

    virtual UINT STDMETHODCALLTYPE CheckColorSpaceSupport(
        DXGI_COLOR_SPACE_TYPE ColorSpace) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetColorSpace(
        DXGI_COLOR_SPACE_TYPE ColorSpace) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetHDRMetaData(
        const DXGI_VK_HDR_METADATA *pMetaData) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDXGIVkSwapChain, 0xe4a9059e, 0xb569, 0x46ab, 0x8d,0xe7, 0x50,0x1b,0xd2,0xbc,0x7f,0x7a)
#endif
#else
typedef struct IDXGIVkSwapChainVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDXGIVkSwapChain *This,
        REFIID riid,
        void **object);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDXGIVkSwapChain *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDXGIVkSwapChain *This);

    /*** IDXGIVkSwapChain methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDesc)(
        IDXGIVkSwapChain *This,
        DXGI_SWAP_CHAIN_DESC1 *pDesc);

    HRESULT (STDMETHODCALLTYPE *GetAdapter)(
        IDXGIVkSwapChain *This,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *GetDevice)(
        IDXGIVkSwapChain *This,
        REFIID riid,
        void **ppDevice);

    HRESULT (STDMETHODCALLTYPE *GetImage)(
        IDXGIVkSwapChain *This,
        UINT BufferId,
        REFIID riid,
        void **ppBuffer);

    UINT (STDMETHODCALLTYPE *GetImageIndex)(
        IDXGIVkSwapChain *This);

    UINT (STDMETHODCALLTYPE *GetFrameLatency)(
        IDXGIVkSwapChain *This);

    HANDLE (STDMETHODCALLTYPE *GetFrameLatencyEvent)(
        IDXGIVkSwapChain *This);

    HRESULT (STDMETHODCALLTYPE *ChangeProperties)(
        IDXGIVkSwapChain *This,
        const DXGI_SWAP_CHAIN_DESC1 *pDesc,
        const UINT *pNodeMasks,
        IUnknown *const *ppPresentQueues);

    HRESULT (STDMETHODCALLTYPE *SetPresentRegion)(
        IDXGIVkSwapChain *This,
        const RECT *pRegion);

    HRESULT (STDMETHODCALLTYPE *SetGammaControl)(
        IDXGIVkSwapChain *This,
        UINT NumControlPoints,
        const DXGI_RGB *pControlPoints);

    HRESULT (STDMETHODCALLTYPE *SetFrameLatency)(
        IDXGIVkSwapChain *This,
        UINT MaxLatency);

    HRESULT (STDMETHODCALLTYPE *Present)(
        IDXGIVkSwapChain *This,
        UINT SyncInterval,
        UINT PresentFlags,
        const DXGI_PRESENT_PARAMETERS *pPresentParameters);

    UINT (STDMETHODCALLTYPE *CheckColorSpaceSupport)(
        IDXGIVkSwapChain *This,
        DXGI_COLOR_SPACE_TYPE ColorSpace);

    HRESULT (STDMETHODCALLTYPE *SetColorSpace)(
        IDXGIVkSwapChain *This,
        DXGI_COLOR_SPACE_TYPE ColorSpace);

    HRESULT (STDMETHODCALLTYPE *SetHDRMetaData)(
        IDXGIVkSwapChain *This,
        const DXGI_VK_HDR_METADATA *pMetaData);

    END_INTERFACE
} IDXGIVkSwapChainVtbl;

interface IDXGIVkSwapChain {
    CONST_VTBL IDXGIVkSwapChainVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDXGIVkSwapChain_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDXGIVkSwapChain_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDXGIVkSwapChain_Release(This) (This)->lpVtbl->Release(This)
/*** IDXGIVkSwapChain methods ***/
#define IDXGIVkSwapChain_GetDesc(This,pDesc) (This)->lpVtbl->GetDesc(This,pDesc)
#define IDXGIVkSwapChain_GetAdapter(This,riid,ppvObject) (This)->lpVtbl->GetAdapter(This,riid,ppvObject)
#define IDXGIVkSwapChain_GetDevice(This,riid,ppDevice) (This)->lpVtbl->GetDevice(This,riid,ppDevice)
#define IDXGIVkSwapChain_GetImage(This,BufferId,riid,ppBuffer) (This)->lpVtbl->GetImage(This,BufferId,riid,ppBuffer)
#define IDXGIVkSwapChain_GetImageIndex(This) (This)->lpVtbl->GetImageIndex(This)
#define IDXGIVkSwapChain_GetFrameLatency(This) (This)->lpVtbl->GetFrameLatency(This)
#define IDXGIVkSwapChain_GetFrameLatencyEvent(This) (This)->lpVtbl->GetFrameLatencyEvent(This)
#define IDXGIVkSwapChain_ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues) (This)->lpVtbl->ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues)
#define IDXGIVkSwapChain_SetPresentRegion(This,pRegion) (This)->lpVtbl->SetPresentRegion(This,pRegion)
#define IDXGIVkSwapChain_SetGammaControl(This,NumControlPoints,pControlPoints) (This)->lpVtbl->SetGammaControl(This,NumControlPoints,pControlPoints)
#define IDXGIVkSwapChain_SetFrameLatency(This,MaxLatency) (This)->lpVtbl->SetFrameLatency(This,MaxLatency)
#define IDXGIVkSwapChain_Present(This,SyncInterval,PresentFlags,pPresentParameters) (This)->lpVtbl->Present(This,SyncInterval,PresentFlags,pPresentParameters)
#define IDXGIVkSwapChain_CheckColorSpaceSupport(This,ColorSpace) (This)->lpVtbl->CheckColorSpaceSupport(This,ColorSpace)
#define IDXGIVkSwapChain_SetColorSpace(This,ColorSpace) (This)->lpVtbl->SetColorSpace(This,ColorSpace)
#define IDXGIVkSwapChain_SetHDRMetaData(This,pMetaData) (This)->lpVtbl->SetHDRMetaData(This,pMetaData)
#else
/*** IUnknown methods ***/
static inline HRESULT IDXGIVkSwapChain_QueryInterface(IDXGIVkSwapChain* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDXGIVkSwapChain_AddRef(IDXGIVkSwapChain* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDXGIVkSwapChain_Release(IDXGIVkSwapChain* This) {
    return This->lpVtbl->Release(This);
}
/*** IDXGIVkSwapChain methods ***/
static inline HRESULT IDXGIVkSwapChain_GetDesc(IDXGIVkSwapChain* This,DXGI_SWAP_CHAIN_DESC1 *pDesc) {
    return This->lpVtbl->GetDesc(This,pDesc);
}
static inline HRESULT IDXGIVkSwapChain_GetAdapter(IDXGIVkSwapChain* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->GetAdapter(This,riid,ppvObject);
}
static inline HRESULT IDXGIVkSwapChain_GetDevice(IDXGIVkSwapChain* This,REFIID riid,void **ppDevice) {
    return This->lpVtbl->GetDevice(This,riid,ppDevice);
}
static inline HRESULT IDXGIVkSwapChain_GetImage(IDXGIVkSwapChain* This,UINT BufferId,REFIID riid,void **ppBuffer) {
    return This->lpVtbl->GetImage(This,BufferId,riid,ppBuffer);
}
static inline UINT IDXGIVkSwapChain_GetImageIndex(IDXGIVkSwapChain* This) {
    return This->lpVtbl->GetImageIndex(This);
}
static inline UINT IDXGIVkSwapChain_GetFrameLatency(IDXGIVkSwapChain* This) {
    return This->lpVtbl->GetFrameLatency(This);
}
static inline HANDLE IDXGIVkSwapChain_GetFrameLatencyEvent(IDXGIVkSwapChain* This) {
    return This->lpVtbl->GetFrameLatencyEvent(This);
}
static inline HRESULT IDXGIVkSwapChain_ChangeProperties(IDXGIVkSwapChain* This,const DXGI_SWAP_CHAIN_DESC1 *pDesc,const UINT *pNodeMasks,IUnknown *const *ppPresentQueues) {
    return This->lpVtbl->ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues);
}
static inline HRESULT IDXGIVkSwapChain_SetPresentRegion(IDXGIVkSwapChain* This,const RECT *pRegion) {
    return This->lpVtbl->SetPresentRegion(This,pRegion);
}
static inline HRESULT IDXGIVkSwapChain_SetGammaControl(IDXGIVkSwapChain* This,UINT NumControlPoints,const DXGI_RGB *pControlPoints) {
    return This->lpVtbl->SetGammaControl(This,NumControlPoints,pControlPoints);
}
static inline HRESULT IDXGIVkSwapChain_SetFrameLatency(IDXGIVkSwapChain* This,UINT MaxLatency) {
    return This->lpVtbl->SetFrameLatency(This,MaxLatency);
}
static inline HRESULT IDXGIVkSwapChain_Present(IDXGIVkSwapChain* This,UINT SyncInterval,UINT PresentFlags,const DXGI_PRESENT_PARAMETERS *pPresentParameters) {
    return This->lpVtbl->Present(This,SyncInterval,PresentFlags,pPresentParameters);
}
static inline UINT IDXGIVkSwapChain_CheckColorSpaceSupport(IDXGIVkSwapChain* This,DXGI_COLOR_SPACE_TYPE ColorSpace) {
    return This->lpVtbl->CheckColorSpaceSupport(This,ColorSpace);
}
static inline HRESULT IDXGIVkSwapChain_SetColorSpace(IDXGIVkSwapChain* This,DXGI_COLOR_SPACE_TYPE ColorSpace) {
    return This->lpVtbl->SetColorSpace(This,ColorSpace);
}
static inline HRESULT IDXGIVkSwapChain_SetHDRMetaData(IDXGIVkSwapChain* This,const DXGI_VK_HDR_METADATA *pMetaData) {
    return This->lpVtbl->SetHDRMetaData(This,pMetaData);
}
#endif
#endif

#endif


#endif  /* __IDXGIVkSwapChain_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDXGIVkSwapChain1 interface
 */
#ifndef __IDXGIVkSwapChain1_INTERFACE_DEFINED__
#define __IDXGIVkSwapChain1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDXGIVkSwapChain1, 0x785326d4, 0xb77b, 0x4826, 0xae,0x70, 0x8d,0x08,0x30,0x8e,0xe6,0xd1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("785326d4-b77b-4826-ae70-8d08308ee6d1")
IDXGIVkSwapChain1 : public IDXGIVkSwapChain
{
    virtual void STDMETHODCALLTYPE GetLastPresentCount(
        UINT64 *pLastPresentCount) = 0;

    virtual void STDMETHODCALLTYPE GetFrameStatistics(
        DXGI_VK_FRAME_STATISTICS *pFrameStatistics) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDXGIVkSwapChain1, 0x785326d4, 0xb77b, 0x4826, 0xae,0x70, 0x8d,0x08,0x30,0x8e,0xe6,0xd1)
#endif
#else
typedef struct IDXGIVkSwapChain1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDXGIVkSwapChain1 *This,
        REFIID riid,
        void **object);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDXGIVkSwapChain1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDXGIVkSwapChain1 *This);

    /*** IDXGIVkSwapChain methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDesc)(
        IDXGIVkSwapChain1 *This,
        DXGI_SWAP_CHAIN_DESC1 *pDesc);

    HRESULT (STDMETHODCALLTYPE *GetAdapter)(
        IDXGIVkSwapChain1 *This,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *GetDevice)(
        IDXGIVkSwapChain1 *This,
        REFIID riid,
        void **ppDevice);

    HRESULT (STDMETHODCALLTYPE *GetImage)(
        IDXGIVkSwapChain1 *This,
        UINT BufferId,
        REFIID riid,
        void **ppBuffer);

    UINT (STDMETHODCALLTYPE *GetImageIndex)(
        IDXGIVkSwapChain1 *This);

    UINT (STDMETHODCALLTYPE *GetFrameLatency)(
        IDXGIVkSwapChain1 *This);

    HANDLE (STDMETHODCALLTYPE *GetFrameLatencyEvent)(
        IDXGIVkSwapChain1 *This);

    HRESULT (STDMETHODCALLTYPE *ChangeProperties)(
        IDXGIVkSwapChain1 *This,
        const DXGI_SWAP_CHAIN_DESC1 *pDesc,
        const UINT *pNodeMasks,
        IUnknown *const *ppPresentQueues);

    HRESULT (STDMETHODCALLTYPE *SetPresentRegion)(
        IDXGIVkSwapChain1 *This,
        const RECT *pRegion);

    HRESULT (STDMETHODCALLTYPE *SetGammaControl)(
        IDXGIVkSwapChain1 *This,
        UINT NumControlPoints,
        const DXGI_RGB *pControlPoints);

    HRESULT (STDMETHODCALLTYPE *SetFrameLatency)(
        IDXGIVkSwapChain1 *This,
        UINT MaxLatency);

    HRESULT (STDMETHODCALLTYPE *Present)(
        IDXGIVkSwapChain1 *This,
        UINT SyncInterval,
        UINT PresentFlags,
        const DXGI_PRESENT_PARAMETERS *pPresentParameters);

    UINT (STDMETHODCALLTYPE *CheckColorSpaceSupport)(
        IDXGIVkSwapChain1 *This,
        DXGI_COLOR_SPACE_TYPE ColorSpace);

    HRESULT (STDMETHODCALLTYPE *SetColorSpace)(
        IDXGIVkSwapChain1 *This,
        DXGI_COLOR_SPACE_TYPE ColorSpace);

    HRESULT (STDMETHODCALLTYPE *SetHDRMetaData)(
        IDXGIVkSwapChain1 *This,
        const DXGI_VK_HDR_METADATA *pMetaData);

    /*** IDXGIVkSwapChain1 methods ***/
    void (STDMETHODCALLTYPE *GetLastPresentCount)(
        IDXGIVkSwapChain1 *This,
        UINT64 *pLastPresentCount);

    void (STDMETHODCALLTYPE *GetFrameStatistics)(
        IDXGIVkSwapChain1 *This,
        DXGI_VK_FRAME_STATISTICS *pFrameStatistics);

    END_INTERFACE
} IDXGIVkSwapChain1Vtbl;

interface IDXGIVkSwapChain1 {
    CONST_VTBL IDXGIVkSwapChain1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDXGIVkSwapChain1_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDXGIVkSwapChain1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDXGIVkSwapChain1_Release(This) (This)->lpVtbl->Release(This)
/*** IDXGIVkSwapChain methods ***/
#define IDXGIVkSwapChain1_GetDesc(This,pDesc) (This)->lpVtbl->GetDesc(This,pDesc)
#define IDXGIVkSwapChain1_GetAdapter(This,riid,ppvObject) (This)->lpVtbl->GetAdapter(This,riid,ppvObject)
#define IDXGIVkSwapChain1_GetDevice(This,riid,ppDevice) (This)->lpVtbl->GetDevice(This,riid,ppDevice)
#define IDXGIVkSwapChain1_GetImage(This,BufferId,riid,ppBuffer) (This)->lpVtbl->GetImage(This,BufferId,riid,ppBuffer)
#define IDXGIVkSwapChain1_GetImageIndex(This) (This)->lpVtbl->GetImageIndex(This)
#define IDXGIVkSwapChain1_GetFrameLatency(This) (This)->lpVtbl->GetFrameLatency(This)
#define IDXGIVkSwapChain1_GetFrameLatencyEvent(This) (This)->lpVtbl->GetFrameLatencyEvent(This)
#define IDXGIVkSwapChain1_ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues) (This)->lpVtbl->ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues)
#define IDXGIVkSwapChain1_SetPresentRegion(This,pRegion) (This)->lpVtbl->SetPresentRegion(This,pRegion)
#define IDXGIVkSwapChain1_SetGammaControl(This,NumControlPoints,pControlPoints) (This)->lpVtbl->SetGammaControl(This,NumControlPoints,pControlPoints)
#define IDXGIVkSwapChain1_SetFrameLatency(This,MaxLatency) (This)->lpVtbl->SetFrameLatency(This,MaxLatency)
#define IDXGIVkSwapChain1_Present(This,SyncInterval,PresentFlags,pPresentParameters) (This)->lpVtbl->Present(This,SyncInterval,PresentFlags,pPresentParameters)
#define IDXGIVkSwapChain1_CheckColorSpaceSupport(This,ColorSpace) (This)->lpVtbl->CheckColorSpaceSupport(This,ColorSpace)
#define IDXGIVkSwapChain1_SetColorSpace(This,ColorSpace) (This)->lpVtbl->SetColorSpace(This,ColorSpace)
#define IDXGIVkSwapChain1_SetHDRMetaData(This,pMetaData) (This)->lpVtbl->SetHDRMetaData(This,pMetaData)
/*** IDXGIVkSwapChain1 methods ***/
#define IDXGIVkSwapChain1_GetLastPresentCount(This,pLastPresentCount) (This)->lpVtbl->GetLastPresentCount(This,pLastPresentCount)
#define IDXGIVkSwapChain1_GetFrameStatistics(This,pFrameStatistics) (This)->lpVtbl->GetFrameStatistics(This,pFrameStatistics)
#else
/*** IUnknown methods ***/
static inline HRESULT IDXGIVkSwapChain1_QueryInterface(IDXGIVkSwapChain1* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDXGIVkSwapChain1_AddRef(IDXGIVkSwapChain1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDXGIVkSwapChain1_Release(IDXGIVkSwapChain1* This) {
    return This->lpVtbl->Release(This);
}
/*** IDXGIVkSwapChain methods ***/
static inline HRESULT IDXGIVkSwapChain1_GetDesc(IDXGIVkSwapChain1* This,DXGI_SWAP_CHAIN_DESC1 *pDesc) {
    return This->lpVtbl->GetDesc(This,pDesc);
}
static inline HRESULT IDXGIVkSwapChain1_GetAdapter(IDXGIVkSwapChain1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->GetAdapter(This,riid,ppvObject);
}
static inline HRESULT IDXGIVkSwapChain1_GetDevice(IDXGIVkSwapChain1* This,REFIID riid,void **ppDevice) {
    return This->lpVtbl->GetDevice(This,riid,ppDevice);
}
static inline HRESULT IDXGIVkSwapChain1_GetImage(IDXGIVkSwapChain1* This,UINT BufferId,REFIID riid,void **ppBuffer) {
    return This->lpVtbl->GetImage(This,BufferId,riid,ppBuffer);
}
static inline UINT IDXGIVkSwapChain1_GetImageIndex(IDXGIVkSwapChain1* This) {
    return This->lpVtbl->GetImageIndex(This);
}
static inline UINT IDXGIVkSwapChain1_GetFrameLatency(IDXGIVkSwapChain1* This) {
    return This->lpVtbl->GetFrameLatency(This);
}
static inline HANDLE IDXGIVkSwapChain1_GetFrameLatencyEvent(IDXGIVkSwapChain1* This) {
    return This->lpVtbl->GetFrameLatencyEvent(This);
}
static inline HRESULT IDXGIVkSwapChain1_ChangeProperties(IDXGIVkSwapChain1* This,const DXGI_SWAP_CHAIN_DESC1 *pDesc,const UINT *pNodeMasks,IUnknown *const *ppPresentQueues) {
    return This->lpVtbl->ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues);
}
static inline HRESULT IDXGIVkSwapChain1_SetPresentRegion(IDXGIVkSwapChain1* This,const RECT *pRegion) {
    return This->lpVtbl->SetPresentRegion(This,pRegion);
}
static inline HRESULT IDXGIVkSwapChain1_SetGammaControl(IDXGIVkSwapChain1* This,UINT NumControlPoints,const DXGI_RGB *pControlPoints) {
    return This->lpVtbl->SetGammaControl(This,NumControlPoints,pControlPoints);
}
static inline HRESULT IDXGIVkSwapChain1_SetFrameLatency(IDXGIVkSwapChain1* This,UINT MaxLatency) {
    return This->lpVtbl->SetFrameLatency(This,MaxLatency);
}
static inline HRESULT IDXGIVkSwapChain1_Present(IDXGIVkSwapChain1* This,UINT SyncInterval,UINT PresentFlags,const DXGI_PRESENT_PARAMETERS *pPresentParameters) {
    return This->lpVtbl->Present(This,SyncInterval,PresentFlags,pPresentParameters);
}
static inline UINT IDXGIVkSwapChain1_CheckColorSpaceSupport(IDXGIVkSwapChain1* This,DXGI_COLOR_SPACE_TYPE ColorSpace) {
    return This->lpVtbl->CheckColorSpaceSupport(This,ColorSpace);
}
static inline HRESULT IDXGIVkSwapChain1_SetColorSpace(IDXGIVkSwapChain1* This,DXGI_COLOR_SPACE_TYPE ColorSpace) {
    return This->lpVtbl->SetColorSpace(This,ColorSpace);
}
static inline HRESULT IDXGIVkSwapChain1_SetHDRMetaData(IDXGIVkSwapChain1* This,const DXGI_VK_HDR_METADATA *pMetaData) {
    return This->lpVtbl->SetHDRMetaData(This,pMetaData);
}
/*** IDXGIVkSwapChain1 methods ***/
static inline void IDXGIVkSwapChain1_GetLastPresentCount(IDXGIVkSwapChain1* This,UINT64 *pLastPresentCount) {
    This->lpVtbl->GetLastPresentCount(This,pLastPresentCount);
}
static inline void IDXGIVkSwapChain1_GetFrameStatistics(IDXGIVkSwapChain1* This,DXGI_VK_FRAME_STATISTICS *pFrameStatistics) {
    This->lpVtbl->GetFrameStatistics(This,pFrameStatistics);
}
#endif
#endif

#endif


#endif  /* __IDXGIVkSwapChain1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDXGIVkSwapChain2 interface
 */
#ifndef __IDXGIVkSwapChain2_INTERFACE_DEFINED__
#define __IDXGIVkSwapChain2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDXGIVkSwapChain2, 0xaed91093, 0xe02e, 0x458c, 0xbd,0xef, 0xa9,0x7d,0xa1,0xa7,0xe6,0xd2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("aed91093-e02e-458c-bdef-a97da1a7e6d2")
IDXGIVkSwapChain2 : public IDXGIVkSwapChain1
{
    virtual void STDMETHODCALLTYPE SetTargetFrameRate(
        double FrameRate) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDXGIVkSwapChain2, 0xaed91093, 0xe02e, 0x458c, 0xbd,0xef, 0xa9,0x7d,0xa1,0xa7,0xe6,0xd2)
#endif
#else
typedef struct IDXGIVkSwapChain2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDXGIVkSwapChain2 *This,
        REFIID riid,
        void **object);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDXGIVkSwapChain2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDXGIVkSwapChain2 *This);

    /*** IDXGIVkSwapChain methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDesc)(
        IDXGIVkSwapChain2 *This,
        DXGI_SWAP_CHAIN_DESC1 *pDesc);

    HRESULT (STDMETHODCALLTYPE *GetAdapter)(
        IDXGIVkSwapChain2 *This,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *GetDevice)(
        IDXGIVkSwapChain2 *This,
        REFIID riid,
        void **ppDevice);

    HRESULT (STDMETHODCALLTYPE *GetImage)(
        IDXGIVkSwapChain2 *This,
        UINT BufferId,
        REFIID riid,
        void **ppBuffer);

    UINT (STDMETHODCALLTYPE *GetImageIndex)(
        IDXGIVkSwapChain2 *This);

    UINT (STDMETHODCALLTYPE *GetFrameLatency)(
        IDXGIVkSwapChain2 *This);

    HANDLE (STDMETHODCALLTYPE *GetFrameLatencyEvent)(
        IDXGIVkSwapChain2 *This);

    HRESULT (STDMETHODCALLTYPE *ChangeProperties)(
        IDXGIVkSwapChain2 *This,
        const DXGI_SWAP_CHAIN_DESC1 *pDesc,
        const UINT *pNodeMasks,
        IUnknown *const *ppPresentQueues);

    HRESULT (STDMETHODCALLTYPE *SetPresentRegion)(
        IDXGIVkSwapChain2 *This,
        const RECT *pRegion);

    HRESULT (STDMETHODCALLTYPE *SetGammaControl)(
        IDXGIVkSwapChain2 *This,
        UINT NumControlPoints,
        const DXGI_RGB *pControlPoints);

    HRESULT (STDMETHODCALLTYPE *SetFrameLatency)(
        IDXGIVkSwapChain2 *This,
        UINT MaxLatency);

    HRESULT (STDMETHODCALLTYPE *Present)(
        IDXGIVkSwapChain2 *This,
        UINT SyncInterval,
        UINT PresentFlags,
        const DXGI_PRESENT_PARAMETERS *pPresentParameters);

    UINT (STDMETHODCALLTYPE *CheckColorSpaceSupport)(
        IDXGIVkSwapChain2 *This,
        DXGI_COLOR_SPACE_TYPE ColorSpace);

    HRESULT (STDMETHODCALLTYPE *SetColorSpace)(
        IDXGIVkSwapChain2 *This,
        DXGI_COLOR_SPACE_TYPE ColorSpace);

    HRESULT (STDMETHODCALLTYPE *SetHDRMetaData)(
        IDXGIVkSwapChain2 *This,
        const DXGI_VK_HDR_METADATA *pMetaData);

    /*** IDXGIVkSwapChain1 methods ***/
    void (STDMETHODCALLTYPE *GetLastPresentCount)(
        IDXGIVkSwapChain2 *This,
        UINT64 *pLastPresentCount);

    void (STDMETHODCALLTYPE *GetFrameStatistics)(
        IDXGIVkSwapChain2 *This,
        DXGI_VK_FRAME_STATISTICS *pFrameStatistics);

    /*** IDXGIVkSwapChain2 methods ***/
    void (STDMETHODCALLTYPE *SetTargetFrameRate)(
        IDXGIVkSwapChain2 *This,
        double FrameRate);

    END_INTERFACE
} IDXGIVkSwapChain2Vtbl;

interface IDXGIVkSwapChain2 {
    CONST_VTBL IDXGIVkSwapChain2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDXGIVkSwapChain2_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDXGIVkSwapChain2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDXGIVkSwapChain2_Release(This) (This)->lpVtbl->Release(This)
/*** IDXGIVkSwapChain methods ***/
#define IDXGIVkSwapChain2_GetDesc(This,pDesc) (This)->lpVtbl->GetDesc(This,pDesc)
#define IDXGIVkSwapChain2_GetAdapter(This,riid,ppvObject) (This)->lpVtbl->GetAdapter(This,riid,ppvObject)
#define IDXGIVkSwapChain2_GetDevice(This,riid,ppDevice) (This)->lpVtbl->GetDevice(This,riid,ppDevice)
#define IDXGIVkSwapChain2_GetImage(This,BufferId,riid,ppBuffer) (This)->lpVtbl->GetImage(This,BufferId,riid,ppBuffer)
#define IDXGIVkSwapChain2_GetImageIndex(This) (This)->lpVtbl->GetImageIndex(This)
#define IDXGIVkSwapChain2_GetFrameLatency(This) (This)->lpVtbl->GetFrameLatency(This)
#define IDXGIVkSwapChain2_GetFrameLatencyEvent(This) (This)->lpVtbl->GetFrameLatencyEvent(This)
#define IDXGIVkSwapChain2_ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues) (This)->lpVtbl->ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues)
#define IDXGIVkSwapChain2_SetPresentRegion(This,pRegion) (This)->lpVtbl->SetPresentRegion(This,pRegion)
#define IDXGIVkSwapChain2_SetGammaControl(This,NumControlPoints,pControlPoints) (This)->lpVtbl->SetGammaControl(This,NumControlPoints,pControlPoints)
#define IDXGIVkSwapChain2_SetFrameLatency(This,MaxLatency) (This)->lpVtbl->SetFrameLatency(This,MaxLatency)
#define IDXGIVkSwapChain2_Present(This,SyncInterval,PresentFlags,pPresentParameters) (This)->lpVtbl->Present(This,SyncInterval,PresentFlags,pPresentParameters)
#define IDXGIVkSwapChain2_CheckColorSpaceSupport(This,ColorSpace) (This)->lpVtbl->CheckColorSpaceSupport(This,ColorSpace)
#define IDXGIVkSwapChain2_SetColorSpace(This,ColorSpace) (This)->lpVtbl->SetColorSpace(This,ColorSpace)
#define IDXGIVkSwapChain2_SetHDRMetaData(This,pMetaData) (This)->lpVtbl->SetHDRMetaData(This,pMetaData)
/*** IDXGIVkSwapChain1 methods ***/
#define IDXGIVkSwapChain2_GetLastPresentCount(This,pLastPresentCount) (This)->lpVtbl->GetLastPresentCount(This,pLastPresentCount)
#define IDXGIVkSwapChain2_GetFrameStatistics(This,pFrameStatistics) (This)->lpVtbl->GetFrameStatistics(This,pFrameStatistics)
/*** IDXGIVkSwapChain2 methods ***/
#define IDXGIVkSwapChain2_SetTargetFrameRate(This,FrameRate) (This)->lpVtbl->SetTargetFrameRate(This,FrameRate)
#else
/*** IUnknown methods ***/
static inline HRESULT IDXGIVkSwapChain2_QueryInterface(IDXGIVkSwapChain2* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDXGIVkSwapChain2_AddRef(IDXGIVkSwapChain2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDXGIVkSwapChain2_Release(IDXGIVkSwapChain2* This) {
    return This->lpVtbl->Release(This);
}
/*** IDXGIVkSwapChain methods ***/
static inline HRESULT IDXGIVkSwapChain2_GetDesc(IDXGIVkSwapChain2* This,DXGI_SWAP_CHAIN_DESC1 *pDesc) {
    return This->lpVtbl->GetDesc(This,pDesc);
}
static inline HRESULT IDXGIVkSwapChain2_GetAdapter(IDXGIVkSwapChain2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->GetAdapter(This,riid,ppvObject);
}
static inline HRESULT IDXGIVkSwapChain2_GetDevice(IDXGIVkSwapChain2* This,REFIID riid,void **ppDevice) {
    return This->lpVtbl->GetDevice(This,riid,ppDevice);
}
static inline HRESULT IDXGIVkSwapChain2_GetImage(IDXGIVkSwapChain2* This,UINT BufferId,REFIID riid,void **ppBuffer) {
    return This->lpVtbl->GetImage(This,BufferId,riid,ppBuffer);
}
static inline UINT IDXGIVkSwapChain2_GetImageIndex(IDXGIVkSwapChain2* This) {
    return This->lpVtbl->GetImageIndex(This);
}
static inline UINT IDXGIVkSwapChain2_GetFrameLatency(IDXGIVkSwapChain2* This) {
    return This->lpVtbl->GetFrameLatency(This);
}
static inline HANDLE IDXGIVkSwapChain2_GetFrameLatencyEvent(IDXGIVkSwapChain2* This) {
    return This->lpVtbl->GetFrameLatencyEvent(This);
}
static inline HRESULT IDXGIVkSwapChain2_ChangeProperties(IDXGIVkSwapChain2* This,const DXGI_SWAP_CHAIN_DESC1 *pDesc,const UINT *pNodeMasks,IUnknown *const *ppPresentQueues) {
    return This->lpVtbl->ChangeProperties(This,pDesc,pNodeMasks,ppPresentQueues);
}
static inline HRESULT IDXGIVkSwapChain2_SetPresentRegion(IDXGIVkSwapChain2* This,const RECT *pRegion) {
    return This->lpVtbl->SetPresentRegion(This,pRegion);
}
static inline HRESULT IDXGIVkSwapChain2_SetGammaControl(IDXGIVkSwapChain2* This,UINT NumControlPoints,const DXGI_RGB *pControlPoints) {
    return This->lpVtbl->SetGammaControl(This,NumControlPoints,pControlPoints);
}
static inline HRESULT IDXGIVkSwapChain2_SetFrameLatency(IDXGIVkSwapChain2* This,UINT MaxLatency) {
    return This->lpVtbl->SetFrameLatency(This,MaxLatency);
}
static inline HRESULT IDXGIVkSwapChain2_Present(IDXGIVkSwapChain2* This,UINT SyncInterval,UINT PresentFlags,const DXGI_PRESENT_PARAMETERS *pPresentParameters) {
    return This->lpVtbl->Present(This,SyncInterval,PresentFlags,pPresentParameters);
}
static inline UINT IDXGIVkSwapChain2_CheckColorSpaceSupport(IDXGIVkSwapChain2* This,DXGI_COLOR_SPACE_TYPE ColorSpace) {
    return This->lpVtbl->CheckColorSpaceSupport(This,ColorSpace);
}
static inline HRESULT IDXGIVkSwapChain2_SetColorSpace(IDXGIVkSwapChain2* This,DXGI_COLOR_SPACE_TYPE ColorSpace) {
    return This->lpVtbl->SetColorSpace(This,ColorSpace);
}
static inline HRESULT IDXGIVkSwapChain2_SetHDRMetaData(IDXGIVkSwapChain2* This,const DXGI_VK_HDR_METADATA *pMetaData) {
    return This->lpVtbl->SetHDRMetaData(This,pMetaData);
}
/*** IDXGIVkSwapChain1 methods ***/
static inline void IDXGIVkSwapChain2_GetLastPresentCount(IDXGIVkSwapChain2* This,UINT64 *pLastPresentCount) {
    This->lpVtbl->GetLastPresentCount(This,pLastPresentCount);
}
static inline void IDXGIVkSwapChain2_GetFrameStatistics(IDXGIVkSwapChain2* This,DXGI_VK_FRAME_STATISTICS *pFrameStatistics) {
    This->lpVtbl->GetFrameStatistics(This,pFrameStatistics);
}
/*** IDXGIVkSwapChain2 methods ***/
static inline void IDXGIVkSwapChain2_SetTargetFrameRate(IDXGIVkSwapChain2* This,double FrameRate) {
    This->lpVtbl->SetTargetFrameRate(This,FrameRate);
}
#endif
#endif

#endif


#endif  /* __IDXGIVkSwapChain2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDXGIVkSwapChainFactory interface
 */
#ifndef __IDXGIVkSwapChainFactory_INTERFACE_DEFINED__
#define __IDXGIVkSwapChainFactory_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDXGIVkSwapChainFactory, 0xe7d6c3ca, 0x23a0, 0x4e08, 0x9f,0x2f, 0xea,0x52,0x31,0xdf,0x66,0x33);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e7d6c3ca-23a0-4e08-9f2f-ea5231df6633")
IDXGIVkSwapChainFactory : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
        IDXGIVkSurfaceFactory *pSurfaceFactory,
        const DXGI_SWAP_CHAIN_DESC1 *pDesc,
        IDXGIVkSwapChain **ppSwapChain) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDXGIVkSwapChainFactory, 0xe7d6c3ca, 0x23a0, 0x4e08, 0x9f,0x2f, 0xea,0x52,0x31,0xdf,0x66,0x33)
#endif
#else
typedef struct IDXGIVkSwapChainFactoryVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDXGIVkSwapChainFactory *This,
        REFIID riid,
        void **object);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDXGIVkSwapChainFactory *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDXGIVkSwapChainFactory *This);

    /*** IDXGIVkSwapChainFactory methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
        IDXGIVkSwapChainFactory *This,
        IDXGIVkSurfaceFactory *pSurfaceFactory,
        const DXGI_SWAP_CHAIN_DESC1 *pDesc,
        IDXGIVkSwapChain **ppSwapChain);

    END_INTERFACE
} IDXGIVkSwapChainFactoryVtbl;

interface IDXGIVkSwapChainFactory {
    CONST_VTBL IDXGIVkSwapChainFactoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDXGIVkSwapChainFactory_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDXGIVkSwapChainFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDXGIVkSwapChainFactory_Release(This) (This)->lpVtbl->Release(This)
/*** IDXGIVkSwapChainFactory methods ***/
#define IDXGIVkSwapChainFactory_CreateSwapChain(This,pSurfaceFactory,pDesc,ppSwapChain) (This)->lpVtbl->CreateSwapChain(This,pSurfaceFactory,pDesc,ppSwapChain)
#else
/*** IUnknown methods ***/
static inline HRESULT IDXGIVkSwapChainFactory_QueryInterface(IDXGIVkSwapChainFactory* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDXGIVkSwapChainFactory_AddRef(IDXGIVkSwapChainFactory* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDXGIVkSwapChainFactory_Release(IDXGIVkSwapChainFactory* This) {
    return This->lpVtbl->Release(This);
}
/*** IDXGIVkSwapChainFactory methods ***/
static inline HRESULT IDXGIVkSwapChainFactory_CreateSwapChain(IDXGIVkSwapChainFactory* This,IDXGIVkSurfaceFactory *pSurfaceFactory,const DXGI_SWAP_CHAIN_DESC1 *pDesc,IDXGIVkSwapChain **ppSwapChain) {
    return This->lpVtbl->CreateSwapChain(This,pSurfaceFactory,pDesc,ppSwapChain);
}
#endif
#endif

#endif


#endif  /* __IDXGIVkSwapChainFactory_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __vkd3d_swapchain_factory_h__ */
