| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 | //////////////////////////////////////////////////////////////////////////////////  Copyright (c) Microsoft Corporation.  All rights reserved.////  File:       D3D10_1Shader.h//  Content:    D3D10.1 Shader Types and APIs////////////////////////////////////////////////////////////////////////////////#ifndef __D3D10_1SHADER_H__#define __D3D10_1SHADER_H__#include "d3d10shader.h"//----------------------------------------------------------------------------// Shader debugging structures//----------------------------------------------------------------------------typedef enum _D3D10_SHADER_DEBUG_REGTYPE{    D3D10_SHADER_DEBUG_REG_INPUT,    D3D10_SHADER_DEBUG_REG_OUTPUT,    D3D10_SHADER_DEBUG_REG_CBUFFER,    D3D10_SHADER_DEBUG_REG_TBUFFER,    D3D10_SHADER_DEBUG_REG_TEMP,    D3D10_SHADER_DEBUG_REG_TEMPARRAY,    D3D10_SHADER_DEBUG_REG_TEXTURE,    D3D10_SHADER_DEBUG_REG_SAMPLER,    D3D10_SHADER_DEBUG_REG_IMMEDIATECBUFFER,    D3D10_SHADER_DEBUG_REG_LITERAL,    D3D10_SHADER_DEBUG_REG_UNUSED,    D3D11_SHADER_DEBUG_REG_INTERFACE_POINTERS,    D3D11_SHADER_DEBUG_REG_UAV,    D3D10_SHADER_DEBUG_REG_FORCE_DWORD = 0x7fffffff,} D3D10_SHADER_DEBUG_REGTYPE;typedef enum _D3D10_SHADER_DEBUG_SCOPETYPE{    D3D10_SHADER_DEBUG_SCOPE_GLOBAL,    D3D10_SHADER_DEBUG_SCOPE_BLOCK,    D3D10_SHADER_DEBUG_SCOPE_FORLOOP,    D3D10_SHADER_DEBUG_SCOPE_STRUCT,    D3D10_SHADER_DEBUG_SCOPE_FUNC_PARAMS,    D3D10_SHADER_DEBUG_SCOPE_STATEBLOCK,    D3D10_SHADER_DEBUG_SCOPE_NAMESPACE,    D3D10_SHADER_DEBUG_SCOPE_ANNOTATION,    D3D10_SHADER_DEBUG_SCOPE_FORCE_DWORD = 0x7fffffff,} D3D10_SHADER_DEBUG_SCOPETYPE;typedef enum _D3D10_SHADER_DEBUG_VARTYPE{    D3D10_SHADER_DEBUG_VAR_VARIABLE,    D3D10_SHADER_DEBUG_VAR_FUNCTION,    D3D10_SHADER_DEBUG_VAR_FORCE_DWORD = 0x7fffffff,} D3D10_SHADER_DEBUG_VARTYPE;/////////////////////////////////////////////////////////////////////// These are the serialized structures that get written to the file/////////////////////////////////////////////////////////////////////typedef struct _D3D10_SHADER_DEBUG_TOKEN_INFO{    UINT File;    // offset into file list    UINT Line;    // line #    UINT Column;  // column #    UINT TokenLength;    UINT TokenId; // offset to LPCSTR of length TokenLength in string datastore} D3D10_SHADER_DEBUG_TOKEN_INFO;// Variable listtypedef struct _D3D10_SHADER_DEBUG_VAR_INFO{    // Index into token list for declaring identifier    UINT TokenId;    D3D10_SHADER_VARIABLE_TYPE Type;    // register and component for this variable, only valid/necessary for arrays    UINT Register;    UINT Component;    // gives the original variable that declared this variable    UINT ScopeVar;    // this variable's offset in its ScopeVar    UINT ScopeVarOffset;} D3D10_SHADER_DEBUG_VAR_INFO;typedef struct _D3D10_SHADER_DEBUG_INPUT_INFO{    // index into array of variables of variable to initialize    UINT Var;    // input, cbuffer, tbuffer    D3D10_SHADER_DEBUG_REGTYPE InitialRegisterSet;    // set to cbuffer or tbuffer slot, geometry shader input primitive #,    // identifying register for indexable temp, or -1    UINT InitialBank;    // -1 if temp, otherwise gives register in register set    UINT InitialRegister;    // -1 if temp, otherwise gives component    UINT InitialComponent;    // initial value if literal    UINT InitialValue;} D3D10_SHADER_DEBUG_INPUT_INFO;typedef struct _D3D10_SHADER_DEBUG_SCOPEVAR_INFO{    // Index into variable token    UINT TokenId;    D3D10_SHADER_DEBUG_VARTYPE VarType; // variable or function (different namespaces)    D3D10_SHADER_VARIABLE_CLASS Class;    UINT Rows;          // number of rows (matrices)    UINT Columns;       // number of columns (vectors and matrices)    // In an array of structures, one struct member scope is provided, and    // you'll have to add the array stride times the index to the variable    // index you find, then find that variable in this structure's list of    // variables.    // gives a scope to look up struct members. -1 if not a struct    UINT StructMemberScope;    // number of array indices    UINT uArrayIndices;    // a[3][2][1] has 3 indices    // maximum array index for each index    // offset to UINT[uArrayIndices] in UINT datastore    UINT ArrayElements; // a[3][2][1] has {3, 2, 1}    // how many variables each array index moves    // offset to UINT[uArrayIndices] in UINT datastore    UINT ArrayStrides;  // a[3][2][1] has {2, 1, 1}    UINT uVariables;    // index of the first variable, later variables are offsets from this one    UINT uFirstVariable;} D3D10_SHADER_DEBUG_SCOPEVAR_INFO;// scope data, this maps variable names to debug variables (useful for the watch window)typedef struct _D3D10_SHADER_DEBUG_SCOPE_INFO{    D3D10_SHADER_DEBUG_SCOPETYPE ScopeType;    UINT Name;         // offset to name of scope in strings list    UINT uNameLen;     // length of name string    UINT uVariables;    UINT VariableData; // Offset to UINT[uVariables] indexing the Scope Variable list} D3D10_SHADER_DEBUG_SCOPE_INFO;// instruction outputstypedef struct _D3D10_SHADER_DEBUG_OUTPUTVAR{    // index variable being written to, if -1 it's not going to a variable    UINT Var;    // range data that the compiler expects to be true    UINT  uValueMin, uValueMax;    INT   iValueMin, iValueMax;    FLOAT fValueMin, fValueMax;    BOOL  bNaNPossible, bInfPossible;} D3D10_SHADER_DEBUG_OUTPUTVAR;typedef struct _D3D10_SHADER_DEBUG_OUTPUTREG_INFO{    // Only temp, indexable temp, and output are valid here    D3D10_SHADER_DEBUG_REGTYPE OutputRegisterSet;    // -1 means no output    UINT OutputReg;    // if a temp array, identifier for which one    UINT TempArrayReg;    // -1 means masked out    UINT OutputComponents[4];    D3D10_SHADER_DEBUG_OUTPUTVAR OutputVars[4];    // when indexing the output, get the value of this register, then add    // that to uOutputReg. If uIndexReg is -1, then there is no index.    // find the variable whose register is the sum (by looking in the ScopeVar)    // and component matches, then set it. This should only happen for indexable    // temps and outputs.    UINT IndexReg;    UINT IndexComp;} D3D10_SHADER_DEBUG_OUTPUTREG_INFO;// per instruction datatypedef struct _D3D10_SHADER_DEBUG_INST_INFO{    UINT Id; // Which instruction this is in the bytecode    UINT Opcode; // instruction type    // 0, 1, or 2    UINT uOutputs;    // up to two outputs per instruction    D3D10_SHADER_DEBUG_OUTPUTREG_INFO pOutputs[2];        // index into the list of tokens for this instruction's token    UINT TokenId;    // how many function calls deep this instruction is    UINT NestingLevel;    // list of scopes from outer-most to inner-most    // Number of scopes    UINT Scopes;    UINT ScopeInfo; // Offset to UINT[uScopes] specifying indices of the ScopeInfo Array    // list of variables accessed by this instruction    // Number of variables    UINT AccessedVars;    UINT AccessedVarsInfo; // Offset to UINT[AccessedVars] specifying indices of the ScopeVariableInfo Array} D3D10_SHADER_DEBUG_INST_INFO;typedef struct _D3D10_SHADER_DEBUG_FILE_INFO{    UINT FileName;    // Offset to LPCSTR for file name    UINT FileNameLen; // Length of file name    UINT FileData;    // Offset to LPCSTR of length FileLen    UINT FileLen;     // Length of file} D3D10_SHADER_DEBUG_FILE_INFO;typedef struct _D3D10_SHADER_DEBUG_INFO{    UINT Size;                             // sizeof(D3D10_SHADER_DEBUG_INFO)    UINT Creator;                          // Offset to LPCSTR for compiler version    UINT EntrypointName;                   // Offset to LPCSTR for Entry point name    UINT ShaderTarget;                     // Offset to LPCSTR for shader target    UINT CompileFlags;                     // flags used to compile    UINT Files;                            // number of included files    UINT FileInfo;                         // Offset to D3D10_SHADER_DEBUG_FILE_INFO[Files]    UINT Instructions;                     // number of instructions    UINT InstructionInfo;                  // Offset to D3D10_SHADER_DEBUG_INST_INFO[Instructions]    UINT Variables;                        // number of variables    UINT VariableInfo;                     // Offset to D3D10_SHADER_DEBUG_VAR_INFO[Variables]    UINT InputVariables;                   // number of variables to initialize before running    UINT InputVariableInfo;                // Offset to D3D10_SHADER_DEBUG_INPUT_INFO[InputVariables]    UINT Tokens;                           // number of tokens to initialize    UINT TokenInfo;                        // Offset to D3D10_SHADER_DEBUG_TOKEN_INFO[Tokens]    UINT Scopes;                           // number of scopes    UINT ScopeInfo;                        // Offset to D3D10_SHADER_DEBUG_SCOPE_INFO[Scopes]    UINT ScopeVariables;                   // number of variables declared    UINT ScopeVariableInfo;                // Offset to D3D10_SHADER_DEBUG_SCOPEVAR_INFO[Scopes]    UINT UintOffset;                       // Offset to the UINT datastore, all UINT offsets are from this offset    UINT StringOffset;                     // Offset to the string datastore, all string offsets are from this offset} D3D10_SHADER_DEBUG_INFO;//----------------------------------------------------------------------------// ID3D10ShaderReflection1://----------------------------------------------------------------------------//// Interface definitions//typedef interface ID3D10ShaderReflection1 ID3D10ShaderReflection1;typedef interface ID3D10ShaderReflection1 *LPD3D10SHADERREFLECTION1;// {C3457783-A846-47CE-9520-CEA6F66E7447}DEFINE_GUID(IID_ID3D10ShaderReflection1, 0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47);#undef INTERFACE#define INTERFACE ID3D10ShaderReflection1DECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown){    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;    STDMETHOD_(ULONG, AddRef)(THIS) PURE;    STDMETHOD_(ULONG, Release)(THIS) PURE;    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *pDesc) PURE;        STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE;    STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE;        STDMETHOD(GetResourceBindingDesc)(THIS_ UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;        STDMETHOD(GetInputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;    STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE;    STDMETHOD(GetResourceBindingDescByName)(THIS_ LPCSTR Name, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;    STDMETHOD(GetMovInstructionCount)(THIS_ UINT* pCount) PURE;    STDMETHOD(GetMovcInstructionCount)(THIS_ UINT* pCount) PURE;    STDMETHOD(GetConversionInstructionCount)(THIS_ UINT* pCount) PURE;    STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT* pCount) PURE;        STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE* pPrim) PURE;    STDMETHOD(IsLevel9Shader)(THIS_ BOOL* pbLevel9Shader) PURE;    STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL* pbSampleFrequency) PURE;};//////////////////////////////////////////////////////////////////////////////// APIs ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#ifdef __cplusplusextern "C" {#endif //__cplusplus#ifdef __cplusplus}#endif //__cplusplus    #endif //__D3D10_1SHADER_H__
 |