////////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: D3DCompiler.h // Content: D3D Compilation Types and APIs // ////////////////////////////////////////////////////////////////////////////// #ifndef __D3DCOMPILER_H__ #define __D3DCOMPILER_H__ // Current name of the DLL shipped in the same SDK as this header. #define D3DCOMPILER_DLL_W L"d3dcompiler_41.dll" #define D3DCOMPILER_DLL_A "d3dcompiler_41.dll" #ifdef UNICODE #define D3DCOMPILER_DLL D3DCOMPILER_DLL_W #else #define D3DCOMPILER_DLL D3DCOMPILER_DLL_A #endif #include "d3d11shader.h" // The compilation APIs are generally not tied to particular // versions of D3D, thus their names and types don't reflect // a particular version number unless it is necessary to // do so. However, for compatibility with previous compilation // API definitions some of the neutral types are simply // redefinitions of older types. typedef struct _D3D10_SHADER_MACRO D3D_SHADER_MACRO; typedef enum _D3D10_INCLUDE_TYPE D3D_INCLUDE_TYPE; typedef interface ID3D10Blob ID3DBlob; typedef ID3DBlob* LPD3DBLOB; typedef interface ID3D10Include ID3DInclude; typedef ID3DInclude* LPD3DINCLUDE; ////////////////////////////////////////////////////////////////////////////// // APIs ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus extern "C" { #endif //__cplusplus //---------------------------------------------------------------------------- // D3DCompile: // ---------- // Compile source text into bytecode appropriate for the given target. //---------------------------------------------------------------------------- HRESULT WINAPI D3DCompile(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __in_opt LPCSTR pSourceName, __in_xcount_opt(pDefines->Name != NULL) CONST D3D_SHADER_MACRO* pDefines, __in_opt LPD3DINCLUDE pInclude, __in LPCSTR pEntrypoint, __in LPCSTR pTarget, __in UINT Flags1, __in UINT Flags2, __out LPD3DBLOB* ppCode, __out_opt LPD3DBLOB* ppErrorMsgs); typedef HRESULT (WINAPI *pD3DCompile) (LPCVOID pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, LPCSTR pEntrypoint, LPCSTR pTarget, UINT Flags1, UINT Flags2, LPD3D10BLOB* ppCode, LPD3D10BLOB* ppErrorMsgs); //---------------------------------------------------------------------------- // D3DPreprocess: // ---------- // Process source text with the compiler's preprocessor and return // the resulting text. //---------------------------------------------------------------------------- HRESULT WINAPI D3DPreprocess(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __in_opt LPCSTR pSourceName, __in_opt CONST D3D_SHADER_MACRO* pDefines, __in_opt LPD3DINCLUDE pInclude, __out LPD3DBLOB* ppCodeText, __out_opt LPD3DBLOB* ppErrorMsgs); typedef HRESULT (WINAPI *pD3DPreprocess) (LPCVOID pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, LPD3D10BLOB* ppCodeText, LPD3D10BLOB* ppErrorMsgs); //---------------------------------------------------------------------------- // D3DGetDebugInfo: // ----------------------- // Gets shader debug info. Debug info is generated by D3DCompile and is // embedded in the body of the shader. //---------------------------------------------------------------------------- HRESULT WINAPI D3DGetDebugInfo(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __out LPD3DBLOB* ppDebugInfo); //---------------------------------------------------------------------------- // D3DReflect: // ---------- // Shader code contains metadata that can be inspected via the // reflection APIs. //---------------------------------------------------------------------------- HRESULT WINAPI D3DReflect(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __in REFIID pInterface, __out void** ppReflector); //---------------------------------------------------------------------------- // D3DDisassemble: // ---------------------- // Takes a binary shader and returns a buffer containing text assembly. //---------------------------------------------------------------------------- #define D3D_DISASM_ENABLE_COLOR_CODE 0x00000001 #define D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS 0x00000002 HRESULT WINAPI D3DDisassemble(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __in UINT Flags, __in_opt LPCSTR szComments, __out LPD3DBLOB* ppDisassembly); typedef HRESULT (WINAPI *pD3DDisassemble) (__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __in UINT Flags, __in_opt LPCSTR szComments, __out LPD3DBLOB* ppDisassembly); //---------------------------------------------------------------------------- // D3DDisassemble10Effect: // ----------------------- // Takes a D3D10 effect interface and returns a // buffer containing text assembly. //---------------------------------------------------------------------------- HRESULT WINAPI D3DDisassemble10Effect(__in ID3D10Effect *pEffect, __in UINT Flags, __out LPD3DBLOB* ppDisassembly); //---------------------------------------------------------------------------- // D3DGetInputSignatureBlob: // ----------------------- // Retrieve the input signature from a compilation result. //---------------------------------------------------------------------------- HRESULT WINAPI D3DGetInputSignatureBlob(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __out LPD3DBLOB* ppSignatureBlob); //---------------------------------------------------------------------------- // D3DGetOutputSignatureBlob: // ----------------------- // Retrieve the output signature from a compilation result. //---------------------------------------------------------------------------- HRESULT WINAPI D3DGetOutputSignatureBlob(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __out LPD3DBLOB* ppSignatureBlob); //---------------------------------------------------------------------------- // D3DGetInputAndOutputSignatureBlob: // ----------------------- // Retrieve the input and output signatures from a compilation result. //---------------------------------------------------------------------------- HRESULT WINAPI D3DGetInputAndOutputSignatureBlob(__in_bcount(SrcDataSize) LPCVOID pSrcData, __in SIZE_T SrcDataSize, __out LPD3DBLOB* ppSignatureBlob); //---------------------------------------------------------------------------- // D3DStripShader: // ----------------------- // Removes unwanted blobs from a compilation result //---------------------------------------------------------------------------- typedef enum D3DCOMPILER_STRIP_FLAGS { D3DCOMPILER_STRIP_REFLECTION_DATA = 1, D3DCOMPILER_STRIP_DEBUG_INFO = 2, D3DCOMPILER_STRIP_TEST_BLOBS = 4, D3DCOMPILER_STRIP_FORCE_DWORD = 0x7fffffff, } D3DCOMPILER_STRIP_FLAGS; HRESULT WINAPI D3DStripShader(__in_bcount(BytecodeLength) LPCVOID pShaderBytecode, __in SIZE_T BytecodeLength, __in UINT uStripFlags, __out LPD3DBLOB* ppStrippedBlob); #ifdef __cplusplus } #endif //__cplusplus #endif // #ifndef __D3DCOMPILER_H__