Subversion Repositories Games.Chess Giants

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
//////////////////////////////////////////////////////////////////////////////
2
//
3
//  Copyright (c) Microsoft Corporation.  All rights reserved.
4
//
5
//  File:       D3D10_1Shader.h
6
//  Content:    D3D10.1 Shader Types and APIs
7
//
8
//////////////////////////////////////////////////////////////////////////////
9
 
10
#ifndef __D3D10_1SHADER_H__
11
#define __D3D10_1SHADER_H__
12
 
13
#include "d3d10shader.h"
14
 
15
//----------------------------------------------------------------------------
16
// Shader debugging structures
17
//----------------------------------------------------------------------------
18
 
19
typedef enum _D3D10_SHADER_DEBUG_REGTYPE
20
{
21
    D3D10_SHADER_DEBUG_REG_INPUT,
22
    D3D10_SHADER_DEBUG_REG_OUTPUT,
23
    D3D10_SHADER_DEBUG_REG_CBUFFER,
24
    D3D10_SHADER_DEBUG_REG_TBUFFER,
25
    D3D10_SHADER_DEBUG_REG_TEMP,
26
    D3D10_SHADER_DEBUG_REG_TEMPARRAY,
27
    D3D10_SHADER_DEBUG_REG_TEXTURE,
28
    D3D10_SHADER_DEBUG_REG_SAMPLER,
29
    D3D10_SHADER_DEBUG_REG_IMMEDIATECBUFFER,
30
    D3D10_SHADER_DEBUG_REG_LITERAL,
31
    D3D10_SHADER_DEBUG_REG_UNUSED,
32
    D3D11_SHADER_DEBUG_REG_INTERFACE_POINTERS,
33
    D3D10_SHADER_DEBUG_REG_FORCE_DWORD = 0x7fffffff,
34
} D3D10_SHADER_DEBUG_REGTYPE;
35
 
36
typedef enum _D3D10_SHADER_DEBUG_SCOPETYPE
37
{
38
    D3D10_SHADER_DEBUG_SCOPE_GLOBAL,
39
    D3D10_SHADER_DEBUG_SCOPE_BLOCK,
40
    D3D10_SHADER_DEBUG_SCOPE_FORLOOP,
41
    D3D10_SHADER_DEBUG_SCOPE_STRUCT,
42
    D3D10_SHADER_DEBUG_SCOPE_FUNC_PARAMS,
43
    D3D10_SHADER_DEBUG_SCOPE_STATEBLOCK,
44
    D3D10_SHADER_DEBUG_SCOPE_NAMESPACE,
45
    D3D10_SHADER_DEBUG_SCOPE_ANNOTATION,
46
    D3D10_SHADER_DEBUG_SCOPE_FORCE_DWORD = 0x7fffffff,
47
} D3D10_SHADER_DEBUG_SCOPETYPE;
48
 
49
typedef enum _D3D10_SHADER_DEBUG_VARTYPE
50
{
51
    D3D10_SHADER_DEBUG_VAR_VARIABLE,
52
    D3D10_SHADER_DEBUG_VAR_FUNCTION,
53
    D3D10_SHADER_DEBUG_VAR_FORCE_DWORD = 0x7fffffff,
54
} D3D10_SHADER_DEBUG_VARTYPE;
55
 
56
/////////////////////////////////////////////////////////////////////
57
// These are the serialized structures that get written to the file
58
/////////////////////////////////////////////////////////////////////
59
 
60
typedef struct _D3D10_SHADER_DEBUG_TOKEN_INFO
61
{
62
    UINT File;    // offset into file list
63
    UINT Line;    // line #
64
    UINT Column;  // column #
65
 
66
    UINT TokenLength;
67
    UINT TokenId; // offset to LPCSTR of length TokenLength in string datastore
68
} D3D10_SHADER_DEBUG_TOKEN_INFO;
69
 
70
// Variable list
71
typedef struct _D3D10_SHADER_DEBUG_VAR_INFO
72
{
73
    // Index into token list for declaring identifier
74
    UINT TokenId;
75
    D3D10_SHADER_VARIABLE_TYPE Type;
76
    // register and component for this variable, only valid/necessary for arrays
77
    UINT Register;
78
    UINT Component;
79
    // gives the original variable that declared this variable
80
    UINT ScopeVar;
81
    // this variable's offset in its ScopeVar
82
    UINT ScopeVarOffset;
83
} D3D10_SHADER_DEBUG_VAR_INFO;
84
 
85
typedef struct _D3D10_SHADER_DEBUG_INPUT_INFO
86
{
87
    // index into array of variables of variable to initialize
88
    UINT Var;
89
    // input, cbuffer, tbuffer
90
    D3D10_SHADER_DEBUG_REGTYPE InitialRegisterSet;
91
    // set to cbuffer or tbuffer slot, geometry shader input primitive #,
92
    // identifying register for indexable temp, or -1
93
    UINT InitialBank;
94
    // -1 if temp, otherwise gives register in register set
95
    UINT InitialRegister;
96
    // -1 if temp, otherwise gives component
97
    UINT InitialComponent;
98
    // initial value if literal
99
    UINT InitialValue;
100
} D3D10_SHADER_DEBUG_INPUT_INFO;
101
 
102
typedef struct _D3D10_SHADER_DEBUG_SCOPEVAR_INFO
103
{
104
    // Index into variable token
105
    UINT TokenId;
106
 
107
    D3D10_SHADER_DEBUG_VARTYPE VarType; // variable or function (different namespaces)
108
    D3D10_SHADER_VARIABLE_CLASS Class;
109
    UINT Rows;          // number of rows (matrices)
110
    UINT Columns;       // number of columns (vectors and matrices)
111
 
112
    // In an array of structures, one struct member scope is provided, and
113
    // you'll have to add the array stride times the index to the variable
114
    // index you find, then find that variable in this structure's list of
115
    // variables.
116
 
117
    // gives a scope to look up struct members. -1 if not a struct
118
    UINT StructMemberScope;
119
 
120
    // number of array indices
121
    UINT uArrayIndices;    // a[3][2][1] has 3 indices
122
    // maximum array index for each index
123
    // offset to UINT[uArrayIndices] in UINT datastore
124
    UINT ArrayElements; // a[3][2][1] has {3, 2, 1}
125
    // how many variables each array index moves
126
    // offset to UINT[uArrayIndices] in UINT datastore
127
    UINT ArrayStrides;  // a[3][2][1] has {2, 1, 1}
128
 
129
    UINT uVariables;
130
    // index of the first variable, later variables are offsets from this one
131
    UINT uFirstVariable;
132
} D3D10_SHADER_DEBUG_SCOPEVAR_INFO;
133
 
134
// scope data, this maps variable names to debug variables (useful for the watch window)
135
typedef struct _D3D10_SHADER_DEBUG_SCOPE_INFO
136
{
137
    D3D10_SHADER_DEBUG_SCOPETYPE ScopeType;
138
    UINT Name;         // offset to name of scope in strings list
139
    UINT uNameLen;     // length of name string
140
    UINT uVariables;
141
    UINT VariableData; // Offset to UINT[uVariables] indexing the Scope Variable list
142
} D3D10_SHADER_DEBUG_SCOPE_INFO;
143
 
144
// instruction outputs
145
typedef struct _D3D10_SHADER_DEBUG_OUTPUTVAR
146
{
147
    // index variable being written to, if -1 it's not going to a variable
148
    UINT Var;
149
    // range data that the compiler expects to be true
150
    UINT  uValueMin, uValueMax;
151
    INT   iValueMin, iValueMax;
152
    FLOAT fValueMin, fValueMax;
153
 
154
    BOOL  bNaNPossible, bInfPossible;
155
} D3D10_SHADER_DEBUG_OUTPUTVAR;
156
 
157
typedef struct _D3D10_SHADER_DEBUG_OUTPUTREG_INFO
158
{
159
    // Only temp, indexable temp, and output are valid here
160
    D3D10_SHADER_DEBUG_REGTYPE OutputRegisterSet;
161
    // -1 means no output
162
    UINT OutputReg;
163
    // if a temp array, identifier for which one
164
    UINT TempArrayReg;
165
    // -1 means masked out
166
    UINT OutputComponents[4];
167
    D3D10_SHADER_DEBUG_OUTPUTVAR OutputVars[4];
168
    // when indexing the output, get the value of this register, then add
169
    // that to uOutputReg. If uIndexReg is -1, then there is no index.
170
    // find the variable whose register is the sum (by looking in the ScopeVar)
171
    // and component matches, then set it. This should only happen for indexable
172
    // temps and outputs.
173
    UINT IndexReg;
174
    UINT IndexComp;
175
} D3D10_SHADER_DEBUG_OUTPUTREG_INFO;
176
 
177
// per instruction data
178
typedef struct _D3D10_SHADER_DEBUG_INST_INFO
179
{
180
    UINT Id; // Which instruction this is in the bytecode
181
    UINT Opcode; // instruction type
182
 
183
    // 0, 1, or 2
184
    UINT uOutputs;
185
 
186
    // up to two outputs per instruction
187
    D3D10_SHADER_DEBUG_OUTPUTREG_INFO pOutputs[2];
188
 
189
    // index into the list of tokens for this instruction's token
190
    UINT TokenId;
191
 
192
    // how many function calls deep this instruction is
193
    UINT NestingLevel;
194
 
195
    // list of scopes from outer-most to inner-most
196
    // Number of scopes
197
    UINT Scopes;
198
    UINT ScopeInfo; // Offset to UINT[uScopes] specifying indices of the ScopeInfo Array
199
 
200
    // list of variables accessed by this instruction
201
    // Number of variables
202
    UINT AccessedVars;
203
    UINT AccessedVarsInfo; // Offset to UINT[AccessedVars] specifying indices of the ScopeVariableInfo Array
204
} D3D10_SHADER_DEBUG_INST_INFO;
205
 
206
typedef struct _D3D10_SHADER_DEBUG_FILE_INFO
207
{
208
    UINT FileName;    // Offset to LPCSTR for file name
209
    UINT FileNameLen; // Length of file name
210
    UINT FileData;    // Offset to LPCSTR of length FileLen
211
    UINT FileLen;     // Length of file
212
} D3D10_SHADER_DEBUG_FILE_INFO;
213
 
214
typedef struct _D3D10_SHADER_DEBUG_INFO
215
{
216
    UINT Size;                             // sizeof(D3D10_SHADER_DEBUG_INFO)
217
    UINT Creator;                          // Offset to LPCSTR for compiler version
218
    UINT EntrypointName;                   // Offset to LPCSTR for Entry point name
219
    UINT ShaderTarget;                     // Offset to LPCSTR for shader target
220
    UINT CompileFlags;                     // flags used to compile
221
    UINT Files;                            // number of included files
222
    UINT FileInfo;                         // Offset to D3D10_SHADER_DEBUG_FILE_INFO[Files]
223
    UINT Instructions;                     // number of instructions
224
    UINT InstructionInfo;                  // Offset to D3D10_SHADER_DEBUG_INST_INFO[Instructions]
225
    UINT Variables;                        // number of variables
226
    UINT VariableInfo;                     // Offset to D3D10_SHADER_DEBUG_VAR_INFO[Variables]
227
    UINT InputVariables;                   // number of variables to initialize before running
228
    UINT InputVariableInfo;                // Offset to D3D10_SHADER_DEBUG_INPUT_INFO[InputVariables]
229
    UINT Tokens;                           // number of tokens to initialize
230
    UINT TokenInfo;                        // Offset to D3D10_SHADER_DEBUG_TOKEN_INFO[Tokens]
231
    UINT Scopes;                           // number of scopes
232
    UINT ScopeInfo;                        // Offset to D3D10_SHADER_DEBUG_SCOPE_INFO[Scopes]
233
    UINT ScopeVariables;                   // number of variables declared
234
    UINT ScopeVariableInfo;                // Offset to D3D10_SHADER_DEBUG_SCOPEVAR_INFO[Scopes]
235
    UINT UintOffset;                       // Offset to the UINT datastore, all UINT offsets are from this offset
236
    UINT StringOffset;                     // Offset to the string datastore, all string offsets are from this offset
237
} D3D10_SHADER_DEBUG_INFO;
238
 
239
//----------------------------------------------------------------------------
240
// ID3D10ShaderReflection1:
241
//----------------------------------------------------------------------------
242
 
243
//
244
// Interface definitions
245
//
246
 
247
typedef interface ID3D10ShaderReflection1 ID3D10ShaderReflection1;
248
typedef interface ID3D10ShaderReflection1 *LPD3D10SHADERREFLECTION1;
249
 
250
// {C3457783-A846-47CE-9520-CEA6F66E7447}
251
DEFINE_GUID(IID_ID3D10ShaderReflection1,
252
0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47);
253
 
254
#undef INTERFACE
255
#define INTERFACE ID3D10ShaderReflection1
256
 
257
DECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown)
258
{
259
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
260
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
261
    STDMETHOD_(ULONG, Release)(THIS) PURE;
262
 
263
    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *pDesc) PURE;
264
 
265
    STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE;
266
    STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE;
267
 
268
    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;
269
 
270
    STDMETHOD(GetInputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
271
    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
272
 
273
    STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE;
274
 
275
    STDMETHOD(GetResourceBindingDescByName)(THIS_ LPCSTR Name, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;
276
 
277
    STDMETHOD(GetMovInstructionCount)(THIS_ UINT* pCount) PURE;
278
    STDMETHOD(GetMovcInstructionCount)(THIS_ UINT* pCount) PURE;
279
    STDMETHOD(GetConversionInstructionCount)(THIS_ UINT* pCount) PURE;
280
    STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT* pCount) PURE;
281
 
282
    STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE* pPrim) PURE;
283
    STDMETHOD(IsLevel9Shader)(THIS_ BOOL* pbLevel9Shader) PURE;
284
    STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL* pbSampleFrequency) PURE;
285
};
286
 
287
//////////////////////////////////////////////////////////////////////////////
288
// APIs //////////////////////////////////////////////////////////////////////
289
//////////////////////////////////////////////////////////////////////////////
290
 
291
#ifdef __cplusplus
292
extern "C" {
293
#endif //__cplusplus
294
 
295
#ifdef __cplusplus
296
}
297
#endif //__cplusplus
298
 
299
#endif //__D3D10_1SHADER_H__
300