/*** Autogenerated by WIDL 11.10 from ../include/vkd3d_dxcapi.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_dxcapi_h__
#define __vkd3d_dxcapi_h__

/* Forward declarations */

#ifndef __IUnknown_FWD_DEFINED__
#define __IUnknown_FWD_DEFINED__
typedef interface IUnknown IUnknown;
#ifdef __cplusplus
interface IUnknown;
#endif /* __cplusplus */
#endif

#ifndef __IDxcBlob_FWD_DEFINED__
#define __IDxcBlob_FWD_DEFINED__
typedef interface IDxcBlob IDxcBlob;
#ifdef __cplusplus
interface IDxcBlob;
#endif /* __cplusplus */
#endif

#ifndef __IDxcBlobEncoding_FWD_DEFINED__
#define __IDxcBlobEncoding_FWD_DEFINED__
typedef interface IDxcBlobEncoding IDxcBlobEncoding;
#ifdef __cplusplus
interface IDxcBlobEncoding;
#endif /* __cplusplus */
#endif

#ifndef __IDxcBlobUtf8_FWD_DEFINED__
#define __IDxcBlobUtf8_FWD_DEFINED__
typedef interface IDxcBlobUtf8 IDxcBlobUtf8;
#ifdef __cplusplus
interface IDxcBlobUtf8;
#endif /* __cplusplus */
#endif

#ifndef __IDxcBlobWide_FWD_DEFINED__
#define __IDxcBlobWide_FWD_DEFINED__
typedef interface IDxcBlobWide IDxcBlobWide;
#ifdef __cplusplus
interface IDxcBlobWide;
#endif /* __cplusplus */
#endif

#ifndef __IDxcIncludeHandler_FWD_DEFINED__
#define __IDxcIncludeHandler_FWD_DEFINED__
typedef interface IDxcIncludeHandler IDxcIncludeHandler;
#ifdef __cplusplus
interface IDxcIncludeHandler;
#endif /* __cplusplus */
#endif

#ifndef __IDxcOperationResult_FWD_DEFINED__
#define __IDxcOperationResult_FWD_DEFINED__
typedef interface IDxcOperationResult IDxcOperationResult;
#ifdef __cplusplus
interface IDxcOperationResult;
#endif /* __cplusplus */
#endif

#ifndef __IDxcResult_FWD_DEFINED__
#define __IDxcResult_FWD_DEFINED__
typedef interface IDxcResult IDxcResult;
#ifdef __cplusplus
interface IDxcResult;
#endif /* __cplusplus */
#endif

#ifndef __IDxcCompilerArgs_FWD_DEFINED__
#define __IDxcCompilerArgs_FWD_DEFINED__
typedef interface IDxcCompilerArgs IDxcCompilerArgs;
#ifdef __cplusplus
interface IDxcCompilerArgs;
#endif /* __cplusplus */
#endif

#ifndef __IDxcCompiler_FWD_DEFINED__
#define __IDxcCompiler_FWD_DEFINED__
typedef interface IDxcCompiler IDxcCompiler;
#ifdef __cplusplus
interface IDxcCompiler;
#endif /* __cplusplus */
#endif

#ifndef __IDxcCompiler3_FWD_DEFINED__
#define __IDxcCompiler3_FWD_DEFINED__
typedef interface IDxcCompiler3 IDxcCompiler3;
#ifdef __cplusplus
interface IDxcCompiler3;
#endif /* __cplusplus */
#endif

#ifndef __IDxcUtils_FWD_DEFINED__
#define __IDxcUtils_FWD_DEFINED__
typedef interface IDxcUtils IDxcUtils;
#ifdef __cplusplus
interface IDxcUtils;
#endif /* __cplusplus */
#endif

#ifndef __IDxbcConverter_FWD_DEFINED__
#define __IDxbcConverter_FWD_DEFINED__
typedef interface IDxbcConverter IDxbcConverter;
#ifdef __cplusplus
interface IDxbcConverter;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <vkd3d_windows.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __VKD3D_UNKNOWN_H
#define __VKD3D_UNKNOWN_H
#if 0
typedef IID *REFIID;
typedef IID *REFGUID;
typedef IID *REFCLSID;
#endif
#if !defined(_WIN32)
typedef void *HWND;
typedef void *HMODULE;
typedef struct LUID {
    DWORD LowPart;
    LONG HighPart;
} LUID;
typedef struct _RECT {
    LONG left;
    LONG top;
    LONG right;
    LONG bottom;
} RECT;
#endif
/*****************************************************************************
 * IUnknown interface
 */
#ifndef __IUnknown_INTERFACE_DEFINED__
#define __IUnknown_INTERFACE_DEFINED__

DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000000-0000-0000-c000-000000000046")
IUnknown
{

    BEGIN_INTERFACE

    virtual HRESULT STDMETHODCALLTYPE QueryInterface(
        REFIID riid,
        void **object) = 0;

    virtual ULONG STDMETHODCALLTYPE AddRef(
        ) = 0;

    virtual ULONG STDMETHODCALLTYPE Release(
        ) = 0;

    END_INTERFACE

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IUnknown, 0x00000000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46)
#endif
#else
typedef struct IUnknownVtbl {
    BEGIN_INTERFACE

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

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

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

    END_INTERFACE
} IUnknownVtbl;

interface IUnknown {
    CONST_VTBL IUnknownVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IUnknown_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IUnknown_Release(This) (This)->lpVtbl->Release(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IUnknown_QueryInterface(IUnknown* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IUnknown_AddRef(IUnknown* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IUnknown_Release(IUnknown* This) {
    return This->lpVtbl->Release(This);
}
#endif
#endif

#endif


#endif  /* __IUnknown_INTERFACE_DEFINED__ */

#endif   /* __VKD3D_UNKNOWN_H */
typedef HRESULT (__stdcall *DxcCreateInstanceProc)(REFCLSID clsid,REFIID iid,void **object);
HRESULT __stdcall  DxcCreateInstance(REFCLSID clsid,REFIID iid,void **object);

DEFINE_GUID(CLSID_DxcCompiler, 0x73e22d93, 0xe6ce, 0x47f3, 0xb5, 0xbf, 0xf0, 0x66, 0x4f, 0x39, 0xc1, 0xb0);
DEFINE_GUID(CLSID_DxcUtils, 0x6245d6af, 0x66e0, 0x48fd, 0x80, 0xb4, 0x4d, 0x27, 0x17, 0x96, 0x74, 0x8c);
DEFINE_GUID(CLSID_DxbcConverter, 0x4900391e, 0xb752, 0x4edd, 0xa8, 0x85, 0x6f, 0xb7, 0x6e, 0x25, 0xad, 0xdb);
#define DXC_CP_UTF8 65001
#define DXC_CP_UTF16 1200
#define DXC_CP_UTF32 12000
struct IMalloc;
typedef struct IMalloc IMalloc;
struct IStream;
typedef struct IStream IStream;
typedef enum DXC_OUT_KIND {
    DXC_OUT_NONE = 0,
    DXC_OUT_OBJECT = 1,
    DXC_OUT_ERRORS = 2,
    DXC_OUT_PDB = 3,
    DXC_OUT_SHADER_HASH = 4,
    DXC_OUT_DISASSEMBLY = 5,
    DXC_OUT_HLSL = 6,
    DXC_OUT_TEXT = 7,
    DXC_OUT_REFLECTION = 8,
    DXC_OUT_ROOT_SIGNATURE = 9,
    DXC_OUT_EXTRA_OUTPUTS = 10,
    DXC_OUT_REMARKS = 11,
    DXC_OUT_TIME_REPORT = 12,
    DXC_OUT_TIME_TRACE = 13,
    DXC_OUT_FORCE_DWORD = 0xffffffff
} DXC_OUT_KIND;
typedef struct DxcBuffer {
    const void *Ptr;
    SIZE_T Size;
    UINT Encoding;
} DxcBuffer;
typedef struct DxcDefine {
    LPCWSTR Name;
    LPCWSTR Value;
} DxcDefine;
/*****************************************************************************
 * IDxcBlob interface
 */
#ifndef __IDxcBlob_INTERFACE_DEFINED__
#define __IDxcBlob_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcBlob, 0x8ba5fb08, 0x5195, 0x40e2, 0xac,0x58, 0x0d,0x98,0x9c,0x3a,0x01,0x02);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8ba5fb08-5195-40e2-ac58-0d989c3a0102")
IDxcBlob : public IUnknown
{
    virtual void * STDMETHODCALLTYPE GetBufferPointer(
        ) = 0;

    virtual SIZE_T STDMETHODCALLTYPE GetBufferSize(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcBlob, 0x8ba5fb08, 0x5195, 0x40e2, 0xac,0x58, 0x0d,0x98,0x9c,0x3a,0x01,0x02)
#endif
#else
typedef struct IDxcBlobVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcBlob methods ***/
    void * (STDMETHODCALLTYPE *GetBufferPointer)(
        IDxcBlob *This);

    SIZE_T (STDMETHODCALLTYPE *GetBufferSize)(
        IDxcBlob *This);

    END_INTERFACE
} IDxcBlobVtbl;

interface IDxcBlob {
    CONST_VTBL IDxcBlobVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcBlob_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcBlob_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcBlob_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcBlob methods ***/
#define IDxcBlob_GetBufferPointer(This) (This)->lpVtbl->GetBufferPointer(This)
#define IDxcBlob_GetBufferSize(This) (This)->lpVtbl->GetBufferSize(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcBlob_QueryInterface(IDxcBlob* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcBlob_AddRef(IDxcBlob* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcBlob_Release(IDxcBlob* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcBlob methods ***/
static inline void * IDxcBlob_GetBufferPointer(IDxcBlob* This) {
    return This->lpVtbl->GetBufferPointer(This);
}
static inline SIZE_T IDxcBlob_GetBufferSize(IDxcBlob* This) {
    return This->lpVtbl->GetBufferSize(This);
}
#endif
#endif

#endif


#endif  /* __IDxcBlob_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcBlobEncoding interface
 */
#ifndef __IDxcBlobEncoding_INTERFACE_DEFINED__
#define __IDxcBlobEncoding_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcBlobEncoding, 0x7241d424, 0x2646, 0x4191, 0x97,0xc0, 0x98,0xe9,0x6e,0x42,0xfc,0x68);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7241d424-2646-4191-97c0-98e96e42fc68")
IDxcBlobEncoding : public IDxcBlob
{
    virtual HRESULT STDMETHODCALLTYPE GetEncoding(
        BOOL *known,
        UINT32 *code_page) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcBlobEncoding, 0x7241d424, 0x2646, 0x4191, 0x97,0xc0, 0x98,0xe9,0x6e,0x42,0xfc,0x68)
#endif
#else
typedef struct IDxcBlobEncodingVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcBlob methods ***/
    void * (STDMETHODCALLTYPE *GetBufferPointer)(
        IDxcBlobEncoding *This);

    SIZE_T (STDMETHODCALLTYPE *GetBufferSize)(
        IDxcBlobEncoding *This);

    /*** IDxcBlobEncoding methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEncoding)(
        IDxcBlobEncoding *This,
        BOOL *known,
        UINT32 *code_page);

    END_INTERFACE
} IDxcBlobEncodingVtbl;

interface IDxcBlobEncoding {
    CONST_VTBL IDxcBlobEncodingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcBlobEncoding_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcBlobEncoding_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcBlobEncoding_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcBlob methods ***/
#define IDxcBlobEncoding_GetBufferPointer(This) (This)->lpVtbl->GetBufferPointer(This)
#define IDxcBlobEncoding_GetBufferSize(This) (This)->lpVtbl->GetBufferSize(This)
/*** IDxcBlobEncoding methods ***/
#define IDxcBlobEncoding_GetEncoding(This,known,code_page) (This)->lpVtbl->GetEncoding(This,known,code_page)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcBlobEncoding_QueryInterface(IDxcBlobEncoding* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcBlobEncoding_AddRef(IDxcBlobEncoding* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcBlobEncoding_Release(IDxcBlobEncoding* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcBlob methods ***/
static inline void * IDxcBlobEncoding_GetBufferPointer(IDxcBlobEncoding* This) {
    return This->lpVtbl->GetBufferPointer(This);
}
static inline SIZE_T IDxcBlobEncoding_GetBufferSize(IDxcBlobEncoding* This) {
    return This->lpVtbl->GetBufferSize(This);
}
/*** IDxcBlobEncoding methods ***/
static inline HRESULT IDxcBlobEncoding_GetEncoding(IDxcBlobEncoding* This,BOOL *known,UINT32 *code_page) {
    return This->lpVtbl->GetEncoding(This,known,code_page);
}
#endif
#endif

#endif


#endif  /* __IDxcBlobEncoding_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcBlobUtf8 interface
 */
#ifndef __IDxcBlobUtf8_INTERFACE_DEFINED__
#define __IDxcBlobUtf8_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcBlobUtf8, 0x3da636c9, 0xba71, 0x4024, 0xa3,0x01, 0x30,0xcb,0xf1,0x25,0x30,0x5b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3da636c9-ba71-4024-a301-30cbf125305b")
IDxcBlobUtf8 : public IDxcBlobEncoding
{
    virtual LPCSTR STDMETHODCALLTYPE GetStringPointer(
        ) = 0;

    virtual SIZE_T STDMETHODCALLTYPE GetStringLength(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcBlobUtf8, 0x3da636c9, 0xba71, 0x4024, 0xa3,0x01, 0x30,0xcb,0xf1,0x25,0x30,0x5b)
#endif
#else
typedef struct IDxcBlobUtf8Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcBlob methods ***/
    void * (STDMETHODCALLTYPE *GetBufferPointer)(
        IDxcBlobUtf8 *This);

    SIZE_T (STDMETHODCALLTYPE *GetBufferSize)(
        IDxcBlobUtf8 *This);

    /*** IDxcBlobEncoding methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEncoding)(
        IDxcBlobUtf8 *This,
        BOOL *known,
        UINT32 *code_page);

    /*** IDxcBlobUtf8 methods ***/
    LPCSTR (STDMETHODCALLTYPE *GetStringPointer)(
        IDxcBlobUtf8 *This);

    SIZE_T (STDMETHODCALLTYPE *GetStringLength)(
        IDxcBlobUtf8 *This);

    END_INTERFACE
} IDxcBlobUtf8Vtbl;

interface IDxcBlobUtf8 {
    CONST_VTBL IDxcBlobUtf8Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcBlobUtf8_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcBlobUtf8_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcBlobUtf8_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcBlob methods ***/
#define IDxcBlobUtf8_GetBufferPointer(This) (This)->lpVtbl->GetBufferPointer(This)
#define IDxcBlobUtf8_GetBufferSize(This) (This)->lpVtbl->GetBufferSize(This)
/*** IDxcBlobEncoding methods ***/
#define IDxcBlobUtf8_GetEncoding(This,known,code_page) (This)->lpVtbl->GetEncoding(This,known,code_page)
/*** IDxcBlobUtf8 methods ***/
#define IDxcBlobUtf8_GetStringPointer(This) (This)->lpVtbl->GetStringPointer(This)
#define IDxcBlobUtf8_GetStringLength(This) (This)->lpVtbl->GetStringLength(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcBlobUtf8_QueryInterface(IDxcBlobUtf8* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcBlobUtf8_AddRef(IDxcBlobUtf8* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcBlobUtf8_Release(IDxcBlobUtf8* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcBlob methods ***/
static inline void * IDxcBlobUtf8_GetBufferPointer(IDxcBlobUtf8* This) {
    return This->lpVtbl->GetBufferPointer(This);
}
static inline SIZE_T IDxcBlobUtf8_GetBufferSize(IDxcBlobUtf8* This) {
    return This->lpVtbl->GetBufferSize(This);
}
/*** IDxcBlobEncoding methods ***/
static inline HRESULT IDxcBlobUtf8_GetEncoding(IDxcBlobUtf8* This,BOOL *known,UINT32 *code_page) {
    return This->lpVtbl->GetEncoding(This,known,code_page);
}
/*** IDxcBlobUtf8 methods ***/
static inline LPCSTR IDxcBlobUtf8_GetStringPointer(IDxcBlobUtf8* This) {
    return This->lpVtbl->GetStringPointer(This);
}
static inline SIZE_T IDxcBlobUtf8_GetStringLength(IDxcBlobUtf8* This) {
    return This->lpVtbl->GetStringLength(This);
}
#endif
#endif

#endif


#endif  /* __IDxcBlobUtf8_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcBlobWide interface
 */
#ifndef __IDxcBlobWide_INTERFACE_DEFINED__
#define __IDxcBlobWide_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcBlobWide, 0xa3f84eab, 0x0faa, 0x497e, 0xa3,0x9c, 0xee,0x6e,0xd6,0x0b,0x2d,0x84);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a3f84eab-0faa-497e-a39c-ee6ed60b2d84")
IDxcBlobWide : public IDxcBlobEncoding
{
    virtual LPCWSTR STDMETHODCALLTYPE GetStringPointer(
        ) = 0;

    virtual SIZE_T STDMETHODCALLTYPE GetStringLength(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcBlobWide, 0xa3f84eab, 0x0faa, 0x497e, 0xa3,0x9c, 0xee,0x6e,0xd6,0x0b,0x2d,0x84)
#endif
#else
typedef struct IDxcBlobWideVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcBlob methods ***/
    void * (STDMETHODCALLTYPE *GetBufferPointer)(
        IDxcBlobWide *This);

    SIZE_T (STDMETHODCALLTYPE *GetBufferSize)(
        IDxcBlobWide *This);

    /*** IDxcBlobEncoding methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEncoding)(
        IDxcBlobWide *This,
        BOOL *known,
        UINT32 *code_page);

    /*** IDxcBlobWide methods ***/
    LPCWSTR (STDMETHODCALLTYPE *GetStringPointer)(
        IDxcBlobWide *This);

    SIZE_T (STDMETHODCALLTYPE *GetStringLength)(
        IDxcBlobWide *This);

    END_INTERFACE
} IDxcBlobWideVtbl;

interface IDxcBlobWide {
    CONST_VTBL IDxcBlobWideVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcBlobWide_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcBlobWide_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcBlobWide_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcBlob methods ***/
#define IDxcBlobWide_GetBufferPointer(This) (This)->lpVtbl->GetBufferPointer(This)
#define IDxcBlobWide_GetBufferSize(This) (This)->lpVtbl->GetBufferSize(This)
/*** IDxcBlobEncoding methods ***/
#define IDxcBlobWide_GetEncoding(This,known,code_page) (This)->lpVtbl->GetEncoding(This,known,code_page)
/*** IDxcBlobWide methods ***/
#define IDxcBlobWide_GetStringPointer(This) (This)->lpVtbl->GetStringPointer(This)
#define IDxcBlobWide_GetStringLength(This) (This)->lpVtbl->GetStringLength(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcBlobWide_QueryInterface(IDxcBlobWide* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcBlobWide_AddRef(IDxcBlobWide* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcBlobWide_Release(IDxcBlobWide* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcBlob methods ***/
static inline void * IDxcBlobWide_GetBufferPointer(IDxcBlobWide* This) {
    return This->lpVtbl->GetBufferPointer(This);
}
static inline SIZE_T IDxcBlobWide_GetBufferSize(IDxcBlobWide* This) {
    return This->lpVtbl->GetBufferSize(This);
}
/*** IDxcBlobEncoding methods ***/
static inline HRESULT IDxcBlobWide_GetEncoding(IDxcBlobWide* This,BOOL *known,UINT32 *code_page) {
    return This->lpVtbl->GetEncoding(This,known,code_page);
}
/*** IDxcBlobWide methods ***/
static inline LPCWSTR IDxcBlobWide_GetStringPointer(IDxcBlobWide* This) {
    return This->lpVtbl->GetStringPointer(This);
}
static inline SIZE_T IDxcBlobWide_GetStringLength(IDxcBlobWide* This) {
    return This->lpVtbl->GetStringLength(This);
}
#endif
#endif

#endif


#endif  /* __IDxcBlobWide_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcIncludeHandler interface
 */
#ifndef __IDxcIncludeHandler_INTERFACE_DEFINED__
#define __IDxcIncludeHandler_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcIncludeHandler, 0x7f61fc7d, 0x950d, 0x467f, 0xb3,0xe3, 0x3c,0x02,0xfb,0x49,0x18,0x7c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7f61fc7d-950d-467f-b3e3-3c02fb49187c")
IDxcIncludeHandler : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE LoadSource(
        LPCWSTR file_name,
        IDxcBlob **include_source) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcIncludeHandler, 0x7f61fc7d, 0x950d, 0x467f, 0xb3,0xe3, 0x3c,0x02,0xfb,0x49,0x18,0x7c)
#endif
#else
typedef struct IDxcIncludeHandlerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcIncludeHandler methods ***/
    HRESULT (STDMETHODCALLTYPE *LoadSource)(
        IDxcIncludeHandler *This,
        LPCWSTR file_name,
        IDxcBlob **include_source);

    END_INTERFACE
} IDxcIncludeHandlerVtbl;

interface IDxcIncludeHandler {
    CONST_VTBL IDxcIncludeHandlerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcIncludeHandler_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcIncludeHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcIncludeHandler_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcIncludeHandler methods ***/
#define IDxcIncludeHandler_LoadSource(This,file_name,include_source) (This)->lpVtbl->LoadSource(This,file_name,include_source)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcIncludeHandler_QueryInterface(IDxcIncludeHandler* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcIncludeHandler_AddRef(IDxcIncludeHandler* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcIncludeHandler_Release(IDxcIncludeHandler* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcIncludeHandler methods ***/
static inline HRESULT IDxcIncludeHandler_LoadSource(IDxcIncludeHandler* This,LPCWSTR file_name,IDxcBlob **include_source) {
    return This->lpVtbl->LoadSource(This,file_name,include_source);
}
#endif
#endif

#endif


#endif  /* __IDxcIncludeHandler_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcOperationResult interface
 */
#ifndef __IDxcOperationResult_INTERFACE_DEFINED__
#define __IDxcOperationResult_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcOperationResult, 0xcedb484a, 0xd4e9, 0x445a, 0xb9,0x91, 0xca,0x21,0xca,0x15,0x7d,0xc2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("cedb484a-d4e9-445a-b991-ca21ca157dc2")
IDxcOperationResult : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        HRESULT *status) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetResult(
        IDxcBlob **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetErrorBuffer(
        IDxcBlobEncoding **errors) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcOperationResult, 0xcedb484a, 0xd4e9, 0x445a, 0xb9,0x91, 0xca,0x21,0xca,0x15,0x7d,0xc2)
#endif
#else
typedef struct IDxcOperationResultVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcOperationResult methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        IDxcOperationResult *This,
        HRESULT *status);

    HRESULT (STDMETHODCALLTYPE *GetResult)(
        IDxcOperationResult *This,
        IDxcBlob **result);

    HRESULT (STDMETHODCALLTYPE *GetErrorBuffer)(
        IDxcOperationResult *This,
        IDxcBlobEncoding **errors);

    END_INTERFACE
} IDxcOperationResultVtbl;

interface IDxcOperationResult {
    CONST_VTBL IDxcOperationResultVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcOperationResult_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcOperationResult_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcOperationResult_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcOperationResult methods ***/
#define IDxcOperationResult_GetStatus(This,status) (This)->lpVtbl->GetStatus(This,status)
#define IDxcOperationResult_GetResult(This,result) (This)->lpVtbl->GetResult(This,result)
#define IDxcOperationResult_GetErrorBuffer(This,errors) (This)->lpVtbl->GetErrorBuffer(This,errors)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcOperationResult_QueryInterface(IDxcOperationResult* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcOperationResult_AddRef(IDxcOperationResult* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcOperationResult_Release(IDxcOperationResult* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcOperationResult methods ***/
static inline HRESULT IDxcOperationResult_GetStatus(IDxcOperationResult* This,HRESULT *status) {
    return This->lpVtbl->GetStatus(This,status);
}
static inline HRESULT IDxcOperationResult_GetResult(IDxcOperationResult* This,IDxcBlob **result) {
    return This->lpVtbl->GetResult(This,result);
}
static inline HRESULT IDxcOperationResult_GetErrorBuffer(IDxcOperationResult* This,IDxcBlobEncoding **errors) {
    return This->lpVtbl->GetErrorBuffer(This,errors);
}
#endif
#endif

#endif


#endif  /* __IDxcOperationResult_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcResult interface
 */
#ifndef __IDxcResult_INTERFACE_DEFINED__
#define __IDxcResult_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcResult, 0x58346cda, 0xdde7, 0x4497, 0x94,0x61, 0x6f,0x87,0xaf,0x5e,0x06,0x59);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("58346cda-dde7-4497-9461-6f87af5e0659")
IDxcResult : public IDxcOperationResult
{
    virtual BOOL STDMETHODCALLTYPE HasOutput(
        DXC_OUT_KIND dxc_out_kind) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutput(
        DXC_OUT_KIND dxc_out_kind,
        REFIID iid,
        void **object,
        IDxcBlobWide **output_name) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetNumOutputs(
        ) = 0;

    virtual DXC_OUT_KIND STDMETHODCALLTYPE GetOutputByIndex(
        UINT32 Index) = 0;

    virtual DXC_OUT_KIND STDMETHODCALLTYPE PrimaryOutput(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcResult, 0x58346cda, 0xdde7, 0x4497, 0x94,0x61, 0x6f,0x87,0xaf,0x5e,0x06,0x59)
#endif
#else
typedef struct IDxcResultVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcOperationResult methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        IDxcResult *This,
        HRESULT *status);

    HRESULT (STDMETHODCALLTYPE *GetResult)(
        IDxcResult *This,
        IDxcBlob **result);

    HRESULT (STDMETHODCALLTYPE *GetErrorBuffer)(
        IDxcResult *This,
        IDxcBlobEncoding **errors);

    /*** IDxcResult methods ***/
    BOOL (STDMETHODCALLTYPE *HasOutput)(
        IDxcResult *This,
        DXC_OUT_KIND dxc_out_kind);

    HRESULT (STDMETHODCALLTYPE *GetOutput)(
        IDxcResult *This,
        DXC_OUT_KIND dxc_out_kind,
        REFIID iid,
        void **object,
        IDxcBlobWide **output_name);

    UINT32 (STDMETHODCALLTYPE *GetNumOutputs)(
        IDxcResult *This);

    DXC_OUT_KIND (STDMETHODCALLTYPE *GetOutputByIndex)(
        IDxcResult *This,
        UINT32 Index);

    DXC_OUT_KIND (STDMETHODCALLTYPE *PrimaryOutput)(
        IDxcResult *This);

    END_INTERFACE
} IDxcResultVtbl;

interface IDxcResult {
    CONST_VTBL IDxcResultVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcResult_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcResult_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcResult_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcOperationResult methods ***/
#define IDxcResult_GetStatus(This,status) (This)->lpVtbl->GetStatus(This,status)
#define IDxcResult_GetResult(This,result) (This)->lpVtbl->GetResult(This,result)
#define IDxcResult_GetErrorBuffer(This,errors) (This)->lpVtbl->GetErrorBuffer(This,errors)
/*** IDxcResult methods ***/
#define IDxcResult_HasOutput(This,dxc_out_kind) (This)->lpVtbl->HasOutput(This,dxc_out_kind)
#define IDxcResult_GetOutput(This,dxc_out_kind,iid,object,output_name) (This)->lpVtbl->GetOutput(This,dxc_out_kind,iid,object,output_name)
#define IDxcResult_GetNumOutputs(This) (This)->lpVtbl->GetNumOutputs(This)
#define IDxcResult_GetOutputByIndex(This,Index) (This)->lpVtbl->GetOutputByIndex(This,Index)
#define IDxcResult_PrimaryOutput(This) (This)->lpVtbl->PrimaryOutput(This)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcResult_QueryInterface(IDxcResult* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcResult_AddRef(IDxcResult* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcResult_Release(IDxcResult* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcOperationResult methods ***/
static inline HRESULT IDxcResult_GetStatus(IDxcResult* This,HRESULT *status) {
    return This->lpVtbl->GetStatus(This,status);
}
static inline HRESULT IDxcResult_GetResult(IDxcResult* This,IDxcBlob **result) {
    return This->lpVtbl->GetResult(This,result);
}
static inline HRESULT IDxcResult_GetErrorBuffer(IDxcResult* This,IDxcBlobEncoding **errors) {
    return This->lpVtbl->GetErrorBuffer(This,errors);
}
/*** IDxcResult methods ***/
static inline BOOL IDxcResult_HasOutput(IDxcResult* This,DXC_OUT_KIND dxc_out_kind) {
    return This->lpVtbl->HasOutput(This,dxc_out_kind);
}
static inline HRESULT IDxcResult_GetOutput(IDxcResult* This,DXC_OUT_KIND dxc_out_kind,REFIID iid,void **object,IDxcBlobWide **output_name) {
    return This->lpVtbl->GetOutput(This,dxc_out_kind,iid,object,output_name);
}
static inline UINT32 IDxcResult_GetNumOutputs(IDxcResult* This) {
    return This->lpVtbl->GetNumOutputs(This);
}
static inline DXC_OUT_KIND IDxcResult_GetOutputByIndex(IDxcResult* This,UINT32 Index) {
    return This->lpVtbl->GetOutputByIndex(This,Index);
}
static inline DXC_OUT_KIND IDxcResult_PrimaryOutput(IDxcResult* This) {
    return This->lpVtbl->PrimaryOutput(This);
}
#endif
#endif

#endif


#endif  /* __IDxcResult_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcCompilerArgs interface
 */
#ifndef __IDxcCompilerArgs_INTERFACE_DEFINED__
#define __IDxcCompilerArgs_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcCompilerArgs, 0x73effe2a, 0x70dc, 0x45f8, 0x96,0x90, 0xef,0xf6,0x4c,0x02,0x42,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("73effe2a-70dc-45f8-9690-eff64c02429d")
IDxcCompilerArgs : public IUnknown
{
    virtual LPCWSTR * STDMETHODCALLTYPE GetArguments(
        ) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetCount(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddArguments(
        LPCWSTR arguments,
        UINT32 arg_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddArgumentsUTF8(
        LPCSTR arguments,
        UINT32 arg_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddDefines(
        const DxcDefine *defines,
        UINT32 define_count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcCompilerArgs, 0x73effe2a, 0x70dc, 0x45f8, 0x96,0x90, 0xef,0xf6,0x4c,0x02,0x42,0x9d)
#endif
#else
typedef struct IDxcCompilerArgsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcCompilerArgs methods ***/
    LPCWSTR * (STDMETHODCALLTYPE *GetArguments)(
        IDxcCompilerArgs *This);

    UINT32 (STDMETHODCALLTYPE *GetCount)(
        IDxcCompilerArgs *This);

    HRESULT (STDMETHODCALLTYPE *AddArguments)(
        IDxcCompilerArgs *This,
        LPCWSTR arguments,
        UINT32 arg_count);

    HRESULT (STDMETHODCALLTYPE *AddArgumentsUTF8)(
        IDxcCompilerArgs *This,
        LPCSTR arguments,
        UINT32 arg_count);

    HRESULT (STDMETHODCALLTYPE *AddDefines)(
        IDxcCompilerArgs *This,
        const DxcDefine *defines,
        UINT32 define_count);

    END_INTERFACE
} IDxcCompilerArgsVtbl;

interface IDxcCompilerArgs {
    CONST_VTBL IDxcCompilerArgsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcCompilerArgs_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcCompilerArgs_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcCompilerArgs_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcCompilerArgs methods ***/
#define IDxcCompilerArgs_GetArguments(This) (This)->lpVtbl->GetArguments(This)
#define IDxcCompilerArgs_GetCount(This) (This)->lpVtbl->GetCount(This)
#define IDxcCompilerArgs_AddArguments(This,arguments,arg_count) (This)->lpVtbl->AddArguments(This,arguments,arg_count)
#define IDxcCompilerArgs_AddArgumentsUTF8(This,arguments,arg_count) (This)->lpVtbl->AddArgumentsUTF8(This,arguments,arg_count)
#define IDxcCompilerArgs_AddDefines(This,defines,define_count) (This)->lpVtbl->AddDefines(This,defines,define_count)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcCompilerArgs_QueryInterface(IDxcCompilerArgs* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcCompilerArgs_AddRef(IDxcCompilerArgs* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcCompilerArgs_Release(IDxcCompilerArgs* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcCompilerArgs methods ***/
static inline LPCWSTR * IDxcCompilerArgs_GetArguments(IDxcCompilerArgs* This) {
    return This->lpVtbl->GetArguments(This);
}
static inline UINT32 IDxcCompilerArgs_GetCount(IDxcCompilerArgs* This) {
    return This->lpVtbl->GetCount(This);
}
static inline HRESULT IDxcCompilerArgs_AddArguments(IDxcCompilerArgs* This,LPCWSTR arguments,UINT32 arg_count) {
    return This->lpVtbl->AddArguments(This,arguments,arg_count);
}
static inline HRESULT IDxcCompilerArgs_AddArgumentsUTF8(IDxcCompilerArgs* This,LPCSTR arguments,UINT32 arg_count) {
    return This->lpVtbl->AddArgumentsUTF8(This,arguments,arg_count);
}
static inline HRESULT IDxcCompilerArgs_AddDefines(IDxcCompilerArgs* This,const DxcDefine *defines,UINT32 define_count) {
    return This->lpVtbl->AddDefines(This,defines,define_count);
}
#endif
#endif

#endif


#endif  /* __IDxcCompilerArgs_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcCompiler interface
 */
#ifndef __IDxcCompiler_INTERFACE_DEFINED__
#define __IDxcCompiler_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcCompiler, 0x8c210bf3, 0x011f, 0x4422, 0x8d,0x70, 0x6f,0x9a,0xcb,0x8d,0xb6,0x17);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8c210bf3-011f-4422-8d70-6f9acb8db617")
IDxcCompiler : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Compile(
        IDxcBlob *source,
        LPCWSTR source_name,
        LPCWSTR entry_point,
        LPCWSTR target_profile,
        LPCWSTR arguments,
        UINT32 arg_count,
        const DxcDefine *defines,
        UINT32 define_count,
        IDxcIncludeHandler *include_handler,
        IDxcOperationResult **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE Preprocess(
        IDxcBlob *source,
        LPCWSTR source_name,
        LPCWSTR arguments,
        UINT32 arg_count,
        const DxcDefine *defines,
        UINT32 define_count,
        IDxcIncludeHandler *include_handler,
        IDxcOperationResult **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE Disassemble(
        IDxcBlob *source,
        IDxcBlobEncoding **disassembly) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcCompiler, 0x8c210bf3, 0x011f, 0x4422, 0x8d,0x70, 0x6f,0x9a,0xcb,0x8d,0xb6,0x17)
#endif
#else
typedef struct IDxcCompilerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcCompiler methods ***/
    HRESULT (STDMETHODCALLTYPE *Compile)(
        IDxcCompiler *This,
        IDxcBlob *source,
        LPCWSTR source_name,
        LPCWSTR entry_point,
        LPCWSTR target_profile,
        LPCWSTR arguments,
        UINT32 arg_count,
        const DxcDefine *defines,
        UINT32 define_count,
        IDxcIncludeHandler *include_handler,
        IDxcOperationResult **result);

    HRESULT (STDMETHODCALLTYPE *Preprocess)(
        IDxcCompiler *This,
        IDxcBlob *source,
        LPCWSTR source_name,
        LPCWSTR arguments,
        UINT32 arg_count,
        const DxcDefine *defines,
        UINT32 define_count,
        IDxcIncludeHandler *include_handler,
        IDxcOperationResult **result);

    HRESULT (STDMETHODCALLTYPE *Disassemble)(
        IDxcCompiler *This,
        IDxcBlob *source,
        IDxcBlobEncoding **disassembly);

    END_INTERFACE
} IDxcCompilerVtbl;

interface IDxcCompiler {
    CONST_VTBL IDxcCompilerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcCompiler_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcCompiler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcCompiler_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcCompiler methods ***/
#define IDxcCompiler_Compile(This,source,source_name,entry_point,target_profile,arguments,arg_count,defines,define_count,include_handler,result) (This)->lpVtbl->Compile(This,source,source_name,entry_point,target_profile,arguments,arg_count,defines,define_count,include_handler,result)
#define IDxcCompiler_Preprocess(This,source,source_name,arguments,arg_count,defines,define_count,include_handler,result) (This)->lpVtbl->Preprocess(This,source,source_name,arguments,arg_count,defines,define_count,include_handler,result)
#define IDxcCompiler_Disassemble(This,source,disassembly) (This)->lpVtbl->Disassemble(This,source,disassembly)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcCompiler_QueryInterface(IDxcCompiler* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcCompiler_AddRef(IDxcCompiler* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcCompiler_Release(IDxcCompiler* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcCompiler methods ***/
static inline HRESULT IDxcCompiler_Compile(IDxcCompiler* This,IDxcBlob *source,LPCWSTR source_name,LPCWSTR entry_point,LPCWSTR target_profile,LPCWSTR arguments,UINT32 arg_count,const DxcDefine *defines,UINT32 define_count,IDxcIncludeHandler *include_handler,IDxcOperationResult **result) {
    return This->lpVtbl->Compile(This,source,source_name,entry_point,target_profile,arguments,arg_count,defines,define_count,include_handler,result);
}
static inline HRESULT IDxcCompiler_Preprocess(IDxcCompiler* This,IDxcBlob *source,LPCWSTR source_name,LPCWSTR arguments,UINT32 arg_count,const DxcDefine *defines,UINT32 define_count,IDxcIncludeHandler *include_handler,IDxcOperationResult **result) {
    return This->lpVtbl->Preprocess(This,source,source_name,arguments,arg_count,defines,define_count,include_handler,result);
}
static inline HRESULT IDxcCompiler_Disassemble(IDxcCompiler* This,IDxcBlob *source,IDxcBlobEncoding **disassembly) {
    return This->lpVtbl->Disassemble(This,source,disassembly);
}
#endif
#endif

#endif


#endif  /* __IDxcCompiler_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcCompiler3 interface
 */
#ifndef __IDxcCompiler3_INTERFACE_DEFINED__
#define __IDxcCompiler3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcCompiler3, 0x228b4687, 0x5a6a, 0x4730, 0x90,0x0c, 0x97,0x02,0xb2,0x20,0x3f,0x54);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("228b4687-5a6a-4730-900c-9702b2203f54")
IDxcCompiler3 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Compile(
        const DxcBuffer *source,
        LPCWSTR *arguments,
        UINT32 arg_count,
        IDxcIncludeHandler *include_handler,
        REFIID iid,
        void **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE Disassemble(
        const DxcBuffer *object,
        REFIID iid,
        void **result) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcCompiler3, 0x228b4687, 0x5a6a, 0x4730, 0x90,0x0c, 0x97,0x02,0xb2,0x20,0x3f,0x54)
#endif
#else
typedef struct IDxcCompiler3Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcCompiler3 methods ***/
    HRESULT (STDMETHODCALLTYPE *Compile)(
        IDxcCompiler3 *This,
        const DxcBuffer *source,
        LPCWSTR *arguments,
        UINT32 arg_count,
        IDxcIncludeHandler *include_handler,
        REFIID iid,
        void **result);

    HRESULT (STDMETHODCALLTYPE *Disassemble)(
        IDxcCompiler3 *This,
        const DxcBuffer *object,
        REFIID iid,
        void **result);

    END_INTERFACE
} IDxcCompiler3Vtbl;

interface IDxcCompiler3 {
    CONST_VTBL IDxcCompiler3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcCompiler3_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcCompiler3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcCompiler3_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcCompiler3 methods ***/
#define IDxcCompiler3_Compile(This,source,arguments,arg_count,include_handler,iid,result) (This)->lpVtbl->Compile(This,source,arguments,arg_count,include_handler,iid,result)
#define IDxcCompiler3_Disassemble(This,object,iid,result) (This)->lpVtbl->Disassemble(This,object,iid,result)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcCompiler3_QueryInterface(IDxcCompiler3* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcCompiler3_AddRef(IDxcCompiler3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcCompiler3_Release(IDxcCompiler3* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcCompiler3 methods ***/
static inline HRESULT IDxcCompiler3_Compile(IDxcCompiler3* This,const DxcBuffer *source,LPCWSTR *arguments,UINT32 arg_count,IDxcIncludeHandler *include_handler,REFIID iid,void **result) {
    return This->lpVtbl->Compile(This,source,arguments,arg_count,include_handler,iid,result);
}
static inline HRESULT IDxcCompiler3_Disassemble(IDxcCompiler3* This,const DxcBuffer *object,REFIID iid,void **result) {
    return This->lpVtbl->Disassemble(This,object,iid,result);
}
#endif
#endif

#endif


#endif  /* __IDxcCompiler3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxcUtils interface
 */
#ifndef __IDxcUtils_INTERFACE_DEFINED__
#define __IDxcUtils_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxcUtils, 0x4605c4cb, 0x2019, 0x492a, 0xad,0xa4, 0x65,0xf2,0x0b,0xb7,0xd6,0x7f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4605c4cb-2019-492a-ada4-65f20bb7d67f")
IDxcUtils : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateBlobFromBlob(
        IDxcBlob *blob,
        UINT32 offset,
        UINT32 length,
        IDxcBlob **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBlobFromPinned(
        const void *data,
        UINT32 size,
        UINT32 code_page,
        IDxcBlobEncoding **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveToBlob(
        const void *data,
        IMalloc *alloc,
        UINT32 size,
        UINT32 code_page,
        IDxcBlobEncoding **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBlob(
        const void *data,
        UINT32 size,
        UINT32 code_page,
        IDxcBlobEncoding **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadFile(
        LPCWSTR file_name,
        UINT32 code_page,
        IDxcBlobEncoding **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateReadOnlyStreamFromBlob(
        IDxcBlob *blob,
        IStream **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDefaultIncludeHandler(
        IDxcIncludeHandler **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBlobAsUtf8(
        IDxcBlob *blob,
        IDxcBlobUtf8 **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBlobAsWide(
        IDxcBlob *blob,
        IDxcBlobWide **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDxilContainerPart(
        const DxcBuffer *shader,
        UINT32 dxc_part,
        void **part_data,
        UINT32 *part_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateReflection(
        const DxcBuffer *data,
        REFIID iid,
        void **reflection) = 0;

    virtual HRESULT STDMETHODCALLTYPE BuildArguments(
        LPCWSTR source_name,
        LPCWSTR entry_point,
        LPCWSTR target_profile,
        LPCWSTR *arguments,
        UINT32 arg_count,
        const DxcDefine *defines,
        UINT32 define_count,
        IDxcCompilerArgs **args) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPDBContents(
        IDxcBlob *pdb_blob,
        IDxcBlob **hash,
        IDxcBlob **container) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxcUtils, 0x4605c4cb, 0x2019, 0x492a, 0xad,0xa4, 0x65,0xf2,0x0b,0xb7,0xd6,0x7f)
#endif
#else
typedef struct IDxcUtilsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxcUtils methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBlobFromBlob)(
        IDxcUtils *This,
        IDxcBlob *blob,
        UINT32 offset,
        UINT32 length,
        IDxcBlob **result);

    HRESULT (STDMETHODCALLTYPE *CreateBlobFromPinned)(
        IDxcUtils *This,
        const void *data,
        UINT32 size,
        UINT32 code_page,
        IDxcBlobEncoding **result);

    HRESULT (STDMETHODCALLTYPE *MoveToBlob)(
        IDxcUtils *This,
        const void *data,
        IMalloc *alloc,
        UINT32 size,
        UINT32 code_page,
        IDxcBlobEncoding **result);

    HRESULT (STDMETHODCALLTYPE *CreateBlob)(
        IDxcUtils *This,
        const void *data,
        UINT32 size,
        UINT32 code_page,
        IDxcBlobEncoding **result);

    HRESULT (STDMETHODCALLTYPE *LoadFile)(
        IDxcUtils *This,
        LPCWSTR file_name,
        UINT32 code_page,
        IDxcBlobEncoding **result);

    HRESULT (STDMETHODCALLTYPE *CreateReadOnlyStreamFromBlob)(
        IDxcUtils *This,
        IDxcBlob *blob,
        IStream **stream);

    HRESULT (STDMETHODCALLTYPE *CreateDefaultIncludeHandler)(
        IDxcUtils *This,
        IDxcIncludeHandler **result);

    HRESULT (STDMETHODCALLTYPE *GetBlobAsUtf8)(
        IDxcUtils *This,
        IDxcBlob *blob,
        IDxcBlobUtf8 **result);

    HRESULT (STDMETHODCALLTYPE *GetBlobAsWide)(
        IDxcUtils *This,
        IDxcBlob *blob,
        IDxcBlobWide **result);

    HRESULT (STDMETHODCALLTYPE *GetDxilContainerPart)(
        IDxcUtils *This,
        const DxcBuffer *shader,
        UINT32 dxc_part,
        void **part_data,
        UINT32 *part_size);

    HRESULT (STDMETHODCALLTYPE *CreateReflection)(
        IDxcUtils *This,
        const DxcBuffer *data,
        REFIID iid,
        void **reflection);

    HRESULT (STDMETHODCALLTYPE *BuildArguments)(
        IDxcUtils *This,
        LPCWSTR source_name,
        LPCWSTR entry_point,
        LPCWSTR target_profile,
        LPCWSTR *arguments,
        UINT32 arg_count,
        const DxcDefine *defines,
        UINT32 define_count,
        IDxcCompilerArgs **args);

    HRESULT (STDMETHODCALLTYPE *GetPDBContents)(
        IDxcUtils *This,
        IDxcBlob *pdb_blob,
        IDxcBlob **hash,
        IDxcBlob **container);

    END_INTERFACE
} IDxcUtilsVtbl;

interface IDxcUtils {
    CONST_VTBL IDxcUtilsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxcUtils_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxcUtils_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxcUtils_Release(This) (This)->lpVtbl->Release(This)
/*** IDxcUtils methods ***/
#define IDxcUtils_CreateBlobFromBlob(This,blob,offset,length,result) (This)->lpVtbl->CreateBlobFromBlob(This,blob,offset,length,result)
#define IDxcUtils_CreateBlobFromPinned(This,data,size,code_page,result) (This)->lpVtbl->CreateBlobFromPinned(This,data,size,code_page,result)
#define IDxcUtils_MoveToBlob(This,data,alloc,size,code_page,result) (This)->lpVtbl->MoveToBlob(This,data,alloc,size,code_page,result)
#define IDxcUtils_CreateBlob(This,data,size,code_page,result) (This)->lpVtbl->CreateBlob(This,data,size,code_page,result)
#define IDxcUtils_LoadFile(This,file_name,code_page,result) (This)->lpVtbl->LoadFile(This,file_name,code_page,result)
#define IDxcUtils_CreateReadOnlyStreamFromBlob(This,blob,stream) (This)->lpVtbl->CreateReadOnlyStreamFromBlob(This,blob,stream)
#define IDxcUtils_CreateDefaultIncludeHandler(This,result) (This)->lpVtbl->CreateDefaultIncludeHandler(This,result)
#define IDxcUtils_GetBlobAsUtf8(This,blob,result) (This)->lpVtbl->GetBlobAsUtf8(This,blob,result)
#define IDxcUtils_GetBlobAsWide(This,blob,result) (This)->lpVtbl->GetBlobAsWide(This,blob,result)
#define IDxcUtils_GetDxilContainerPart(This,shader,dxc_part,part_data,part_size) (This)->lpVtbl->GetDxilContainerPart(This,shader,dxc_part,part_data,part_size)
#define IDxcUtils_CreateReflection(This,data,iid,reflection) (This)->lpVtbl->CreateReflection(This,data,iid,reflection)
#define IDxcUtils_BuildArguments(This,source_name,entry_point,target_profile,arguments,arg_count,defines,define_count,args) (This)->lpVtbl->BuildArguments(This,source_name,entry_point,target_profile,arguments,arg_count,defines,define_count,args)
#define IDxcUtils_GetPDBContents(This,pdb_blob,hash,container) (This)->lpVtbl->GetPDBContents(This,pdb_blob,hash,container)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxcUtils_QueryInterface(IDxcUtils* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxcUtils_AddRef(IDxcUtils* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxcUtils_Release(IDxcUtils* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxcUtils methods ***/
static inline HRESULT IDxcUtils_CreateBlobFromBlob(IDxcUtils* This,IDxcBlob *blob,UINT32 offset,UINT32 length,IDxcBlob **result) {
    return This->lpVtbl->CreateBlobFromBlob(This,blob,offset,length,result);
}
static inline HRESULT IDxcUtils_CreateBlobFromPinned(IDxcUtils* This,const void *data,UINT32 size,UINT32 code_page,IDxcBlobEncoding **result) {
    return This->lpVtbl->CreateBlobFromPinned(This,data,size,code_page,result);
}
static inline HRESULT IDxcUtils_MoveToBlob(IDxcUtils* This,const void *data,IMalloc *alloc,UINT32 size,UINT32 code_page,IDxcBlobEncoding **result) {
    return This->lpVtbl->MoveToBlob(This,data,alloc,size,code_page,result);
}
static inline HRESULT IDxcUtils_CreateBlob(IDxcUtils* This,const void *data,UINT32 size,UINT32 code_page,IDxcBlobEncoding **result) {
    return This->lpVtbl->CreateBlob(This,data,size,code_page,result);
}
static inline HRESULT IDxcUtils_LoadFile(IDxcUtils* This,LPCWSTR file_name,UINT32 code_page,IDxcBlobEncoding **result) {
    return This->lpVtbl->LoadFile(This,file_name,code_page,result);
}
static inline HRESULT IDxcUtils_CreateReadOnlyStreamFromBlob(IDxcUtils* This,IDxcBlob *blob,IStream **stream) {
    return This->lpVtbl->CreateReadOnlyStreamFromBlob(This,blob,stream);
}
static inline HRESULT IDxcUtils_CreateDefaultIncludeHandler(IDxcUtils* This,IDxcIncludeHandler **result) {
    return This->lpVtbl->CreateDefaultIncludeHandler(This,result);
}
static inline HRESULT IDxcUtils_GetBlobAsUtf8(IDxcUtils* This,IDxcBlob *blob,IDxcBlobUtf8 **result) {
    return This->lpVtbl->GetBlobAsUtf8(This,blob,result);
}
static inline HRESULT IDxcUtils_GetBlobAsWide(IDxcUtils* This,IDxcBlob *blob,IDxcBlobWide **result) {
    return This->lpVtbl->GetBlobAsWide(This,blob,result);
}
static inline HRESULT IDxcUtils_GetDxilContainerPart(IDxcUtils* This,const DxcBuffer *shader,UINT32 dxc_part,void **part_data,UINT32 *part_size) {
    return This->lpVtbl->GetDxilContainerPart(This,shader,dxc_part,part_data,part_size);
}
static inline HRESULT IDxcUtils_CreateReflection(IDxcUtils* This,const DxcBuffer *data,REFIID iid,void **reflection) {
    return This->lpVtbl->CreateReflection(This,data,iid,reflection);
}
static inline HRESULT IDxcUtils_BuildArguments(IDxcUtils* This,LPCWSTR source_name,LPCWSTR entry_point,LPCWSTR target_profile,LPCWSTR *arguments,UINT32 arg_count,const DxcDefine *defines,UINT32 define_count,IDxcCompilerArgs **args) {
    return This->lpVtbl->BuildArguments(This,source_name,entry_point,target_profile,arguments,arg_count,defines,define_count,args);
}
static inline HRESULT IDxcUtils_GetPDBContents(IDxcUtils* This,IDxcBlob *pdb_blob,IDxcBlob **hash,IDxcBlob **container) {
    return This->lpVtbl->GetPDBContents(This,pdb_blob,hash,container);
}
#endif
#endif

#endif


#endif  /* __IDxcUtils_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDxbcConverter interface
 */
#ifndef __IDxbcConverter_INTERFACE_DEFINED__
#define __IDxbcConverter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDxbcConverter, 0x5f956ed5, 0x78d1, 0x4b15, 0x82,0x47, 0xf7,0x18,0x76,0x14,0xa0,0x41);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5f956ed5-78d1-4b15-8247-f7187614a041")
IDxbcConverter : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Convert(
        const void *pDxbc,
        UINT32 DxbcSize,
        const WCHAR *pExtraOptions,
        void **ppDxil,
        UINT32 *pDxilSize,
        WCHAR **ppDiag) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertInDriver(
        const UINT32 *pBytecode,
        const void *pInputSignature,
        UINT32 NumInputSignatureElements,
        const void *pOutputSignature,
        UINT32 NumOutputSignatureElements,
        const void *pPatchConstantSignature,
        UINT32 NumPatchConstantSignatureElements,
        const WCHAR *pExtraOptions,
        IDxcBlob **ppDxilModule,
        WCHAR **ppDiag) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDxbcConverter, 0x5f956ed5, 0x78d1, 0x4b15, 0x82,0x47, 0xf7,0x18,0x76,0x14,0xa0,0x41)
#endif
#else
typedef struct IDxbcConverterVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDxbcConverter methods ***/
    HRESULT (STDMETHODCALLTYPE *Convert)(
        IDxbcConverter *This,
        const void *pDxbc,
        UINT32 DxbcSize,
        const WCHAR *pExtraOptions,
        void **ppDxil,
        UINT32 *pDxilSize,
        WCHAR **ppDiag);

    HRESULT (STDMETHODCALLTYPE *ConvertInDriver)(
        IDxbcConverter *This,
        const UINT32 *pBytecode,
        const void *pInputSignature,
        UINT32 NumInputSignatureElements,
        const void *pOutputSignature,
        UINT32 NumOutputSignatureElements,
        const void *pPatchConstantSignature,
        UINT32 NumPatchConstantSignatureElements,
        const WCHAR *pExtraOptions,
        IDxcBlob **ppDxilModule,
        WCHAR **ppDiag);

    END_INTERFACE
} IDxbcConverterVtbl;

interface IDxbcConverter {
    CONST_VTBL IDxbcConverterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDxbcConverter_QueryInterface(This,riid,object) (This)->lpVtbl->QueryInterface(This,riid,object)
#define IDxbcConverter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDxbcConverter_Release(This) (This)->lpVtbl->Release(This)
/*** IDxbcConverter methods ***/
#define IDxbcConverter_Convert(This,pDxbc,DxbcSize,pExtraOptions,ppDxil,pDxilSize,ppDiag) (This)->lpVtbl->Convert(This,pDxbc,DxbcSize,pExtraOptions,ppDxil,pDxilSize,ppDiag)
#define IDxbcConverter_ConvertInDriver(This,pBytecode,pInputSignature,NumInputSignatureElements,pOutputSignature,NumOutputSignatureElements,pPatchConstantSignature,NumPatchConstantSignatureElements,pExtraOptions,ppDxilModule,ppDiag) (This)->lpVtbl->ConvertInDriver(This,pBytecode,pInputSignature,NumInputSignatureElements,pOutputSignature,NumOutputSignatureElements,pPatchConstantSignature,NumPatchConstantSignatureElements,pExtraOptions,ppDxilModule,ppDiag)
#else
/*** IUnknown methods ***/
static inline HRESULT IDxbcConverter_QueryInterface(IDxbcConverter* This,REFIID riid,void **object) {
    return This->lpVtbl->QueryInterface(This,riid,object);
}
static inline ULONG IDxbcConverter_AddRef(IDxbcConverter* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IDxbcConverter_Release(IDxbcConverter* This) {
    return This->lpVtbl->Release(This);
}
/*** IDxbcConverter methods ***/
static inline HRESULT IDxbcConverter_Convert(IDxbcConverter* This,const void *pDxbc,UINT32 DxbcSize,const WCHAR *pExtraOptions,void **ppDxil,UINT32 *pDxilSize,WCHAR **ppDiag) {
    return This->lpVtbl->Convert(This,pDxbc,DxbcSize,pExtraOptions,ppDxil,pDxilSize,ppDiag);
}
static inline HRESULT IDxbcConverter_ConvertInDriver(IDxbcConverter* This,const UINT32 *pBytecode,const void *pInputSignature,UINT32 NumInputSignatureElements,const void *pOutputSignature,UINT32 NumOutputSignatureElements,const void *pPatchConstantSignature,UINT32 NumPatchConstantSignatureElements,const WCHAR *pExtraOptions,IDxcBlob **ppDxilModule,WCHAR **ppDiag) {
    return This->lpVtbl->ConvertInDriver(This,pBytecode,pInputSignature,NumInputSignatureElements,pOutputSignature,NumOutputSignatureElements,pPatchConstantSignature,NumPatchConstantSignatureElements,pExtraOptions,ppDxilModule,ppDiag);
}
#endif
#endif

#endif


#endif  /* __IDxbcConverter_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __vkd3d_dxcapi_h__ */
