1 /*---------------------------------------------------------------------------*
2   Project:  TwlSDK - GX -
3   File:     gxcommon.h
4 
5   Copyright 2003-2008 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   $Date:: 2009-06-26#$
14   $Rev: 10826 $
15   $Author: yosizaki $
16  *---------------------------------------------------------------------------*/
17 
18 #ifndef NITRO_GXCOMMON_H_
19 #define NITRO_GXCOMMON_H_
20 
21 #if !(defined(SDK_WIN32) || defined(SDK_FROM_TOOL))
22 
23 #include <nitro/misc.h>
24 #include <nitro/memorymap.h>
25 
26 #endif
27 
28 #include <nitro/types.h>
29 #include <nitro/fx/fx.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 //----------------------------------------------------------------------------
36 // Type definition
37 //----------------------------------------------------------------------------
38 
39 #define GX_DEFAULT_DMAID (3)
40 #define GX_DMA_NOT_USE   ((u32)~0)
41 
42 #define GX_DMAID         (GXi_DmaId)   // remain for compatibility
43 extern u32 GXi_DmaId;
44 
45 // x1B5G5R5 format
46 typedef u16 GXRgb;
47 #define GXRGB_ASSERT(gxrgb)       SDK_ASSERT(((gxrgb) & 0x8000) == 0)
48 #define GX_RGB_R_SHIFT            (0)
49 #define GX_RGB_R_MASK             (0x001f)
50 #define GX_RGB_G_SHIFT            (5)
51 #define GX_RGB_G_MASK             (0x03e0)
52 #define GX_RGB_B_SHIFT            (10)
53 #define GX_RGB_B_MASK             (0x7c00)
54 #define GX_RGB(r, g, b)           ((GXRgb)(((r) << GX_RGB_R_SHIFT) | \
55                                            ((g) << GX_RGB_G_SHIFT) | \
56                                            ((b) << GX_RGB_B_SHIFT)))
57 
58 // A1B5G5R5 format
59 typedef u16 GXRgba;
60 #define GX_RGBA_R_SHIFT           (0)
61 #define GX_RGBA_R_MASK            (0x001f)
62 #define GX_RGBA_G_SHIFT           (5)
63 #define GX_RGBA_G_MASK            (0x03e0)
64 #define GX_RGBA_B_SHIFT           (10)
65 #define GX_RGBA_B_MASK            (0x7c00)
66 #define GX_RGBA_A_SHIFT           (15)
67 #define GX_RGBA_A_MASK            (0x8000)
68 #define GX_RGBA(r, g, b, a)       ((GXRgba)(((r) << GX_RGBA_R_SHIFT) | \
69                                             ((g) << GX_RGBA_G_SHIFT) | \
70                                             ((b) << GX_RGBA_B_SHIFT) | \
71                                             ((a) << GX_RGBA_A_SHIFT)))
72 
73 
74 #define GX_POLYGONID_ASSERT(x)    SDK_ASSERT((x) >= 0 && (x) <= 63)
75 #define GX_ALPHA_ASSERT(x)        SDK_ASSERT((x) >= 0 && (x) <= 31)
76 #define GX_DEPTH_ASSERT(x)        SDK_ASSERT((x) >= 0 && (x) <= 0x7fff)
77 
78 
79 //----------------------------------------------------------------------------
80 // Make VecFx10(normal vector/light vector)
81 // x : fx32/16, y : fx32/16, z : fx32/16
82 // -FX32_ONE(-FX16_ONE) < x,y,z < FX32_ONE(FX16_ONE)
83 //----------------------------------------------------------------------------
84 #define GX_VECFX10(x, y, z) \
85     ((VecFx10)(((((x) >> (FX32_DEC_SIZE - GX_FX10_DEC_SIZE)) & GX_FX10_MASK) << GX_VEC_FX10_X_SHIFT) | \
86                ((((y) >> (FX32_DEC_SIZE - GX_FX10_DEC_SIZE)) & GX_FX10_MASK) << GX_VEC_FX10_Y_SHIFT) | \
87                ((((z) >> (FX32_DEC_SIZE - GX_FX10_DEC_SIZE)) & GX_FX10_MASK) << GX_VEC_FX10_Z_SHIFT)))
88 
89 //----------------------------------------------------------------------------
90 // type for 3D vector of s0.9
91 //----------------------------------------------------------------------------
92 typedef u32 VecFx10;
93 #define GX_FX10_SHIFT             9
94 #define GX_FX10_INT_SIZE          0
95 #define GX_FX10_DEC_SIZE          9
96 
97 #define GX_FX10_INT_MASK          0x0000
98 #define GX_FX10_DEC_MASK          0x01ff
99 #define GX_FX10_SIGN_MASK         0x0200
100 #define GX_FX10_MASK              (GX_FX10_INT_MASK | GX_FX10_DEC_MASK | GX_FX10_SIGN_MASK)
101 
102 #define GX_FX16_FX10_MAX          (fx16)(0x0fff)
103 #define GX_FX16_FX10_MIN          (fx16)(0xf000)
104 
105 #define GX_FX32_FX10_MAX          (fx32)(0x00000fff)
106 #define GX_FX32_FX10_MIN          (fx32)(0xfffff000)
107 
108 #define GX_VEC_FX10_X_SHIFT       0
109 #define GX_VEC_FX10_Y_SHIFT       10
110 #define GX_VEC_FX10_Z_SHIFT       20
111 
112 //----------------------------------------------------------------------------
113 // Declaration of function
114 //----------------------------------------------------------------------------
115 
116 //----------------------------------------------------------------------------
117 // Implementation of inline function
118 //----------------------------------------------------------------------------
119 
120 #ifdef __cplusplus
121 }/* extern "C" */
122 #endif
123 
124 #endif
125