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

Revision 2236, 10.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_PROGASM_H
16#define S3D_DRV_D3D9_PROGASM_H
17
18#include "drv_d3d9_prog.h"
19#include "drv_d3d9_util.h"
20#include "lib/stream/lib_stream_prepro.h"
21#include "util/snk/util_snk_extract.h"
22
23///////////////////////////////////////////////////////////////////////////////
24
25typedef s3d_CUtilIntArray s3d_CDrvD3d9ProgAsmAddrArray;
26
27///////////////////////////////////////////////////////////////////////////////
28
29struct s3d_CDrvD3d9ProgAsmTrackMat
30{
31    int m_Addr;
32    int m_Chan;
33    int m_Slot;
34    int m_Cnt;
35    int m_Trans;
36
37    s3d_CDrvD3d9ProgAsmTrackMat();
38};
39
40typedef s3d_CUtilArray<s3d_CDrvD3d9ProgAsmTrackMat>
41        s3d_CDrvD3d9ProgAsmTrackMatArray;
42
43///////////////////////////////////////////////////////////////////////////////
44
45struct s3d_CDrvD3d9ProgAsmLight
46{
47    int m_PosAddr;
48    int m_DirAddr;
49    int m_AmbientAddr;
50    int m_DiffuseAddr;
51    int m_SpecularAddr;
52    int m_AttenAddr;
53
54    s3d_CDrvD3d9ProgAsmLight();
55};
56
57typedef s3d_CUtilArray<s3d_CDrvD3d9ProgAsmLight> s3d_CDrvD3d9ProgAsmLightArray;
58
59///////////////////////////////////////////////////////////////////////////////
60
61struct s3d_CDrvD3d9ProgAsmTrackMtrl
62{
63    int m_PowerAddr;
64    int m_EmissiveAddr;
65
66    s3d_CDrvD3d9ProgAsmTrackMtrl();
67};
68
69///////////////////////////////////////////////////////////////////////////////
70
71struct s3d_CDrvD3d9ProgAsmParam
72{
73    s3d_CUtilStr m_Info;
74    int m_Addr;
75    int m_Type;
76    bool m_HadError;
77
78    s3d_CDrvD3d9ProgAsmParam();
79};
80
81typedef s3d_CUtilKeyEntry<s3d_CUtilAtomPtr, s3d_CDrvD3d9ProgAsmParam>
82        s3d_CDrvD3d9ProgAsmParamEntry;
83typedef s3d_CUtilArray<s3d_CDrvD3d9ProgAsmParamEntry>
84        s3d_CDrvD3d9ProgAsmParamArray;
85
86///////////////////////////////////////////////////////////////////////////////
87
88//@
89struct s3d_CDrvD3d9ProgAsmTrackBlk
90{
91    s3d_CUtilStr m_CodeName;
92    s3d_CUtilStr m_CodeInfo;
93
94    s3d_CDrvD3d9ProgAsmParamArray m_ParamArray;
95    s3d_CDrvD3d9ProgAsmAddrArray m_TexSizeArray;
96    s3d_CDrvD3d9ProgAsmAddrArray m_TexRcpSizeArray;
97    s3d_CDrvD3d9ProgAsmTrackMatArray m_MatTrackArray;
98    s3d_CDrvD3d9ProgAsmTrackMatArray m_BoneTrackArray;
99    int m_ActiveLightCntAddr;
100    s3d_CDrvD3d9ProgAsmLightArray m_LightTrackArray;
101    s3d_CDrvD3d9ProgAsmTrackMtrl m_Mtl;
102    int m_FogAddr;
103
104    virtual void SetShaderConstF(
105            s3d_CDrvD3d9ProgCtx *ProgCtx,
106            UINT ConstAddr, const float *ConstVal, UINT ConstCnt) const = 0;
107    virtual void SetShaderConstI(
108            s3d_CDrvD3d9ProgCtx *ProgCtx,
109            UINT ConstAddr, const int *ConstVal, UINT ConstCnt) const = 0;
110
111    s3d_CDrvD3d9ProgAsmTrackBlk();
112};
113
114///////////////////////////////////////////////////////////////////////////////
115
116//@
117struct s3d_CDrvD3d9ProgAsmTrackBlkVert
118        : public s3d_CDrvD3d9ProgAsmTrackBlk
119{
120    void SetShaderConstF(
121            s3d_CDrvD3d9ProgCtx *ProgCtx,
122            UINT ConstAddr, const float *ConstVal, UINT ConstCnt) const;
123
124    void SetShaderConstI(
125            s3d_CDrvD3d9ProgCtx *ProgCtx,
126            UINT ConstAddr, const int *ConstVal, UINT ConstCnt) const;
127};
128
129///////////////////////////////////////////////////////////////////////////////
130
131//@
132struct s3d_CDrvD3d9ProgAsmTrackBlkPix
133        : public s3d_CDrvD3d9ProgAsmTrackBlk
134{
135    void SetShaderConstF(
136            s3d_CDrvD3d9ProgCtx *ProgCtx,
137            UINT ConstAddr, const float *ConstVal, UINT ConstCnt) const;
138
139    void SetShaderConstI(
140            s3d_CDrvD3d9ProgCtx *ProgCtx,
141            UINT ConstAddr, const int *ConstVal, UINT ConstCnt) const;
142};
143
144///////////////////////////////////////////////////////////////////////////////
145
146//@
147class s3d_CDrvD3d9ProgAsm
148        : public s3d_CDrvD3d9Prog
149{
150public:
151    s3d_CDrvD3d9ProgAsm(
152            s3d_CUtilNotifGather *NotifGather, s3d_CUtilStr_cr Info,
153            s3d_CDrvD3d9ProgCtx *ProgCtx,
154            s3d_CUtilSnkChunk *ParamVert, s3d_CUtilSnkChunk *ParamPix);
155
156    void TrackParams(
157            s3d_CDrvGfxParam_cr GfxParam,
158            const s3d_CDrvD3d9ParamBlk &ParamBlk,
159            const s3d_CDrvD3d9ParamBlkState &ParamBlkState);
160    void TrackTransfBone(
161            s3d_CSysIntps BoneIdxCnt, const s3d_CSysInt32u *BoneIdxData,
162            s3d_CSysIntps MatBoneCnt, const D3DXMATRIXA16 *MatBoneArray);
163    void CalcVertBufDesc(
164            const s3d_CDrvGfxCharge *Charge,
165            s3d_CDrvD3d9VertBufDesc &VertBufDesc) const;
166    bool IsValid();
167    void GetVertProgCodeInfoName(
168            s3d_CUtilStr &CodeInfo, s3d_CUtilStr &CodeName) const;
169    void GetPixProgCodeInfoName(
170            s3d_CUtilStr &CodeInfo, s3d_CUtilStr &CodeName) const;
171private:
172    void TrackMatTrans(
173            const int &Addr, int Trans,
174            const D3DXMATRIXA16 *Mat, s3d_CSysIntps Cnt,
175            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk);
176    void TrackParams(
177            s3d_CDrvGfxParam_cr GfxParam,
178            const s3d_CDrvD3d9ParamBlk &ParamBlk,
179            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
180            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk);
181    void TrackNoLighting(
182            const s3d_CDrvD3d9ParamBlk &ParamBlk,
183            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
184            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk);
185    void TrackLighting(
186            const s3d_CDrvD3d9ParamBlk &ParamBlk,
187            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
188            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk);
189    void TrackLightingBlack(
190            const s3d_CDrvD3d9ParamBlk &ParamBlk,
191            const s3d_CDrvD3d9ParamBlkState &ParamBlkState,
192            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk,
193            s3d_CSysIntps FromLight);
194    void TrackTransfBone(
195            s3d_CSysIntps BoneIdxCnt, const s3d_CSysInt32u *BoneIdxData,
196            s3d_CSysIntps MatBoneCnt, const D3DXMATRIXA16 *MatBoneArray,
197            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk);
198
199    s3d_CDrvD3d9ProgAsmTrackBlkVert m_VertTrackBlk;
200    s3d_CDrvD3d9ProgAsmTrackBlkPix m_PixTrackBlk;
201};
202
203//@
204typedef s3d_CUtilPtr<s3d_CDrvD3d9ProgAsm> s3d_CDrvD3d9ProgAsmPtr;
205
206///////////////////////////////////////////////////////////////////////////////
207
208//@
209class s3d_CDrvD3d9ProgAsmUtil
210{
211public:
212    static void CreateShader(
213            s3d_CUtilNotifGather *NotifGather, s3d_CUtilSnkChunk *Param,
214            s3d_CDrvD3d9ProgCtx *ProgCtx, bool VertShader, s3d_CDrvD3d9Prog
215                    *Prog,
216            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk);
217
218    static void ExtractPredefine(
219            const s3d_CDrvD3d9ProgCtx *ProgCtx,
220            s3d_CLibStreamPreproState *PreproState,
221            s3d_CUtilSnkExtract &SnkExtract);
222    static void ExtractParamArray(
223            const s3d_CDrvD3d9ProgCtx *ProgCtx,
224            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
225            s3d_CDrvD3d9ProgAsmParamArray &ParamArray,
226            s3d_CUtilSnkExtract &SnkExtract);
227    static void ExtractTexSize(
228            const s3d_CDrvD3d9ProgCtx *ProgCtx,
229            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
230            s3d_CDrvD3d9ProgAsmAddrArray &TexSizeAddrArray,
231            s3d_CDrvD3d9ProgAsmAddrArray &TexRcpSizeAddrArray,
232            s3d_CUtilSnkExtract &SnkExtract);
233    static void ExtractTrackArray(
234            const s3d_CDrvD3d9ProgCtx *ProgCtx,
235            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
236            s3d_CDrvD3d9ProgAsmTrackMatArray &MatTrackArray,
237            s3d_CDrvD3d9ProgAsmTrackMatArray &BoneTrackArray,
238            s3d_CUtilSnkExtract &SnkExtract);
239    static void ExtractLightArray(
240            const s3d_CDrvD3d9ProgCtx *ProgCtx,
241            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
242            int &ActiveLightCntAddr, s3d_CDrvD3d9ProgAsmLightArray
243                    &LightTrackArray,
244            s3d_CUtilSnkExtract &SnkExtract);
245    static void ExtractMtl(
246            const s3d_CDrvD3d9ProgCtx *ProgCtx,
247            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
248            s3d_CDrvD3d9ProgAsmTrackMtrl &Mtl,
249            s3d_CUtilSnkExtract &SnkExtract);
250    static void ExtractFog(
251            const s3d_CDrvD3d9ProgCtx *ProgCtx,
252            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
253            int &FogAddr,
254            s3d_CUtilSnkExtract &SnkExtract);
255
256    static void InitTrackBlk(
257            const s3d_CDrvD3d9ProgCtx *ProgCtx,
258            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
259            s3d_CDrvD3d9ProgAsmTrackBlk &TrackBlk,
260            s3d_CUtilSnkExtract &SnkExtract);
261
262    static bool AssembleFromRes(
263            s3d_CUtilNotifGather *NotifGather, const s3d_CDrvD3d9ProgCtx
264                    *ProgCtx,
265            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
266            s3d_CLibStreamPreproState *PreproState,
267            s3d_CDrvD3d9Buf &CodeBuf);
268
269    static bool AssembleFromFile(
270            s3d_CUtilNotifGather *NotifGather, const s3d_CDrvD3d9ProgCtx
271                    *ProgCtx,
272            s3d_CUtilStr_cr CodeInfo, s3d_CUtilStr_cr CodeName,
273            s3d_CLibStreamPreproState *PreproState,
274            s3d_CDrvD3d9Buf &CodeBuf);
275};
276
277///////////////////////////////////////////////////////////////////////////////
278
279S3D_SYS_INLINE
280s3d_CDrvD3d9ProgAsmTrackMat::s3d_CDrvD3d9ProgAsmTrackMat()
281{
282    m_Addr = -1;
283    m_Chan = 0;
284    m_Slot = 0;
285    m_Cnt = 0;
286    m_Trans = 0;
287}
288
289///////////////////////////////////////////////////////////////////////////////
290
291S3D_SYS_INLINE
292s3d_CDrvD3d9ProgAsmLight::s3d_CDrvD3d9ProgAsmLight()
293{
294    m_PosAddr = -1;
295    m_DirAddr = -1;
296    m_AmbientAddr = -1;
297    m_DiffuseAddr = -1;
298    m_SpecularAddr = -1;
299    m_AttenAddr = -1;
300}
301
302///////////////////////////////////////////////////////////////////////////////
303
304S3D_SYS_INLINE
305s3d_CDrvD3d9ProgAsmTrackMtrl::s3d_CDrvD3d9ProgAsmTrackMtrl()
306{
307    m_PowerAddr = -1;
308    m_EmissiveAddr = -1;
309}
310
311///////////////////////////////////////////////////////////////////////////////
312
313S3D_SYS_INLINE
314s3d_CDrvD3d9ProgAsmParam::s3d_CDrvD3d9ProgAsmParam()
315{
316    m_Addr = -1;
317    m_Type = -1;
318    m_HadError = false;
319}
320
321///////////////////////////////////////////////////////////////////////////////
322
323S3D_SYS_INLINE
324s3d_CDrvD3d9ProgAsmTrackBlk::s3d_CDrvD3d9ProgAsmTrackBlk()
325{
326    m_ActiveLightCntAddr = -1;
327    m_FogAddr = -1;
328}
329
330///////////////////////////////////////////////////////////////////////////////
331
332#endif
Note: See TracBrowser for help on using the repository browser.