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 list
- typedef 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 outputs
- typedef 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 data
- typedef 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 ID3D10ShaderReflection1
- DECLARE_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 __cplusplus
- extern "C" {
- #endif //__cplusplus
- #ifdef __cplusplus
- }
- #endif //__cplusplus
-
- #endif //__D3D10_1SHADER_H__
|