//////////////////////////////////////////////////////////////////////////////
 
//
 
//  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_42.dll"
 
#define D3DCOMPILER_DLL_A "d3dcompiler_42.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
 
#define D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING 0x00000004
 
#define D3D_DISASM_ENABLE_INSTRUCTION_CYCLE     0x00000008
 
 
 
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__