1 /*---------------------------------------------------------------------------* 2 Project: Dolphin GD library 3 File: GDPIXEL.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: GDPixel.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 2 2001/10/13 2:22a Hirose 22 Added GDSetBlendMode(). 23 24 1 2001/09/12 1:55p Carl 25 Initial revision of GD: Graphics Display List Library. 26 27 $NoKeywords: $ 28 *---------------------------------------------------------------------------*/ 29 30 #ifndef __GDPIXEL_H__ 31 #define __GDPIXEL_H__ 32 33 /*---------------------------------------------------------------------------*/ 34 #include <revolution/types.h> 35 #include <revolution/gx/GXEnum.h> 36 #include <revolution/gx/GXStruct.h> 37 /*---------------------------------------------------------------------------*/ 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 /*---------------------------------------------------------------------------*/ 44 45 46 /*---------------------------------------------------------------------------*/ 47 48 void GDSetFog( 49 GXFogType type, 50 f32 startz, 51 f32 endz, 52 f32 nearz, 53 f32 farz, 54 GXColor color ); 55 56 void GDSetBlendMode( 57 GXBlendMode type, 58 GXBlendFactor src_factor, 59 GXBlendFactor dst_factor, 60 GXLogicOp logic_op ); 61 62 void GDSetBlendModeEtc( 63 GXBlendMode type, 64 GXBlendFactor src_factor, 65 GXBlendFactor dst_factor, 66 GXLogicOp logic_op, 67 GXBool color_update_enable, 68 GXBool alpha_update_enable, 69 GXBool dither_enable ); 70 71 void GDSetZMode( 72 GXBool compare_enable, 73 GXCompare func, 74 GXBool update_enable ); 75 76 void GDSetDstAlpha( GXBool enable, u8 alpha ); 77 78 void GDSetDrawSync( u16 token ); 79 80 /*---------------------------------------------------------------------------*/ 81 82 // Defines for setting PE (and some TEV) registers... 83 84 /* 85 * tev_fog_param_0 struct 86 */ 87 #define TEV_FOG_PARAM_0_A_MANT_SHIFT 0 88 #define TEV_FOG_PARAM_0_A_EXPN_SHIFT 11 89 #define TEV_FOG_PARAM_0_A_SIGN_SHIFT 19 90 #define TEV_FOG_PARAM_0_RID_SHIFT 24 91 #define TEV_FOG_PARAM_0(a_mant, a_expn, a_sign, rid) \ 92 ((((unsigned long)(a_mant)) << TEV_FOG_PARAM_0_A_MANT_SHIFT) | \ 93 (((unsigned long)(a_expn)) << TEV_FOG_PARAM_0_A_EXPN_SHIFT) | \ 94 (((unsigned long)(a_sign)) << TEV_FOG_PARAM_0_A_SIGN_SHIFT) | \ 95 (((unsigned long)(rid)) << TEV_FOG_PARAM_0_RID_SHIFT)) 96 97 #define TEV_FOG_PARAM_0_PS(a_preshifted, rid) \ 98 ( ((unsigned long)(a_preshifted)) | \ 99 (((unsigned long)(rid)) << TEV_FOG_PARAM_0_RID_SHIFT)) 100 101 /* 102 * tev_fog_param_1 struct 103 */ 104 #define TEV_FOG_PARAM_1_B_MAG_SHIFT 0 105 #define TEV_FOG_PARAM_1_RID_SHIFT 24 106 #define TEV_FOG_PARAM_1(b_mag, rid) \ 107 ((((unsigned long)(b_mag)) << TEV_FOG_PARAM_1_B_MAG_SHIFT) | \ 108 (((unsigned long)(rid)) << TEV_FOG_PARAM_1_RID_SHIFT)) 109 110 /* 111 * tev_fog_param_2 struct 112 */ 113 #define TEV_FOG_PARAM_2_B_SHF_SHIFT 0 114 #define TEV_FOG_PARAM_2_RID_SHIFT 24 115 #define TEV_FOG_PARAM_2(b_shf, rid) \ 116 ((((unsigned long)(b_shf)) << TEV_FOG_PARAM_2_B_SHF_SHIFT) | \ 117 (((unsigned long)(rid)) << TEV_FOG_PARAM_2_RID_SHIFT)) 118 119 /* 120 * tev_fog_param_3 struct 121 */ 122 #define TEV_FOG_PARAM_3_C_MANT_SHIFT 0 123 #define TEV_FOG_PARAM_3_C_EXPN_SHIFT 11 124 #define TEV_FOG_PARAM_3_C_SIGN_SHIFT 19 125 #define TEV_FOG_PARAM_3_PROJ_SHIFT 20 126 #define TEV_FOG_PARAM_3_FSEL_SHIFT 21 127 #define TEV_FOG_PARAM_3_RID_SHIFT 24 128 #define TEV_FOG_PARAM_3(c_mant, c_expn, c_sign, proj, fsel, rid) \ 129 ((((unsigned long)(c_mant)) << TEV_FOG_PARAM_3_C_MANT_SHIFT) | \ 130 (((unsigned long)(c_expn)) << TEV_FOG_PARAM_3_C_EXPN_SHIFT) | \ 131 (((unsigned long)(c_sign)) << TEV_FOG_PARAM_3_C_SIGN_SHIFT) | \ 132 (((unsigned long)(proj)) << TEV_FOG_PARAM_3_PROJ_SHIFT) | \ 133 (((unsigned long)(fsel)) << TEV_FOG_PARAM_3_FSEL_SHIFT) | \ 134 (((unsigned long)(rid)) << TEV_FOG_PARAM_3_RID_SHIFT)) 135 136 #define TEV_FOG_PARAM_3_PS(c_preshifted, proj, fsel, rid) \ 137 ( ((unsigned long)(c_preshifted)) | \ 138 (((unsigned long)(proj)) << TEV_FOG_PARAM_3_PROJ_SHIFT) | \ 139 (((unsigned long)(fsel)) << TEV_FOG_PARAM_3_FSEL_SHIFT) | \ 140 (((unsigned long)(rid)) << TEV_FOG_PARAM_3_RID_SHIFT)) 141 142 /* 143 * tev_fog_color struct 144 */ 145 #define TEV_FOG_COLOR_B_SHIFT 0 146 #define TEV_FOG_COLOR_G_SHIFT 8 147 #define TEV_FOG_COLOR_R_SHIFT 16 148 #define TEV_FOG_COLOR_RID_SHIFT 24 149 #define TEV_FOG_COLOR(b, g, r, rid) \ 150 ((((unsigned long)(b)) << TEV_FOG_COLOR_B_SHIFT) | \ 151 (((unsigned long)(g)) << TEV_FOG_COLOR_G_SHIFT) | \ 152 (((unsigned long)(r)) << TEV_FOG_COLOR_R_SHIFT) | \ 153 (((unsigned long)(rid)) << TEV_FOG_COLOR_RID_SHIFT)) 154 155 /* 156 * pe_zmode struct 157 */ 158 #define PE_ZMODE_ENABLE_SHIFT 0 159 #define PE_ZMODE_FUNC_SHIFT 1 160 #define PE_ZMODE_MASK_SHIFT 4 161 #define PE_ZMODE_RID_SHIFT 24 162 #define PE_ZMODE(enable, func, mask, rid) \ 163 ((((unsigned long)(enable)) << PE_ZMODE_ENABLE_SHIFT) | \ 164 (((unsigned long)(func)) << PE_ZMODE_FUNC_SHIFT) | \ 165 (((unsigned long)(mask)) << PE_ZMODE_MASK_SHIFT) | \ 166 (((unsigned long)(rid)) << PE_ZMODE_RID_SHIFT)) 167 168 /* 169 * pe_cmode0 struct 170 */ 171 #define PE_CMODE0_BLEND_ENABLE_SHIFT 0 172 #define PE_CMODE0_LOGICOP_ENABLE_SHIFT 1 173 #define PE_CMODE0_DITHER_ENABLE_SHIFT 2 174 #define PE_CMODE0_COLOR_MASK_SHIFT 3 175 #define PE_CMODE0_ALPHA_MASK_SHIFT 4 176 #define PE_CMODE0_DFACTOR_SHIFT 5 177 #define PE_CMODE0_SFACTOR_SHIFT 8 178 #define PE_CMODE0_BLENDOP_SHIFT 11 179 #define PE_CMODE0_LOGICOP_SHIFT 12 180 #define PE_CMODE0_RID_SHIFT 24 181 #define PE_CMODE0(blend_enable, logicop_enable, dither_enable, color_mask, alpha_mask, dfactor, sfactor, blendop, logicop, rid) \ 182 ((((unsigned long)(blend_enable)) << PE_CMODE0_BLEND_ENABLE_SHIFT) | \ 183 (((unsigned long)(logicop_enable)) << PE_CMODE0_LOGICOP_ENABLE_SHIFT) | \ 184 (((unsigned long)(dither_enable)) << PE_CMODE0_DITHER_ENABLE_SHIFT) | \ 185 (((unsigned long)(color_mask)) << PE_CMODE0_COLOR_MASK_SHIFT) | \ 186 (((unsigned long)(alpha_mask)) << PE_CMODE0_ALPHA_MASK_SHIFT) | \ 187 (((unsigned long)(dfactor)) << PE_CMODE0_DFACTOR_SHIFT) | \ 188 (((unsigned long)(sfactor)) << PE_CMODE0_SFACTOR_SHIFT) | \ 189 (((unsigned long)(blendop)) << PE_CMODE0_BLENDOP_SHIFT) | \ 190 (((unsigned long)(logicop)) << PE_CMODE0_LOGICOP_SHIFT) | \ 191 (((unsigned long)(rid)) << PE_CMODE0_RID_SHIFT)) 192 193 /* 194 * pe_cmode1 struct 195 */ 196 #define PE_CMODE1_CONSTANT_ALPHA_SHIFT 0 197 #define PE_CMODE1_CONSTANT_ALPHA_ENABLE_SHIFT 8 198 #define PE_CMODE1_RID_SHIFT 24 199 #define PE_CMODE1(constant_alpha, constant_alpha_enable, rid) \ 200 ((((unsigned long)(constant_alpha)) << PE_CMODE1_CONSTANT_ALPHA_SHIFT) | \ 201 (((unsigned long)(constant_alpha_enable)) << PE_CMODE1_CONSTANT_ALPHA_ENABLE_SHIFT) | \ 202 (((unsigned long)(rid)) << PE_CMODE1_RID_SHIFT)) 203 204 /* 205 * pe_token struct 206 */ 207 #define PE_TOKEN_TOKEN_SHIFT 0 208 #define PE_TOKEN_RID_SHIFT 24 209 #define PE_TOKEN(token, rid) \ 210 ((((unsigned long)(token)) << PE_TOKEN_TOKEN_SHIFT) | \ 211 (((unsigned long)(rid)) << PE_TOKEN_RID_SHIFT)) 212 213 /* 214 * PE (and some TEV) register addresses (BP address space) 215 */ 216 #define PE_ZMODE_ID 0x00000040 217 #define PE_CMODE0_ID 0x00000041 218 #define PE_CMODE1_ID 0x00000042 219 #define PE_CONTROL_ID 0x00000043 220 #define PE_TOKEN_ID 0x00000047 221 #define PE_TOKEN_INT_ID 0x00000048 222 223 #define TEV_FOG_PARAM_0_ID 0x000000ee 224 #define TEV_FOG_PARAM_1_ID 0x000000ef 225 #define TEV_FOG_PARAM_2_ID 0x000000f0 226 #define TEV_FOG_PARAM_3_ID 0x000000f1 227 #define TEV_FOG_COLOR_ID 0x000000f2 228 229 /* 230 * TEV register field definitions 231 */ 232 233 // tev_proj enum 234 #define TEV_PROJ_PERSP 0x00000000 235 #define TEV_PROJ_ORTHO 0x00000001 236 237 /*---------------------------------------------------------------------------*/ 238 #ifdef __cplusplus 239 } 240 #endif 241 242 #endif // __GDPIXEL_H__ 243