/*** Autogenerated by WIDL 11.8 from /home/teapot/Downloads/d1/wine/include/d3d9on12.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 __d3d9on12_h__
#define __d3d9on12_h__

/* Forward declarations */

#ifndef __IDirect3DDevice9On12_FWD_DEFINED__
#define __IDirect3DDevice9On12_FWD_DEFINED__
typedef interface IDirect3DDevice9On12 IDirect3DDevice9On12;
#ifdef __cplusplus
interface IDirect3DDevice9On12;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <d3d12.h>

#ifdef __cplusplus
extern "C" {
#endif

#include <d3d9.h>
#ifndef __IDirect3D9_FWD_DEFINED__
#define __IDirect3D9_FWD_DEFINED__
typedef interface IDirect3D9 IDirect3D9;
#ifdef __cplusplus
interface IDirect3D9;
#endif /* __cplusplus */
#endif

#ifndef __IDirect3DResource9_FWD_DEFINED__
#define __IDirect3DResource9_FWD_DEFINED__
typedef interface IDirect3DResource9 IDirect3DResource9;
#ifdef __cplusplus
interface IDirect3DResource9;
#endif /* __cplusplus */
#endif

typedef struct D3D9ON12_ARGS {
    BOOL Enable9On12;
    IUnknown *pD3D12Device;
    IUnknown * ppD3D12Queues[2];
    UINT NumQueues;
    UINT NodeMask;
} D3D9ON12_ARGS;
typedef IDirect3D9 * (__stdcall *PFN_Direct3DCreate9On12)(UINT sdk_version,D3D9ON12_ARGS *d3d9on12_args,UINT d3d9on12_args_count);
IDirect3D9 * __stdcall  Direct3DCreate9On12(UINT a,D3D9ON12_ARGS *b,UINT c);

typedef struct IDirect3DDevice9On12 *LPDIRECT3DDEVICE9ON12;
typedef struct IDirect3DDevice9On12 *PDIRECT3DDEVICE9ON12;
/*****************************************************************************
 * IDirect3DDevice9On12 interface
 */
#ifndef __IDirect3DDevice9On12_INTERFACE_DEFINED__
#define __IDirect3DDevice9On12_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDirect3DDevice9On12, 0xe7fda234, 0xb589, 0x4049, 0x94,0x0d, 0x88,0x78,0x97,0x75,0x31,0xc8);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e7fda234-b589-4049-940d-8878977531c8")
IDirect3DDevice9On12 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetD3D12Device(
        REFIID riid,
        void **out) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnwrapUnderlyingResource(
        IDirect3DResource9 *resource,
        ID3D12CommandQueue *queue,
        REFIID riid,
        void **out) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReturnUnderlyingResource(
        IDirect3DResource9 *resource,
        UINT fence_count,
        UINT64 *signal_values,
        ID3D12Fence **fences) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDirect3DDevice9On12, 0xe7fda234, 0xb589, 0x4049, 0x94,0x0d, 0x88,0x78,0x97,0x75,0x31,0xc8)
#endif
#else
typedef struct IDirect3DDevice9On12Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDirect3DDevice9On12 *This,
        REFIID riid,
        void **ppvObject);

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

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

    /*** IDirect3DDevice9On12 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetD3D12Device)(
        IDirect3DDevice9On12 *This,
        REFIID riid,
        void **out);

    HRESULT (STDMETHODCALLTYPE *UnwrapUnderlyingResource)(
        IDirect3DDevice9On12 *This,
        IDirect3DResource9 *resource,
        ID3D12CommandQueue *queue,
        REFIID riid,
        void **out);

    HRESULT (STDMETHODCALLTYPE *ReturnUnderlyingResource)(
        IDirect3DDevice9On12 *This,
        IDirect3DResource9 *resource,
        UINT fence_count,
        UINT64 *signal_values,
        ID3D12Fence **fences);

    END_INTERFACE
} IDirect3DDevice9On12Vtbl;

interface IDirect3DDevice9On12 {
    CONST_VTBL IDirect3DDevice9On12Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDirect3DDevice9On12_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDirect3DDevice9On12_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDirect3DDevice9On12_Release(This) (This)->lpVtbl->Release(This)
/*** IDirect3DDevice9On12 methods ***/
#define IDirect3DDevice9On12_GetD3D12Device(This,riid,out) (This)->lpVtbl->GetD3D12Device(This,riid,out)
#define IDirect3DDevice9On12_UnwrapUnderlyingResource(This,resource,queue,riid,out) (This)->lpVtbl->UnwrapUnderlyingResource(This,resource,queue,riid,out)
#define IDirect3DDevice9On12_ReturnUnderlyingResource(This,resource,fence_count,signal_values,fences) (This)->lpVtbl->ReturnUnderlyingResource(This,resource,fence_count,signal_values,fences)
#else
/*** IUnknown methods ***/
static inline HRESULT IDirect3DDevice9On12_QueryInterface(IDirect3DDevice9On12* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IDirect3DDevice9On12_AddRef(IDirect3DDevice9On12* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDirect3DDevice9On12_Release(IDirect3DDevice9On12* This) {
    return This->lpVtbl->Release(This);
}
/*** IDirect3DDevice9On12 methods ***/
static inline HRESULT IDirect3DDevice9On12_GetD3D12Device(IDirect3DDevice9On12* This,REFIID riid,void **out) {
    return This->lpVtbl->GetD3D12Device(This,riid,out);
}
static inline HRESULT IDirect3DDevice9On12_UnwrapUnderlyingResource(IDirect3DDevice9On12* This,IDirect3DResource9 *resource,ID3D12CommandQueue *queue,REFIID riid,void **out) {
    return This->lpVtbl->UnwrapUnderlyingResource(This,resource,queue,riid,out);
}
static inline HRESULT IDirect3DDevice9On12_ReturnUnderlyingResource(IDirect3DDevice9On12* This,IDirect3DResource9 *resource,UINT fence_count,UINT64 *signal_values,ID3D12Fence **fences) {
    return This->lpVtbl->ReturnUnderlyingResource(This,resource,fence_count,signal_values,fences);
}
#endif
#endif

#endif


#endif  /* __IDirect3DDevice9On12_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __d3d9on12_h__ */
