source: GTP/trunk/App/Demos/Geom/Shark3D/src/drv_d3d9_proghlsl.h @ 2236

Revision 2236, 11.8 KB checked in by gumbau, 17 years ago (diff)
Line 
1///////////////////////////////////////////////////////////////////////////////
2//
3//      ##  ######
4//       ######  ###
5//  ## ###############        Shark 3D Engine (www.shark3d.com)
6//   ########## # # #
7//    ########                Copyright (c) 1996-2006 Spinor GmbH.
8//   ######### # # #          All rights reserved.
9//  ##   ##########
10//      ##
11//
12///////////////////////////////////////////////////////////////////////////////
13
14//@cpp
15#ifndef S3D_DRV_D3D9_PROGHLSL_H
16#define S3D_DRV_D3D9_PROGHLSL_H
17
18#include "drv_d3d9_prog.h"
19#include "lib/stream/lib_stream_prepro.h"
20#include "util/snk/util_snk_extract.h"
21
22///////////////////////////////////////////////////////////////////////////////
23
24typedef s3d_CUtilArray<D3DXHANDLE> s3d_CDrvD3d9ProgHLSLVarArray;
25typedef s3d_CUtilSet<D3DXHANDLE> s3d_CDrvD3d9ProgHLSLVarSet;
26
27///////////////////////////////////////////////////////////////////////////////
28
29struct s3d_CDrvD3d9ProgHLSLTrackMat
30{
31    D3DXHANDLE m_Var;
32    int m_Chan;
33    int m_Slot;
34    int m_Trans;
35    int m_Cnt;
36
37    s3d_CDrvD3d9ProgHLSLTrackMat();
38};
39
40typedef s3d_CUtilArray<s3d_CDrvD3d9ProgHLSLTrackMat>
41        s3d_CDrvD3d9ProgHLSLTrackMatArray;
42
43///////////////////////////////////////////////////////////////////////////////
44
45struct s3d_CDrvD3d9ProgHLSLLight
46{
47    D3DXHANDLE m_PosVar;
48    D3DXHANDLE m_DirVar;
49    D3DXHANDLE m_AmbientVar;
50    D3DXHANDLE m_DiffuseVar;
51    D3DXHANDLE m_SpecularVar;
52    D3DXHANDLE m_AttenVar;
53
54    s3d_CDrvD3d9ProgHLSLLight();
55};
56
57typedef s3d_CUtilArray<s3d_CDrvD3d9ProgHLSLLight>
58        s3d_CDrvD3d9ProgHLSLLightArray;
59
60///////////////////////////////////////////////////////////////////////////////
61
62struct s3d_CDrvD3d9ProgHLSLTrackMtrl
63{
64    D3DXHANDLE m_PowerVar;
65    D3DXHANDLE m_EmissiveVar;
66
67    s3d_CDrvD3d9ProgHLSLTrackMtrl();
68};
69
70///////////////////////////////////////////////////////////////////////////////
71
72struct s3d_CDrvD3d9ProgHLSLParam
73{
74    s3d_CUtilStr m_Info;
75    D3DXHANDLE m_Var;
76    int m_Type;
77    bool m_HadError;
78
79    s3d_CDrvD3d9ProgHLSLParam();
80};
81
82typedef s3d_CUtilKeyEntry<s3d_CUtilAtomPtr, s3d_CDrvD3d9ProgHLSLParam>
83        s3d_CDrvD3d9ProgHLSLParamEntry;
84typedef s3d_CUtilArray<s3d_CDrvD3d9ProgHLSLParamEntry>
85        s3d_CDrvD3d9ProgHLSLParamArray;
86
87///////////////////////////////////////////////////////////////////////////////
88
89//@
90struct s3d_CDrvD3d9ProgHLSLTrackBlk
91{
92    s3d_CUtilStr m_CodeName;
93    s3d_CUtilStr m_CodeInfo;
94
95    s3d_CDrvD3d9ConstTable m_ConstTab;
96
97    s3d_CDrvD3d9ProgHLSLParamArray m_ParamArray;
98    s3d_CDrvD3d9ProgHLSLVarArray m_TexSizeArray;
99    s3d_CDrvD3d9ProgHLSLVarArray m_TexRcpSizeArray;
100    s3d_CDrvD3d9ProgHLSLTrackMatArray m_MatTrackArray;
101    s3d_CDrvD3d9ProgHLSLTrackMatArray m_BoneTrackArray;
102    D3DXHANDLE m_ActiveLightCntVar;
103    s3d_CDrvD3d9ProgHLSLLightArray m_LightTrackArray;
104    s3d_CDrvD3d9ProgHLSLTrackMtrl m_Mtl;
105    D3DXHANDLE m_FogVar;
106
107    s3d_CDrvD3d9ProgHLSLTrackBlk();
108};
109
110///////////////////////////////////////////////////////////////////////////////
111
112//@
113class s3d_CDrvD3d9ProgHLSL
114        : public s3d_CDrvD3d9Prog
115{
116public:
117    s3d_CDrvD3d9ProgHLSL(
118            s3d_CUtilNotifGather *NotifGather, s3d_CUtilStr_cr Info,
119            s3d_CDrvD3d9ProgCtx *ProgCtx,
120            s3d_CUtilSnkChunk *ParamVert, s3d_CUtilSnkChunk *ParamPix);
121
122    void TrackParams(
123            s3d_CDrvGfxParam_cr GfxParam,
124            const s3d_CDrvD3d9ParamBlk &ParamBlk,
125            const s3d_CDrvD3d9ParamBlkState &ParamBlkState);
126    void TrackTransfBone(
127            s3d_CSysIntps BoneIdxCnt, const s3d_CSysInt32u *BoneIdxData,
128            s3d_CSysIntps MatBoneCnt, const D3DXMATRIXA16 *MatBoneArray);
129    void CalcVertBufDesc(
130            const s3d_CDrvGfxCharge *Charge,
131            s3d_CDrvD3d9VertBufDesc &VertBufDesc) const;
132    bool IsValid();
133    void GetVertProgCodeInfoName(
134            s3d_CUtilStr &CodeInfo, s3d_CUtilStr &CodeName) const;
135    void GetPixProgCodeInfoName(
136            s3d_CUtilStr &CodeInfo, s3d_CUtilStr &CodeName) const;
137private:
138    void TrackMatTrans(
139            const D3DXHANDLE &Var, int Trans,
140            const D3DXMATRIXA16 *Mat, s3d_CSysIntps Cnt,
141            const LPD3DXCONSTANTTABLE ConstTab, LPDIRECT3DDEVICE9 D3dDev);
142    void TrackParams(
143            s3d_CDrvGfxParam_cr GfxParam,
144            const s3d_CDrvD3d9ParamBlk &ParamBlk,
145            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
146            s3d_CDrvD3d9ProgHLSLTrackBlk &TrackBlk);
147    void TrackNoLighting(
148            const s3d_CDrvD3d9ParamBlk &ParamBlk,
149            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
150            s3d_CDrvD3d9ProgHLSLTrackBlk &TrackBlk);
151    void TrackLighting(
152            const s3d_CDrvD3d9ParamBlk &ParamBlk,
153            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
154            s3d_CDrvD3d9ProgHLSLTrackBlk &TrackBlk);
155    void TrackLightingBlack(
156            const s3d_CDrvD3d9ParamBlk &ParamBlk,
157            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
158            s3d_CDrvD3d9ProgHLSLTrackBlk &TrackBlk,
159            s3d_CSysIntps FromLight);
160    void TrackTransfBone(
161            s3d_CSysIntps BoneIdxCnt, const s3d_CSysInt32u *BoneIdxData,
162            s3d_CSysIntps MatBoneCnt, const D3DXMATRIXA16 *MatBoneArray,
163            s3d_CDrvD3d9ProgHLSLTrackBlk &TrackBlk);
164
165    s3d_CDrvD3d9ProgHLSLTrackBlk m_VertTrackBlk;
166    s3d_CDrvD3d9ProgHLSLTrackBlk m_PixTrackBlk;
167};
168
169//@
170typedef s3d_CUtilPtr<s3d_CDrvD3d9ProgHLSL> s3d_CDrvD3d9ProgHLSLPtr;
171
172///////////////////////////////////////////////////////////////////////////////
173
174//@
175class s3d_CDrvD3d9ProgHLSLUtil
176{
177public:
178    static void CreateShader(
179            s3d_CUtilNotifGather *NotifGather, s3d_CUtilSnkChunk *Param,
180            s3d_CDrvD3d9ProgCtx *ProgCtx,
181            bool VertShader, s3d_CDrvD3d9Prog *Prog,
182            s3d_CDrvD3d9ProgHLSLTrackBlk &TrackBlk);
183
184    static void ExtractPredefine(
185            const s3d_CDrvD3d9ProgCtx *ProgCtx,
186            s3d_CLibStreamPreproState *PreproState,
187            s3d_CUtilSnkExtract &SnkExtract);
188    static void ExtractParamArray(
189            const s3d_CDrvD3d9ProgCtx *ProgCtx,
190            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
191            const LPD3DXCONSTANTTABLE ConstTab,
192            s3d_CDrvD3d9ProgHLSLParamArray &ParamArray,
193            s3d_CDrvD3d9ProgHLSLVarSet &VarSet,
194            s3d_CUtilSnkExtract &SnkExtract);
195    static void ExtractTexSize(
196            const s3d_CDrvD3d9ProgCtx *ProgCtx,
197            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
198            const LPD3DXCONSTANTTABLE ConstTab,
199            s3d_CDrvD3d9ProgHLSLVarArray &TexSizeArray,
200            s3d_CDrvD3d9ProgHLSLVarArray &TexRcpSizeArray,
201            s3d_CDrvD3d9ProgHLSLVarSet &VarSet,
202            s3d_CUtilSnkExtract &SnkExtract);
203    static void ExtractTrackArray(
204            const s3d_CDrvD3d9ProgCtx *ProgCtx,
205            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
206            const LPD3DXCONSTANTTABLE ConstTab,
207            s3d_CDrvD3d9ProgHLSLTrackMatArray &MatTrackArray,
208            s3d_CDrvD3d9ProgHLSLTrackMatArray &BoneTrackArray,
209            s3d_CDrvD3d9ProgHLSLVarSet &VarSet,
210            s3d_CUtilSnkExtract &SnkExtract);
211    static void ExtractLightArray(
212            const s3d_CDrvD3d9ProgCtx *ProgCtx,
213            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
214            const LPD3DXCONSTANTTABLE ConstTab,
215            D3DXHANDLE &ActiveLightCntVar,
216            s3d_CDrvD3d9ProgHLSLLightArray &LightTrackArray,
217            s3d_CDrvD3d9ProgHLSLVarSet &VarSet,
218            s3d_CUtilSnkExtract &SnkExtract);
219    static void ExtractMtl(
220            const s3d_CDrvD3d9ProgCtx *ProgCtx,
221            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
222            const LPD3DXCONSTANTTABLE ConstTab,
223            s3d_CDrvD3d9ProgHLSLTrackMtrl &Mtl,
224            s3d_CDrvD3d9ProgHLSLVarSet &VarSet,
225            s3d_CUtilSnkExtract &SnkExtract);
226    static void ExtractFog(
227            const s3d_CDrvD3d9ProgCtx *ProgCtx,
228            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
229            const LPD3DXCONSTANTTABLE ConstTab,
230            D3DXHANDLE &FogVar,
231            s3d_CDrvD3d9ProgHLSLVarSet &VarSet,
232            s3d_CUtilSnkExtract &SnkExtract);
233    static void InitTrackBlk(
234            const s3d_CDrvD3d9ProgCtx *ProgCtx,
235            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
236            s3d_CDrvD3d9ProgHLSLTrackBlk &TrackBlk,
237            s3d_CUtilSnkExtract &SnkExtract);
238
239    static bool CompileFromRes(
240            s3d_CUtilNotifGather *NotifGather, const s3d_CDrvD3d9ProgCtx
241                    *ProgCtx,
242            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
243            s3d_CUtilStr_cr EntryPoint, s3d_CUtilStr_cr Profile,
244            s3d_CLibStreamPreproState *PreproState,
245            s3d_CDrvD3d9Buf &CodeBuf, s3d_CDrvD3d9ConstTable &ConstTab);
246    static bool CompileFromFile(
247            s3d_CUtilNotifGather *NotifGather, const s3d_CDrvD3d9ProgCtx
248                    *ProgCtx,
249            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
250            s3d_CUtilStr_cr EntryPoint, s3d_CUtilStr_cr Profile,
251            s3d_CLibStreamPreproState *PreproState,
252            s3d_CDrvD3d9Buf &CodeBuf, s3d_CDrvD3d9ConstTable &ConstTab);
253
254    static void ResolveVar(
255            const s3d_CDrvD3d9ProgCtx *ProgCtx,
256            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
257            LPD3DXCONSTANTTABLE ConstTab,
258            D3DXHANDLE &Var, s3d_CUtilStr_cr VarName,
259            s3d_CDrvD3d9ProgHLSLVarSet &VarSet);
260
261    static void EnumAllVars(
262            const s3d_CDrvD3d9ProgCtx *ProgCtx,
263            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
264            LPD3DXCONSTANTTABLE ConstTab,
265            const s3d_CDrvD3d9ProgHLSLVarSet &VarSet);
266    static void EnumVar(
267            const s3d_CDrvD3d9ProgCtx *ProgCtx,
268            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
269            LPD3DXCONSTANTTABLE ConstTab,
270            D3DXHANDLE Var, s3d_CUtilStr_cr VarName,
271            const s3d_CDrvD3d9ProgHLSLVarSet &VarSet);
272
273    static void CheckVarInitialized(
274            const s3d_CDrvD3d9ProgCtx *ProgCtx,
275            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
276            D3DXHANDLE Var, s3d_CUtilStr_cr VarName,
277            const D3DXCONSTANT_DESC &VarDesc,
278            const s3d_CDrvD3d9ProgHLSLVarSet &VarSet);
279};
280
281///////////////////////////////////////////////////////////////////////////////
282// Implementations
283///////////////////////////////////////////////////////////////////////////////
284
285S3D_SYS_INLINE
286s3d_CDrvD3d9ProgHLSLTrackMat::s3d_CDrvD3d9ProgHLSLTrackMat()
287{
288    m_Var = 0;
289    m_Chan = 0;
290    m_Slot = 0;
291    m_Trans = 0;
292    m_Cnt = 0;
293}
294
295///////////////////////////////////////////////////////////////////////////////
296
297S3D_SYS_INLINE
298s3d_CDrvD3d9ProgHLSLLight::s3d_CDrvD3d9ProgHLSLLight()
299{
300    m_PosVar = 0;
301    m_DirVar = 0;
302    m_AmbientVar = 0;
303    m_DiffuseVar = 0;
304    m_SpecularVar = 0;
305    m_AttenVar = 0;
306}
307
308///////////////////////////////////////////////////////////////////////////////
309
310S3D_SYS_INLINE
311s3d_CDrvD3d9ProgHLSLTrackMtrl::s3d_CDrvD3d9ProgHLSLTrackMtrl()
312{
313    m_PowerVar = 0;
314    m_EmissiveVar = 0;
315}
316
317///////////////////////////////////////////////////////////////////////////////
318
319S3D_SYS_INLINE
320s3d_CDrvD3d9ProgHLSLParam::s3d_CDrvD3d9ProgHLSLParam()
321{
322    m_Var = 0;
323    m_Type = -1;
324    m_HadError = false;
325}
326
327///////////////////////////////////////////////////////////////////////////////
328
329S3D_SYS_INLINE
330s3d_CDrvD3d9ProgHLSLTrackBlk::s3d_CDrvD3d9ProgHLSLTrackBlk()
331{
332    m_ActiveLightCntVar = 0;
333    m_FogVar = 0;
334}
335
336///////////////////////////////////////////////////////////////////////////////
337
338#endif
Note: See TracBrowser for help on using the repository browser.