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:: 2008-09-18#$ 14 $Rev: 8573 $ 15 $Author: okubata_ryoma $ 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