1#include <_mingw_unicode.h>
2#undef INTERFACE
3/*
4 * Copyright 2008 Luis Busquets
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include "d3dx9.h"
22
23#ifndef __D3DX9SHADER_H__
24#define __D3DX9SHADER_H__
25
26#define D3DXSHADER_DEBUG                          0x1
27#define D3DXSHADER_SKIPVALIDATION                 0x2
28#define D3DXSHADER_SKIPOPTIMIZATION               0x4
29#define D3DXSHADER_PACKMATRIX_ROWMAJOR            0x8
30#define D3DXSHADER_PACKMATRIX_COLUMNMAJOR         0x10
31#define D3DXSHADER_PARTIALPRECISION               0x20
32#define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT        0x40
33#define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT        0x80
34#define D3DXSHADER_NO_PRESHADER                   0x100
35#define D3DXSHADER_AVOID_FLOW_CONTROL             0x200
36#define D3DXSHADER_PREFER_FLOW_CONTROL            0x400
37#define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000
38#define D3DXSHADER_IEEE_STRICTNESS                0x2000
39
40#define D3DXSHADER_OPTIMIZATION_LEVEL0            0x4000
41#define D3DXSHADER_OPTIMIZATION_LEVEL1            0x0
42#define D3DXSHADER_OPTIMIZATION_LEVEL2            0xC000
43#define D3DXSHADER_OPTIMIZATION_LEVEL3            0x8000
44
45#define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL        0x10000
46
47typedef LPCSTR D3DXHANDLE;
48
49typedef enum _D3DXREGISTER_SET
50{
51    D3DXRS_BOOL,
52    D3DXRS_INT4,
53    D3DXRS_FLOAT4,
54    D3DXRS_SAMPLER,
55    D3DXRS_FORCE_DWORD = 0x7fffffff
56} D3DXREGISTER_SET, *LPD3DXREGISTER_SET;
57
58typedef enum D3DXPARAMETER_CLASS
59{
60    D3DXPC_SCALAR,
61    D3DXPC_VECTOR,
62    D3DXPC_MATRIX_ROWS,
63    D3DXPC_MATRIX_COLUMNS,
64    D3DXPC_OBJECT,
65    D3DXPC_STRUCT,
66    D3DXPC_FORCE_DWORD = 0x7fffffff,
67} D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS;
68
69typedef enum D3DXPARAMETER_TYPE
70{
71    D3DXPT_VOID,
72    D3DXPT_BOOL,
73    D3DXPT_INT,
74    D3DXPT_FLOAT,
75    D3DXPT_STRING,
76    D3DXPT_TEXTURE,
77    D3DXPT_TEXTURE1D,
78    D3DXPT_TEXTURE2D,
79    D3DXPT_TEXTURE3D,
80    D3DXPT_TEXTURECUBE,
81    D3DXPT_SAMPLER,
82    D3DXPT_SAMPLER1D,
83    D3DXPT_SAMPLER2D,
84    D3DXPT_SAMPLER3D,
85    D3DXPT_SAMPLERCUBE,
86    D3DXPT_PIXELSHADER,
87    D3DXPT_VERTEXSHADER,
88    D3DXPT_PIXELFRAGMENT,
89    D3DXPT_VERTEXFRAGMENT,
90    D3DXPT_UNSUPPORTED,
91    D3DXPT_FORCE_DWORD = 0x7fffffff,
92} D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE;
93
94typedef struct _D3DXCONSTANTTABLE_DESC
95{
96    LPCSTR Creator;
97    DWORD Version;
98    UINT Constants;
99} D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC;
100
101typedef struct _D3DXCONSTANT_DESC
102{
103    LPCSTR Name;
104    D3DXREGISTER_SET RegisterSet;
105    UINT RegisterIndex;
106    UINT RegisterCount;
107    D3DXPARAMETER_CLASS Class;
108    D3DXPARAMETER_TYPE Type;
109    UINT Rows;
110    UINT Columns;
111    UINT Elements;
112    UINT StructMembers;
113    UINT Bytes;
114    LPCVOID DefaultValue;
115} D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC;
116
117DEFINE_GUID(IID_ID3DXConstantTable, 0x9dca3190, 0x38b9, 0x4fc3, 0x92, 0xe3, 0x39, 0xc6, 0xdd, 0xfb, 0x35, 0x8b);
118
119#undef INTERFACE
120#define INTERFACE ID3DXConstantTable
121
122DECLARE_INTERFACE_(ID3DXConstantTable, ID3DXBuffer)
123{
124    /*** IUnknown methods ***/
125    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
126    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
127    STDMETHOD_(ULONG, Release)(THIS) PURE;
128    /*** ID3DXBuffer methods ***/
129    STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE;
130    STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
131    /*** ID3DXConstantTable methods ***/
132    STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
133    STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
134    STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE;
135    STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
136    STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE;
137    STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
138    STDMETHOD(SetDefaults)(THIS_ struct IDirect3DDevice9 *device) PURE;
139    STDMETHOD(SetValue)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
140            const void *data, UINT data_size) PURE;
141    STDMETHOD(SetBool)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, WINBOOL value) PURE;
142    STDMETHOD(SetBoolArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
143            const WINBOOL *values, UINT value_count) PURE;
144    STDMETHOD(SetInt)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, INT value) PURE;
145    STDMETHOD(SetIntArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
146            const INT *values, UINT value_count) PURE;
147    STDMETHOD(SetFloat)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, float value) PURE;
148    STDMETHOD(SetFloatArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
149            const float *values, UINT value_count) PURE;
150    STDMETHOD(SetVector)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *value) PURE;
151    STDMETHOD(SetVectorArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
152            const D3DXVECTOR4 *values, UINT value_count) PURE;
153    STDMETHOD(SetMatrix)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *value) PURE;
154    STDMETHOD(SetMatrixArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
155            const D3DXMATRIX *values, UINT value_count) PURE;
156    STDMETHOD(SetMatrixPointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
157            const D3DXMATRIX **values, UINT value_count) PURE;
158    STDMETHOD(SetMatrixTranspose)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
159            const D3DXMATRIX *value) PURE;
160    STDMETHOD(SetMatrixTransposeArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
161            const D3DXMATRIX *values, UINT value_count) PURE;
162    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
163            const D3DXMATRIX **values, UINT value_count) PURE;
164};
165#undef INTERFACE
166
167#if !defined(__cplusplus) || defined(CINTERFACE)
168/*** IUnknown methods ***/
169#define ID3DXConstantTable_QueryInterface(p,a,b)                      (p)->lpVtbl->QueryInterface(p,a,b)
170#define ID3DXConstantTable_AddRef(p)                                  (p)->lpVtbl->AddRef(p)
171#define ID3DXConstantTable_Release(p)                                 (p)->lpVtbl->Release(p)
172/*** ID3DXBuffer methods ***/
173#define ID3DXConstantTable_GetBufferPointer(p)                        (p)->lpVtbl->GetBufferPointer(p)
174#define ID3DXConstantTable_GetBufferSize(p)                           (p)->lpVtbl->GetBufferSize(p)
175/*** ID3DXConstantTable methods ***/
176#define ID3DXConstantTable_GetDesc(p,a)                               (p)->lpVtbl->GetDesc(p,a)
177#define ID3DXConstantTable_GetConstantDesc(p,a,b,c)                   (p)->lpVtbl->GetConstantDesc(p,a,b,c)
178#define ID3DXConstantTable_GetSamplerIndex(p,a)                       (p)->lpVtbl->GetSamplerIndex(p,a)
179#define ID3DXConstantTable_GetConstant(p,a,b)                         (p)->lpVtbl->GetConstant(p,a,b)
180#define ID3DXConstantTable_GetConstantByName(p,a,b)                   (p)->lpVtbl->GetConstantByName(p,a,b)
181#define ID3DXConstantTable_GetConstantElement(p,a,b)                  (p)->lpVtbl->GetConstantElement(p,a,b)
182#define ID3DXConstantTable_SetDefaults(p,a)                           (p)->lpVtbl->SetDefaults(p,a)
183#define ID3DXConstantTable_SetValue(p,a,b,c,d)                        (p)->lpVtbl->SetValue(p,a,b,c,d)
184#define ID3DXConstantTable_SetBool(p,a,b,c)                           (p)->lpVtbl->SetBool(p,a,b,c)
185#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d)                    (p)->lpVtbl->SetBoolArray(p,a,b,c,d)
186#define ID3DXConstantTable_SetInt(p,a,b,c)                            (p)->lpVtbl->SetInt(p,a,b,c)
187#define ID3DXConstantTable_SetIntArray(p,a,b,c,d)                     (p)->lpVtbl->SetIntArray(p,a,b,c,d)
188#define ID3DXConstantTable_SetFloat(p,a,b,c)                          (p)->lpVtbl->SetFloat(p,a,b,c)
189#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d)                   (p)->lpVtbl->SetFloatArray(p,a,b,c,d)
190#define ID3DXConstantTable_SetVector(p,a,b,c)                         (p)->lpVtbl->SetVector(p,a,b,c)
191#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d)                  (p)->lpVtbl->SetVectorArray(p,a,b,c,d)
192#define ID3DXConstantTable_SetMatrix(p,a,b,c)                         (p)->lpVtbl->SetMatrix(p,a,b,c)
193#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d)                  (p)->lpVtbl->SetMatrixArray(p,a,b,c,d)
194#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d)           (p)->lpVtbl->SetMatrixPointerArray(p,a,b,c,d)
195#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c)                (p)->lpVtbl->SetMatrixTranspose(p,a,b,c)
196#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d)         (p)->lpVtbl->SetMatrixTransposeArray(p,a,b,c,d)
197#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d)  (p)->lpVtbl->SetMatrixTransposePointerArray(p,a,b,c,d)
198#else
199/*** IUnknown methods ***/
200#define ID3DXConstantTable_QueryInterface(p,a,b)                      (p)->QueryInterface(a,b)
201#define ID3DXConstantTable_AddRef(p)                                  (p)->AddRef()
202#define ID3DXConstantTable_Release(p)                                 (p)->Release()
203/*** ID3DXBuffer methods ***/
204#define ID3DXConstantTable_GetBufferPointer(p)                        (p)->GetBufferPointer()
205#define ID3DXConstantTable_GetBufferSize(p)                           (p)->GetBufferSize()
206/*** ID3DXConstantTable methods ***/
207#define ID3DXConstantTable_GetDesc(p,a)                               (p)->GetDesc(a)
208#define ID3DXConstantTable_GetConstantDesc(p,a,b,c)                   (p)->GetConstantDesc(a,b,c)
209#define ID3DXConstantTable_GetSamplerIndex(p,a)                       (p)->GetConstantDesc(a)
210#define ID3DXConstantTable_GetConstant(p,a,b)                         (p)->GetConstant(a,b)
211#define ID3DXConstantTable_GetConstantByName(p,a,b)                   (p)->GetConstantByName(a,b)
212#define ID3DXConstantTable_GetConstantElement(p,a,b)                  (p)->GetConstantElement(a,b)
213#define ID3DXConstantTable_SetDefaults(p,a)                           (p)->SetDefaults(a)
214#define ID3DXConstantTable_SetValue(p,a,b,c,d)                        (p)->SetValue(a,b,c,d)
215#define ID3DXConstantTable_SetBool(p,a,b,c)                           (p)->SetBool(a,b,c)
216#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d)                    (p)->SetBoolArray(a,b,c,d)
217#define ID3DXConstantTable_SetInt(p,a,b,c)                            (p)->SetInt(a,b,c)
218#define ID3DXConstantTable_SetIntArray(p,a,b,c,d)                     (p)->SetIntArray(a,b,c,d)
219#define ID3DXConstantTable_SetFloat(p,a,b,c)                          (p)->SetFloat(a,b,c)
220#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d)                   (p)->SetFloatArray(a,b,c,d)
221#define ID3DXConstantTable_SetVector(p,a,b,c)                         (p)->SetVector(a,b,c)
222#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d)                  (p)->SetVectorArray(a,b,c,d)
223#define ID3DXConstantTable_SetMatrix(p,a,b,c)                         (p)->SetMatrix(a,b,c)
224#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d)                  (p)->SetMatrixArray(a,b,c,d)
225#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d)           (p)->SetMatrixPointerArray(a,b,c,d)
226#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c)                (p)->SetMatrixTranspose(a,b,c)
227#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d)         (p)->SetMatrixTransposeArray(a,b,c,d)
228#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d)  (p)->SetMatrixTransposePointerArray(a,b,c,d)
229#endif
230
231typedef struct ID3DXConstantTable *LPD3DXCONSTANTTABLE;
232
233typedef struct _D3DXMACRO {
234    LPCSTR Name;
235    LPCSTR Definition;
236} D3DXMACRO, *LPD3DXMACRO;
237
238typedef struct _D3DXSEMANTIC {
239    UINT Usage;
240    UINT UsageIndex;
241} D3DXSEMANTIC, *LPD3DXSEMANTIC;
242
243typedef enum _D3DXINCLUDE_TYPE
244{
245    D3DXINC_LOCAL,
246    D3DXINC_SYSTEM,
247    D3DXINC_FORCE_DWORD = 0x7fffffff,
248} D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE;
249
250#define INTERFACE ID3DXInclude
251
252DECLARE_INTERFACE(ID3DXInclude)
253{
254    STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE include_type, LPCSTR filename, LPCVOID parent_data, LPCVOID *data, UINT *bytes) PURE;
255    STDMETHOD(Close)(THIS_ LPCVOID data) PURE;
256};
257#undef INTERFACE
258
259#define ID3DXInclude_Open(p,a,b,c,d,e)  (p)->lpVtbl->Open(p,a,b,c,d,e)
260#define ID3DXInclude_Close(p,a)         (p)->lpVtbl->Close(p,a)
261
262typedef struct ID3DXInclude *LPD3DXINCLUDE;
263
264#ifdef __cplusplus
265extern "C" {
266#endif
267
268const char * WINAPI D3DXGetPixelShaderProfile(struct IDirect3DDevice9 *device);
269UINT WINAPI D3DXGetShaderSize(const DWORD *byte_code);
270DWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code);
271const char * WINAPI D3DXGetVertexShaderProfile(struct IDirect3DDevice9 *device);
272HRESULT WINAPI D3DXFindShaderComment(CONST DWORD* byte_code, DWORD fourcc, LPCVOID* data, UINT* size);
273HRESULT WINAPI D3DXGetShaderSamplers(CONST DWORD *byte_code, LPCSTR *samplers, UINT *count);
274
275HRESULT WINAPI D3DXAssembleShaderFromFileA(const char *filename, const D3DXMACRO *defines,
276        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
277HRESULT WINAPI D3DXAssembleShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
278        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
279#define D3DXAssembleShaderFromFile __MINGW_NAME_AW(D3DXAssembleShaderFromFile)
280
281HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
282        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
283HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
284        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
285#define D3DXAssembleShaderFromResource __MINGW_NAME_AW(D3DXAssembleShaderFromResource)
286
287HRESULT WINAPI D3DXAssembleShader(const char *data, UINT data_len, const D3DXMACRO *defines,
288        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
289
290HRESULT WINAPI D3DXCompileShader(const char *src_data, UINT data_len, const D3DXMACRO *defines,
291        ID3DXInclude *include, const char *function_name, const char *profile, DWORD flags,
292        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
293
294HRESULT WINAPI D3DXCompileShaderFromFileA(const char *filename, const D3DXMACRO *defines,
295        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
296        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
297HRESULT WINAPI D3DXCompileShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
298        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
299        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
300#define D3DXCompileShaderFromFile __MINGW_NAME_AW(D3DXCompileShaderFromFile)
301
302HRESULT WINAPI D3DXCompileShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
303        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
304        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
305HRESULT WINAPI D3DXCompileShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
306        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
307        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
308#define D3DXCompileShaderFromResource __MINGW_NAME_AW(D3DXCompileShaderFromResource)
309
310HRESULT WINAPI D3DXPreprocessShader(const char *data, UINT data_len, const D3DXMACRO *defines,
311        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
312
313HRESULT WINAPI D3DXPreprocessShaderFromFileA(const char *filename, const D3DXMACRO *defines,
314        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
315HRESULT WINAPI D3DXPreprocessShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
316        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
317#define D3DXPreprocessShaderFromFile __MINGW_NAME_AW(D3DXPreprocessShaderFromFile)
318
319HRESULT WINAPI D3DXPreprocessShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
320        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
321HRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
322        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
323#define D3DXPreprocessShaderFromResource __MINGW_NAME_AW(D3DXPreprocessShaderFromResource)
324
325HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, ID3DXConstantTable **constant_table);
326
327HRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table);
328
329#ifdef __cplusplus
330}
331#endif
332
333typedef struct _D3DXSHADER_CONSTANTTABLE
334{
335    DWORD Size;
336    DWORD Creator;
337    DWORD Version;
338    DWORD Constants;
339    DWORD ConstantInfo;
340    DWORD Flags;
341    DWORD Target;
342} D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE;
343
344typedef struct _D3DXSHADER_CONSTANTINFO
345{
346    DWORD Name;
347    WORD  RegisterSet;
348    WORD  RegisterIndex;
349    WORD  RegisterCount;
350    WORD  Reserved;
351    DWORD TypeInfo;
352    DWORD DefaultValue;
353} D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO;
354
355typedef struct _D3DXSHADER_TYPEINFO
356{
357    WORD  Class;
358    WORD  Type;
359    WORD  Rows;
360    WORD  Columns;
361    WORD  Elements;
362    WORD  StructMembers;
363    DWORD StructMemberInfo;
364} D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO;
365
366typedef struct _D3DXSHADER_STRUCTMEMBERINFO
367{
368    DWORD Name;
369    DWORD TypeInfo;
370} D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO;
371
372#endif /* __D3DX9SHADER_H__ */
373