1 /*---------------------------------------------------------------------------*
2   Project:  Dolphin GD library
3   File:     GDGEOMETRY.h
4 
5   Copyright 2001 Nintendo. All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Log: GDGeometry.h,v $
14   Revision 1.2  2006/02/04 11:56:46  hashida
15   (none)
16 
17   Revision 1.1.1.1  2005/05/12 02:41:07  yasuh-to
18   Ported from dolphin source tree.
19 
20 
21     4     2002/08/05 19:49 Hirose
22     Const type specifier support.
23 
24     3     2001/10/13 2:24a Hirose
25     Added GDSetCullMode().
26 
27     2     2001/09/19 6:35p Carl
28     Added GDSetLPSize.
29 
30     1     2001/09/12 1:55p Carl
31     Initial revision of GD: Graphics Display List Library.
32 
33   $NoKeywords: $
34  *---------------------------------------------------------------------------*/
35 
36 #ifndef __GDGEOMETRY_H__
37 #define __GDGEOMETRY_H__
38 
39 /*---------------------------------------------------------------------------*/
40 #include <revolution/types.h>
41 #include <revolution/gx/GXEnum.h>
42 #include <revolution/gx/GXStruct.h>
43 /*---------------------------------------------------------------------------*/
44 
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48 
49 /*---------------------------------------------------------------------------*/
50 
51 
52 /*---------------------------------------------------------------------------*/
53 
54 void GDSetVtxDescv    ( const GXVtxDescList *attrPtr );
55 
56 void GDSetVtxAttrFmtv ( GXVtxFmt vtxfmt, const GXVtxAttrFmtList *list );
57 
58 void GDSetArray       ( GXAttr attr, const void *base_ptr, u8 stride );
59 
60 void GDSetArrayRaw    ( GXAttr attr, u32 base_ptr_raw, u8 stride );
61 
62 void GDPatchArrayPtr  ( const void *base_ptr );
63 
64 void GDSetTexCoordGen ( GXTexCoordID  dst_coord,
65                         GXTexGenType  func,
66                         GXTexGenSrc   src_param,
67                         GXBool        normalize,
68                         u32           postmtx );
69 
70 void GDSetCullMode( GXCullMode cm );
71 
72 void GDSetGenMode( u8 nTexGens, u8 nChans, u8 nTevs );
73 
74 void GDSetGenMode2( u8 nTexGens, u8 nChans, u8 nTevs, u8 nInds, GXCullMode cm );
75 
76 
77 
78 void GDSetLPSize( u8 lineWidth, u8 pointSize,
79                   GXTexOffset lineOffset, GXTexOffset pointOffset,
80                   GXBool lineHalfAspect );
81 
82 void GDSetCoPlanar( GXBool enable );
83 
84 // For GDBegin and GDEnd we have declarations and definitions
85 
GDBegin(GXPrimitive type,GXVtxFmt vtxfmt,u16 nverts)86 static inline void GDBegin ( GXPrimitive type, GXVtxFmt vtxfmt, u16 nverts )
87 {
88     GDWrite_u8((u8) (vtxfmt | type));
89     GDWrite_u16(nverts);
90 }
91 
GDEnd(void)92 static inline void GDEnd ( void )
93 {
94 }
95 
96 /*---------------------------------------------------------------------------*/
97 
98 // Defines for setting CP (and XF and GEN_MODE) registers...
99 
100 /*
101  *  cp_vcd_reg_lo struct
102  */
103 #define CP_VCD_REG_LO_PMIDX_SHIFT   0
104 #define CP_VCD_REG_LO_T0MIDX_SHIFT  1
105 #define CP_VCD_REG_LO_T1MIDX_SHIFT  2
106 #define CP_VCD_REG_LO_T2MIDX_SHIFT  3
107 #define CP_VCD_REG_LO_T3MIDX_SHIFT  4
108 #define CP_VCD_REG_LO_T4MIDX_SHIFT  5
109 #define CP_VCD_REG_LO_T5MIDX_SHIFT  6
110 #define CP_VCD_REG_LO_T6MIDX_SHIFT  7
111 #define CP_VCD_REG_LO_T7MIDX_SHIFT  8
112 #define CP_VCD_REG_LO_POS_SHIFT 9
113 #define CP_VCD_REG_LO_NRM_SHIFT 11
114 #define CP_VCD_REG_LO_COL0_SHIFT    13
115 #define CP_VCD_REG_LO_COL1_SHIFT    15
116 #define CP_VCD_REG_LO(pmidx, t0midx, t1midx, t2midx, t3midx, t4midx, t5midx, t6midx, t7midx, pos, nrm, col0, col1) \
117     ((((unsigned long)(pmidx)) << CP_VCD_REG_LO_PMIDX_SHIFT) | \
118      (((unsigned long)(t0midx)) << CP_VCD_REG_LO_T0MIDX_SHIFT) | \
119      (((unsigned long)(t1midx)) << CP_VCD_REG_LO_T1MIDX_SHIFT) | \
120      (((unsigned long)(t2midx)) << CP_VCD_REG_LO_T2MIDX_SHIFT) | \
121      (((unsigned long)(t3midx)) << CP_VCD_REG_LO_T3MIDX_SHIFT) | \
122      (((unsigned long)(t4midx)) << CP_VCD_REG_LO_T4MIDX_SHIFT) | \
123      (((unsigned long)(t5midx)) << CP_VCD_REG_LO_T5MIDX_SHIFT) | \
124      (((unsigned long)(t6midx)) << CP_VCD_REG_LO_T6MIDX_SHIFT) | \
125      (((unsigned long)(t7midx)) << CP_VCD_REG_LO_T7MIDX_SHIFT) | \
126      (((unsigned long)(pos)) << CP_VCD_REG_LO_POS_SHIFT) | \
127      (((unsigned long)(nrm)) << CP_VCD_REG_LO_NRM_SHIFT) | \
128      (((unsigned long)(col0)) << CP_VCD_REG_LO_COL0_SHIFT) | \
129      (((unsigned long)(col1)) << CP_VCD_REG_LO_COL1_SHIFT))
130 
131 #define CP_VCD_REG_LO_PS(pmidx, t76543210midx, pos, nrm, col0, col1) \
132     ((((unsigned long)(pmidx)) << CP_VCD_REG_LO_PMIDX_SHIFT) | \
133      (((unsigned long)(t76543210midx)) << CP_VCD_REG_LO_T0MIDX_SHIFT) | \
134      (((unsigned long)(pos)) << CP_VCD_REG_LO_POS_SHIFT) | \
135      (((unsigned long)(nrm)) << CP_VCD_REG_LO_NRM_SHIFT) | \
136      (((unsigned long)(col0)) << CP_VCD_REG_LO_COL0_SHIFT) | \
137      (((unsigned long)(col1)) << CP_VCD_REG_LO_COL1_SHIFT))
138 
139 /*
140  *  cp_vcd_reg_hi struct
141  */
142 #define CP_VCD_REG_HI_TEX0_SHIFT    0
143 #define CP_VCD_REG_HI_TEX1_SHIFT    2
144 #define CP_VCD_REG_HI_TEX2_SHIFT    4
145 #define CP_VCD_REG_HI_TEX3_SHIFT    6
146 #define CP_VCD_REG_HI_TEX4_SHIFT    8
147 #define CP_VCD_REG_HI_TEX5_SHIFT    10
148 #define CP_VCD_REG_HI_TEX6_SHIFT    12
149 #define CP_VCD_REG_HI_TEX7_SHIFT    14
150 #define CP_VCD_REG_HI(tex0, tex1, tex2, tex3, tex4, tex5, tex6, tex7) \
151     ((((unsigned long)(tex0)) << CP_VCD_REG_HI_TEX0_SHIFT) | \
152      (((unsigned long)(tex1)) << CP_VCD_REG_HI_TEX1_SHIFT) | \
153      (((unsigned long)(tex2)) << CP_VCD_REG_HI_TEX2_SHIFT) | \
154      (((unsigned long)(tex3)) << CP_VCD_REG_HI_TEX3_SHIFT) | \
155      (((unsigned long)(tex4)) << CP_VCD_REG_HI_TEX4_SHIFT) | \
156      (((unsigned long)(tex5)) << CP_VCD_REG_HI_TEX5_SHIFT) | \
157      (((unsigned long)(tex6)) << CP_VCD_REG_HI_TEX6_SHIFT) | \
158      (((unsigned long)(tex7)) << CP_VCD_REG_HI_TEX7_SHIFT))
159 
160 /*
161  *  cp_vat_reg_a struct
162  */
163 #define CP_VAT_REG_A_POSCNT_SHIFT   0
164 #define CP_VAT_REG_A_POSFMT_SHIFT   1
165 #define CP_VAT_REG_A_POSSHFT_SHIFT  4
166 #define CP_VAT_REG_A_NRMCNT_SHIFT   9
167 #define CP_VAT_REG_A_NRMFMT_SHIFT   10
168 #define CP_VAT_REG_A_COL0CNT_SHIFT  13
169 #define CP_VAT_REG_A_COL0FMT_SHIFT  14
170 #define CP_VAT_REG_A_COL1CNT_SHIFT  17
171 #define CP_VAT_REG_A_COL1FMT_SHIFT  18
172 #define CP_VAT_REG_A_TEX0CNT_SHIFT  21
173 #define CP_VAT_REG_A_TEX0FMT_SHIFT  22
174 #define CP_VAT_REG_A_TEX0SHFT_SHIFT 25
175 #define CP_VAT_REG_A_BYTEDEQUANT_SHIFT  30 /* Should always be 1 */
176 #define CP_VAT_REG_A_NORMALINDEX3_SHIFT 31
177 #define CP_VAT_REG_A(posCnt, posFmt, posShft, nrmCnt, nrmFmt, Col0Cnt, Col0Fmt, Col1Cnt, Col1Fmt, tex0Cnt, tex0Fmt, tex0Shft, normalIndex3) \
178     ((((unsigned long)(posCnt)) << CP_VAT_REG_A_POSCNT_SHIFT) | \
179      (((unsigned long)(posFmt)) << CP_VAT_REG_A_POSFMT_SHIFT) | \
180      (((unsigned long)(posShft)) << CP_VAT_REG_A_POSSHFT_SHIFT) | \
181      (((unsigned long)(nrmCnt)) << CP_VAT_REG_A_NRMCNT_SHIFT) | \
182      (((unsigned long)(nrmFmt)) << CP_VAT_REG_A_NRMFMT_SHIFT) | \
183      (((unsigned long)(Col0Cnt)) << CP_VAT_REG_A_COL0CNT_SHIFT) | \
184      (((unsigned long)(Col0Fmt)) << CP_VAT_REG_A_COL0FMT_SHIFT) | \
185      (((unsigned long)(Col1Cnt)) << CP_VAT_REG_A_COL1CNT_SHIFT) | \
186      (((unsigned long)(Col1Fmt)) << CP_VAT_REG_A_COL1FMT_SHIFT) | \
187      (((unsigned long)(tex0Cnt)) << CP_VAT_REG_A_TEX0CNT_SHIFT) | \
188      (((unsigned long)(tex0Fmt)) << CP_VAT_REG_A_TEX0FMT_SHIFT) | \
189      (((unsigned long)(tex0Shft)) << CP_VAT_REG_A_TEX0SHFT_SHIFT) | \
190      (((unsigned long)(1))        << CP_VAT_REG_A_BYTEDEQUANT_SHIFT) | \
191      (((unsigned long)(normalIndex3)) << CP_VAT_REG_A_NORMALINDEX3_SHIFT))
192 
193 /*
194  *  cp_vat_reg_b struct
195  */
196 #define CP_VAT_REG_B_TEX1CNT_SHIFT  0
197 #define CP_VAT_REG_B_TEX1FMT_SHIFT  1
198 #define CP_VAT_REG_B_TEX1SHFT_SHIFT 4
199 #define CP_VAT_REG_B_TEX2CNT_SHIFT  9
200 #define CP_VAT_REG_B_TEX2FMT_SHIFT  10
201 #define CP_VAT_REG_B_TEX2SHFT_SHIFT 13
202 #define CP_VAT_REG_B_TEX3CNT_SHIFT  18
203 #define CP_VAT_REG_B_TEX3FMT_SHIFT  19
204 #define CP_VAT_REG_B_TEX3SHFT_SHIFT 22
205 #define CP_VAT_REG_B_TEX4CNT_SHIFT  27
206 #define CP_VAT_REG_B_TEX4FMT_SHIFT  28
207 #define CP_VAT_REG_B_VCACHE_ENHANCE_SHIFT   31 /* Must always be 1 */
208 #define CP_VAT_REG_B(tex1Cnt, tex1Fmt, tex1Shft, tex2Cnt, tex2Fmt, tex2Shft, tex3Cnt, tex3Fmt, tex3Shft, tex4Cnt, tex4Fmt) \
209     ((((unsigned long)(tex1Cnt)) << CP_VAT_REG_B_TEX1CNT_SHIFT) | \
210      (((unsigned long)(tex1Fmt)) << CP_VAT_REG_B_TEX1FMT_SHIFT) | \
211      (((unsigned long)(tex1Shft)) << CP_VAT_REG_B_TEX1SHFT_SHIFT) | \
212      (((unsigned long)(tex2Cnt)) << CP_VAT_REG_B_TEX2CNT_SHIFT) | \
213      (((unsigned long)(tex2Fmt)) << CP_VAT_REG_B_TEX2FMT_SHIFT) | \
214      (((unsigned long)(tex2Shft)) << CP_VAT_REG_B_TEX2SHFT_SHIFT) | \
215      (((unsigned long)(tex3Cnt)) << CP_VAT_REG_B_TEX3CNT_SHIFT) | \
216      (((unsigned long)(tex3Fmt)) << CP_VAT_REG_B_TEX3FMT_SHIFT) | \
217      (((unsigned long)(tex3Shft)) << CP_VAT_REG_B_TEX3SHFT_SHIFT) | \
218      (((unsigned long)(tex4Cnt)) << CP_VAT_REG_B_TEX4CNT_SHIFT) | \
219      (((unsigned long)(tex4Fmt)) << CP_VAT_REG_B_TEX4FMT_SHIFT) | \
220      (((unsigned long)(1)) << CP_VAT_REG_B_VCACHE_ENHANCE_SHIFT))
221 
222 /*
223  *  cp_vat_reg_c struct
224  */
225 #define CP_VAT_REG_C_TEX4SHFT_SHIFT 0
226 #define CP_VAT_REG_C_TEX5CNT_SHIFT  5
227 #define CP_VAT_REG_C_TEX5FMT_SHIFT  6
228 #define CP_VAT_REG_C_TEX5SHFT_SHIFT 9
229 #define CP_VAT_REG_C_TEX6CNT_SHIFT  14
230 #define CP_VAT_REG_C_TEX6FMT_SHIFT  15
231 #define CP_VAT_REG_C_TEX6SHFT_SHIFT 18
232 #define CP_VAT_REG_C_TEX7CNT_SHIFT  23
233 #define CP_VAT_REG_C_TEX7FMT_SHIFT  24
234 #define CP_VAT_REG_C_TEX7SHFT_SHIFT 27
235 #define CP_VAT_REG_C(tex4Shft, tex5Cnt, tex5Fmt, tex5Shft, tex6Cnt, tex6Fmt, tex6Shft, tex7Cnt, tex7Fmt, tex7Shft) \
236     ((((unsigned long)(tex4Shft)) << CP_VAT_REG_C_TEX4SHFT_SHIFT) | \
237      (((unsigned long)(tex5Cnt)) << CP_VAT_REG_C_TEX5CNT_SHIFT) | \
238      (((unsigned long)(tex5Fmt)) << CP_VAT_REG_C_TEX5FMT_SHIFT) | \
239      (((unsigned long)(tex5Shft)) << CP_VAT_REG_C_TEX5SHFT_SHIFT) | \
240      (((unsigned long)(tex6Cnt)) << CP_VAT_REG_C_TEX6CNT_SHIFT) | \
241      (((unsigned long)(tex6Fmt)) << CP_VAT_REG_C_TEX6FMT_SHIFT) | \
242      (((unsigned long)(tex6Shft)) << CP_VAT_REG_C_TEX6SHFT_SHIFT) | \
243      (((unsigned long)(tex7Cnt)) << CP_VAT_REG_C_TEX7CNT_SHIFT) | \
244      (((unsigned long)(tex7Fmt)) << CP_VAT_REG_C_TEX7FMT_SHIFT) | \
245      (((unsigned long)(tex7Shft)) << CP_VAT_REG_C_TEX7SHFT_SHIFT))
246 
247 /*
248  *  cp_array_base_reg struct
249  */
250 #define CP_ARRAY_BASE_REG_BASE_SHIFT    0
251 #define CP_ARRAY_BASE_REG(base) \
252     ((((unsigned long)(base)) << CP_ARRAY_BASE_REG_BASE_SHIFT))
253 
254 /*
255  *  cp_array_stride_reg struct
256  */
257 #define CP_ARRAY_STRIDE_REG_STRIDE_SHIFT    0
258 #define CP_ARRAY_STRIDE_REG(stride) \
259     ((((unsigned long)(stride)) << CP_ARRAY_STRIDE_REG_STRIDE_SHIFT))
260 
261 /*
262  *  xf_invtxspec_f struct
263  */
264 #define XF_INVTXSPEC_HOST_COLORS_SHIFT  0
265 #define XF_INVTXSPEC_HOST_NORMAL_SHIFT  2
266 #define XF_INVTXSPEC_HOST_TEXTURES_SHIFT    4
267 #define XF_INVTXSPEC(host_colors, host_normal, host_textures) \
268     ((((unsigned long)(host_colors)) << XF_INVTXSPEC_HOST_COLORS_SHIFT) | \
269      (((unsigned long)(host_normal)) << XF_INVTXSPEC_HOST_NORMAL_SHIFT) | \
270      (((unsigned long)(host_textures)) << XF_INVTXSPEC_HOST_TEXTURES_SHIFT))
271 
272 /*
273  *  xf_numcolors_f struct
274  */
275 #define XF_NUMCOLORS_SHIFT  0
276 #define XF_NUMCOLORS(numcolors) \
277     ((((unsigned long)(numcolors)) << XF_NUMCOLORS_SHIFT))
278 
279 /*
280  *  xf_numtex_f struct
281  */
282 #define XF_NUMTEX_SHIFT 0
283 #define XF_NUMTEX(numtex) \
284     ((((unsigned long)(numtex)) << XF_NUMTEX_SHIFT))
285 
286 /*
287  *  xf_tex struct (texgen)
288  */
289 #define XF_TEX_PROJECTION_SHIFT 1
290 #define XF_TEX_INPUT_FORM_SHIFT 2
291 #define XF_TEX_TEXGEN_TYPE_SHIFT    4
292 #define XF_TEX_SOURCE_ROW_SHIFT 7
293 #define XF_TEX_EMBOSS_SOURCE_SHIFT  12
294 #define XF_TEX_EMBOSS_LIGHT_SHIFT   15
295 #define XF_TEX(projection, input_form, texgen_type, source_row, emboss_source, emboss_light) \
296     ((((unsigned long)(projection)) << XF_TEX_PROJECTION_SHIFT) | \
297      (((unsigned long)(input_form)) << XF_TEX_INPUT_FORM_SHIFT) | \
298      (((unsigned long)(texgen_type)) << XF_TEX_TEXGEN_TYPE_SHIFT) | \
299      (((unsigned long)(source_row)) << XF_TEX_SOURCE_ROW_SHIFT) | \
300      (((unsigned long)(emboss_source)) << XF_TEX_EMBOSS_SOURCE_SHIFT) | \
301      (((unsigned long)(emboss_light)) << XF_TEX_EMBOSS_LIGHT_SHIFT))
302 
303 /*
304  *  xf_dualtex_f struct
305  */
306 #define XF_DUALTEX_DUALMTX_SHIFT    0
307 #define XF_DUALTEX_NORMAL_ENABLE_SHIFT  8
308 #define XF_DUALTEX(dualmtx, normal_enable) \
309     ((((unsigned long)(dualmtx)) << XF_DUALTEX_DUALMTX_SHIFT) | \
310      (((unsigned long)(normal_enable)) << XF_DUALTEX_NORMAL_ENABLE_SHIFT))
311 
312 /*
313  *  gen_mode struct
314  */
315 #define GEN_MODE_NTEX_SHIFT 0
316 #define GEN_MODE_NCOL_SHIFT 4
317 #define GEN_MODE_MS_EN_SHIFT    9
318 #define GEN_MODE_NTEV_SHIFT 10
319 #define GEN_MODE_REJECT_EN_SHIFT    14
320 #define GEN_MODE_NBMP_SHIFT 16
321 #define GEN_MODE_ZFREEZE_SHIFT  19
322 #define GEN_MODE_RID_SHIFT  24
323 #define GEN_MODE(ntex, ncol, ms_en, ntev, reject_en, nbmp, zfreeze, rid) \
324     ((((unsigned long)(ntex)) << GEN_MODE_NTEX_SHIFT) | \
325      (((unsigned long)(ncol)) << GEN_MODE_NCOL_SHIFT) | \
326      (((unsigned long)(ms_en)) << GEN_MODE_MS_EN_SHIFT) | \
327      (((unsigned long)(ntev)) << GEN_MODE_NTEV_SHIFT) | \
328      (((unsigned long)(reject_en)) << GEN_MODE_REJECT_EN_SHIFT) | \
329      (((unsigned long)(nbmp)) << GEN_MODE_NBMP_SHIFT) | \
330      (((unsigned long)(zfreeze)) << GEN_MODE_ZFREEZE_SHIFT) | \
331      (((unsigned long)(rid)) << GEN_MODE_RID_SHIFT))
332 
333 /*
334  *  su_lpsize struct
335  */
336 #define SU_LPSIZE_LSIZE_SHIFT   0
337 #define SU_LPSIZE_PSIZE_SHIFT   8
338 #define SU_LPSIZE_LTOFF_SHIFT   16
339 #define SU_LPSIZE_PTOFF_SHIFT   19
340 #define SU_LPSIZE_LINEASPECT_SHIFT  22
341 #define SU_LPSIZE_PAD0_SHIFT    23
342 #define SU_LPSIZE_RID_SHIFT 24
343 #define SU_LPSIZE(lsize, psize, ltoff, ptoff, lineaspect, rid) \
344     ((((unsigned long)(lsize)) << SU_LPSIZE_LSIZE_SHIFT) | \
345      (((unsigned long)(psize)) << SU_LPSIZE_PSIZE_SHIFT) | \
346      (((unsigned long)(ltoff)) << SU_LPSIZE_LTOFF_SHIFT) | \
347      (((unsigned long)(ptoff)) << SU_LPSIZE_PTOFF_SHIFT) | \
348      (((unsigned long)(lineaspect)) << SU_LPSIZE_LINEASPECT_SHIFT) | \
349      (((unsigned long)(rid)) << SU_LPSIZE_RID_SHIFT))
350 
351 /*
352  *  CP register addresses (CP address space)
353  */
354 #define CP_MATINDEX_A_ID    0x30
355 #define CP_MATINDEX_B_ID    0x40
356 #define CP_VCD_LO_ID    0x50
357 #define CP_VCD_HI_ID    0x60
358 #define CP_VAT_A_ID 0x70
359 #define CP_VAT_B_ID 0x80
360 #define CP_VAT_C_ID 0x90
361 #define CP_ARRAY_BASE_ID        0xa0
362 #define CP_ARRAY_STRIDE_ID  0xb0
363 
364 /*
365  *  XF register addresses (XF address space)
366  */
367 #define XF_INVTXSPEC_ID 0x1008
368 #define XF_NUMCOLORS_ID 0x1009
369 #define XF_NUMTEX_ID    0x103f
370 #define XF_TEX0_ID  0x1040
371 #define XF_TEX1_ID  0x1041
372 #define XF_TEX2_ID  0x1042
373 #define XF_TEX3_ID  0x1043
374 #define XF_TEX4_ID  0x1044
375 #define XF_TEX5_ID  0x1045
376 #define XF_TEX6_ID  0x1046
377 #define XF_TEX7_ID  0x1047
378 #define XF_DUALTEX0_ID  0x1050
379 #define XF_DUALTEX1_ID  0x1051
380 #define XF_DUALTEX2_ID  0x1052
381 #define XF_DUALTEX3_ID  0x1053
382 #define XF_DUALTEX4_ID  0x1054
383 #define XF_DUALTEX5_ID  0x1055
384 #define XF_DUALTEX6_ID  0x1056
385 #define XF_DUALTEX7_ID  0x1057
386 
387 /*
388  *  GEN_MODE register address (BP address space)
389  */
390 #define GEN_MODE_ID 0x00000000
391 
392 /*
393  *  SU register addresses (BP address space)
394  */
395 #define SU_LPSIZE_ID    0x00000022
396 
397 /*
398  *  XF register field definitions
399  */
400 
401 //  xf_tex_projection_f enum
402 #define XF_TEX_ST   0x00000000
403 #define XF_TEX_STQ  0x00000001
404 
405 //  xf_tex_input_form_f enum
406 #define XF_TEX_AB11 0x00000000
407 #define XF_TEX_ABC1 0x00000001
408 
409 //  xf_tex_texgen_type_f enum
410 #define XF_TEXGEN_REGULAR   0x00000000
411 #define XF_TEXGEN_EMBOSS_MAP    0x00000001
412 #define XF_TEXGEN_COLOR_STRGBC0 0x00000002
413 #define XF_TEXGEN_COLOR_STRGBC1 0x00000003
414 
415 //  xf_tex_source_row_f enum
416 #define XF_GEOM_INROW   0x00000000
417 #define XF_NORMAL_INROW 0x00000001
418 #define XF_COLORS_INROW 0x00000002
419 #define XF_BINORMAL_T_INROW 0x00000003
420 #define XF_BINORMAL_B_INROW 0x00000004
421 #define XF_TEX0_INROW   0x00000005
422 #define XF_TEX1_INROW   0x00000006
423 #define XF_TEX2_INROW   0x00000007
424 #define XF_TEX3_INROW   0x00000008
425 #define XF_TEX4_INROW   0x00000009
426 #define XF_TEX5_INROW   0x0000000a
427 #define XF_TEX6_INROW   0x0000000b
428 #define XF_TEX7_INROW   0x0000000c
429 
430 /*---------------------------------------------------------------------------*/
431 #ifdef __cplusplus
432 }
433 #endif
434 
435 #endif // __GDGEOMETRY_H__
436