254 lines
7.8 KiB
C
254 lines
7.8 KiB
C
#pragma once
|
|
|
|
#include <Core/Common/CoreTypes.h>
|
|
#include <wchar.h>
|
|
|
|
/* Win32 Type Definitions */
|
|
typedef int HRESULT;
|
|
typedef const void* LPCVOID;
|
|
typedef size_t SIZE_T;
|
|
typedef const char* LPCSTR;
|
|
typedef unsigned int UINT;
|
|
typedef unsigned long ULONG;
|
|
typedef void* LPVOID;
|
|
typedef void* REFIID;
|
|
|
|
/* dxcompiler Type Definitions */
|
|
typedef int BOOL;
|
|
typedef void* REFCLSID;
|
|
typedef const wchar_t* LPCWSTR;
|
|
typedef void IDxcBlobEncoding;
|
|
typedef void IDxcBlobWide;
|
|
typedef void IDxcIncludeHandler;
|
|
|
|
#if !defined(_WIN32)
|
|
#define __stdcall
|
|
#endif
|
|
|
|
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_LAST = DXC_OUT_TIME_TRACE,
|
|
DXC_OUT_NUM_ENUMS
|
|
} DXC_OUT_KIND;
|
|
|
|
#define DXC_CP_UTF8 65001
|
|
#define DXC_CP_UTF16 1200
|
|
#define DXC_CP_UTF32 12000
|
|
#define DXC_CP_ACP 0
|
|
|
|
typedef struct DxcBuffer DxcBuffer;
|
|
struct DxcBuffer
|
|
{
|
|
LPCVOID Ptr;
|
|
SIZE_T Size;
|
|
UINT Encoding;
|
|
};
|
|
|
|
static uint8 IID_IDxcBlob[] = {
|
|
0x08, 0xFB, 0xA5, 0x8B,
|
|
0x95, 0x51,
|
|
0xE2, 0x40,
|
|
0xAC, 0x58, 0x0D, 0x98, 0x9C, 0x3A, 0x01, 0x02
|
|
};
|
|
|
|
typedef struct IDxcBlob IDxcBlob;
|
|
typedef struct IDxcBlobVtbl IDxcBlobVtbl;
|
|
struct IDxcBlobVtbl
|
|
{
|
|
HRESULT(__stdcall* QueryInterface)(IDxcBlob* This, REFIID riid, void** ppvObject);
|
|
ULONG(__stdcall* AddRef)(IDxcBlob* This);
|
|
ULONG(__stdcall* Release)(IDxcBlob* This);
|
|
|
|
LPVOID(__stdcall* GetBufferPointer)(IDxcBlob* This);
|
|
SIZE_T(__stdcall* GetBufferSize)(IDxcBlob* This);
|
|
};
|
|
struct IDxcBlob
|
|
{
|
|
IDxcBlobVtbl* lpVtbl;
|
|
};
|
|
|
|
static uint8 IID_IDxcBlobUtf8[] = {
|
|
0xC9, 0x36, 0xA6, 0x3D,
|
|
0x71, 0xBA,
|
|
0x24, 0x40,
|
|
0xA3, 0x01, 0x30, 0xCB, 0xF1, 0x25, 0x30, 0x5B
|
|
};
|
|
|
|
typedef struct IDxcBlobUtf8 IDxcBlobUtf8;
|
|
typedef struct IDxcBlobUtf8Vtbl IDxcBlobUtf8Vtbl;
|
|
struct IDxcBlobUtf8Vtbl
|
|
{
|
|
HRESULT(__stdcall* QueryInterface)(IDxcBlobUtf8* This, REFIID riid, void** ppvObject);
|
|
ULONG(__stdcall* AddRef)(IDxcBlobUtf8* This);
|
|
ULONG(__stdcall* Release)(IDxcBlobUtf8* This);
|
|
|
|
LPVOID(__stdcall* GetBufferPointer)(IDxcBlobUtf8* This);
|
|
SIZE_T(__stdcall* GetBufferSize)(IDxcBlobUtf8* This);
|
|
|
|
HRESULT(__stdcall* GetEncoding)(IDxcBlobUtf8* This, BOOL* pKnown, uint32* pCodePage);
|
|
|
|
LPCSTR(__stdcall* GetStringPointer)(IDxcBlobUtf8* This);
|
|
SIZE_T(__stdcall* GetStringLength)(IDxcBlobUtf8* This);
|
|
};
|
|
struct IDxcBlobUtf8
|
|
{
|
|
IDxcBlobUtf8Vtbl* lpVtbl;
|
|
};
|
|
|
|
static uint8 IID_IDxcResult[] = {
|
|
0xDA, 0x6C, 0x34, 0x58,
|
|
0xE7, 0xDD,
|
|
0x97, 0x44,
|
|
0x94, 0x61, 0x6F, 0x87, 0xAF, 0x5E, 0x06, 0x59
|
|
};
|
|
|
|
typedef struct IDxcResult IDxcResult;
|
|
typedef struct IDxcResultVtbl IDxcResultVtbl;
|
|
struct IDxcResultVtbl
|
|
{
|
|
HRESULT(__stdcall* QueryInterface)(IDxcResult* This, REFIID riid, void** ppvObject);
|
|
ULONG(__stdcall* AddRef)(IDxcResult* This);
|
|
ULONG(__stdcall* Release)(IDxcResult* This);
|
|
|
|
HRESULT(__stdcall* GetStatus)(IDxcResult* This, HRESULT* pStatus);
|
|
HRESULT(__stdcall* GetResult)(IDxcResult* This, IDxcBlob** ppResult);
|
|
HRESULT(__stdcall* GetErrorBuffer)(IDxcResult* This, IDxcBlobEncoding** ppErrors);
|
|
|
|
BOOL(__stdcall* HasOutput)(IDxcResult* This, DXC_OUT_KIND dxcOutKind);
|
|
HRESULT(__stdcall* GetOutput)(
|
|
IDxcResult* This,
|
|
DXC_OUT_KIND dxcOutKind,
|
|
REFIID iid,
|
|
void** ppvObject,
|
|
IDxcBlobWide** ppOutputName);
|
|
uint32(__stdcall* GetNumOutputs)(IDxcResult* This);
|
|
DXC_OUT_KIND(__stdcall* GetOutputByIndex)(IDxcResult* This, uint32 Index);
|
|
DXC_OUT_KIND(__stdcall* PrimaryOutput)(IDxcResult* This);
|
|
};
|
|
struct IDxcResult
|
|
{
|
|
IDxcResultVtbl* lpVtbl;
|
|
};
|
|
|
|
static struct
|
|
{
|
|
uint32 Data1;
|
|
uint16 Data2;
|
|
uint16 Data3;
|
|
uint8 Data4[8];
|
|
} CLSID_DxcCompiler = {
|
|
.Data1 = 0x73e22d93,
|
|
.Data2 = 0xe6ce,
|
|
.Data3 = 0x47f3,
|
|
.Data4 = { 0xb5, 0xbf, 0xf0, 0x66, 0x4f, 0x39, 0xc1, 0xb0 }
|
|
};
|
|
|
|
static uint8 IID_IDxcCompiler3[] = {
|
|
0x87, 0x46, 0x8B, 0x22,
|
|
0x6A, 0x5A,
|
|
0x30, 0x47,
|
|
0x90, 0x0C, 0x97, 0x02, 0xB2, 0x20, 0x3F, 0x54
|
|
};
|
|
|
|
typedef struct IDxcCompiler3 IDxcCompiler3;
|
|
typedef struct IDxcCompiler3Vtbl IDxcCompiler3Vtbl;
|
|
struct IDxcCompiler3Vtbl
|
|
{
|
|
HRESULT(__stdcall* QueryInterface)(IDxcCompiler3* This, REFIID riid, void** ppvObject);
|
|
ULONG(__stdcall* AddRef)(IDxcCompiler3* This);
|
|
ULONG(__stdcall* Release)(IDxcCompiler3* This);
|
|
|
|
HRESULT(__stdcall* Compile)(
|
|
IDxcCompiler3* This,
|
|
const DxcBuffer* pSource,
|
|
LPCWSTR* pArguments,
|
|
uint32 argCount,
|
|
IDxcIncludeHandler* pIncludeHandler,
|
|
REFIID riid,
|
|
LPVOID* ppResult);
|
|
|
|
HRESULT(__stdcall* Disassemble)(
|
|
IDxcCompiler3* This,
|
|
const DxcBuffer* pObject,
|
|
REFIID riid,
|
|
LPVOID* ppResult);
|
|
};
|
|
struct IDxcCompiler3
|
|
{
|
|
const IDxcCompiler3Vtbl* lpVtbl;
|
|
};
|
|
|
|
typedef struct IMalloc IMalloc;
|
|
typedef struct IStream IStream;
|
|
typedef struct DxcDefine DxcDefine;
|
|
typedef struct IDxcCompilerArgs IDxcCompilerArgs;
|
|
|
|
static struct
|
|
{
|
|
uint32 Data1;
|
|
uint16 Data2;
|
|
uint16 Data3;
|
|
uint8 Data4[8];
|
|
} CLSID_DxcUtils = {
|
|
.Data1 = 0x6245d6af,
|
|
.Data2 = 0x66e0,
|
|
.Data3 = 0x48fd,
|
|
.Data4 = { 0x80, 0xb4, 0x4d, 0x27, 0x17, 0x96, 0x74, 0x8c }
|
|
};
|
|
|
|
static uint8 IID_IDxcUtils[] = {
|
|
0xcb, 0xc4, 0x05, 0x46,
|
|
0x19, 0x20,
|
|
0x2a, 0x49,
|
|
0xad, 0xa4, 0x65, 0xf2, 0x0b, 0xb7, 0xd6, 0x7f
|
|
};
|
|
|
|
typedef struct IDxcUtils IDxcUtils;
|
|
typedef struct IDxcUtilsVtbl IDxcUtilsVtbl;
|
|
struct IDxcUtilsVtbl
|
|
{
|
|
HRESULT(__stdcall* QueryInterface)(void* pSelf, REFIID riid, void** ppvObject);
|
|
ULONG(__stdcall* AddRef)(void* pSelf);
|
|
ULONG(__stdcall* Release)(void* pSelf);
|
|
|
|
HRESULT(__stdcall* CreateBlobFromBlob)(void* pSelf, IDxcBlob* pBlob, UINT offset, UINT length, IDxcBlob** ppResult);
|
|
HRESULT(__stdcall* CreateBlobFromPinned)(void* pSelf, LPCVOID pData, UINT size, UINT codePage, IDxcBlobEncoding** pBlobEncoding);
|
|
HRESULT(__stdcall* MoveToBlob)(void* pSelf, LPCVOID pData, IMalloc* pIMalloc, UINT size, UINT codePage, IDxcBlobEncoding** pBlobEncoding);
|
|
HRESULT(__stdcall* CreateBlob)(void* pSelf, LPCVOID pData, UINT size, UINT codePage, IDxcBlobEncoding** pBlobEncoding);
|
|
HRESULT(__stdcall* LoadFile)(void* pSelf, LPCWSTR pFileName, UINT* pCodePage, IDxcBlobEncoding** pBlobEncoding);
|
|
HRESULT(__stdcall* CreateReadOnlyStreamFromBlob)(void* pSelf, IDxcBlob* pBlob, IStream** ppStream);
|
|
HRESULT(__stdcall* CreateDefaultIncludeHandler)(void* pSelf, IDxcIncludeHandler** ppResult);
|
|
HRESULT(__stdcall* GetBlobAsUtf8)(void* pSelf, IDxcBlob* pBlob, IDxcBlobUtf8** pBlobEncoding);
|
|
HRESULT(__stdcall* GetBlobAsWide)(void* pSelf, IDxcBlob* pBlob, IDxcBlobWide** pBlobEncoding);
|
|
HRESULT(__stdcall* GetDxilContainerPart)(void* pSelf, const DxcBuffer* pShader, UINT DxcPart, void** ppPartData, UINT* pPartSizeInBytes);
|
|
HRESULT(__stdcall* CreateReflection)(void* pSelf, const DxcBuffer* pData, REFIID iid, void** ppvReflection);
|
|
HRESULT(__stdcall* BuildArguments)(void* pSelf, LPCWSTR pSourceName, LPCWSTR pEntryPoint, LPCWSTR pTargetProfile, LPCWSTR* pArguments, UINT argCount, const DxcDefine* pDefines, UINT defineCount, IDxcCompilerArgs** ppArgs);
|
|
HRESULT(__stdcall* GetPDBContents)(void* pSelf, IDxcBlob* pPDBBlob, IDxcBlob** ppHash, IDxcBlob** ppContainer);
|
|
};
|
|
struct IDxcUtils
|
|
{
|
|
const IDxcUtilsVtbl* lpVtbl;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
HRESULT __stdcall DxcCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|