1 /*---------------------------------------------------------------------------* 2 Project: PICA register macro header 3 File: gx_MacroTexture.h 4 5 Copyright (C)2010 Nintendo Co., Ltd. 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 $Revision: 27384 $ 14 *---------------------------------------------------------------------------*/ 15 #ifndef NN_GX_CTR_PICA_MACRO_TEXTURE_H_ 16 #define NN_GX_CTR_PICA_MACRO_TEXTURE_H_ 17 18 #include <nn/gx/CTR/gx_MacroCommon.h> 19 20 /*! 21 @addtogroup nn_gx_CTR_Pica PicaMacroHeader 22 @{ 23 */ 24 25 /////////////////////////////////// 26 // Texture Address 27 28 // PICA_REG_TEXTURE0_ADDR1 0x085 29 // PICA_REG_TEXTURE0_ADDR2 0x086 30 // PICA_REG_TEXTURE0_ADDR3 0x087 31 // PICA_REG_TEXTURE0_ADDR4 0x088 32 // PICA_REG_TEXTURE0_ADDR5 0x089 33 // PICA_REG_TEXTURE0_ADDR6 0x08a 34 // PICA_REG_TEXTURE2_ADDR 0x09d 35 // PICA_REG_TEXTURE1_ADDR 0x095 36 #define PICA_CMD_DATA_TEXTURE_ADDR( addr ) \ 37 ( (u32)(addr) >> 3 ) 38 39 /* 40 struct CommandTexCubeMap 41 { 42 CMD_PADDING(22); 43 u32 CubeMap : 6; 44 CMD_PADDING(4); 45 }; 46 */ 47 48 /*! 49 @brief テクスチャ 0 のターゲットの設定です。 50 */ 51 enum PicaDataTexture 52 { 53 //! GL_TEXTURE_2D です。 54 PICA_DATA_TEXTURE_2D = 0x0, 55 //! GL_TEXTURE_CUBE_MAP_POSITIVE_X です。 56 PICA_DATA_TEXTURE_CUBE_MAP_POSITIVE_X = 0x0, 57 //! GL_TEXTURE_CUBE_MAP_NEGATIVE_X です。 58 PICA_DATA_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x1, 59 //! GL_TEXTURE_CUBE_MAP_POSITIVE_Y です。 60 PICA_DATA_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x2, 61 //! GL_TEXTURE_CUBE_MAP_NEGATIVE_Y です。 62 PICA_DATA_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x3, 63 //! GL_TEXTURE_CUBE_MAP_POSITIVE_Z です。 64 PICA_DATA_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x4, 65 //! GL_TEXTURE_CUBE_MAP_NEGATIVE_Z です。 66 PICA_DATA_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x5 67 }; 68 69 // PICA_REG_TEXTURE0_ADDR1 0x085 70 #define PICA_CMD_DATA_TEXTURE_CUBE_MAP_ADDR(cubeMapAddr) \ 71 ( (cubeMapAddr) & 0x3fffff ) 72 73 /////////////////////////////////// 74 // Texture combiner 75 // TexEnv 76 77 /* 78 struct CommandTexEnvSrc 79 { 80 u32 srcRgb0 : 4; 81 u32 srcRgb1 : 4; 82 u32 srcRgb2 : 4; 83 CMD_PADDING(4); 84 u32 srcAlpha0 : 4; 85 u32 srcAlpha1 : 4; 86 u32 srcAlpha2 : 4; 87 CMD_PADDING(4); 88 }; 89 */ 90 91 /*! 92 @brief テクスチャコンバイナの srcRgb, srcAlpha を設定します。 93 PICA_REG_TEX_ENV* レジスタで使います。 94 dmp_TexEnv[i].srcRgb, dmp_TexEnv[i].srcAlpha ユニフォームに相当します。 95 */ 96 enum PicaDataTexEnvSrc 97 { 98 //! GL_PRIMARY_COLOR です。 99 PICA_DATA_TEX_ENV_SRC_RGBA_PRIMARY_COLOR = 0x0, 100 //! GL_FRAGMENT_PRIMARY_COLOR です。 101 PICA_DATA_TEX_ENV_SRC_RGBA_FRAGMENT_PRIMARY_COLOR_DMP = 0x1, 102 //! GL_FRAGMENT_SECONDARY_COLOR です。 103 PICA_DATA_TEX_ENV_SRC_RGBA_FRAGMENT_SECONDARY_COLOR_DMP = 0x2, 104 //! GL_TEXTURE0 です。 105 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE0 = 0x3, 106 //! GL_TEXTURE1 です。 107 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE1 = 0x4, 108 //! GL_TEXTURE2 です。 109 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE2 = 0x5, 110 //! GL_TEXTURE3 です。 111 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE3 = 0x6, 112 //! GL_PREVIOUS_BUFFER_DMP です。 113 PICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUS_BUFFER_DMP = 0xd, 114 //! GL_CONSTANT です。 115 PICA_DATA_TEX_ENV_SRC_RGBA_CONSTANT = 0xe, 116 //! GL_PREVIOUS です。 117 PICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUS = 0xf 118 }; 119 120 #define PICA_TEX_ENV_SRC_RGB0_SHIFT 0 121 #define PICA_TEX_ENV_SRC_RGB1_SHIFT 4 122 #define PICA_TEX_ENV_SRC_RGB2_SHIFT 8 123 #define PICA_TEX_ENV_SRC_ALPHA0_SHIFT 16 124 #define PICA_TEX_ENV_SRC_ALPHA1_SHIFT 20 125 #define PICA_TEX_ENV_SRC_ALPHA2_SHIFT 24 126 127 // PICA_REG_TEX_ENV0 0x0c0 128 // PICA_REG_TEX_ENV1 0x0c8 129 // PICA_REG_TEX_ENV2 0x0d0 130 // PICA_REG_TEX_ENV3 0x0d8 131 // PICA_REG_TEX_ENV4 0x0f0 132 // PICA_REG_TEX_ENV5 0x0f8 133 #define PICA_CMD_DATA_TEX_ENV_SRC( srcRgb0, srcRgb1, srcRgb2, \ 134 srcAlpha0, srcAlpha1, srcAlpha2 ) \ 135 ( (srcRgb0) << PICA_TEX_ENV_SRC_RGB0_SHIFT | \ 136 (srcRgb1) << PICA_TEX_ENV_SRC_RGB1_SHIFT | \ 137 (srcRgb2) << PICA_TEX_ENV_SRC_RGB2_SHIFT | \ 138 (srcAlpha0) << PICA_TEX_ENV_SRC_ALPHA0_SHIFT | \ 139 (srcAlpha1) << PICA_TEX_ENV_SRC_ALPHA1_SHIFT | \ 140 (srcAlpha2) << PICA_TEX_ENV_SRC_ALPHA2_SHIFT ) 141 142 /* 143 struct CommandTexEnvOperand 144 { 145 u32 operandRg0 : 4; 146 u32 operandRg1 : 4; 147 u32 operandRg2 : 4; 148 u32 operandAlpha0 : 3; 149 CMD_PADDING(1); 150 u32 operandAlpha1 : 3; 151 CMD_PADDING(1); 152 u32 operandAlpha2 : 3; 153 CMD_PADDING(9); 154 }; 155 */ 156 157 /*! 158 @brief テクスチャコンバイナの operandRgb, operandAlpha を設定します。 159 PICA_REG_TEX_ENV*_OPERAND レジスタで使います。 160 dmp_TexEnv[i].srcRgb, dmp_TexEnv[i].srcAlpha ユニフォームに相当します。 161 */ 162 enum PicaDataTexEnvOperand 163 { 164 //! GL_SRC_COLOR です。 165 PICA_DATA_OPE_RGB_SRC_COLOR = 0x0, 166 //! GL_ONE_MINUS_SRC_COLOR です。 167 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_COLOR = 0x1, 168 //! GL_SRC_ALPHA です。 169 PICA_DATA_OPE_RGB_SRC_ALPHA = 0x2, 170 //! GL_ONE_MINUS_SRC_ALPHA です。 171 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_ALPHA = 0x3, 172 //! GL_SRC_R_DMP です。 173 PICA_DATA_OPE_RGB_SRC_R_DMP = 0x4, 174 //! GL_ONE_MINUS_SRC_R_DMP です。 175 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_R_DMP = 0x5, 176 //! GL_SRC_G_DMP です。 177 PICA_DATA_OPE_RGB_SRC_G_DMP = 0x8, 178 //! GL_ONE_MINUS_SRC_G_DMP です。 179 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_G_DMP = 0x9, 180 //! GL_SRC_B_DMP です。 181 PICA_DATA_OPE_RGB_SRC_B_DMP = 0xc, 182 //! GL_ONE_MINUS_SRC_B_DMP です。 183 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_B_DMP = 0xd, 184 //! GL_SRC_ALPHA です。 185 PICA_DATA_OPE_ALPHA_SRC_ALPHA = 0x0, 186 //! GL_ONE_MINUS_SRC_ALPHA_DMP です。 187 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_ALPHA = 0x1, 188 //! GL_SRC_R_DMP です。 189 PICA_DATA_OPE_ALPHA_SRC_R_DMP = 0x2, 190 //! GL_ONE_MINUS_SRC_R_DMP です。 191 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_R_DMP = 0x3, 192 //! GL_SRC_G_DMP です。 193 PICA_DATA_OPE_ALPHA_SRC_G_DMP = 0x4, 194 //! GL_ONE_MINUS_SRC_G_DMP です。 195 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_G_DMP = 0x5, 196 //! GL_SRC_B_DMP です。 197 PICA_DATA_OPE_ALPHA_SRC_B_DMP = 0x6, 198 //! GL_ONE_MINUS_SRC_B_DMP です。 199 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_B_DMP = 0x7 200 }; 201 202 203 #define PICA_TEX_ENV_OPE_RGB0_SHIFT 0 204 #define PICA_TEX_ENV_OPE_RGB1_SHIFT 4 205 #define PICA_TEX_ENV_OPE_RGB2_SHIFT 8 206 #define PICA_TEX_ENV_OPE_ALPHA0_SHIFT 12 207 #define PICA_TEX_ENV_OPE_ALPHA1_SHIFT 16 208 #define PICA_TEX_ENV_OPE_ALPHA2_SHIFT 20 209 210 // PICA_REG_TEX_ENV0_OPERAND 0x0c1 211 // PICA_REG_TEX_ENV1_OPERAND 0x0c9 212 // PICA_REG_TEX_ENV2_OPERAND 0x0d1 213 // PICA_REG_TEX_ENV3_OPERAND 0x0d9 214 // PICA_REG_TEX_ENV4_OPERAND 0x0f1 215 // PICA_REG_TEX_ENV5_OPERAND 0x0f9 216 #define PICA_CMD_DATA_TEX_ENV_OPERAND(operandRgb0, operandRgb1, operandRgb2, \ 217 operandAlpha0, operandAlpha1, operandAlpha2) \ 218 ( (operandRgb0) << PICA_TEX_ENV_OPE_RGB0_SHIFT | \ 219 (operandRgb1) << PICA_TEX_ENV_OPE_RGB1_SHIFT | \ 220 (operandRgb2) << PICA_TEX_ENV_OPE_RGB2_SHIFT | \ 221 (operandAlpha0) << PICA_TEX_ENV_OPE_ALPHA0_SHIFT | \ 222 (operandAlpha1) << PICA_TEX_ENV_OPE_ALPHA1_SHIFT | \ 223 (operandAlpha2) << PICA_TEX_ENV_OPE_ALPHA2_SHIFT ) 224 225 /* 226 struct CommandTexEnvCombine 227 { 228 u32 combineRgb : 4; 229 CMD_PADDING(12); 230 u32 combineAlpha : 4; 231 CMD_PADDING(12); 232 }; 233 */ 234 235 /*! 236 @brief テクスチャコンバイナの combineRgb, combineAlpha を設定します。 237 PICA_REG_TEX_ENV*_COMBINE レジスタで使います。 238 dmp_TexEnv[i].combineRgb, dmp_TexEnv[i].combineAlpha ユニフォームに相当します。 239 */ 240 enum PicaDataTexEnvCombine 241 { 242 //! GL_REPLACE です。 243 PICA_DATA_TEX_ENV_COMBINE_REPLACE = 0x0, 244 //! GL_MODULATE です。 245 PICA_DATA_TEX_ENV_COMBINE_MODULATE = 0x1, 246 //! GL_ADD です。 247 PICA_DATA_TEX_ENV_COMBINE_ADD = 0x2, 248 //! GL_ADD_SIGNED です。 249 PICA_DATA_TEX_ENV_COMBINE_ADD_SIGNED = 0x3, 250 //! GL_INTERPOLATE です。 251 PICA_DATA_TEX_ENV_COMBINE_INTERPOLATE = 0x4, 252 //! GL_SUBSTRACT です。 253 PICA_DATA_TEX_ENV_COMBINE_SUBTRACT = 0x5, 254 //! GL_DOT3_RGB です。 255 PICA_DATA_TEX_ENV_COMBINE_DOT3_RGB = 0x6, 256 //! GL_DOT3_RGBA です。 257 PICA_DATA_TEX_ENV_COMBINE_DOT3_RGBA = 0x7, 258 //! GL_MULT_ADD_DMP です。 259 PICA_DATA_TEX_ENV_COMBINE_MULT_ADD_DMP = 0x8, 260 //! GL_ADD_MULT_DMP です。 261 PICA_DATA_TEX_ENV_COMBINE_ADD_MULT_DMP = 0x9 262 }; 263 264 // PICA_REG_TEX_ENV0_COMBINE 0x0c2 265 // PICA_REG_TEX_ENV1_COMBINE 0x0ca 266 // PICA_REG_TEX_ENV2_COMBINE 0x0d2 267 // PICA_REG_TEX_ENV3_COMBINE 0x0da 268 // PICA_REG_TEX_ENV4_COMBINE 0x0f2 269 // PICA_REG_TEX_ENV5_COMBINE 0x0fa 270 #define PICA_CMD_DATA_TEX_ENV_COMBINE( combineRgb, combineAlpha ) \ 271 ( (combineRgb) | (combineAlpha) << 16 ) 272 273 /* 274 struct CommandTexEnvConst 275 { 276 u32 constRgb1 : 8; 277 u32 constRgb2 : 8; 278 u32 constRgb3 : 8; 279 u32 constRgb4 : 8; 280 }; 281 */ 282 // PICA_REG_TEX_ENV0_COLOR 0x0c3 283 // PICA_REG_TEX_ENV1_COLOR 0x0cb 284 // PICA_REG_TEX_ENV2_COLOR 0x0d3 285 // PICA_REG_TEX_ENV3_COLOR 0x0db 286 // PICA_REG_TEX_ENV4_COLOR 0x0f3 287 // PICA_REG_TEX_ENV5_COLOR 0x0fb 288 #define PICA_CMD_DATA_TEX_ENV_CONST( constRgb0, constRgb1, constRgb2, constRgb3 ) \ 289 ((constRgb0) | (constRgb1) << 8 | (constRgb2) << 16 | (constRgb3) << 24) 290 291 /* 292 struct CommandTexEnvScale 293 { 294 u32 scaleRgb : 2; 295 CMD_PADDING(14); 296 u32 scaleAlpha : 2; 297 CMD_PADDING(14); 298 }; 299 */ 300 301 /*! 302 @brief テクスチャコンバイナの scaleRgb, scaleAlpha を設定します。 303 PICA_REG_TEX_ENV*_SCALE レジスタで使います。 304 dmp_TexEnv[i].scaleRgb, dmp_TexEnv[i].scaleAlpha ユニフォームに相当します。 305 */ 306 enum PicaDataTexEnvScale 307 { 308 //! 1.0 です。 309 PICA_DATA_TEX_ENV_SCALE_1 = 0x0, 310 //! 2.0 です。 311 PICA_DATA_TEX_ENV_SCALE_2 = 0x1, 312 //! 4.0 です。 313 PICA_DATA_TEX_ENV_SCALE_4 = 0x2 314 }; 315 316 // PICA_REG_TEX_ENV0_SCALE 0x0c4 317 // PICA_REG_TEX_ENV1_SCALE 0x0cc 318 // PICA_REG_TEX_ENV2_SCALE 0x0d4 319 // PICA_REG_TEX_ENV3_SCALE 0x0dc 320 // PICA_REG_TEX_ENV4_SCALE 0x0f4 321 // PICA_REG_TEX_ENV5_SCALE 0x0fc 322 #define PICA_CMD_DATA_TEX_ENV_SCALE( scaleRgb, scaleAlpha ) \ 323 ( (scaleRgb) | (scaleAlpha) << 16 ) 324 325 #define PICA_CMD_DATA_TEX_ENV_BUFFER_COLOR_WHITE 0xffffffff 326 #define PICA_CMD_DATA_TEX_ENV_BUFFER_COLOR_BLACK 0x00000000 327 328 // PICA_REG_TEX_ENV_BUF_COLOR 0x0fd 329 #define PICA_CMD_DATA_COLOR( color8 ) \ 330 ( (color8.r) | (color8.g) << 8 | (color8.b) << 16 | (color8.a) << 24 ) 331 332 /* 333 struct CommandTexEnvBufInput 334 { 335 CMD_PADDING(8); 336 u32 bufInput1 : 4; // 1 bit in this field 337 CMD_PADDING(4); 338 u32 bufInput2 : 4; // 1 bin in this field 339 CMD_PADDING(12); 340 }; 341 */ 342 343 344 /*! 345 @brief テクスチャコンバイナの bufferInput を設定します。 346 PICA_REG_TEX_ENV_BUF_INPUT ( 0x0e0 ) レジスタで使います。 347 dmp_TexEnv[i].bufferInput ユニフォームに相当します。 348 */ 349 enum PicaDataTexEnvBufferInput 350 { 351 //! 前段のコンバイナバッファの出力を参照します。 352 PICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS_BUFFER_DMP = 0x0, 353 //! 前段のコンバイナの出力を参照します。 354 PICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS = 0x1 355 }; 356 357 // PICA_REG_TEX_ENV_BUF_INPUT 0x0e0 358 // i is index of dmp_TexEnv[i]. The values are 1, 2, 3, 4 only. 359 360 #define PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(i, bufInput0, bufInput1) \ 361 ((bufInput0) << 7+(i) | (bufInput1) << 11+(i)) 362 363 // 0x0e0 [15:8] 364 #define PICA_CMD_SET_TEX_ENV_BUFFER_INPUT(bufInput0_0, bufInput0_1, \ 365 bufInput1_0, bufInput1_1, \ 366 bufInput2_0, bufInput2_1, \ 367 bufInput3_0, bufInput3_1) \ 368 ( PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(1, bufInput0_0, bufInput0_1) | \ 369 PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(2, bufInput1_0, bufInput1_1) | \ 370 PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(3, bufInput2_0, bufInput2_1) | \ 371 PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(4, bufInput3_0, bufInput3_1) ) , \ 372 PICA_CMD_HEADER_SINGLE_BE(PICA_REG_GAS_FOG_MODE, 0x2) 373 374 /////////////////////////////////// 375 // Shadow Textrue 376 // 377 /* 378 struct CommandTextureShadow 379 { 380 u32 perspectiveShadow : 1; 381 u32 shadowZBias : 23; 382 u32 shadowZScale : 8; 383 }; 384 */ 385 386 // PICA_REG_TEXTURE0_SHADOW 0x08b 387 #define PICA_CMD_DATA_TEXTURE_SHADOW(perspectiveShadow, shadowZBias, shadowZScale) \ 388 (( (perspectiveShadow) ? 0 : 1) | (shadowZBias) << 1 | (shadowZScale) << 24) 389 390 /////////////////////////////////// 391 // Texture Sampler 392 // Texture Texcoord 393 // Texture Cache Clear 394 /* 395 struct CommandTextureFunc 396 { 397 u32 type0_0 : 1; 398 u32 type1 : 1; 399 u32 type2 : 1; 400 CMD_PADDING(1); // 0x0 401 CMD_PADDING(4); 402 u32 texcoord3 : 2; 403 u32 type3 : 1; 404 CMD_PADDING(1); 405 CMD_PADDING(1); // 0x1 406 u32 texcoord2 : 1; 407 CMD_PADDING(2); 408 u32 clear : 1; 409 CMD_PADDING(15); 410 411 }; 412 */ 413 414 // Texture Sampler 415 416 /*! 417 @brief テクスチャ 0 のサンプルのタイプを指定します。 418 PICA_REG_TEXTURE_FUNC ( 0x080 [30:28] ) レジスタで使います。 419 dmp_Texture[0].samplerType ユニフォームに相当します。 420 */ 421 enum PicaDataTexture0SamplerType 422 { 423 //! GL_TEXTURE_2D です。 424 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_2D = 0x0, 425 //! GL_TEXTURE_CUBE_MAP です。 426 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_CUBE_MAP = 0x1, 427 //! GL_TEXTURE_SHADOW_2D_DMP です。 428 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_SHADOW_2D_DMP = 0x2, 429 //! GL_TEXTURE_PROJECTION_DMP です。 430 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_PROJECTION_DMP = 0x3, 431 //! GL_TEXTURE_SHADOW_CUBE_DMP です。 432 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_SHADOW_CUBE_DMP = 0x4, 433 //! GL_FALSE です。 434 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSE = 0x5 435 }; 436 437 /*! 438 @brief テクスチャ 1 のサンプルのタイプを指定します。 439 PICA_REG_TEXTURE_FUNC ( 0x080 [1:1] ) レジスタで使います。 440 dmp_Texture[1].samplerType ユニフォームに相当します。 441 */ 442 enum PicaDataTexture1SamplerType 443 { 444 //! GL_FALSE です。 445 PICA_DATA_TEXTURE1_SAMPLER_TYPE_FALSE = 0x0, 446 //! GL_TEXTUER_2D です。 447 PICA_DATA_TEXTURE1_SAMPLER_TYPE_TEXTURE_2D = 0x1 448 }; 449 450 /*! 451 @brief テクスチャ 2 のサンプルのタイプを指定します。 452 PICA_REG_TEXTURE_FUNC ( 0x080 [2:2] ) レジスタで使います。 453 dmp_Texture[2].samplerType ユニフォームに相当します。 454 */ 455 enum PicaDataTexture2SamplerType 456 { 457 //! GL_FALSE です。 458 PICA_DATA_TEXTURE2_SAMPLER_TYPE_FALSE = 0x0, 459 //! GL_TEXTUER_2D です。 460 PICA_DATA_TEXTURE2_SAMPLER_TYPE_TEXTURE_2D = 0x1 461 }; 462 463 /*! 464 @brief テクスチャ 3 のサンプルのタイプを指定します。 465 PICA_REG_TEXTURE_FUNC ( 0x080 [10:10] ) レジスタで使います。 466 dmp_Texture[3].samplerType ユニフォームに相当します。 467 */ 468 enum PicaDataTexture3SamplerType 469 { 470 //! GL_FALSE です。 471 PICA_DATA_TEXTURE3_SAMPLER_TYPE_FALSE = 0x0, 472 //! GL_TEXTUER_PROCEDURAL_DMP です。 473 PICA_DATA_TEXTURE3_SAMPLER_TYPE_TEXTURE_PROCEDURAL_DMP = 0x1 474 }; 475 476 477 /*! 478 @brief テクスチャ 2 のテクスチャ座標を設定します。 479 PICA_REG_TEXTURE_FUNC ( 0x080 [13:13] ) レジスタで使います。 480 dmp_Texture[2].texcoord ユニフォームに相当します。 481 */ 482 enum PicaDataTexture2TexCoord 483 { 484 //! GL_TEXTURE1 です。 485 PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE1 = 0x1, 486 //! GL_TEXTURE2 です。 487 PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE2 = 0x0 488 }; 489 490 /*! 491 @brief テクスチャ 3 のテクスチャ座標を設定します。 492 PICA_REG_TEXTURE_FUNC ( 0x080 [9:8] ) レジスタで使います。 493 dmp_Texture[3].texcoord ユニフォームに相当します。 494 */ 495 enum PicaDataTexture3TexCoord 496 { 497 //! GL_TEXTURE0 です。 498 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE0 = 0x0, 499 //! GL_TEXTURE1 です。 500 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE1 = 0x1, 501 //! GL_TEXTURE2 です。 502 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE2 = 0x2 503 }; 504 505 // PICA_REG_TEXTURE_FUNC 0x080 506 #define PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 507 texture3Texcoord, texture3SamplerType, \ 508 texture2Texcoord, clearTextureCache) \ 509 ( ((texture0SamplerType == PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSE) ? 0 : 1) | \ 510 ((texture1SamplerType) ? 1 : 0) << 1 | \ 511 ((texture2SamplerType) ? 1 : 0) << 2 | \ 512 0 << 3 | \ 513 (texture3Texcoord) << 8 | \ 514 ((texture3SamplerType) ? 1 : 0) << 10 | \ 515 1 << 12 | \ 516 ((texture2Texcoord) ? 1 : 0) << 13 | \ 517 (clearTextureCache) << 16 | \ 518 0 << 17 ) 519 520 #define PICA_CMD_SET_TEXTURE_FUNC_CLEAR(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 521 texture3SamplerType, texture2Texcoord, texture3Texcoord) \ 522 PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 523 texture3Texcoord, texture3SamplerType, \ 524 texture2Texcoord, 0x1), \ 525 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB ), \ 526 1 << 16, \ 527 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0x4 ) 528 529 #define PICA_CMD_SET_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 530 texture3SamplerType, texture2Texcoord, texture3Texcoord) \ 531 PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 532 texture3Texcoord, texture3SamplerType, \ 533 texture2Texcoord, 0x0), \ 534 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB ) 535 536 /////////////////////////////////// 537 // Procedural Texture 538 // 539 /* 540 struct CommandProcTex0 541 { 542 u32 ptClampU : 3; 543 u32 ptClampV : 4; 544 u32 ptRgbMap : 4; 545 u32 ptAlphaMap : 4; 546 u32 ptAlphaSeparate : 1; 547 u32 ptNoiseEnable : 1; 548 u32 ptShiftU : 2; 549 u32 ptShiftV : 2; 550 u32 ptTexBias1 : 8; 551 CMD_PADDING(3); 552 }; 553 */ 554 555 /*! 556 @brief プロシージャルテクスチャの手続き計算で使用される関数を設定します。 557 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [9:6] ) レジスタで使います。 558 dmp_Texture[3].ptRgbMap, dmp_Texture[3].ptAlphaMap ユニフォームに相当します。 559 */ 560 enum PicaDataProcTexMap 561 { 562 //! GL_PROCTEX_U_DMP です。 563 PICA_DATA_PROCTEX_U_DMP = 0x0, 564 //! GL_PROCTEX_U2_DMP です。 565 PICA_DATA_PROCTEX_U2_DMP = 0x1, 566 //! GL_PROCTEX_V_DMP です。 567 PICA_DATA_PROCTEX_V_DMP = 0x2, 568 //! GL_PROCTEX_V2_DMP です。 569 PICA_DATA_PROCTEX_V2_DMP = 0x3, 570 //! GL_PROCTEX_ADD_DMP です。 571 PICA_DATA_PROCTEX_ADD_DMP = 0x4, 572 //! GL_PROCTEX_ADD2_DMP です。 573 PICA_DATA_PROCTEX_ADD2_DMP = 0x5, 574 //! GL_PROCTEX_ADD2SQRT2_DMP です。 575 PICA_DATA_PROCTEX_ADDSQRT2_DMP = 0x6, 576 //! GL_PROCTEX_MIN_DMP です。 577 PICA_DATA_PROCTEX_MIN_DMP = 0x7, 578 //! GL_PROCTEX_MAX_DMP です。 579 PICA_DATA_PROCTEX_MAX_DMP = 0x8, 580 //! GL_PROCTEX_RMAX_DMP です。 581 PICA_DATA_PROCTEX_RMAX_DMP = 0x9 582 }; 583 584 /*! 585 @brief プロシージャルテクスチャのクランプ方法を設定します。 586 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0], [5:3] ) レジスタで使います。 587 dmp_Texture[3].ptClampU, dmp_Texture[3].ptClampV ユニフォームに相当します。 588 */ 589 enum PicaDataProcTexClamp 590 { 591 //! GL_CLAMP_TO_ZERO_DMP です。 592 PICA_DATA_PROCTEX_CLAMP_TO_ZERO_DMP = 0x0, 593 //! GL_CLAMP_TO_EDGE です。 594 PICA_DATA_PROCTEX_CLAMP_TO_EDGE = 0x1, 595 //! GL_SYMMETRICAL_REPEAT_DMP です。 596 PICA_DATA_PROCTEX_SYMMETRICAL_REPEAT_DMP = 0x2, 597 //! GL_MIRRORED_REPEAT です。 598 PICA_DATA_PROCTEX_MIRRORED_REPEAT = 0x3, 599 //! GL_PULSE_DMP です。 600 PICA_DATA_PROCTEX_PULSE_DMP = 0x4 601 }; 602 603 /*! 604 @brief プロシージャルテクスチャの座標シフト方法を設定します。 605 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [17:16], [19:18] ) レジスタで使います。 606 dmp_Texture[3].ptShiftU, dmp_Texture[3].ptShiftV ユニフォームに相当します。 607 */ 608 enum PicaDataProcTexShift 609 { 610 //! GL_NONE_DMP です。 611 PICA_DATA_PROCTEX_NONE_DMP = 0x0, 612 //! GL_ODD_DMP です。 613 PICA_DATA_PROCTEX_ODD_DMP = 0x1, 614 //! GL_EVEN_DMP です。 615 PICA_DATA_PROCTEX_EVEN_DMP = 0x2 616 }; 617 618 // PICA_REG_TEXTURE3_PROCTEX0 0x0a8 619 #define PICA_CMD_DATA_PROCTEX0(ptClampU, ptClampV, \ 620 ptRgbMap, ptAlphaMap, ptAlphaSeparate, \ 621 ptNoiseEnable, ptShiftU, ptShiftV, ptTexBiasF16Low8) \ 622 ( (ptClampU) | \ 623 (ptClampV) << 3 | \ 624 (ptRgbMap) << 6 | \ 625 (ptAlphaMap) << 10 | \ 626 (ptAlphaSeparate ? 1 : 0) << 14 | \ 627 (ptNoiseEnable ? 1 : 0) << 15 | \ 628 (ptShiftU) << 16 | \ 629 (ptShiftV) << 18 | \ 630 (ptTexBiasF16Low8) << 20 ) 631 632 633 634 // PICA_REG_TEXTURE3_PROCTEX1 0x0a9 635 #define PICA_CMD_DATA_PROCTEX1(ptNoiseU1, ptNoiseU2) \ 636 ( (ptNoiseU1) << 16 | (ptNoiseU2) ) 637 638 // PICA_REG_TEXTURE3_PROCTEX2 0x0aa 639 #define PICA_CMD_DATA_PROCTEX2(ptNoiseV1, ptNoiseV2) \ 640 ( (ptNoiseV1) << 16 | (ptNoiseV2) ) 641 642 // PICA_REG_TEXTURE3_PROCTEX3 0x0ab 643 #define PICA_CMD_DATA_PROCTEX3(ptNoiseU0, ptNoiseV0) \ 644 ( (ptNoiseU0) | (ptNoiseV0) << 16 ) 645 646 /* 647 struct CommandProcTex4 648 { 649 u32 ptMinFilter : 3; 650 CMD_PADDING(8); // 0x60 651 u32 ptTexWidth : 8; 652 u32 ptTexBias2 : 8; 653 CMD_PADDING(5); 654 }; 655 */ 656 657 /*! 658 @brief プロシージャルテクスチャの MinFilter を設定します。 659 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0] ) レジスタで使います。 660 dmp_Texture[3].ptMinFilter ユニフォームに相当します。 661 */ 662 enum PicaDataProcTexFilter 663 { 664 //! GL_NEAREST です。 665 PICA_DATA_PROCTEX_NEAREST = 0x0, 666 //! GL_LINEAR です。 667 PICA_DATA_PROCTEX_LINEAR = 0x1, 668 //! GL_NEAREST_MIPMAP_NEAREST です。 669 PICA_DATA_PROCTEX_NEAREST_MIPMAP_NEAREST = 0x2, 670 //! GL_LINEAR_MIPMAP_NEAREST です。 671 PICA_DATA_PROCTEX_LINEAR_MIPMAP_NEAREST = 0x3, 672 //! GL_NEAREST_MIPMAP_LINEAR です。 673 PICA_DATA_PROCTEX_NEAREST_MIPMAP_LINEAR = 0x4, 674 //! GL_LINEAR_MIPMAP_LINEAR です。 675 PICA_DATA_PROCTEX_LINEAR_MIPMAP_LINEAR = 0x5 676 }; 677 678 // PICA_REG_TEXTURE3_PROCTEX4 0x0ac 679 #define PICA_CMD_DATA_PROCTEX4(ptMinFilter, ptTexWidth, ptTexBiasF16Hi8) \ 680 ( (ptMinFilter) | \ 681 0x60 << 3 | \ 682 (ptTexWidth) << 11 | \ 683 (ptTexBiasF16Hi8) << 19 ) 684 685 /* 686 struct CommandProcTex5 687 { 688 u32 ptTexOffset : 8; 689 CMD_PADDING(24); // 0xe0c080 690 }; 691 */ 692 693 // PICA_REG_TEXTURE3_PROCTEX5 0x0ad 694 #define PICA_CMD_DATA_PROCTEX5(ptTexOffset) \ 695 ( (ptTexOffset) | 0xe0c08000 ) 696 697 /////////////////////////////////// 698 // Procedural texture Reference Table 699 /* 700 struct CommandProTexRefTab 701 { 702 u32 index : 8; 703 u32 attrib : 4; 704 CMD_PADDING(20); 705 }; 706 */ 707 708 709 /*! 710 @brief プロシージャルテクスチャの参照テーブルを設定します。 711 PICA_REG_PROCTEX_LUT ( 0x0af [2:0] ) レジスタで使います。 712 dmp_Texture[3].ptSampler ユニフォームに相当します。 713 */ 714 enum PicaDataProcTexRefTable 715 { 716 //! ノイズ変調関数参照テーブルです。 717 PICA_DATA_PROCTEX_NOISE_REF_TABLE = 0x0, 718 //! RGB マッピングの F 関数参照テーブルです。 719 PICA_DATA_PROCTEX_RGB_MAP_REF_TABLE = 0x2, 720 //! アルファマッピングの F 関数参照テーブルです。 721 PICA_DATA_PROCTEX_ALPHA_MAP_REF_TABLE = 0x3, 722 //! カラー参照テーブル(カラー値)です。 723 PICA_DATA_PROCTEX_COLOR_REF_TABLE = 0x4, 724 //! カラー参照テーブル(差分値)です。 725 PICA_DATA_PROCTEX_COLOR_DIFF_REF_TABLE = 0x5 726 }; 727 728 // PICA_REG_PROCTEX_LUT 0x0af 729 #define PICA_CMD_DATA_PROCTEX_LUT(index, refTable) \ 730 ((index) | (refTable) << 8) 731 732 // PICA_REG_PROCTEX_LUT_DATA0 0x0b0 733 // PICA_REG_PROCTEX_LUT_DATA1 0x0b1 734 // PICA_REG_PROCTEX_LUT_DATA2 0x0b2 735 // PICA_REG_PROCTEX_LUT_DATA3 0x0b3 736 // PICA_REG_PROCTEX_LUT_DATA4 0x0b4 737 // PICA_REG_PROCTEX_LUT_DATA5 0x0b5 738 // PICA_REG_PROCTEX_LUT_DATA6 0x0b6 739 // PICA_REG_PROCTEX_LUT_DATA7 0x0b7 740 #define PICA_CMD_DATA_PROCTEX_LUT_DATA(data) (data) 741 742 /////////////////////////////////// 743 // Texture Resolution 744 /* 745 struct CommandTexSize 746 { 747 u32 height : 16; 748 u32 width : 16; 749 }; 750 */ 751 752 // PICA_REG_TEXTURE0_SIZE 0x082 753 // PICA_REG_TEXTURE1_SIZE 0x092 754 // PICA_REG_TEXTURE2_SIZE 0x09a 755 #define PICA_CMD_DATA_TEXTURE_SIZE( width, height ) \ 756 ( (height) | (width) << 16 ) 757 758 /////////////////////////////////// 759 // Texture Format 760 761 /*! 762 @brief テクスチャフォーマットを設定します。 763 PICA_REG_TEXTURE*_FORMAT ( 0x08e[3:0], 0x096[3:0], 0x09e[3:0] ) レジスタで使います。 764 glTexImage2D() の 引数 format, type や glCompressedTexImage2D() の 引数 internalformat に相当します。 765 */ 766 enum PicaDataTextureFormat 767 { 768 //! GL_RGBA, GL_UNSIGNED_BYTE, GL_SHADOW_DMP, GL_UNSIGNED_BYTE, GL_GAS_DMP, GL_UNSIGNED_SHORT です。 769 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_BYTE = 0x0, 770 //! GL_RGB, GL_UNSIGNED_BYTE です。 771 PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_BYTE = 0x1, 772 //! GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1 です。 773 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_5_5_5_1 = 0x2, 774 //! GL_RGB, GL_UNSIGNED_SHORT_5_6_5 です。 775 PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_SHORT_5_6_5 = 0x3, 776 //! GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4 です。 777 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_4_4_4_4 = 0x4, 778 //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE です。 779 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE = 0x5, 780 //! GL_HILO8_DMP, GL_UNSIGNED_BYTE です。 781 PICA_DATA_TEXTURE_FORMAT_HILO8_DMP_UNSIGNED_BYTE = 0x6, 782 //! GL_LUMINANCE, GL_UNSIGNED_BYTE です。 783 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_BYTE = 0x7, 784 //! GL_ALPHA, GL_UNSIGNED_BYTE です。 785 PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_BYTE = 0x8, 786 //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE_4_4_DMP です。 787 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE_4_4_DMP = 0x9, 788 //! GL_LUMINANCE, GL_UNSIGNED_4BITS_DMP です。 789 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_4BITS_DMP = 0xa, 790 //! GL_ALPHA, GL_UNSIGNED_4BITS_DMP です。 791 PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_4BITS_DMP = 0xb, 792 //! GL_ETC1_RGB8_NATIVE_DMP です。 793 PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP = 0xc, 794 //! GL_ETC1_ALPHA_RGB8_A4_NATIVE_DMP です。 795 PICA_DATA_TEXTURE_FORMAT_ETC1_ALPHA_RGB8_A4_NATIVE_DMP = 0xd 796 }; 797 798 // PICA_REG_TEXTURE0_FORMAT 0x08e 799 // PICA_REG_TEXTURE1_FORMAT 0x096 800 // PICA_REG_TEXTURE2_FORMAT 0x09e 801 #define PICA_CMD_DATA_TEXTURE_FORMAT_TYPE( type ) (type) 802 803 /////////////////////////////////// 804 // Texture Wrap Mode 805 // Texture Wrap Filter 806 // Texture Sampler 807 // Texture Format 808 // Texture Shadow Enable 809 /* 810 struct CommandTex0WrapFilter 811 { 812 CMD_PADDING(1); 813 u32 magFilter : 1; 814 u32 minFilter1 : 1; 815 CMD_PADDING(1); 816 u32 isETC1 : 2; 817 CMD_PADDING(2); 818 u32 wrapT : 3; 819 CMD_PADDING(1); 820 u32 wrapS : 3; 821 CMD_PADDING(1); 822 CMD_PADDING(2); // set to 0 [17:16] 823 CMD_PADDING(2); 824 u32 enable : 1; 825 CMD_PADDING(3); 826 u32 minFilter2 : 1; 827 CMD_PADDING(3); 828 u32 type1_1 : 3; 829 CMD_PADDING(1); 830 }; 831 */ 832 833 834 /*! 835 @brief テクスチャの MAG フィルタのモードを設定します。 836 PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[1:1], 0x93[1:1], 0x9b[1:1]) レジスタで使います。 837 glTexParameter{if}( TEXTURE_MAG_FILTER, ...)に相当します。 838 */ 839 enum PicaDataTextureMagFilter 840 { 841 //! GL_NEAREST です。 842 PICA_DATA_TEXTURE_MAG_FILTER_NEAREST = 0x0, 843 //! GL_LINEAR です。 844 PICA_DATA_TEXTURE_MAG_FILTER_LINEAR = 0x1 845 }; 846 847 848 /*! 849 @brief テクスチャの MIN フィルタのモードを設定します。 850 PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[24:24, 2:2], 0x93[24:24, 2:2], 0x9b[24:24, 2:2) レジスタで使います。 851 glTexParameter{if}( TEXTURE_MIN_FILTER, ...)に相当します。 852 */ 853 enum PicaDataTextureMinFilter 854 { 855 //! GL_NEAREST です。 856 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST = 0x0, 857 //! GL_XXX_MIPMAP_NEAREST です。 858 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_NEAREST = 0x1, 859 //! GL_XXX_MIPMAP_LINEAR です。 860 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR = 0x2, 861 //! GL_LINEAR です。 862 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR = 0x3, 863 //! GL_XXX_MIPMAP_NEAREST です。 864 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST = 0x4, 865 //! GL_XXX_MIPMAP_LINEAR です。 866 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR = 0x5 867 }; 868 869 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER0(texture0MinFilter) \ 870 ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR ) || \ 871 ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST ) || \ 872 ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR ) ) \ 873 ? 1 : 0 ) 874 875 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER1(texture0MinFilter) \ 876 ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR ) || \ 877 ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR ) ) \ 878 ? 1 : 0 ) 879 880 /*! 881 @brief テクスチャの WRAP モードを設定します。 882 PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[14:12, 10:8], 0x93[14:12, 10:8], 0x9b[14:12, 10:8]) レジスタで使います。 883 glTexParameter{if}( TEXTURE_WRAP_*, ...)に相当します。 884 */ 885 enum PicaDataTextureWrap 886 { 887 //! GL_CLAMP_TO_EDGE です。 888 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_EDGE = 0, 889 //! GL_CLAMP_TO_BORDER です。 890 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_BORDER = 1, 891 //! GL_REPEAT です。 892 PICA_DATA_TEXTURE_WRAP_REPEAT = 2, 893 //! GL_MIRRORED_REPEAT です。 894 PICA_DATA_TEXTURE_WRAP_MIRRORED_REPEAT = 3 895 }; 896 897 898 #define PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 899 textureFormat, textureWrapT, textureWrapS, \ 900 useShadowTexture, textureSamplerType ) \ 901 ( (textureMagFilter) << 1 | \ 902 PICA_CMD_DATA_TEXTURE_MIN_FILTER0(textureMinFilter) << 2 | \ 903 ((textureFormat == PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP) ? 2 : 0 ) << 4 | \ 904 (textureWrapT) << 8 | \ 905 (textureWrapS) << 12 | \ 906 0 << 16 | \ 907 (useShadowTexture) << 20 | \ 908 PICA_CMD_DATA_TEXTURE_MIN_FILTER1(textureMinFilter) << 24 | \ 909 (textureSamplerType) << 28 ) 910 911 #define PICA_CMD_DATA_TEXTURE0_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 912 textureFormat, textureWrapT, textureWrapS, \ 913 useShadowTexture, textureSamplerType ) \ 914 PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 915 textureFormat, textureWrapT, textureWrapS, \ 916 useShadowTexture, textureSamplerType ) 917 918 #define PICA_CMD_DATA_TEXTURE1_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 919 textureFormat, textureWrapT, textureWrapS) \ 920 PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 921 textureFormat, textureWrapT, textureWrapS, \ 922 0x0, 0x0) 923 924 #define PICA_CMD_DATA_TEXTURE2_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 925 textureFormat, textureWrapT, textureWrapS ) \ 926 PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 927 textureFormat, textureWrapT, textureWrapS, \ 928 0x0, 0x0) 929 930 /* 931 struct CommandTex12WrapFilter 932 { 933 CMD_PADDING(1); 934 u32 magFilter : 1; 935 u32 minFilter1 : 1; 936 CMD_PADDING(1); 937 u32 isETC1 : 2; 938 CMD_PADDING(2); 939 u32 wrapT : 3; 940 CMD_PADDING(1); 941 u32 wrapS : 3; 942 CMD_PADDING(2); // set to 0[17:16] 943 CMD_PADDING(7); 944 u32 minFilter2 : 1; 945 CMD_PADDING(7); 946 }; 947 */ 948 949 /////////////////////////////////// 950 // Texture LOD Level 951 // Texture LOD Bias 952 /* 953 struct CommandTexLODLev 954 { 955 u32 bias : 12; 956 u32 max : 4; 957 CMD_PADDING(4); 958 u32 min : 4; 959 CMD_PADDING(4); 960 }; 961 */ 962 963 // PICA_REG_TEXTURE0_LOD 0x084 964 // PICA_REG_TEXTURE1_LOD 0x094 965 // PICA_REG_TEXTURE2_LOD 0x09c 966 #define PICA_CMD_DATA_TEXTURE_LOD_LEVEL(lodBias, maxLodLevel, minLodLevel) \ 967 ( (lodBias) | \ 968 (maxLodLevel) << 16 | \ 969 (((minLodLevel) < 0) ? 0 : (minLodLevel)) << 24 ) 970 971 /////////////////////////////////// 972 // Texture Border Color 973 974 // PICA_REG_TEXTURE0_BORDER_COLOR 0x081 975 // PICA_REG_TEXTURE1_BORDER_COLOR 0x091 976 // PICA_REG_TEXTURE2_BORDER_COLOR 0x099 977 #define PICA_CMD_DATA_BORDER_COLOR( color8 ) \ 978 ( (color8.r) | \ 979 (color8.g) << 8 | \ 980 (color8.b) << 16 | \ 981 (color8.a) << 24 ) 982 983 /*! 984 @} 985 */ 986 987 #endif // NN_GX_CTR_PICA_MACRO_TEXTURE_H_ 988