/*** Autogenerated by WIDL 11.10 from ../include/vkd3d_device_vkd3d_ext.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_device_vkd3d_ext_h__
#define __vkd3d_device_vkd3d_ext_h__

/* Forward declarations */

#ifndef __ID3D12DeviceExt_FWD_DEFINED__
#define __ID3D12DeviceExt_FWD_DEFINED__
typedef interface ID3D12DeviceExt ID3D12DeviceExt;
#ifdef __cplusplus
interface ID3D12DeviceExt;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DXVKInteropDevice_FWD_DEFINED__
#define __ID3D12DXVKInteropDevice_FWD_DEFINED__
typedef interface ID3D12DXVKInteropDevice ID3D12DXVKInteropDevice;
#ifdef __cplusplus
interface ID3D12DXVKInteropDevice;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DXVKInteropDevice1_FWD_DEFINED__
#define __ID3D12DXVKInteropDevice1_FWD_DEFINED__
typedef interface ID3D12DXVKInteropDevice1 ID3D12DXVKInteropDevice1;
#ifdef __cplusplus
interface ID3D12DXVKInteropDevice1;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DXVKInteropDevice2_FWD_DEFINED__
#define __ID3D12DXVKInteropDevice2_FWD_DEFINED__
typedef interface ID3D12DXVKInteropDevice2 ID3D12DXVKInteropDevice2;
#ifdef __cplusplus
interface ID3D12DXVKInteropDevice2;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DXVKInteropDevice3_FWD_DEFINED__
#define __ID3D12DXVKInteropDevice3_FWD_DEFINED__
typedef interface ID3D12DXVKInteropDevice3 ID3D12DXVKInteropDevice3;
#ifdef __cplusplus
interface ID3D12DXVKInteropDevice3;
#endif /* __cplusplus */
#endif

#ifndef __ID3DLowLatencyDevice_FWD_DEFINED__
#define __ID3DLowLatencyDevice_FWD_DEFINED__
typedef interface ID3DLowLatencyDevice ID3DLowLatencyDevice;
#ifdef __cplusplus
interface ID3DLowLatencyDevice;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DeviceExt1_FWD_DEFINED__
#define __ID3D12DeviceExt1_FWD_DEFINED__
typedef interface ID3D12DeviceExt1 ID3D12DeviceExt1;
#ifdef __cplusplus
interface ID3D12DeviceExt1;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DeviceExt2_FWD_DEFINED__
#define __ID3D12DeviceExt2_FWD_DEFINED__
typedef interface ID3D12DeviceExt2 ID3D12DeviceExt2;
#ifdef __cplusplus
interface ID3D12DeviceExt2;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DeviceExt3_FWD_DEFINED__
#define __ID3D12DeviceExt3_FWD_DEFINED__
typedef interface ID3D12DeviceExt3 ID3D12DeviceExt3;
#ifdef __cplusplus
interface ID3D12DeviceExt3;
#endif /* __cplusplus */
#endif

#ifndef __ID3D12DeviceExt4_FWD_DEFINED__
#define __ID3D12DeviceExt4_FWD_DEFINED__
typedef interface ID3D12DeviceExt4 ID3D12DeviceExt4;
#ifdef __cplusplus
interface ID3D12DeviceExt4;
#endif /* __cplusplus */
#endif

#ifndef __IAmdExtAntiLagApi_FWD_DEFINED__
#define __IAmdExtAntiLagApi_FWD_DEFINED__
typedef interface IAmdExtAntiLagApi IAmdExtAntiLagApi;
#ifdef __cplusplus
interface IAmdExtAntiLagApi;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <vkd3d_d3d12.h>
#include <vkd3d_vk_includes.h>

#ifdef __cplusplus
extern "C" {
#endif

/*****************************************************************************
 * ID3D12DeviceExt interface
 */
#ifndef __ID3D12DeviceExt_INTERFACE_DEFINED__
#define __ID3D12DeviceExt_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DeviceExt, 0x11ea7a1a, 0x0f6a, 0x49bf, 0xb6,0x12, 0x3e,0x30,0xf8,0xe2,0x01,0xdd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("11ea7a1a-0f6a-49bf-b612-3e30f8e201dd")
ID3D12DeviceExt : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetVulkanHandles(
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device) = 0;

    virtual BOOL STDMETHODCALLTYPE GetExtensionSupport(
        D3D12_VK_EXTENSION extension) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateCubinComputeShaderWithName(
        const void *cubin_data,
        UINT32 cubin_size,
        UINT32 block_x,
        UINT32 block_y,
        UINT32 block_z,
        const char *shader_name,
        D3D12_CUBIN_DATA_HANDLE **handle) = 0;

    virtual HRESULT STDMETHODCALLTYPE DestroyCubinComputeShader(
        D3D12_CUBIN_DATA_HANDLE *handle) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCudaTextureObject(
        D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,
        D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,
        UINT32 *cuda_texture_handle) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCudaSurfaceObject(
        D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,
        UINT32 *cuda_surface_handle) = 0;

    virtual HRESULT STDMETHODCALLTYPE CaptureUAVInfo(
        D3D12_UAV_INFO *uav_info) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DeviceExt, 0x11ea7a1a, 0x0f6a, 0x49bf, 0xb6,0x12, 0x3e,0x30,0xf8,0xe2,0x01,0xdd)
#endif
#else
typedef struct ID3D12DeviceExtVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DeviceExt methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DeviceExt *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    BOOL (STDMETHODCALLTYPE *GetExtensionSupport)(
        ID3D12DeviceExt *This,
        D3D12_VK_EXTENSION extension);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderWithName)(
        ID3D12DeviceExt *This,
        const void *cubin_data,
        UINT32 cubin_size,
        UINT32 block_x,
        UINT32 block_y,
        UINT32 block_z,
        const char *shader_name,
        D3D12_CUBIN_DATA_HANDLE **handle);

    HRESULT (STDMETHODCALLTYPE *DestroyCubinComputeShader)(
        ID3D12DeviceExt *This,
        D3D12_CUBIN_DATA_HANDLE *handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaTextureObject)(
        ID3D12DeviceExt *This,
        D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,
        D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,
        UINT32 *cuda_texture_handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaSurfaceObject)(
        ID3D12DeviceExt *This,
        D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,
        UINT32 *cuda_surface_handle);

    HRESULT (STDMETHODCALLTYPE *CaptureUAVInfo)(
        ID3D12DeviceExt *This,
        D3D12_UAV_INFO *uav_info);

    END_INTERFACE
} ID3D12DeviceExtVtbl;

interface ID3D12DeviceExt {
    CONST_VTBL ID3D12DeviceExtVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DeviceExt_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DeviceExt_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DeviceExt_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DeviceExt methods ***/
#define ID3D12DeviceExt_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DeviceExt_GetExtensionSupport(This,extension) (This)->lpVtbl->GetExtensionSupport(This,extension)
#define ID3D12DeviceExt_CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle) (This)->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle)
#define ID3D12DeviceExt_DestroyCubinComputeShader(This,handle) (This)->lpVtbl->DestroyCubinComputeShader(This,handle)
#define ID3D12DeviceExt_GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle) (This)->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle)
#define ID3D12DeviceExt_GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle) (This)->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle)
#define ID3D12DeviceExt_CaptureUAVInfo(This,uav_info) (This)->lpVtbl->CaptureUAVInfo(This,uav_info)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DeviceExt_QueryInterface(ID3D12DeviceExt* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DeviceExt_AddRef(ID3D12DeviceExt* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DeviceExt_Release(ID3D12DeviceExt* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DeviceExt methods ***/
static inline HRESULT ID3D12DeviceExt_GetVulkanHandles(ID3D12DeviceExt* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline BOOL ID3D12DeviceExt_GetExtensionSupport(ID3D12DeviceExt* This,D3D12_VK_EXTENSION extension) {
    return This->lpVtbl->GetExtensionSupport(This,extension);
}
static inline HRESULT ID3D12DeviceExt_CreateCubinComputeShaderWithName(ID3D12DeviceExt* This,const void *cubin_data,UINT32 cubin_size,UINT32 block_x,UINT32 block_y,UINT32 block_z,const char *shader_name,D3D12_CUBIN_DATA_HANDLE **handle) {
    return This->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle);
}
static inline HRESULT ID3D12DeviceExt_DestroyCubinComputeShader(ID3D12DeviceExt* This,D3D12_CUBIN_DATA_HANDLE *handle) {
    return This->lpVtbl->DestroyCubinComputeShader(This,handle);
}
static inline HRESULT ID3D12DeviceExt_GetCudaTextureObject(ID3D12DeviceExt* This,D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,UINT32 *cuda_texture_handle) {
    return This->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle);
}
static inline HRESULT ID3D12DeviceExt_GetCudaSurfaceObject(ID3D12DeviceExt* This,D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,UINT32 *cuda_surface_handle) {
    return This->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle);
}
static inline HRESULT ID3D12DeviceExt_CaptureUAVInfo(ID3D12DeviceExt* This,D3D12_UAV_INFO *uav_info) {
    return This->lpVtbl->CaptureUAVInfo(This,uav_info);
}
#endif
#endif

#endif


#endif  /* __ID3D12DeviceExt_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DXVKInteropDevice interface
 */
#ifndef __ID3D12DXVKInteropDevice_INTERFACE_DEFINED__
#define __ID3D12DXVKInteropDevice_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DXVKInteropDevice, 0x39da4e09, 0xbd1c, 0x4198, 0x9f,0xae, 0x86,0xbb,0xe3,0xbe,0x41,0xfd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("39da4e09-bd1c-4198-9fae-86bbe3be41fd")
ID3D12DXVKInteropDevice : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDXGIAdapter(
        REFIID iid,
        void **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInstanceExtensions(
        UINT *extension_count,
        const char **extensions) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDeviceExtensions(
        UINT *extension_count,
        const char **extensions) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDeviceFeatures(
        const VkPhysicalDeviceFeatures2 **features) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVulkanHandles(
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVulkanQueueInfo(
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_family) = 0;

    virtual void STDMETHODCALLTYPE GetVulkanImageLayout(
        ID3D12Resource *resource,
        D3D12_RESOURCE_STATES state,
        VkImageLayout *vk_layout) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVulkanResourceInfo(
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE LockCommandQueue(
        ID3D12CommandQueue *queue) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnlockCommandQueue(
        ID3D12CommandQueue *queue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DXVKInteropDevice, 0x39da4e09, 0xbd1c, 0x4198, 0x9f,0xae, 0x86,0xbb,0xe3,0xbe,0x41,0xfd)
#endif
#else
typedef struct ID3D12DXVKInteropDeviceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DXVKInteropDevice methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDXGIAdapter)(
        ID3D12DXVKInteropDevice *This,
        REFIID iid,
        void **object);

    HRESULT (STDMETHODCALLTYPE *GetInstanceExtensions)(
        ID3D12DXVKInteropDevice *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceExtensions)(
        ID3D12DXVKInteropDevice *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceFeatures)(
        ID3D12DXVKInteropDevice *This,
        const VkPhysicalDeviceFeatures2 **features);

    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DXVKInteropDevice *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfo)(
        ID3D12DXVKInteropDevice *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_family);

    void (STDMETHODCALLTYPE *GetVulkanImageLayout)(
        ID3D12DXVKInteropDevice *This,
        ID3D12Resource *resource,
        D3D12_RESOURCE_STATES state,
        VkImageLayout *vk_layout);

    HRESULT (STDMETHODCALLTYPE *GetVulkanResourceInfo)(
        ID3D12DXVKInteropDevice *This,
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset);

    HRESULT (STDMETHODCALLTYPE *LockCommandQueue)(
        ID3D12DXVKInteropDevice *This,
        ID3D12CommandQueue *queue);

    HRESULT (STDMETHODCALLTYPE *UnlockCommandQueue)(
        ID3D12DXVKInteropDevice *This,
        ID3D12CommandQueue *queue);

    END_INTERFACE
} ID3D12DXVKInteropDeviceVtbl;

interface ID3D12DXVKInteropDevice {
    CONST_VTBL ID3D12DXVKInteropDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DXVKInteropDevice_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DXVKInteropDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DXVKInteropDevice_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DXVKInteropDevice methods ***/
#define ID3D12DXVKInteropDevice_GetDXGIAdapter(This,iid,object) (This)->lpVtbl->GetDXGIAdapter(This,iid,object)
#define ID3D12DXVKInteropDevice_GetInstanceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetInstanceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice_GetDeviceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetDeviceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice_GetDeviceFeatures(This,features) (This)->lpVtbl->GetDeviceFeatures(This,features)
#define ID3D12DXVKInteropDevice_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DXVKInteropDevice_GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family)
#define ID3D12DXVKInteropDevice_GetVulkanImageLayout(This,resource,state,vk_layout) (This)->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout)
#define ID3D12DXVKInteropDevice_GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset) (This)->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset)
#define ID3D12DXVKInteropDevice_LockCommandQueue(This,queue) (This)->lpVtbl->LockCommandQueue(This,queue)
#define ID3D12DXVKInteropDevice_UnlockCommandQueue(This,queue) (This)->lpVtbl->UnlockCommandQueue(This,queue)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DXVKInteropDevice_QueryInterface(ID3D12DXVKInteropDevice* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DXVKInteropDevice_AddRef(ID3D12DXVKInteropDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DXVKInteropDevice_Release(ID3D12DXVKInteropDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DXVKInteropDevice methods ***/
static inline HRESULT ID3D12DXVKInteropDevice_GetDXGIAdapter(ID3D12DXVKInteropDevice* This,REFIID iid,void **object) {
    return This->lpVtbl->GetDXGIAdapter(This,iid,object);
}
static inline HRESULT ID3D12DXVKInteropDevice_GetInstanceExtensions(ID3D12DXVKInteropDevice* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetInstanceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice_GetDeviceExtensions(ID3D12DXVKInteropDevice* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetDeviceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice_GetDeviceFeatures(ID3D12DXVKInteropDevice* This,const VkPhysicalDeviceFeatures2 **features) {
    return This->lpVtbl->GetDeviceFeatures(This,features);
}
static inline HRESULT ID3D12DXVKInteropDevice_GetVulkanHandles(ID3D12DXVKInteropDevice* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline HRESULT ID3D12DXVKInteropDevice_GetVulkanQueueInfo(ID3D12DXVKInteropDevice* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family);
}
static inline void ID3D12DXVKInteropDevice_GetVulkanImageLayout(ID3D12DXVKInteropDevice* This,ID3D12Resource *resource,D3D12_RESOURCE_STATES state,VkImageLayout *vk_layout) {
    This->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout);
}
static inline HRESULT ID3D12DXVKInteropDevice_GetVulkanResourceInfo(ID3D12DXVKInteropDevice* This,ID3D12Resource *resource,UINT64 *vk_handle,UINT64 *buffer_offset) {
    return This->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset);
}
static inline HRESULT ID3D12DXVKInteropDevice_LockCommandQueue(ID3D12DXVKInteropDevice* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->LockCommandQueue(This,queue);
}
static inline HRESULT ID3D12DXVKInteropDevice_UnlockCommandQueue(ID3D12DXVKInteropDevice* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->UnlockCommandQueue(This,queue);
}
#endif
#endif

#endif


#endif  /* __ID3D12DXVKInteropDevice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DXVKInteropDevice1 interface
 */
#ifndef __ID3D12DXVKInteropDevice1_INTERFACE_DEFINED__
#define __ID3D12DXVKInteropDevice1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DXVKInteropDevice1, 0x902d8115, 0x59eb, 0x4406, 0x95,0x18, 0xfe,0x00,0xf9,0x91,0xee,0x65);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("902d8115-59eb-4406-9518-fe00f991ee65")
ID3D12DXVKInteropDevice1 : public ID3D12DXVKInteropDevice
{
    virtual HRESULT STDMETHODCALLTYPE GetVulkanResourceInfo1(
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset,
        VkFormat *format) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInteropCommandQueue(
        const D3D12_COMMAND_QUEUE_DESC *pDesc,
        UINT32 vk_queue_family_index,
        ID3D12CommandQueue **ppQueue) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInteropCommandAllocator(
        D3D12_COMMAND_LIST_TYPE type,
        UINT32 vk_queue_family_index,
        ID3D12CommandAllocator **ppAllocator) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginVkCommandBufferInterop(
        ID3D12CommandList *pCmdList,
        VkCommandBuffer *pCommandBuffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndVkCommandBufferInterop(
        ID3D12CommandList *pCmdList) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DXVKInteropDevice1, 0x902d8115, 0x59eb, 0x4406, 0x95,0x18, 0xfe,0x00,0xf9,0x91,0xee,0x65)
#endif
#else
typedef struct ID3D12DXVKInteropDevice1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DXVKInteropDevice methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDXGIAdapter)(
        ID3D12DXVKInteropDevice1 *This,
        REFIID iid,
        void **object);

    HRESULT (STDMETHODCALLTYPE *GetInstanceExtensions)(
        ID3D12DXVKInteropDevice1 *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceExtensions)(
        ID3D12DXVKInteropDevice1 *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceFeatures)(
        ID3D12DXVKInteropDevice1 *This,
        const VkPhysicalDeviceFeatures2 **features);

    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DXVKInteropDevice1 *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfo)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_family);

    void (STDMETHODCALLTYPE *GetVulkanImageLayout)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12Resource *resource,
        D3D12_RESOURCE_STATES state,
        VkImageLayout *vk_layout);

    HRESULT (STDMETHODCALLTYPE *GetVulkanResourceInfo)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset);

    HRESULT (STDMETHODCALLTYPE *LockCommandQueue)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12CommandQueue *queue);

    HRESULT (STDMETHODCALLTYPE *UnlockCommandQueue)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12CommandQueue *queue);

    /*** ID3D12DXVKInteropDevice1 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanResourceInfo1)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset,
        VkFormat *format);

    HRESULT (STDMETHODCALLTYPE *CreateInteropCommandQueue)(
        ID3D12DXVKInteropDevice1 *This,
        const D3D12_COMMAND_QUEUE_DESC *pDesc,
        UINT32 vk_queue_family_index,
        ID3D12CommandQueue **ppQueue);

    HRESULT (STDMETHODCALLTYPE *CreateInteropCommandAllocator)(
        ID3D12DXVKInteropDevice1 *This,
        D3D12_COMMAND_LIST_TYPE type,
        UINT32 vk_queue_family_index,
        ID3D12CommandAllocator **ppAllocator);

    HRESULT (STDMETHODCALLTYPE *BeginVkCommandBufferInterop)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12CommandList *pCmdList,
        VkCommandBuffer *pCommandBuffer);

    HRESULT (STDMETHODCALLTYPE *EndVkCommandBufferInterop)(
        ID3D12DXVKInteropDevice1 *This,
        ID3D12CommandList *pCmdList);

    END_INTERFACE
} ID3D12DXVKInteropDevice1Vtbl;

interface ID3D12DXVKInteropDevice1 {
    CONST_VTBL ID3D12DXVKInteropDevice1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DXVKInteropDevice1_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DXVKInteropDevice1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DXVKInteropDevice1_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DXVKInteropDevice methods ***/
#define ID3D12DXVKInteropDevice1_GetDXGIAdapter(This,iid,object) (This)->lpVtbl->GetDXGIAdapter(This,iid,object)
#define ID3D12DXVKInteropDevice1_GetInstanceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetInstanceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice1_GetDeviceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetDeviceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice1_GetDeviceFeatures(This,features) (This)->lpVtbl->GetDeviceFeatures(This,features)
#define ID3D12DXVKInteropDevice1_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DXVKInteropDevice1_GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family)
#define ID3D12DXVKInteropDevice1_GetVulkanImageLayout(This,resource,state,vk_layout) (This)->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout)
#define ID3D12DXVKInteropDevice1_GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset) (This)->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset)
#define ID3D12DXVKInteropDevice1_LockCommandQueue(This,queue) (This)->lpVtbl->LockCommandQueue(This,queue)
#define ID3D12DXVKInteropDevice1_UnlockCommandQueue(This,queue) (This)->lpVtbl->UnlockCommandQueue(This,queue)
/*** ID3D12DXVKInteropDevice1 methods ***/
#define ID3D12DXVKInteropDevice1_GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format) (This)->lpVtbl->GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format)
#define ID3D12DXVKInteropDevice1_CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue) (This)->lpVtbl->CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue)
#define ID3D12DXVKInteropDevice1_CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator) (This)->lpVtbl->CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator)
#define ID3D12DXVKInteropDevice1_BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer) (This)->lpVtbl->BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer)
#define ID3D12DXVKInteropDevice1_EndVkCommandBufferInterop(This,pCmdList) (This)->lpVtbl->EndVkCommandBufferInterop(This,pCmdList)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DXVKInteropDevice1_QueryInterface(ID3D12DXVKInteropDevice1* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DXVKInteropDevice1_AddRef(ID3D12DXVKInteropDevice1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DXVKInteropDevice1_Release(ID3D12DXVKInteropDevice1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DXVKInteropDevice methods ***/
static inline HRESULT ID3D12DXVKInteropDevice1_GetDXGIAdapter(ID3D12DXVKInteropDevice1* This,REFIID iid,void **object) {
    return This->lpVtbl->GetDXGIAdapter(This,iid,object);
}
static inline HRESULT ID3D12DXVKInteropDevice1_GetInstanceExtensions(ID3D12DXVKInteropDevice1* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetInstanceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice1_GetDeviceExtensions(ID3D12DXVKInteropDevice1* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetDeviceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice1_GetDeviceFeatures(ID3D12DXVKInteropDevice1* This,const VkPhysicalDeviceFeatures2 **features) {
    return This->lpVtbl->GetDeviceFeatures(This,features);
}
static inline HRESULT ID3D12DXVKInteropDevice1_GetVulkanHandles(ID3D12DXVKInteropDevice1* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline HRESULT ID3D12DXVKInteropDevice1_GetVulkanQueueInfo(ID3D12DXVKInteropDevice1* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family);
}
static inline void ID3D12DXVKInteropDevice1_GetVulkanImageLayout(ID3D12DXVKInteropDevice1* This,ID3D12Resource *resource,D3D12_RESOURCE_STATES state,VkImageLayout *vk_layout) {
    This->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout);
}
static inline HRESULT ID3D12DXVKInteropDevice1_GetVulkanResourceInfo(ID3D12DXVKInteropDevice1* This,ID3D12Resource *resource,UINT64 *vk_handle,UINT64 *buffer_offset) {
    return This->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset);
}
static inline HRESULT ID3D12DXVKInteropDevice1_LockCommandQueue(ID3D12DXVKInteropDevice1* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->LockCommandQueue(This,queue);
}
static inline HRESULT ID3D12DXVKInteropDevice1_UnlockCommandQueue(ID3D12DXVKInteropDevice1* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->UnlockCommandQueue(This,queue);
}
/*** ID3D12DXVKInteropDevice1 methods ***/
static inline HRESULT ID3D12DXVKInteropDevice1_GetVulkanResourceInfo1(ID3D12DXVKInteropDevice1* This,ID3D12Resource *resource,UINT64 *vk_handle,UINT64 *buffer_offset,VkFormat *format) {
    return This->lpVtbl->GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format);
}
static inline HRESULT ID3D12DXVKInteropDevice1_CreateInteropCommandQueue(ID3D12DXVKInteropDevice1* This,const D3D12_COMMAND_QUEUE_DESC *pDesc,UINT32 vk_queue_family_index,ID3D12CommandQueue **ppQueue) {
    return This->lpVtbl->CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue);
}
static inline HRESULT ID3D12DXVKInteropDevice1_CreateInteropCommandAllocator(ID3D12DXVKInteropDevice1* This,D3D12_COMMAND_LIST_TYPE type,UINT32 vk_queue_family_index,ID3D12CommandAllocator **ppAllocator) {
    return This->lpVtbl->CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator);
}
static inline HRESULT ID3D12DXVKInteropDevice1_BeginVkCommandBufferInterop(ID3D12DXVKInteropDevice1* This,ID3D12CommandList *pCmdList,VkCommandBuffer *pCommandBuffer) {
    return This->lpVtbl->BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer);
}
static inline HRESULT ID3D12DXVKInteropDevice1_EndVkCommandBufferInterop(ID3D12DXVKInteropDevice1* This,ID3D12CommandList *pCmdList) {
    return This->lpVtbl->EndVkCommandBufferInterop(This,pCmdList);
}
#endif
#endif

#endif


#endif  /* __ID3D12DXVKInteropDevice1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DXVKInteropDevice2 interface
 */
#ifndef __ID3D12DXVKInteropDevice2_INTERFACE_DEFINED__
#define __ID3D12DXVKInteropDevice2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DXVKInteropDevice2, 0x90ecf26e, 0xb212, 0x43f5, 0xb6,0x2a, 0x82,0x5a,0xd7,0xb1,0x38,0x5e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("90ecf26e-b212-43f5-b62a-825ad7b1385e")
ID3D12DXVKInteropDevice2 : public ID3D12DXVKInteropDevice1
{
    virtual HRESULT STDMETHODCALLTYPE LockVulkanQueue(
        ID3D12CommandQueue *queue) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnlockVulkanQueue(
        ID3D12CommandQueue *queue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DXVKInteropDevice2, 0x90ecf26e, 0xb212, 0x43f5, 0xb6,0x2a, 0x82,0x5a,0xd7,0xb1,0x38,0x5e)
#endif
#else
typedef struct ID3D12DXVKInteropDevice2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DXVKInteropDevice methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDXGIAdapter)(
        ID3D12DXVKInteropDevice2 *This,
        REFIID iid,
        void **object);

    HRESULT (STDMETHODCALLTYPE *GetInstanceExtensions)(
        ID3D12DXVKInteropDevice2 *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceExtensions)(
        ID3D12DXVKInteropDevice2 *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceFeatures)(
        ID3D12DXVKInteropDevice2 *This,
        const VkPhysicalDeviceFeatures2 **features);

    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DXVKInteropDevice2 *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfo)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_family);

    void (STDMETHODCALLTYPE *GetVulkanImageLayout)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12Resource *resource,
        D3D12_RESOURCE_STATES state,
        VkImageLayout *vk_layout);

    HRESULT (STDMETHODCALLTYPE *GetVulkanResourceInfo)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset);

    HRESULT (STDMETHODCALLTYPE *LockCommandQueue)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12CommandQueue *queue);

    HRESULT (STDMETHODCALLTYPE *UnlockCommandQueue)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12CommandQueue *queue);

    /*** ID3D12DXVKInteropDevice1 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanResourceInfo1)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset,
        VkFormat *format);

    HRESULT (STDMETHODCALLTYPE *CreateInteropCommandQueue)(
        ID3D12DXVKInteropDevice2 *This,
        const D3D12_COMMAND_QUEUE_DESC *pDesc,
        UINT32 vk_queue_family_index,
        ID3D12CommandQueue **ppQueue);

    HRESULT (STDMETHODCALLTYPE *CreateInteropCommandAllocator)(
        ID3D12DXVKInteropDevice2 *This,
        D3D12_COMMAND_LIST_TYPE type,
        UINT32 vk_queue_family_index,
        ID3D12CommandAllocator **ppAllocator);

    HRESULT (STDMETHODCALLTYPE *BeginVkCommandBufferInterop)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12CommandList *pCmdList,
        VkCommandBuffer *pCommandBuffer);

    HRESULT (STDMETHODCALLTYPE *EndVkCommandBufferInterop)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12CommandList *pCmdList);

    /*** ID3D12DXVKInteropDevice2 methods ***/
    HRESULT (STDMETHODCALLTYPE *LockVulkanQueue)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12CommandQueue *queue);

    HRESULT (STDMETHODCALLTYPE *UnlockVulkanQueue)(
        ID3D12DXVKInteropDevice2 *This,
        ID3D12CommandQueue *queue);

    END_INTERFACE
} ID3D12DXVKInteropDevice2Vtbl;

interface ID3D12DXVKInteropDevice2 {
    CONST_VTBL ID3D12DXVKInteropDevice2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DXVKInteropDevice2_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DXVKInteropDevice2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DXVKInteropDevice2_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DXVKInteropDevice methods ***/
#define ID3D12DXVKInteropDevice2_GetDXGIAdapter(This,iid,object) (This)->lpVtbl->GetDXGIAdapter(This,iid,object)
#define ID3D12DXVKInteropDevice2_GetInstanceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetInstanceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice2_GetDeviceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetDeviceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice2_GetDeviceFeatures(This,features) (This)->lpVtbl->GetDeviceFeatures(This,features)
#define ID3D12DXVKInteropDevice2_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DXVKInteropDevice2_GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family)
#define ID3D12DXVKInteropDevice2_GetVulkanImageLayout(This,resource,state,vk_layout) (This)->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout)
#define ID3D12DXVKInteropDevice2_GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset) (This)->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset)
#define ID3D12DXVKInteropDevice2_LockCommandQueue(This,queue) (This)->lpVtbl->LockCommandQueue(This,queue)
#define ID3D12DXVKInteropDevice2_UnlockCommandQueue(This,queue) (This)->lpVtbl->UnlockCommandQueue(This,queue)
/*** ID3D12DXVKInteropDevice1 methods ***/
#define ID3D12DXVKInteropDevice2_GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format) (This)->lpVtbl->GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format)
#define ID3D12DXVKInteropDevice2_CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue) (This)->lpVtbl->CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue)
#define ID3D12DXVKInteropDevice2_CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator) (This)->lpVtbl->CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator)
#define ID3D12DXVKInteropDevice2_BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer) (This)->lpVtbl->BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer)
#define ID3D12DXVKInteropDevice2_EndVkCommandBufferInterop(This,pCmdList) (This)->lpVtbl->EndVkCommandBufferInterop(This,pCmdList)
/*** ID3D12DXVKInteropDevice2 methods ***/
#define ID3D12DXVKInteropDevice2_LockVulkanQueue(This,queue) (This)->lpVtbl->LockVulkanQueue(This,queue)
#define ID3D12DXVKInteropDevice2_UnlockVulkanQueue(This,queue) (This)->lpVtbl->UnlockVulkanQueue(This,queue)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DXVKInteropDevice2_QueryInterface(ID3D12DXVKInteropDevice2* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DXVKInteropDevice2_AddRef(ID3D12DXVKInteropDevice2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DXVKInteropDevice2_Release(ID3D12DXVKInteropDevice2* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DXVKInteropDevice methods ***/
static inline HRESULT ID3D12DXVKInteropDevice2_GetDXGIAdapter(ID3D12DXVKInteropDevice2* This,REFIID iid,void **object) {
    return This->lpVtbl->GetDXGIAdapter(This,iid,object);
}
static inline HRESULT ID3D12DXVKInteropDevice2_GetInstanceExtensions(ID3D12DXVKInteropDevice2* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetInstanceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice2_GetDeviceExtensions(ID3D12DXVKInteropDevice2* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetDeviceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice2_GetDeviceFeatures(ID3D12DXVKInteropDevice2* This,const VkPhysicalDeviceFeatures2 **features) {
    return This->lpVtbl->GetDeviceFeatures(This,features);
}
static inline HRESULT ID3D12DXVKInteropDevice2_GetVulkanHandles(ID3D12DXVKInteropDevice2* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline HRESULT ID3D12DXVKInteropDevice2_GetVulkanQueueInfo(ID3D12DXVKInteropDevice2* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family);
}
static inline void ID3D12DXVKInteropDevice2_GetVulkanImageLayout(ID3D12DXVKInteropDevice2* This,ID3D12Resource *resource,D3D12_RESOURCE_STATES state,VkImageLayout *vk_layout) {
    This->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout);
}
static inline HRESULT ID3D12DXVKInteropDevice2_GetVulkanResourceInfo(ID3D12DXVKInteropDevice2* This,ID3D12Resource *resource,UINT64 *vk_handle,UINT64 *buffer_offset) {
    return This->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset);
}
static inline HRESULT ID3D12DXVKInteropDevice2_LockCommandQueue(ID3D12DXVKInteropDevice2* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->LockCommandQueue(This,queue);
}
static inline HRESULT ID3D12DXVKInteropDevice2_UnlockCommandQueue(ID3D12DXVKInteropDevice2* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->UnlockCommandQueue(This,queue);
}
/*** ID3D12DXVKInteropDevice1 methods ***/
static inline HRESULT ID3D12DXVKInteropDevice2_GetVulkanResourceInfo1(ID3D12DXVKInteropDevice2* This,ID3D12Resource *resource,UINT64 *vk_handle,UINT64 *buffer_offset,VkFormat *format) {
    return This->lpVtbl->GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format);
}
static inline HRESULT ID3D12DXVKInteropDevice2_CreateInteropCommandQueue(ID3D12DXVKInteropDevice2* This,const D3D12_COMMAND_QUEUE_DESC *pDesc,UINT32 vk_queue_family_index,ID3D12CommandQueue **ppQueue) {
    return This->lpVtbl->CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue);
}
static inline HRESULT ID3D12DXVKInteropDevice2_CreateInteropCommandAllocator(ID3D12DXVKInteropDevice2* This,D3D12_COMMAND_LIST_TYPE type,UINT32 vk_queue_family_index,ID3D12CommandAllocator **ppAllocator) {
    return This->lpVtbl->CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator);
}
static inline HRESULT ID3D12DXVKInteropDevice2_BeginVkCommandBufferInterop(ID3D12DXVKInteropDevice2* This,ID3D12CommandList *pCmdList,VkCommandBuffer *pCommandBuffer) {
    return This->lpVtbl->BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer);
}
static inline HRESULT ID3D12DXVKInteropDevice2_EndVkCommandBufferInterop(ID3D12DXVKInteropDevice2* This,ID3D12CommandList *pCmdList) {
    return This->lpVtbl->EndVkCommandBufferInterop(This,pCmdList);
}
/*** ID3D12DXVKInteropDevice2 methods ***/
static inline HRESULT ID3D12DXVKInteropDevice2_LockVulkanQueue(ID3D12DXVKInteropDevice2* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->LockVulkanQueue(This,queue);
}
static inline HRESULT ID3D12DXVKInteropDevice2_UnlockVulkanQueue(ID3D12DXVKInteropDevice2* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->UnlockVulkanQueue(This,queue);
}
#endif
#endif

#endif


#endif  /* __ID3D12DXVKInteropDevice2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DXVKInteropDevice3 interface
 */
#ifndef __ID3D12DXVKInteropDevice3_INTERFACE_DEFINED__
#define __ID3D12DXVKInteropDevice3_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DXVKInteropDevice3, 0x22a70184, 0xa6a4, 0x4c24, 0xbf,0x97, 0x7d,0x6d,0xf9,0xf1,0x2d,0x8a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("22a70184-a6a4-4c24-bf97-7d6df9f12d8a")
ID3D12DXVKInteropDevice3 : public ID3D12DXVKInteropDevice2
{
    virtual HRESULT STDMETHODCALLTYPE GetVulkanHeapInfo(
        ID3D12Heap *heap,
        UINT64 *vk_memory,
        UINT64 *heap_offset,
        UINT32 *vk_memory_type) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DXVKInteropDevice3, 0x22a70184, 0xa6a4, 0x4c24, 0xbf,0x97, 0x7d,0x6d,0xf9,0xf1,0x2d,0x8a)
#endif
#else
typedef struct ID3D12DXVKInteropDevice3Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DXVKInteropDevice methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDXGIAdapter)(
        ID3D12DXVKInteropDevice3 *This,
        REFIID iid,
        void **object);

    HRESULT (STDMETHODCALLTYPE *GetInstanceExtensions)(
        ID3D12DXVKInteropDevice3 *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceExtensions)(
        ID3D12DXVKInteropDevice3 *This,
        UINT *extension_count,
        const char **extensions);

    HRESULT (STDMETHODCALLTYPE *GetDeviceFeatures)(
        ID3D12DXVKInteropDevice3 *This,
        const VkPhysicalDeviceFeatures2 **features);

    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DXVKInteropDevice3 *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfo)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_family);

    void (STDMETHODCALLTYPE *GetVulkanImageLayout)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12Resource *resource,
        D3D12_RESOURCE_STATES state,
        VkImageLayout *vk_layout);

    HRESULT (STDMETHODCALLTYPE *GetVulkanResourceInfo)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset);

    HRESULT (STDMETHODCALLTYPE *LockCommandQueue)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12CommandQueue *queue);

    HRESULT (STDMETHODCALLTYPE *UnlockCommandQueue)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12CommandQueue *queue);

    /*** ID3D12DXVKInteropDevice1 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanResourceInfo1)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12Resource *resource,
        UINT64 *vk_handle,
        UINT64 *buffer_offset,
        VkFormat *format);

    HRESULT (STDMETHODCALLTYPE *CreateInteropCommandQueue)(
        ID3D12DXVKInteropDevice3 *This,
        const D3D12_COMMAND_QUEUE_DESC *pDesc,
        UINT32 vk_queue_family_index,
        ID3D12CommandQueue **ppQueue);

    HRESULT (STDMETHODCALLTYPE *CreateInteropCommandAllocator)(
        ID3D12DXVKInteropDevice3 *This,
        D3D12_COMMAND_LIST_TYPE type,
        UINT32 vk_queue_family_index,
        ID3D12CommandAllocator **ppAllocator);

    HRESULT (STDMETHODCALLTYPE *BeginVkCommandBufferInterop)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12CommandList *pCmdList,
        VkCommandBuffer *pCommandBuffer);

    HRESULT (STDMETHODCALLTYPE *EndVkCommandBufferInterop)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12CommandList *pCmdList);

    /*** ID3D12DXVKInteropDevice2 methods ***/
    HRESULT (STDMETHODCALLTYPE *LockVulkanQueue)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12CommandQueue *queue);

    HRESULT (STDMETHODCALLTYPE *UnlockVulkanQueue)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12CommandQueue *queue);

    /*** ID3D12DXVKInteropDevice3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanHeapInfo)(
        ID3D12DXVKInteropDevice3 *This,
        ID3D12Heap *heap,
        UINT64 *vk_memory,
        UINT64 *heap_offset,
        UINT32 *vk_memory_type);

    END_INTERFACE
} ID3D12DXVKInteropDevice3Vtbl;

interface ID3D12DXVKInteropDevice3 {
    CONST_VTBL ID3D12DXVKInteropDevice3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DXVKInteropDevice3_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DXVKInteropDevice3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DXVKInteropDevice3_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DXVKInteropDevice methods ***/
#define ID3D12DXVKInteropDevice3_GetDXGIAdapter(This,iid,object) (This)->lpVtbl->GetDXGIAdapter(This,iid,object)
#define ID3D12DXVKInteropDevice3_GetInstanceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetInstanceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice3_GetDeviceExtensions(This,extension_count,extensions) (This)->lpVtbl->GetDeviceExtensions(This,extension_count,extensions)
#define ID3D12DXVKInteropDevice3_GetDeviceFeatures(This,features) (This)->lpVtbl->GetDeviceFeatures(This,features)
#define ID3D12DXVKInteropDevice3_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DXVKInteropDevice3_GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family)
#define ID3D12DXVKInteropDevice3_GetVulkanImageLayout(This,resource,state,vk_layout) (This)->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout)
#define ID3D12DXVKInteropDevice3_GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset) (This)->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset)
#define ID3D12DXVKInteropDevice3_LockCommandQueue(This,queue) (This)->lpVtbl->LockCommandQueue(This,queue)
#define ID3D12DXVKInteropDevice3_UnlockCommandQueue(This,queue) (This)->lpVtbl->UnlockCommandQueue(This,queue)
/*** ID3D12DXVKInteropDevice1 methods ***/
#define ID3D12DXVKInteropDevice3_GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format) (This)->lpVtbl->GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format)
#define ID3D12DXVKInteropDevice3_CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue) (This)->lpVtbl->CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue)
#define ID3D12DXVKInteropDevice3_CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator) (This)->lpVtbl->CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator)
#define ID3D12DXVKInteropDevice3_BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer) (This)->lpVtbl->BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer)
#define ID3D12DXVKInteropDevice3_EndVkCommandBufferInterop(This,pCmdList) (This)->lpVtbl->EndVkCommandBufferInterop(This,pCmdList)
/*** ID3D12DXVKInteropDevice2 methods ***/
#define ID3D12DXVKInteropDevice3_LockVulkanQueue(This,queue) (This)->lpVtbl->LockVulkanQueue(This,queue)
#define ID3D12DXVKInteropDevice3_UnlockVulkanQueue(This,queue) (This)->lpVtbl->UnlockVulkanQueue(This,queue)
/*** ID3D12DXVKInteropDevice3 methods ***/
#define ID3D12DXVKInteropDevice3_GetVulkanHeapInfo(This,heap,vk_memory,heap_offset,vk_memory_type) (This)->lpVtbl->GetVulkanHeapInfo(This,heap,vk_memory,heap_offset,vk_memory_type)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DXVKInteropDevice3_QueryInterface(ID3D12DXVKInteropDevice3* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DXVKInteropDevice3_AddRef(ID3D12DXVKInteropDevice3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DXVKInteropDevice3_Release(ID3D12DXVKInteropDevice3* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DXVKInteropDevice methods ***/
static inline HRESULT ID3D12DXVKInteropDevice3_GetDXGIAdapter(ID3D12DXVKInteropDevice3* This,REFIID iid,void **object) {
    return This->lpVtbl->GetDXGIAdapter(This,iid,object);
}
static inline HRESULT ID3D12DXVKInteropDevice3_GetInstanceExtensions(ID3D12DXVKInteropDevice3* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetInstanceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice3_GetDeviceExtensions(ID3D12DXVKInteropDevice3* This,UINT *extension_count,const char **extensions) {
    return This->lpVtbl->GetDeviceExtensions(This,extension_count,extensions);
}
static inline HRESULT ID3D12DXVKInteropDevice3_GetDeviceFeatures(ID3D12DXVKInteropDevice3* This,const VkPhysicalDeviceFeatures2 **features) {
    return This->lpVtbl->GetDeviceFeatures(This,features);
}
static inline HRESULT ID3D12DXVKInteropDevice3_GetVulkanHandles(ID3D12DXVKInteropDevice3* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline HRESULT ID3D12DXVKInteropDevice3_GetVulkanQueueInfo(ID3D12DXVKInteropDevice3* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfo(This,queue,vk_queue,vk_queue_family);
}
static inline void ID3D12DXVKInteropDevice3_GetVulkanImageLayout(ID3D12DXVKInteropDevice3* This,ID3D12Resource *resource,D3D12_RESOURCE_STATES state,VkImageLayout *vk_layout) {
    This->lpVtbl->GetVulkanImageLayout(This,resource,state,vk_layout);
}
static inline HRESULT ID3D12DXVKInteropDevice3_GetVulkanResourceInfo(ID3D12DXVKInteropDevice3* This,ID3D12Resource *resource,UINT64 *vk_handle,UINT64 *buffer_offset) {
    return This->lpVtbl->GetVulkanResourceInfo(This,resource,vk_handle,buffer_offset);
}
static inline HRESULT ID3D12DXVKInteropDevice3_LockCommandQueue(ID3D12DXVKInteropDevice3* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->LockCommandQueue(This,queue);
}
static inline HRESULT ID3D12DXVKInteropDevice3_UnlockCommandQueue(ID3D12DXVKInteropDevice3* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->UnlockCommandQueue(This,queue);
}
/*** ID3D12DXVKInteropDevice1 methods ***/
static inline HRESULT ID3D12DXVKInteropDevice3_GetVulkanResourceInfo1(ID3D12DXVKInteropDevice3* This,ID3D12Resource *resource,UINT64 *vk_handle,UINT64 *buffer_offset,VkFormat *format) {
    return This->lpVtbl->GetVulkanResourceInfo1(This,resource,vk_handle,buffer_offset,format);
}
static inline HRESULT ID3D12DXVKInteropDevice3_CreateInteropCommandQueue(ID3D12DXVKInteropDevice3* This,const D3D12_COMMAND_QUEUE_DESC *pDesc,UINT32 vk_queue_family_index,ID3D12CommandQueue **ppQueue) {
    return This->lpVtbl->CreateInteropCommandQueue(This,pDesc,vk_queue_family_index,ppQueue);
}
static inline HRESULT ID3D12DXVKInteropDevice3_CreateInteropCommandAllocator(ID3D12DXVKInteropDevice3* This,D3D12_COMMAND_LIST_TYPE type,UINT32 vk_queue_family_index,ID3D12CommandAllocator **ppAllocator) {
    return This->lpVtbl->CreateInteropCommandAllocator(This,type,vk_queue_family_index,ppAllocator);
}
static inline HRESULT ID3D12DXVKInteropDevice3_BeginVkCommandBufferInterop(ID3D12DXVKInteropDevice3* This,ID3D12CommandList *pCmdList,VkCommandBuffer *pCommandBuffer) {
    return This->lpVtbl->BeginVkCommandBufferInterop(This,pCmdList,pCommandBuffer);
}
static inline HRESULT ID3D12DXVKInteropDevice3_EndVkCommandBufferInterop(ID3D12DXVKInteropDevice3* This,ID3D12CommandList *pCmdList) {
    return This->lpVtbl->EndVkCommandBufferInterop(This,pCmdList);
}
/*** ID3D12DXVKInteropDevice2 methods ***/
static inline HRESULT ID3D12DXVKInteropDevice3_LockVulkanQueue(ID3D12DXVKInteropDevice3* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->LockVulkanQueue(This,queue);
}
static inline HRESULT ID3D12DXVKInteropDevice3_UnlockVulkanQueue(ID3D12DXVKInteropDevice3* This,ID3D12CommandQueue *queue) {
    return This->lpVtbl->UnlockVulkanQueue(This,queue);
}
/*** ID3D12DXVKInteropDevice3 methods ***/
static inline HRESULT ID3D12DXVKInteropDevice3_GetVulkanHeapInfo(ID3D12DXVKInteropDevice3* This,ID3D12Heap *heap,UINT64 *vk_memory,UINT64 *heap_offset,UINT32 *vk_memory_type) {
    return This->lpVtbl->GetVulkanHeapInfo(This,heap,vk_memory,heap_offset,vk_memory_type);
}
#endif
#endif

#endif


#endif  /* __ID3D12DXVKInteropDevice3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3DLowLatencyDevice interface
 */
#ifndef __ID3DLowLatencyDevice_INTERFACE_DEFINED__
#define __ID3DLowLatencyDevice_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3DLowLatencyDevice, 0xf3112584, 0x41f9, 0x348d, 0xa5,0x9b, 0x00,0xb7,0xe1,0xd2,0x85,0xd6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f3112584-41f9-348d-a59b-00b7e1d285d6")
ID3DLowLatencyDevice : public IUnknown
{
    virtual BOOL STDMETHODCALLTYPE SupportsLowLatency(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE LatencySleep(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLatencySleepMode(
        BOOL low_latency_mode,
        BOOL low_latency_boost,
        UINT32 minimum_interval_us) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLatencyMarker(
        UINT64 frameID,
        UINT32 markerType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLatencyInfo(
        D3D12_LATENCY_RESULTS *latency_results) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3DLowLatencyDevice, 0xf3112584, 0x41f9, 0x348d, 0xa5,0x9b, 0x00,0xb7,0xe1,0xd2,0x85,0xd6)
#endif
#else
typedef struct ID3DLowLatencyDeviceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3DLowLatencyDevice methods ***/
    BOOL (STDMETHODCALLTYPE *SupportsLowLatency)(
        ID3DLowLatencyDevice *This);

    HRESULT (STDMETHODCALLTYPE *LatencySleep)(
        ID3DLowLatencyDevice *This);

    HRESULT (STDMETHODCALLTYPE *SetLatencySleepMode)(
        ID3DLowLatencyDevice *This,
        BOOL low_latency_mode,
        BOOL low_latency_boost,
        UINT32 minimum_interval_us);

    HRESULT (STDMETHODCALLTYPE *SetLatencyMarker)(
        ID3DLowLatencyDevice *This,
        UINT64 frameID,
        UINT32 markerType);

    HRESULT (STDMETHODCALLTYPE *GetLatencyInfo)(
        ID3DLowLatencyDevice *This,
        D3D12_LATENCY_RESULTS *latency_results);

    END_INTERFACE
} ID3DLowLatencyDeviceVtbl;

interface ID3DLowLatencyDevice {
    CONST_VTBL ID3DLowLatencyDeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3DLowLatencyDevice_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3DLowLatencyDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3DLowLatencyDevice_Release(This) (This)->lpVtbl->Release(This)
/*** ID3DLowLatencyDevice methods ***/
#define ID3DLowLatencyDevice_SupportsLowLatency(This) (This)->lpVtbl->SupportsLowLatency(This)
#define ID3DLowLatencyDevice_LatencySleep(This) (This)->lpVtbl->LatencySleep(This)
#define ID3DLowLatencyDevice_SetLatencySleepMode(This,low_latency_mode,low_latency_boost,minimum_interval_us) (This)->lpVtbl->SetLatencySleepMode(This,low_latency_mode,low_latency_boost,minimum_interval_us)
#define ID3DLowLatencyDevice_SetLatencyMarker(This,frameID,markerType) (This)->lpVtbl->SetLatencyMarker(This,frameID,markerType)
#define ID3DLowLatencyDevice_GetLatencyInfo(This,latency_results) (This)->lpVtbl->GetLatencyInfo(This,latency_results)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3DLowLatencyDevice_QueryInterface(ID3DLowLatencyDevice* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3DLowLatencyDevice_AddRef(ID3DLowLatencyDevice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3DLowLatencyDevice_Release(ID3DLowLatencyDevice* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3DLowLatencyDevice methods ***/
static inline BOOL ID3DLowLatencyDevice_SupportsLowLatency(ID3DLowLatencyDevice* This) {
    return This->lpVtbl->SupportsLowLatency(This);
}
static inline HRESULT ID3DLowLatencyDevice_LatencySleep(ID3DLowLatencyDevice* This) {
    return This->lpVtbl->LatencySleep(This);
}
static inline HRESULT ID3DLowLatencyDevice_SetLatencySleepMode(ID3DLowLatencyDevice* This,BOOL low_latency_mode,BOOL low_latency_boost,UINT32 minimum_interval_us) {
    return This->lpVtbl->SetLatencySleepMode(This,low_latency_mode,low_latency_boost,minimum_interval_us);
}
static inline HRESULT ID3DLowLatencyDevice_SetLatencyMarker(ID3DLowLatencyDevice* This,UINT64 frameID,UINT32 markerType) {
    return This->lpVtbl->SetLatencyMarker(This,frameID,markerType);
}
static inline HRESULT ID3DLowLatencyDevice_GetLatencyInfo(ID3DLowLatencyDevice* This,D3D12_LATENCY_RESULTS *latency_results) {
    return This->lpVtbl->GetLatencyInfo(This,latency_results);
}
#endif
#endif

#endif


#endif  /* __ID3DLowLatencyDevice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DeviceExt1 interface
 */
#ifndef __ID3D12DeviceExt1_INTERFACE_DEFINED__
#define __ID3D12DeviceExt1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DeviceExt1, 0x099a73fd, 0x2199, 0x4f45, 0xbf,0x48, 0x0e,0xb8,0x6f,0x6f,0xdb,0x65);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("099a73fd-2199-4f45-bf48-0eb86f6fdb65")
ID3D12DeviceExt1 : public ID3D12DeviceExt
{
    virtual HRESULT STDMETHODCALLTYPE CreateResourceFromBorrowedHandle(
        const D3D12_RESOURCE_DESC1 *desc,
        UINT64 vk_handle,
        ID3D12Resource **resource) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVulkanQueueInfoEx(
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_index,
        UINT32 *vk_queue_flags,
        UINT32 *vk_queue_family) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DeviceExt1, 0x099a73fd, 0x2199, 0x4f45, 0xbf,0x48, 0x0e,0xb8,0x6f,0x6f,0xdb,0x65)
#endif
#else
typedef struct ID3D12DeviceExt1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DeviceExt methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DeviceExt1 *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    BOOL (STDMETHODCALLTYPE *GetExtensionSupport)(
        ID3D12DeviceExt1 *This,
        D3D12_VK_EXTENSION extension);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderWithName)(
        ID3D12DeviceExt1 *This,
        const void *cubin_data,
        UINT32 cubin_size,
        UINT32 block_x,
        UINT32 block_y,
        UINT32 block_z,
        const char *shader_name,
        D3D12_CUBIN_DATA_HANDLE **handle);

    HRESULT (STDMETHODCALLTYPE *DestroyCubinComputeShader)(
        ID3D12DeviceExt1 *This,
        D3D12_CUBIN_DATA_HANDLE *handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaTextureObject)(
        ID3D12DeviceExt1 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,
        D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,
        UINT32 *cuda_texture_handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaSurfaceObject)(
        ID3D12DeviceExt1 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,
        UINT32 *cuda_surface_handle);

    HRESULT (STDMETHODCALLTYPE *CaptureUAVInfo)(
        ID3D12DeviceExt1 *This,
        D3D12_UAV_INFO *uav_info);

    /*** ID3D12DeviceExt1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateResourceFromBorrowedHandle)(
        ID3D12DeviceExt1 *This,
        const D3D12_RESOURCE_DESC1 *desc,
        UINT64 vk_handle,
        ID3D12Resource **resource);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfoEx)(
        ID3D12DeviceExt1 *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_index,
        UINT32 *vk_queue_flags,
        UINT32 *vk_queue_family);

    END_INTERFACE
} ID3D12DeviceExt1Vtbl;

interface ID3D12DeviceExt1 {
    CONST_VTBL ID3D12DeviceExt1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DeviceExt1_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DeviceExt1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DeviceExt1_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DeviceExt methods ***/
#define ID3D12DeviceExt1_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DeviceExt1_GetExtensionSupport(This,extension) (This)->lpVtbl->GetExtensionSupport(This,extension)
#define ID3D12DeviceExt1_CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle) (This)->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle)
#define ID3D12DeviceExt1_DestroyCubinComputeShader(This,handle) (This)->lpVtbl->DestroyCubinComputeShader(This,handle)
#define ID3D12DeviceExt1_GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle) (This)->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle)
#define ID3D12DeviceExt1_GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle) (This)->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle)
#define ID3D12DeviceExt1_CaptureUAVInfo(This,uav_info) (This)->lpVtbl->CaptureUAVInfo(This,uav_info)
/*** ID3D12DeviceExt1 methods ***/
#define ID3D12DeviceExt1_CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource) (This)->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource)
#define ID3D12DeviceExt1_GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DeviceExt1_QueryInterface(ID3D12DeviceExt1* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DeviceExt1_AddRef(ID3D12DeviceExt1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DeviceExt1_Release(ID3D12DeviceExt1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DeviceExt methods ***/
static inline HRESULT ID3D12DeviceExt1_GetVulkanHandles(ID3D12DeviceExt1* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline BOOL ID3D12DeviceExt1_GetExtensionSupport(ID3D12DeviceExt1* This,D3D12_VK_EXTENSION extension) {
    return This->lpVtbl->GetExtensionSupport(This,extension);
}
static inline HRESULT ID3D12DeviceExt1_CreateCubinComputeShaderWithName(ID3D12DeviceExt1* This,const void *cubin_data,UINT32 cubin_size,UINT32 block_x,UINT32 block_y,UINT32 block_z,const char *shader_name,D3D12_CUBIN_DATA_HANDLE **handle) {
    return This->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle);
}
static inline HRESULT ID3D12DeviceExt1_DestroyCubinComputeShader(ID3D12DeviceExt1* This,D3D12_CUBIN_DATA_HANDLE *handle) {
    return This->lpVtbl->DestroyCubinComputeShader(This,handle);
}
static inline HRESULT ID3D12DeviceExt1_GetCudaTextureObject(ID3D12DeviceExt1* This,D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,UINT32 *cuda_texture_handle) {
    return This->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle);
}
static inline HRESULT ID3D12DeviceExt1_GetCudaSurfaceObject(ID3D12DeviceExt1* This,D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,UINT32 *cuda_surface_handle) {
    return This->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle);
}
static inline HRESULT ID3D12DeviceExt1_CaptureUAVInfo(ID3D12DeviceExt1* This,D3D12_UAV_INFO *uav_info) {
    return This->lpVtbl->CaptureUAVInfo(This,uav_info);
}
/*** ID3D12DeviceExt1 methods ***/
static inline HRESULT ID3D12DeviceExt1_CreateResourceFromBorrowedHandle(ID3D12DeviceExt1* This,const D3D12_RESOURCE_DESC1 *desc,UINT64 vk_handle,ID3D12Resource **resource) {
    return This->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource);
}
static inline HRESULT ID3D12DeviceExt1_GetVulkanQueueInfoEx(ID3D12DeviceExt1* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_index,UINT32 *vk_queue_flags,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family);
}
#endif
#endif

#endif


#endif  /* __ID3D12DeviceExt1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DeviceExt2 interface
 */
#ifndef __ID3D12DeviceExt2_INTERFACE_DEFINED__
#define __ID3D12DeviceExt2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DeviceExt2, 0xe859c4ac, 0xba8f, 0x41c4, 0x8e,0xac, 0x11,0x37,0xfd,0xe6,0x15,0x8d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e859c4ac-ba8f-41c4-8eac-1137fde6158d")
ID3D12DeviceExt2 : public ID3D12DeviceExt1
{
    virtual BOOL STDMETHODCALLTYPE SupportsCubin64bit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateCubinComputeShaderExV2(
        D3D12_CREATE_CUBIN_SHADER_PARAMS *params) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCudaMergedTextureSamplerObject(
        D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS *params) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCudaIndependentDescriptorObject(
        D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS *params) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DeviceExt2, 0xe859c4ac, 0xba8f, 0x41c4, 0x8e,0xac, 0x11,0x37,0xfd,0xe6,0x15,0x8d)
#endif
#else
typedef struct ID3D12DeviceExt2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DeviceExt methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DeviceExt2 *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    BOOL (STDMETHODCALLTYPE *GetExtensionSupport)(
        ID3D12DeviceExt2 *This,
        D3D12_VK_EXTENSION extension);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderWithName)(
        ID3D12DeviceExt2 *This,
        const void *cubin_data,
        UINT32 cubin_size,
        UINT32 block_x,
        UINT32 block_y,
        UINT32 block_z,
        const char *shader_name,
        D3D12_CUBIN_DATA_HANDLE **handle);

    HRESULT (STDMETHODCALLTYPE *DestroyCubinComputeShader)(
        ID3D12DeviceExt2 *This,
        D3D12_CUBIN_DATA_HANDLE *handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaTextureObject)(
        ID3D12DeviceExt2 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,
        D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,
        UINT32 *cuda_texture_handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaSurfaceObject)(
        ID3D12DeviceExt2 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,
        UINT32 *cuda_surface_handle);

    HRESULT (STDMETHODCALLTYPE *CaptureUAVInfo)(
        ID3D12DeviceExt2 *This,
        D3D12_UAV_INFO *uav_info);

    /*** ID3D12DeviceExt1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateResourceFromBorrowedHandle)(
        ID3D12DeviceExt2 *This,
        const D3D12_RESOURCE_DESC1 *desc,
        UINT64 vk_handle,
        ID3D12Resource **resource);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfoEx)(
        ID3D12DeviceExt2 *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_index,
        UINT32 *vk_queue_flags,
        UINT32 *vk_queue_family);

    /*** ID3D12DeviceExt2 methods ***/
    BOOL (STDMETHODCALLTYPE *SupportsCubin64bit)(
        ID3D12DeviceExt2 *This);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderExV2)(
        ID3D12DeviceExt2 *This,
        D3D12_CREATE_CUBIN_SHADER_PARAMS *params);

    HRESULT (STDMETHODCALLTYPE *GetCudaMergedTextureSamplerObject)(
        ID3D12DeviceExt2 *This,
        D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS *params);

    HRESULT (STDMETHODCALLTYPE *GetCudaIndependentDescriptorObject)(
        ID3D12DeviceExt2 *This,
        D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS *params);

    END_INTERFACE
} ID3D12DeviceExt2Vtbl;

interface ID3D12DeviceExt2 {
    CONST_VTBL ID3D12DeviceExt2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DeviceExt2_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DeviceExt2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DeviceExt2_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DeviceExt methods ***/
#define ID3D12DeviceExt2_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DeviceExt2_GetExtensionSupport(This,extension) (This)->lpVtbl->GetExtensionSupport(This,extension)
#define ID3D12DeviceExt2_CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle) (This)->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle)
#define ID3D12DeviceExt2_DestroyCubinComputeShader(This,handle) (This)->lpVtbl->DestroyCubinComputeShader(This,handle)
#define ID3D12DeviceExt2_GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle) (This)->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle)
#define ID3D12DeviceExt2_GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle) (This)->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle)
#define ID3D12DeviceExt2_CaptureUAVInfo(This,uav_info) (This)->lpVtbl->CaptureUAVInfo(This,uav_info)
/*** ID3D12DeviceExt1 methods ***/
#define ID3D12DeviceExt2_CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource) (This)->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource)
#define ID3D12DeviceExt2_GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family)
/*** ID3D12DeviceExt2 methods ***/
#define ID3D12DeviceExt2_SupportsCubin64bit(This) (This)->lpVtbl->SupportsCubin64bit(This)
#define ID3D12DeviceExt2_CreateCubinComputeShaderExV2(This,params) (This)->lpVtbl->CreateCubinComputeShaderExV2(This,params)
#define ID3D12DeviceExt2_GetCudaMergedTextureSamplerObject(This,params) (This)->lpVtbl->GetCudaMergedTextureSamplerObject(This,params)
#define ID3D12DeviceExt2_GetCudaIndependentDescriptorObject(This,params) (This)->lpVtbl->GetCudaIndependentDescriptorObject(This,params)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DeviceExt2_QueryInterface(ID3D12DeviceExt2* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DeviceExt2_AddRef(ID3D12DeviceExt2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DeviceExt2_Release(ID3D12DeviceExt2* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DeviceExt methods ***/
static inline HRESULT ID3D12DeviceExt2_GetVulkanHandles(ID3D12DeviceExt2* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline BOOL ID3D12DeviceExt2_GetExtensionSupport(ID3D12DeviceExt2* This,D3D12_VK_EXTENSION extension) {
    return This->lpVtbl->GetExtensionSupport(This,extension);
}
static inline HRESULT ID3D12DeviceExt2_CreateCubinComputeShaderWithName(ID3D12DeviceExt2* This,const void *cubin_data,UINT32 cubin_size,UINT32 block_x,UINT32 block_y,UINT32 block_z,const char *shader_name,D3D12_CUBIN_DATA_HANDLE **handle) {
    return This->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle);
}
static inline HRESULT ID3D12DeviceExt2_DestroyCubinComputeShader(ID3D12DeviceExt2* This,D3D12_CUBIN_DATA_HANDLE *handle) {
    return This->lpVtbl->DestroyCubinComputeShader(This,handle);
}
static inline HRESULT ID3D12DeviceExt2_GetCudaTextureObject(ID3D12DeviceExt2* This,D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,UINT32 *cuda_texture_handle) {
    return This->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle);
}
static inline HRESULT ID3D12DeviceExt2_GetCudaSurfaceObject(ID3D12DeviceExt2* This,D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,UINT32 *cuda_surface_handle) {
    return This->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle);
}
static inline HRESULT ID3D12DeviceExt2_CaptureUAVInfo(ID3D12DeviceExt2* This,D3D12_UAV_INFO *uav_info) {
    return This->lpVtbl->CaptureUAVInfo(This,uav_info);
}
/*** ID3D12DeviceExt1 methods ***/
static inline HRESULT ID3D12DeviceExt2_CreateResourceFromBorrowedHandle(ID3D12DeviceExt2* This,const D3D12_RESOURCE_DESC1 *desc,UINT64 vk_handle,ID3D12Resource **resource) {
    return This->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource);
}
static inline HRESULT ID3D12DeviceExt2_GetVulkanQueueInfoEx(ID3D12DeviceExt2* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_index,UINT32 *vk_queue_flags,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family);
}
/*** ID3D12DeviceExt2 methods ***/
static inline BOOL ID3D12DeviceExt2_SupportsCubin64bit(ID3D12DeviceExt2* This) {
    return This->lpVtbl->SupportsCubin64bit(This);
}
static inline HRESULT ID3D12DeviceExt2_CreateCubinComputeShaderExV2(ID3D12DeviceExt2* This,D3D12_CREATE_CUBIN_SHADER_PARAMS *params) {
    return This->lpVtbl->CreateCubinComputeShaderExV2(This,params);
}
static inline HRESULT ID3D12DeviceExt2_GetCudaMergedTextureSamplerObject(ID3D12DeviceExt2* This,D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS *params) {
    return This->lpVtbl->GetCudaMergedTextureSamplerObject(This,params);
}
static inline HRESULT ID3D12DeviceExt2_GetCudaIndependentDescriptorObject(ID3D12DeviceExt2* This,D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS *params) {
    return This->lpVtbl->GetCudaIndependentDescriptorObject(This,params);
}
#endif
#endif

#endif


#endif  /* __ID3D12DeviceExt2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DeviceExt3 interface
 */
#ifndef __ID3D12DeviceExt3_INTERFACE_DEFINED__
#define __ID3D12DeviceExt3_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DeviceExt3, 0x3aefa75c, 0xc9f3, 0x4b7f, 0xa1,0x80, 0x5d,0xf6,0x95,0xd0,0x83,0xbf);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3aefa75c-c9f3-4b7f-a180-5df695d083bf")
ID3D12DeviceExt3 : public ID3D12DeviceExt2
{
    virtual BOOL STDMETHODCALLTYPE SupportsAGSExtension(
        D3D12_AGS_EXTENSION agsExtension) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAGSUAVSlot(
        UINT uavSlot) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DeviceExt3, 0x3aefa75c, 0xc9f3, 0x4b7f, 0xa1,0x80, 0x5d,0xf6,0x95,0xd0,0x83,0xbf)
#endif
#else
typedef struct ID3D12DeviceExt3Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DeviceExt methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DeviceExt3 *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    BOOL (STDMETHODCALLTYPE *GetExtensionSupport)(
        ID3D12DeviceExt3 *This,
        D3D12_VK_EXTENSION extension);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderWithName)(
        ID3D12DeviceExt3 *This,
        const void *cubin_data,
        UINT32 cubin_size,
        UINT32 block_x,
        UINT32 block_y,
        UINT32 block_z,
        const char *shader_name,
        D3D12_CUBIN_DATA_HANDLE **handle);

    HRESULT (STDMETHODCALLTYPE *DestroyCubinComputeShader)(
        ID3D12DeviceExt3 *This,
        D3D12_CUBIN_DATA_HANDLE *handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaTextureObject)(
        ID3D12DeviceExt3 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,
        D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,
        UINT32 *cuda_texture_handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaSurfaceObject)(
        ID3D12DeviceExt3 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,
        UINT32 *cuda_surface_handle);

    HRESULT (STDMETHODCALLTYPE *CaptureUAVInfo)(
        ID3D12DeviceExt3 *This,
        D3D12_UAV_INFO *uav_info);

    /*** ID3D12DeviceExt1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateResourceFromBorrowedHandle)(
        ID3D12DeviceExt3 *This,
        const D3D12_RESOURCE_DESC1 *desc,
        UINT64 vk_handle,
        ID3D12Resource **resource);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfoEx)(
        ID3D12DeviceExt3 *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_index,
        UINT32 *vk_queue_flags,
        UINT32 *vk_queue_family);

    /*** ID3D12DeviceExt2 methods ***/
    BOOL (STDMETHODCALLTYPE *SupportsCubin64bit)(
        ID3D12DeviceExt3 *This);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderExV2)(
        ID3D12DeviceExt3 *This,
        D3D12_CREATE_CUBIN_SHADER_PARAMS *params);

    HRESULT (STDMETHODCALLTYPE *GetCudaMergedTextureSamplerObject)(
        ID3D12DeviceExt3 *This,
        D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS *params);

    HRESULT (STDMETHODCALLTYPE *GetCudaIndependentDescriptorObject)(
        ID3D12DeviceExt3 *This,
        D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS *params);

    /*** ID3D12DeviceExt3 methods ***/
    BOOL (STDMETHODCALLTYPE *SupportsAGSExtension)(
        ID3D12DeviceExt3 *This,
        D3D12_AGS_EXTENSION agsExtension);

    HRESULT (STDMETHODCALLTYPE *SetAGSUAVSlot)(
        ID3D12DeviceExt3 *This,
        UINT uavSlot);

    END_INTERFACE
} ID3D12DeviceExt3Vtbl;

interface ID3D12DeviceExt3 {
    CONST_VTBL ID3D12DeviceExt3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DeviceExt3_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DeviceExt3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DeviceExt3_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DeviceExt methods ***/
#define ID3D12DeviceExt3_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DeviceExt3_GetExtensionSupport(This,extension) (This)->lpVtbl->GetExtensionSupport(This,extension)
#define ID3D12DeviceExt3_CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle) (This)->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle)
#define ID3D12DeviceExt3_DestroyCubinComputeShader(This,handle) (This)->lpVtbl->DestroyCubinComputeShader(This,handle)
#define ID3D12DeviceExt3_GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle) (This)->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle)
#define ID3D12DeviceExt3_GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle) (This)->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle)
#define ID3D12DeviceExt3_CaptureUAVInfo(This,uav_info) (This)->lpVtbl->CaptureUAVInfo(This,uav_info)
/*** ID3D12DeviceExt1 methods ***/
#define ID3D12DeviceExt3_CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource) (This)->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource)
#define ID3D12DeviceExt3_GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family)
/*** ID3D12DeviceExt2 methods ***/
#define ID3D12DeviceExt3_SupportsCubin64bit(This) (This)->lpVtbl->SupportsCubin64bit(This)
#define ID3D12DeviceExt3_CreateCubinComputeShaderExV2(This,params) (This)->lpVtbl->CreateCubinComputeShaderExV2(This,params)
#define ID3D12DeviceExt3_GetCudaMergedTextureSamplerObject(This,params) (This)->lpVtbl->GetCudaMergedTextureSamplerObject(This,params)
#define ID3D12DeviceExt3_GetCudaIndependentDescriptorObject(This,params) (This)->lpVtbl->GetCudaIndependentDescriptorObject(This,params)
/*** ID3D12DeviceExt3 methods ***/
#define ID3D12DeviceExt3_SupportsAGSExtension(This,agsExtension) (This)->lpVtbl->SupportsAGSExtension(This,agsExtension)
#define ID3D12DeviceExt3_SetAGSUAVSlot(This,uavSlot) (This)->lpVtbl->SetAGSUAVSlot(This,uavSlot)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DeviceExt3_QueryInterface(ID3D12DeviceExt3* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DeviceExt3_AddRef(ID3D12DeviceExt3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DeviceExt3_Release(ID3D12DeviceExt3* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DeviceExt methods ***/
static inline HRESULT ID3D12DeviceExt3_GetVulkanHandles(ID3D12DeviceExt3* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline BOOL ID3D12DeviceExt3_GetExtensionSupport(ID3D12DeviceExt3* This,D3D12_VK_EXTENSION extension) {
    return This->lpVtbl->GetExtensionSupport(This,extension);
}
static inline HRESULT ID3D12DeviceExt3_CreateCubinComputeShaderWithName(ID3D12DeviceExt3* This,const void *cubin_data,UINT32 cubin_size,UINT32 block_x,UINT32 block_y,UINT32 block_z,const char *shader_name,D3D12_CUBIN_DATA_HANDLE **handle) {
    return This->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle);
}
static inline HRESULT ID3D12DeviceExt3_DestroyCubinComputeShader(ID3D12DeviceExt3* This,D3D12_CUBIN_DATA_HANDLE *handle) {
    return This->lpVtbl->DestroyCubinComputeShader(This,handle);
}
static inline HRESULT ID3D12DeviceExt3_GetCudaTextureObject(ID3D12DeviceExt3* This,D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,UINT32 *cuda_texture_handle) {
    return This->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle);
}
static inline HRESULT ID3D12DeviceExt3_GetCudaSurfaceObject(ID3D12DeviceExt3* This,D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,UINT32 *cuda_surface_handle) {
    return This->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle);
}
static inline HRESULT ID3D12DeviceExt3_CaptureUAVInfo(ID3D12DeviceExt3* This,D3D12_UAV_INFO *uav_info) {
    return This->lpVtbl->CaptureUAVInfo(This,uav_info);
}
/*** ID3D12DeviceExt1 methods ***/
static inline HRESULT ID3D12DeviceExt3_CreateResourceFromBorrowedHandle(ID3D12DeviceExt3* This,const D3D12_RESOURCE_DESC1 *desc,UINT64 vk_handle,ID3D12Resource **resource) {
    return This->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource);
}
static inline HRESULT ID3D12DeviceExt3_GetVulkanQueueInfoEx(ID3D12DeviceExt3* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_index,UINT32 *vk_queue_flags,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family);
}
/*** ID3D12DeviceExt2 methods ***/
static inline BOOL ID3D12DeviceExt3_SupportsCubin64bit(ID3D12DeviceExt3* This) {
    return This->lpVtbl->SupportsCubin64bit(This);
}
static inline HRESULT ID3D12DeviceExt3_CreateCubinComputeShaderExV2(ID3D12DeviceExt3* This,D3D12_CREATE_CUBIN_SHADER_PARAMS *params) {
    return This->lpVtbl->CreateCubinComputeShaderExV2(This,params);
}
static inline HRESULT ID3D12DeviceExt3_GetCudaMergedTextureSamplerObject(ID3D12DeviceExt3* This,D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS *params) {
    return This->lpVtbl->GetCudaMergedTextureSamplerObject(This,params);
}
static inline HRESULT ID3D12DeviceExt3_GetCudaIndependentDescriptorObject(ID3D12DeviceExt3* This,D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS *params) {
    return This->lpVtbl->GetCudaIndependentDescriptorObject(This,params);
}
/*** ID3D12DeviceExt3 methods ***/
static inline BOOL ID3D12DeviceExt3_SupportsAGSExtension(ID3D12DeviceExt3* This,D3D12_AGS_EXTENSION agsExtension) {
    return This->lpVtbl->SupportsAGSExtension(This,agsExtension);
}
static inline HRESULT ID3D12DeviceExt3_SetAGSUAVSlot(ID3D12DeviceExt3* This,UINT uavSlot) {
    return This->lpVtbl->SetAGSUAVSlot(This,uavSlot);
}
#endif
#endif

#endif


#endif  /* __ID3D12DeviceExt3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID3D12DeviceExt4 interface
 */
#ifndef __ID3D12DeviceExt4_INTERFACE_DEFINED__
#define __ID3D12DeviceExt4_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID3D12DeviceExt4, 0xa91b5617, 0xa06a, 0x4d6f, 0xb4,0x37, 0x03,0xeb,0xbe,0xf9,0x14,0x15);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a91b5617-a06a-4d6f-b437-03ebbef91415")
ID3D12DeviceExt4 : public ID3D12DeviceExt3
{
    virtual BOOL STDMETHODCALLTYPE IsNvShaderExtnOpCodeSupported(
        UINT32 op_code) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNvShaderExtnSlotSpace(
        UINT32 uav_slot,
        UINT32 uav_space,
        BOOL local_thread) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID3D12DeviceExt4, 0xa91b5617, 0xa06a, 0x4d6f, 0xb4,0x37, 0x03,0xeb,0xbe,0xf9,0x14,0x15)
#endif
#else
typedef struct ID3D12DeviceExt4Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID3D12DeviceExt methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVulkanHandles)(
        ID3D12DeviceExt4 *This,
        VkInstance *vk_instance,
        VkPhysicalDevice *vk_physical_device,
        VkDevice *vk_device);

    BOOL (STDMETHODCALLTYPE *GetExtensionSupport)(
        ID3D12DeviceExt4 *This,
        D3D12_VK_EXTENSION extension);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderWithName)(
        ID3D12DeviceExt4 *This,
        const void *cubin_data,
        UINT32 cubin_size,
        UINT32 block_x,
        UINT32 block_y,
        UINT32 block_z,
        const char *shader_name,
        D3D12_CUBIN_DATA_HANDLE **handle);

    HRESULT (STDMETHODCALLTYPE *DestroyCubinComputeShader)(
        ID3D12DeviceExt4 *This,
        D3D12_CUBIN_DATA_HANDLE *handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaTextureObject)(
        ID3D12DeviceExt4 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,
        D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,
        UINT32 *cuda_texture_handle);

    HRESULT (STDMETHODCALLTYPE *GetCudaSurfaceObject)(
        ID3D12DeviceExt4 *This,
        D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,
        UINT32 *cuda_surface_handle);

    HRESULT (STDMETHODCALLTYPE *CaptureUAVInfo)(
        ID3D12DeviceExt4 *This,
        D3D12_UAV_INFO *uav_info);

    /*** ID3D12DeviceExt1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateResourceFromBorrowedHandle)(
        ID3D12DeviceExt4 *This,
        const D3D12_RESOURCE_DESC1 *desc,
        UINT64 vk_handle,
        ID3D12Resource **resource);

    HRESULT (STDMETHODCALLTYPE *GetVulkanQueueInfoEx)(
        ID3D12DeviceExt4 *This,
        ID3D12CommandQueue *queue,
        VkQueue *vk_queue,
        UINT32 *vk_queue_index,
        UINT32 *vk_queue_flags,
        UINT32 *vk_queue_family);

    /*** ID3D12DeviceExt2 methods ***/
    BOOL (STDMETHODCALLTYPE *SupportsCubin64bit)(
        ID3D12DeviceExt4 *This);

    HRESULT (STDMETHODCALLTYPE *CreateCubinComputeShaderExV2)(
        ID3D12DeviceExt4 *This,
        D3D12_CREATE_CUBIN_SHADER_PARAMS *params);

    HRESULT (STDMETHODCALLTYPE *GetCudaMergedTextureSamplerObject)(
        ID3D12DeviceExt4 *This,
        D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS *params);

    HRESULT (STDMETHODCALLTYPE *GetCudaIndependentDescriptorObject)(
        ID3D12DeviceExt4 *This,
        D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS *params);

    /*** ID3D12DeviceExt3 methods ***/
    BOOL (STDMETHODCALLTYPE *SupportsAGSExtension)(
        ID3D12DeviceExt4 *This,
        D3D12_AGS_EXTENSION agsExtension);

    HRESULT (STDMETHODCALLTYPE *SetAGSUAVSlot)(
        ID3D12DeviceExt4 *This,
        UINT uavSlot);

    /*** ID3D12DeviceExt4 methods ***/
    BOOL (STDMETHODCALLTYPE *IsNvShaderExtnOpCodeSupported)(
        ID3D12DeviceExt4 *This,
        UINT32 op_code);

    HRESULT (STDMETHODCALLTYPE *SetNvShaderExtnSlotSpace)(
        ID3D12DeviceExt4 *This,
        UINT32 uav_slot,
        UINT32 uav_space,
        BOOL local_thread);

    END_INTERFACE
} ID3D12DeviceExt4Vtbl;

interface ID3D12DeviceExt4 {
    CONST_VTBL ID3D12DeviceExt4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID3D12DeviceExt4_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define ID3D12DeviceExt4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID3D12DeviceExt4_Release(This) (This)->lpVtbl->Release(This)
/*** ID3D12DeviceExt methods ***/
#define ID3D12DeviceExt4_GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device) (This)->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device)
#define ID3D12DeviceExt4_GetExtensionSupport(This,extension) (This)->lpVtbl->GetExtensionSupport(This,extension)
#define ID3D12DeviceExt4_CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle) (This)->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle)
#define ID3D12DeviceExt4_DestroyCubinComputeShader(This,handle) (This)->lpVtbl->DestroyCubinComputeShader(This,handle)
#define ID3D12DeviceExt4_GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle) (This)->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle)
#define ID3D12DeviceExt4_GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle) (This)->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle)
#define ID3D12DeviceExt4_CaptureUAVInfo(This,uav_info) (This)->lpVtbl->CaptureUAVInfo(This,uav_info)
/*** ID3D12DeviceExt1 methods ***/
#define ID3D12DeviceExt4_CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource) (This)->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource)
#define ID3D12DeviceExt4_GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family) (This)->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family)
/*** ID3D12DeviceExt2 methods ***/
#define ID3D12DeviceExt4_SupportsCubin64bit(This) (This)->lpVtbl->SupportsCubin64bit(This)
#define ID3D12DeviceExt4_CreateCubinComputeShaderExV2(This,params) (This)->lpVtbl->CreateCubinComputeShaderExV2(This,params)
#define ID3D12DeviceExt4_GetCudaMergedTextureSamplerObject(This,params) (This)->lpVtbl->GetCudaMergedTextureSamplerObject(This,params)
#define ID3D12DeviceExt4_GetCudaIndependentDescriptorObject(This,params) (This)->lpVtbl->GetCudaIndependentDescriptorObject(This,params)
/*** ID3D12DeviceExt3 methods ***/
#define ID3D12DeviceExt4_SupportsAGSExtension(This,agsExtension) (This)->lpVtbl->SupportsAGSExtension(This,agsExtension)
#define ID3D12DeviceExt4_SetAGSUAVSlot(This,uavSlot) (This)->lpVtbl->SetAGSUAVSlot(This,uavSlot)
/*** ID3D12DeviceExt4 methods ***/
#define ID3D12DeviceExt4_IsNvShaderExtnOpCodeSupported(This,op_code) (This)->lpVtbl->IsNvShaderExtnOpCodeSupported(This,op_code)
#define ID3D12DeviceExt4_SetNvShaderExtnSlotSpace(This,uav_slot,uav_space,local_thread) (This)->lpVtbl->SetNvShaderExtnSlotSpace(This,uav_slot,uav_space,local_thread)
#else
/*** IUnknown methods ***/
static inline HRESULT ID3D12DeviceExt4_QueryInterface(ID3D12DeviceExt4* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG ID3D12DeviceExt4_AddRef(ID3D12DeviceExt4* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID3D12DeviceExt4_Release(ID3D12DeviceExt4* This) {
    return This->lpVtbl->Release(This);
}
/*** ID3D12DeviceExt methods ***/
static inline HRESULT ID3D12DeviceExt4_GetVulkanHandles(ID3D12DeviceExt4* This,VkInstance *vk_instance,VkPhysicalDevice *vk_physical_device,VkDevice *vk_device) {
    return This->lpVtbl->GetVulkanHandles(This,vk_instance,vk_physical_device,vk_device);
}
static inline BOOL ID3D12DeviceExt4_GetExtensionSupport(ID3D12DeviceExt4* This,D3D12_VK_EXTENSION extension) {
    return This->lpVtbl->GetExtensionSupport(This,extension);
}
static inline HRESULT ID3D12DeviceExt4_CreateCubinComputeShaderWithName(ID3D12DeviceExt4* This,const void *cubin_data,UINT32 cubin_size,UINT32 block_x,UINT32 block_y,UINT32 block_z,const char *shader_name,D3D12_CUBIN_DATA_HANDLE **handle) {
    return This->lpVtbl->CreateCubinComputeShaderWithName(This,cubin_data,cubin_size,block_x,block_y,block_z,shader_name,handle);
}
static inline HRESULT ID3D12DeviceExt4_DestroyCubinComputeShader(ID3D12DeviceExt4* This,D3D12_CUBIN_DATA_HANDLE *handle) {
    return This->lpVtbl->DestroyCubinComputeShader(This,handle);
}
static inline HRESULT ID3D12DeviceExt4_GetCudaTextureObject(ID3D12DeviceExt4* This,D3D12_CPU_DESCRIPTOR_HANDLE srv_handle,D3D12_CPU_DESCRIPTOR_HANDLE sampler_handle,UINT32 *cuda_texture_handle) {
    return This->lpVtbl->GetCudaTextureObject(This,srv_handle,sampler_handle,cuda_texture_handle);
}
static inline HRESULT ID3D12DeviceExt4_GetCudaSurfaceObject(ID3D12DeviceExt4* This,D3D12_CPU_DESCRIPTOR_HANDLE uav_handle,UINT32 *cuda_surface_handle) {
    return This->lpVtbl->GetCudaSurfaceObject(This,uav_handle,cuda_surface_handle);
}
static inline HRESULT ID3D12DeviceExt4_CaptureUAVInfo(ID3D12DeviceExt4* This,D3D12_UAV_INFO *uav_info) {
    return This->lpVtbl->CaptureUAVInfo(This,uav_info);
}
/*** ID3D12DeviceExt1 methods ***/
static inline HRESULT ID3D12DeviceExt4_CreateResourceFromBorrowedHandle(ID3D12DeviceExt4* This,const D3D12_RESOURCE_DESC1 *desc,UINT64 vk_handle,ID3D12Resource **resource) {
    return This->lpVtbl->CreateResourceFromBorrowedHandle(This,desc,vk_handle,resource);
}
static inline HRESULT ID3D12DeviceExt4_GetVulkanQueueInfoEx(ID3D12DeviceExt4* This,ID3D12CommandQueue *queue,VkQueue *vk_queue,UINT32 *vk_queue_index,UINT32 *vk_queue_flags,UINT32 *vk_queue_family) {
    return This->lpVtbl->GetVulkanQueueInfoEx(This,queue,vk_queue,vk_queue_index,vk_queue_flags,vk_queue_family);
}
/*** ID3D12DeviceExt2 methods ***/
static inline BOOL ID3D12DeviceExt4_SupportsCubin64bit(ID3D12DeviceExt4* This) {
    return This->lpVtbl->SupportsCubin64bit(This);
}
static inline HRESULT ID3D12DeviceExt4_CreateCubinComputeShaderExV2(ID3D12DeviceExt4* This,D3D12_CREATE_CUBIN_SHADER_PARAMS *params) {
    return This->lpVtbl->CreateCubinComputeShaderExV2(This,params);
}
static inline HRESULT ID3D12DeviceExt4_GetCudaMergedTextureSamplerObject(ID3D12DeviceExt4* This,D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS *params) {
    return This->lpVtbl->GetCudaMergedTextureSamplerObject(This,params);
}
static inline HRESULT ID3D12DeviceExt4_GetCudaIndependentDescriptorObject(ID3D12DeviceExt4* This,D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS *params) {
    return This->lpVtbl->GetCudaIndependentDescriptorObject(This,params);
}
/*** ID3D12DeviceExt3 methods ***/
static inline BOOL ID3D12DeviceExt4_SupportsAGSExtension(ID3D12DeviceExt4* This,D3D12_AGS_EXTENSION agsExtension) {
    return This->lpVtbl->SupportsAGSExtension(This,agsExtension);
}
static inline HRESULT ID3D12DeviceExt4_SetAGSUAVSlot(ID3D12DeviceExt4* This,UINT uavSlot) {
    return This->lpVtbl->SetAGSUAVSlot(This,uavSlot);
}
/*** ID3D12DeviceExt4 methods ***/
static inline BOOL ID3D12DeviceExt4_IsNvShaderExtnOpCodeSupported(ID3D12DeviceExt4* This,UINT32 op_code) {
    return This->lpVtbl->IsNvShaderExtnOpCodeSupported(This,op_code);
}
static inline HRESULT ID3D12DeviceExt4_SetNvShaderExtnSlotSpace(ID3D12DeviceExt4* This,UINT32 uav_slot,UINT32 uav_space,BOOL local_thread) {
    return This->lpVtbl->SetNvShaderExtnSlotSpace(This,uav_slot,uav_space,local_thread);
}
#endif
#endif

#endif


#endif  /* __ID3D12DeviceExt4_INTERFACE_DEFINED__ */

struct AmdAntiLagAPIData_v1 {
    UINT uiSize;
    UINT uiVersion;
    UINT eMode;
    const char *sControlStr;
    UINT uiControlStrLength;
    UINT maxFPS;
};
struct AmdAntiLagAPIData_v2 {
    UINT uiSize;
    UINT uiVersion;
    struct {
        UINT unused0 : 1;
        UINT unused1 : 1;
        UINT signalFgFrameType : 1;
        UINT isInterpolatedFrame : 1;
        UINT signalGetUserInputIdx : 1;
        UINT signalEndOfFrameIdx : 1;
        UINT reserved : 26;
    } flags;
    UINT64 iiFrameIdx;
    UINT64 uiiReserved[19];
};
/*****************************************************************************
 * IAmdExtAntiLagApi interface
 */
#ifndef __IAmdExtAntiLagApi_INTERFACE_DEFINED__
#define __IAmdExtAntiLagApi_INTERFACE_DEFINED__

DEFINE_GUID(IID_IAmdExtAntiLagApi, 0x44085fbe, 0xe839, 0x40c5, 0xbf,0x38, 0x0e,0xbc,0x5a,0xb4,0xd0,0xa6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("44085fbe-e839-40c5-bf38-0ebc5ab4d0a6")
IAmdExtAntiLagApi : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE UpdateAntiLagState(
        void *pData) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IAmdExtAntiLagApi, 0x44085fbe, 0xe839, 0x40c5, 0xbf,0x38, 0x0e,0xbc,0x5a,0xb4,0xd0,0xa6)
#endif
#else
typedef struct IAmdExtAntiLagApiVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IAmdExtAntiLagApi methods ***/
    HRESULT (STDMETHODCALLTYPE *UpdateAntiLagState)(
        IAmdExtAntiLagApi *This,
        void *pData);

    END_INTERFACE
} IAmdExtAntiLagApiVtbl;

interface IAmdExtAntiLagApi {
    CONST_VTBL IAmdExtAntiLagApiVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IAmdExtAntiLagApi_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IAmdExtAntiLagApi_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IAmdExtAntiLagApi_Release(This) (This)->lpVtbl->Release(This)
/*** IAmdExtAntiLagApi methods ***/
#define IAmdExtAntiLagApi_UpdateAntiLagState(This,pData) (This)->lpVtbl->UpdateAntiLagState(This,pData)
#else
/*** IUnknown methods ***/
static inline HRESULT IAmdExtAntiLagApi_QueryInterface(IAmdExtAntiLagApi* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IAmdExtAntiLagApi_AddRef(IAmdExtAntiLagApi* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IAmdExtAntiLagApi_Release(IAmdExtAntiLagApi* This) {
    return This->lpVtbl->Release(This);
}
/*** IAmdExtAntiLagApi methods ***/
static inline HRESULT IAmdExtAntiLagApi_UpdateAntiLagState(IAmdExtAntiLagApi* This,void *pData) {
    return This->lpVtbl->UpdateAntiLagState(This,pData);
}
#endif
#endif

#endif


#endif  /* __IAmdExtAntiLagApi_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __vkd3d_device_vkd3d_ext_h__ */
