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: 33699 $ 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 //! GL_FALSE です。 436 PICA_DATA_TEXTURE0_SAMPLER_TYPE_FALSE = 0x5 437 }; 438 439 /*! 440 @brief テクスチャ 1 のサンプルのタイプを指定します。 441 PICA_REG_TEXTURE_FUNC ( 0x080 [1:1] ) レジスタで使います。 442 dmp_Texture[1].samplerType ユニフォームに相当します。 443 */ 444 enum PicaDataTexture1SamplerType 445 { 446 //! GL_FALSE です。 447 PICA_DATA_TEXTURE1_SAMPLER_TYPE_FALSE = 0x0, 448 //! GL_TEXTUER_2D です。 449 PICA_DATA_TEXTURE1_SAMPLER_TYPE_TEXTURE_2D = 0x1 450 }; 451 452 /*! 453 @brief テクスチャ 2 のサンプルのタイプを指定します。 454 PICA_REG_TEXTURE_FUNC ( 0x080 [2:2] ) レジスタで使います。 455 dmp_Texture[2].samplerType ユニフォームに相当します。 456 */ 457 enum PicaDataTexture2SamplerType 458 { 459 //! GL_FALSE です。 460 PICA_DATA_TEXTURE2_SAMPLER_TYPE_FALSE = 0x0, 461 //! GL_TEXTUER_2D です。 462 PICA_DATA_TEXTURE2_SAMPLER_TYPE_TEXTURE_2D = 0x1 463 }; 464 465 /*! 466 @brief テクスチャ 3 のサンプルのタイプを指定します。 467 PICA_REG_TEXTURE_FUNC ( 0x080 [10:10] ) レジスタで使います。 468 dmp_Texture[3].samplerType ユニフォームに相当します。 469 */ 470 enum PicaDataTexture3SamplerType 471 { 472 //! GL_FALSE です。 473 PICA_DATA_TEXTURE3_SAMPLER_TYPE_FALSE = 0x0, 474 //! GL_TEXTUER_PROCEDURAL_DMP です。 475 PICA_DATA_TEXTURE3_SAMPLER_TYPE_TEXTURE_PROCEDURAL_DMP = 0x1 476 }; 477 478 479 /*! 480 @brief テクスチャ 2 のテクスチャ座標を設定します。 481 PICA_REG_TEXTURE_FUNC ( 0x080 [13:13] ) レジスタで使います。 482 dmp_Texture[2].texcoord ユニフォームに相当します。 483 */ 484 enum PicaDataTexture2TexCoord 485 { 486 //! GL_TEXTURE1 です。 487 PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE1 = 0x1, 488 //! GL_TEXTURE2 です。 489 PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE2 = 0x0 490 }; 491 492 /*! 493 @brief テクスチャ 3 のテクスチャ座標を設定します。 494 PICA_REG_TEXTURE_FUNC ( 0x080 [9:8] ) レジスタで使います。 495 dmp_Texture[3].texcoord ユニフォームに相当します。 496 */ 497 enum PicaDataTexture3TexCoord 498 { 499 //! GL_TEXTURE0 です。 500 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE0 = 0x0, 501 //! GL_TEXTURE1 です。 502 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE1 = 0x1, 503 //! GL_TEXTURE2 です。 504 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE2 = 0x2 505 }; 506 507 // PICA_REG_TEXTURE_FUNC 0x080 508 #define PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 509 texture3Texcoord, texture3SamplerType, \ 510 texture2Texcoord, clearTextureCache) \ 511 ( ((texture0SamplerType == PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSE) ? 0 : 1) | \ 512 ((texture1SamplerType) ? 1 : 0) << 1 | \ 513 ((texture2SamplerType) ? 1 : 0) << 2 | \ 514 0 << 3 | \ 515 (texture3Texcoord) << 8 | \ 516 ((texture3SamplerType) ? 1 : 0) << 10 | \ 517 1 << 12 | \ 518 ((texture2Texcoord) ? 1 : 0) << 13 | \ 519 (clearTextureCache) << 16 | \ 520 0 << 17 ) 521 522 #define PICA_CMD_SET_TEXTURE_FUNC_CLEAR(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 523 texture3SamplerType, texture2Texcoord, texture3Texcoord) \ 524 PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 525 texture3Texcoord, texture3SamplerType, \ 526 texture2Texcoord, 0x1), \ 527 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB ), \ 528 1 << 16, \ 529 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0x4 ) 530 531 #define PICA_CMD_SET_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 532 texture3SamplerType, texture2Texcoord, texture3Texcoord) \ 533 PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \ 534 texture3Texcoord, texture3SamplerType, \ 535 texture2Texcoord, 0x0), \ 536 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB ) 537 538 /////////////////////////////////// 539 // Procedural Texture 540 // 541 /* 542 struct CommandProcTex0 543 { 544 u32 ptClampU : 3; 545 u32 ptClampV : 4; 546 u32 ptRgbMap : 4; 547 u32 ptAlphaMap : 4; 548 u32 ptAlphaSeparate : 1; 549 u32 ptNoiseEnable : 1; 550 u32 ptShiftU : 2; 551 u32 ptShiftV : 2; 552 u32 ptTexBias1 : 8; 553 CMD_PADDING(3); 554 }; 555 */ 556 557 /*! 558 @brief プロシージャルテクスチャの手続き計算で使用される関数を設定します。 559 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [9:6] ) レジスタで使います。 560 dmp_Texture[3].ptRgbMap, dmp_Texture[3].ptAlphaMap ユニフォームに相当します。 561 */ 562 enum PicaDataProcTexMap 563 { 564 //! GL_PROCTEX_U_DMP です。 565 PICA_DATA_PROCTEX_U_DMP = 0x0, 566 //! GL_PROCTEX_U2_DMP です。 567 PICA_DATA_PROCTEX_U2_DMP = 0x1, 568 //! GL_PROCTEX_V_DMP です。 569 PICA_DATA_PROCTEX_V_DMP = 0x2, 570 //! GL_PROCTEX_V2_DMP です。 571 PICA_DATA_PROCTEX_V2_DMP = 0x3, 572 //! GL_PROCTEX_ADD_DMP です。 573 PICA_DATA_PROCTEX_ADD_DMP = 0x4, 574 //! GL_PROCTEX_ADD2_DMP です。 575 PICA_DATA_PROCTEX_ADD2_DMP = 0x5, 576 //! GL_PROCTEX_ADD2SQRT2_DMP です。 577 PICA_DATA_PROCTEX_ADDSQRT2_DMP = 0x6, 578 //! GL_PROCTEX_MIN_DMP です。 579 PICA_DATA_PROCTEX_MIN_DMP = 0x7, 580 //! GL_PROCTEX_MAX_DMP です。 581 PICA_DATA_PROCTEX_MAX_DMP = 0x8, 582 //! GL_PROCTEX_RMAX_DMP です。 583 PICA_DATA_PROCTEX_RMAX_DMP = 0x9 584 }; 585 586 /*! 587 @brief プロシージャルテクスチャのクランプ方法を設定します。 588 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0], [5:3] ) レジスタで使います。 589 dmp_Texture[3].ptClampU, dmp_Texture[3].ptClampV ユニフォームに相当します。 590 */ 591 enum PicaDataProcTexClamp 592 { 593 //! GL_CLAMP_TO_ZERO_DMP です。 594 PICA_DATA_PROCTEX_CLAMP_TO_ZERO_DMP = 0x0, 595 //! GL_CLAMP_TO_EDGE です。 596 PICA_DATA_PROCTEX_CLAMP_TO_EDGE = 0x1, 597 //! GL_SYMMETRICAL_REPEAT_DMP です。 598 PICA_DATA_PROCTEX_SYMMETRICAL_REPEAT_DMP = 0x2, 599 //! GL_MIRRORED_REPEAT です。 600 PICA_DATA_PROCTEX_MIRRORED_REPEAT = 0x3, 601 //! GL_PULSE_DMP です。 602 PICA_DATA_PROCTEX_PULSE_DMP = 0x4 603 }; 604 605 /*! 606 @brief プロシージャルテクスチャの座標シフト方法を設定します。 607 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [17:16], [19:18] ) レジスタで使います。 608 dmp_Texture[3].ptShiftU, dmp_Texture[3].ptShiftV ユニフォームに相当します。 609 */ 610 enum PicaDataProcTexShift 611 { 612 //! GL_NONE_DMP です。 613 PICA_DATA_PROCTEX_NONE_DMP = 0x0, 614 //! GL_ODD_DMP です。 615 PICA_DATA_PROCTEX_ODD_DMP = 0x1, 616 //! GL_EVEN_DMP です。 617 PICA_DATA_PROCTEX_EVEN_DMP = 0x2 618 }; 619 620 // PICA_REG_TEXTURE3_PROCTEX0 0x0a8 621 #define PICA_CMD_DATA_PROCTEX0(ptClampU, ptClampV, \ 622 ptRgbMap, ptAlphaMap, ptAlphaSeparate, \ 623 ptNoiseEnable, ptShiftU, ptShiftV, ptTexBiasF16Low8) \ 624 ( (ptClampU) | \ 625 (ptClampV) << 3 | \ 626 (ptRgbMap) << 6 | \ 627 (ptAlphaMap) << 10 | \ 628 (ptAlphaSeparate ? 1 : 0) << 14 | \ 629 (ptNoiseEnable ? 1 : 0) << 15 | \ 630 (ptShiftU) << 16 | \ 631 (ptShiftV) << 18 | \ 632 (ptTexBiasF16Low8) << 20 ) 633 634 635 636 // PICA_REG_TEXTURE3_PROCTEX1 0x0a9 637 #define PICA_CMD_DATA_PROCTEX1(ptNoiseU1, ptNoiseU2) \ 638 ( (ptNoiseU1) << 16 | (ptNoiseU2) ) 639 640 // PICA_REG_TEXTURE3_PROCTEX2 0x0aa 641 #define PICA_CMD_DATA_PROCTEX2(ptNoiseV1, ptNoiseV2) \ 642 ( (ptNoiseV1) << 16 | (ptNoiseV2) ) 643 644 // PICA_REG_TEXTURE3_PROCTEX3 0x0ab 645 #define PICA_CMD_DATA_PROCTEX3(ptNoiseU0, ptNoiseV0) \ 646 ( (ptNoiseU0) | (ptNoiseV0) << 16 ) 647 648 /* 649 struct CommandProcTex4 650 { 651 u32 ptMinFilter : 3; 652 CMD_PADDING(8); // 0x60 653 u32 ptTexWidth : 8; 654 u32 ptTexBias2 : 8; 655 CMD_PADDING(5); 656 }; 657 */ 658 659 /*! 660 @brief プロシージャルテクスチャの MinFilter を設定します。 661 PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0] ) レジスタで使います。 662 dmp_Texture[3].ptMinFilter ユニフォームに相当します。 663 */ 664 enum PicaDataProcTexFilter 665 { 666 //! GL_NEAREST です。 667 PICA_DATA_PROCTEX_NEAREST = 0x0, 668 //! GL_LINEAR です。 669 PICA_DATA_PROCTEX_LINEAR = 0x1, 670 //! GL_NEAREST_MIPMAP_NEAREST です。 671 PICA_DATA_PROCTEX_NEAREST_MIPMAP_NEAREST = 0x2, 672 //! GL_LINEAR_MIPMAP_NEAREST です。 673 PICA_DATA_PROCTEX_LINEAR_MIPMAP_NEAREST = 0x3, 674 //! GL_NEAREST_MIPMAP_LINEAR です。 675 PICA_DATA_PROCTEX_NEAREST_MIPMAP_LINEAR = 0x4, 676 //! GL_LINEAR_MIPMAP_LINEAR です。 677 PICA_DATA_PROCTEX_LINEAR_MIPMAP_LINEAR = 0x5 678 }; 679 680 // PICA_REG_TEXTURE3_PROCTEX4 0x0ac 681 #define PICA_CMD_DATA_PROCTEX4(ptMinFilter, ptTexWidth, ptTexBiasF16Hi8) \ 682 ( (ptMinFilter) | \ 683 0x60 << 3 | \ 684 (ptTexWidth) << 11 | \ 685 (ptTexBiasF16Hi8) << 19 ) 686 687 /* 688 struct CommandProcTex5 689 { 690 u32 ptTexOffset : 8; 691 CMD_PADDING(24); // 0xe0c080 692 }; 693 */ 694 695 // PICA_REG_TEXTURE3_PROCTEX5 0x0ad 696 #define PICA_CMD_DATA_PROCTEX5(ptTexOffset) \ 697 ( (ptTexOffset) | 0xe0c08000 ) 698 699 /////////////////////////////////// 700 // Procedural texture Reference Table 701 /* 702 struct CommandProTexRefTab 703 { 704 u32 index : 8; 705 u32 attrib : 4; 706 CMD_PADDING(20); 707 }; 708 */ 709 710 711 /*! 712 @brief プロシージャルテクスチャの参照テーブルを設定します。 713 PICA_REG_PROCTEX_LUT ( 0x0af [2:0] ) レジスタで使います。 714 dmp_Texture[3].ptSampler ユニフォームに相当します。 715 */ 716 enum PicaDataProcTexRefTable 717 { 718 //! ノイズ変調関数参照テーブルです。 719 PICA_DATA_PROCTEX_NOISE_REF_TABLE = 0x0, 720 //! RGB マッピングの F 関数参照テーブルです。 721 PICA_DATA_PROCTEX_RGB_MAP_REF_TABLE = 0x2, 722 //! アルファマッピングの F 関数参照テーブルです。 723 PICA_DATA_PROCTEX_ALPHA_MAP_REF_TABLE = 0x3, 724 //! カラー参照テーブル(カラー値)です。 725 PICA_DATA_PROCTEX_COLOR_REF_TABLE = 0x4, 726 //! カラー参照テーブル(差分値)です。 727 PICA_DATA_PROCTEX_COLOR_DIFF_REF_TABLE = 0x5 728 }; 729 730 // PICA_REG_PROCTEX_LUT 0x0af 731 #define PICA_CMD_DATA_PROCTEX_LUT(index, refTable) \ 732 ((index) | (refTable) << 8) 733 734 // PICA_REG_PROCTEX_LUT_DATA0 0x0b0 735 // PICA_REG_PROCTEX_LUT_DATA1 0x0b1 736 // PICA_REG_PROCTEX_LUT_DATA2 0x0b2 737 // PICA_REG_PROCTEX_LUT_DATA3 0x0b3 738 // PICA_REG_PROCTEX_LUT_DATA4 0x0b4 739 // PICA_REG_PROCTEX_LUT_DATA5 0x0b5 740 // PICA_REG_PROCTEX_LUT_DATA6 0x0b6 741 // PICA_REG_PROCTEX_LUT_DATA7 0x0b7 742 #define PICA_CMD_DATA_PROCTEX_LUT_DATA(data) (data) 743 744 /////////////////////////////////// 745 // Texture Resolution 746 /* 747 struct CommandTexSize 748 { 749 u32 height : 16; 750 u32 width : 16; 751 }; 752 */ 753 754 // PICA_REG_TEXTURE0_SIZE 0x082 755 // PICA_REG_TEXTURE1_SIZE 0x092 756 // PICA_REG_TEXTURE2_SIZE 0x09a 757 #define PICA_CMD_DATA_TEXTURE_SIZE( width, height ) \ 758 ( (height) | (width) << 16 ) 759 760 /////////////////////////////////// 761 // Texture Format 762 763 /*! 764 @brief テクスチャフォーマットを設定します。 765 PICA_REG_TEXTURE*_FORMAT ( 0x08e[3:0], 0x096[3:0], 0x09e[3:0] ) レジスタで使います。 766 glTexImage2D() の 引数 format, type や glCompressedTexImage2D() の 引数 internalformat に相当します。 767 */ 768 enum PicaDataTextureFormat 769 { 770 //! GL_RGBA, GL_UNSIGNED_BYTE, GL_SHADOW_DMP, GL_UNSIGNED_BYTE, GL_GAS_DMP, GL_UNSIGNED_SHORT です。 771 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_BYTE = 0x0, 772 //! GL_RGB, GL_UNSIGNED_BYTE です。 773 PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_BYTE = 0x1, 774 //! GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1 です。 775 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_5_5_5_1 = 0x2, 776 //! GL_RGB, GL_UNSIGNED_SHORT_5_6_5 です。 777 PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_SHORT_5_6_5 = 0x3, 778 //! GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4 です。 779 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_4_4_4_4 = 0x4, 780 //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE です。 781 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE = 0x5, 782 //! GL_HILO8_DMP, GL_UNSIGNED_BYTE です。 783 PICA_DATA_TEXTURE_FORMAT_HILO8_DMP_UNSIGNED_BYTE = 0x6, 784 //! GL_LUMINANCE, GL_UNSIGNED_BYTE です。 785 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_BYTE = 0x7, 786 //! GL_ALPHA, GL_UNSIGNED_BYTE です。 787 PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_BYTE = 0x8, 788 //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE_4_4_DMP です。 789 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE_4_4_DMP = 0x9, 790 //! GL_LUMINANCE, GL_UNSIGNED_4BITS_DMP です。 791 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_4BITS_DMP = 0xa, 792 //! GL_ALPHA, GL_UNSIGNED_4BITS_DMP です。 793 PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_4BITS_DMP = 0xb, 794 //! GL_ETC1_RGB8_NATIVE_DMP です。 795 PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP = 0xc, 796 //! GL_ETC1_ALPHA_RGB8_A4_NATIVE_DMP です。 797 PICA_DATA_TEXTURE_FORMAT_ETC1_ALPHA_RGB8_A4_NATIVE_DMP = 0xd 798 }; 799 800 // PICA_REG_TEXTURE0_FORMAT 0x08e 801 // PICA_REG_TEXTURE1_FORMAT 0x096 802 // PICA_REG_TEXTURE2_FORMAT 0x09e 803 #define PICA_CMD_DATA_TEXTURE_FORMAT_TYPE( type ) (type) 804 805 /////////////////////////////////// 806 // Texture Wrap Mode 807 // Texture Wrap Filter 808 // Texture Sampler 809 // Texture Format 810 // Texture Shadow Enable 811 /* 812 struct CommandTex0WrapFilter 813 { 814 CMD_PADDING(1); 815 u32 magFilter : 1; 816 u32 minFilter1 : 1; 817 CMD_PADDING(1); 818 u32 isETC1 : 2; 819 CMD_PADDING(2); 820 u32 wrapT : 3; 821 CMD_PADDING(1); 822 u32 wrapS : 3; 823 CMD_PADDING(1); 824 CMD_PADDING(2); // set to 0 [17:16] 825 CMD_PADDING(2); 826 u32 enable : 1; 827 CMD_PADDING(3); 828 u32 minFilter2 : 1; 829 CMD_PADDING(3); 830 u32 type1_1 : 3; 831 CMD_PADDING(1); 832 }; 833 */ 834 835 836 /*! 837 @brief テクスチャの MAG フィルタのモードを設定します。 838 PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[1:1], 0x93[1:1], 0x9b[1:1]) レジスタで使います。 839 glTexParameter{if}( TEXTURE_MAG_FILTER, ...)に相当します。 840 */ 841 enum PicaDataTextureMagFilter 842 { 843 //! GL_NEAREST です。 844 PICA_DATA_TEXTURE_MAG_FILTER_NEAREST = 0x0, 845 //! GL_LINEAR です。 846 PICA_DATA_TEXTURE_MAG_FILTER_LINEAR = 0x1 847 }; 848 849 850 /*! 851 @brief テクスチャの MIN フィルタのモードを設定します。 852 PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[24:24, 2:2], 0x93[24:24, 2:2], 0x9b[24:24, 2:2) レジスタで使います。 853 glTexParameter{if}( TEXTURE_MIN_FILTER, ...)に相当します。 854 */ 855 enum PicaDataTextureMinFilter 856 { 857 //! GL_NEAREST です。 858 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST = 0x0, 859 //! GL_XXX_MIPMAP_NEAREST です。 860 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_NEAREST = 0x1, 861 //! GL_XXX_MIPMAP_LINEAR です。 862 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR = 0x2, 863 //! GL_LINEAR です。 864 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR = 0x3, 865 //! GL_XXX_MIPMAP_NEAREST です。 866 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST = 0x4, 867 //! GL_XXX_MIPMAP_LINEAR です。 868 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR = 0x5 869 }; 870 871 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER0(texture0MinFilter) \ 872 ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR ) || \ 873 ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST ) || \ 874 ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR ) ) \ 875 ? 1 : 0 ) 876 877 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER1(texture0MinFilter) \ 878 ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR ) || \ 879 ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR ) ) \ 880 ? 1 : 0 ) 881 882 /*! 883 @brief テクスチャの WRAP モードを設定します。 884 PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[14:12, 10:8], 0x93[14:12, 10:8], 0x9b[14:12, 10:8]) レジスタで使います。 885 glTexParameter{if}( TEXTURE_WRAP_*, ...)に相当します。 886 */ 887 enum PicaDataTextureWrap 888 { 889 //! GL_CLAMP_TO_EDGE です。 890 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_EDGE = 0, 891 //! GL_CLAMP_TO_BORDER です。 892 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_BORDER = 1, 893 //! GL_REPEAT です。 894 PICA_DATA_TEXTURE_WRAP_REPEAT = 2, 895 //! GL_MIRRORED_REPEAT です。 896 PICA_DATA_TEXTURE_WRAP_MIRRORED_REPEAT = 3 897 }; 898 899 900 #define PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 901 textureFormat, textureWrapT, textureWrapS, \ 902 useShadowTexture, textureSamplerType ) \ 903 ( (textureMagFilter) << 1 | \ 904 PICA_CMD_DATA_TEXTURE_MIN_FILTER0(textureMinFilter) << 2 | \ 905 ((textureFormat == PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP) ? 2 : 0 ) << 4 | \ 906 (textureWrapT) << 8 | \ 907 (textureWrapS) << 12 | \ 908 0 << 16 | \ 909 (useShadowTexture) << 20 | \ 910 PICA_CMD_DATA_TEXTURE_MIN_FILTER1(textureMinFilter) << 24 | \ 911 (textureSamplerType) << 28 ) 912 913 #define PICA_CMD_DATA_TEXTURE0_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 914 textureFormat, textureWrapT, textureWrapS, \ 915 useShadowTexture, textureSamplerType ) \ 916 PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 917 textureFormat, textureWrapT, textureWrapS, \ 918 useShadowTexture, textureSamplerType ) 919 920 #define PICA_CMD_DATA_TEXTURE1_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 921 textureFormat, textureWrapT, textureWrapS) \ 922 PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 923 textureFormat, textureWrapT, textureWrapS, \ 924 0x0, 0x0) 925 926 #define PICA_CMD_DATA_TEXTURE2_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 927 textureFormat, textureWrapT, textureWrapS ) \ 928 PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \ 929 textureFormat, textureWrapT, textureWrapS, \ 930 0x0, 0x0) 931 932 /* 933 struct CommandTex12WrapFilter 934 { 935 CMD_PADDING(1); 936 u32 magFilter : 1; 937 u32 minFilter1 : 1; 938 CMD_PADDING(1); 939 u32 isETC1 : 2; 940 CMD_PADDING(2); 941 u32 wrapT : 3; 942 CMD_PADDING(1); 943 u32 wrapS : 3; 944 CMD_PADDING(2); // set to 0[17:16] 945 CMD_PADDING(7); 946 u32 minFilter2 : 1; 947 CMD_PADDING(7); 948 }; 949 */ 950 951 /////////////////////////////////// 952 // Texture LOD Level 953 // Texture LOD Bias 954 /* 955 struct CommandTexLODLev 956 { 957 u32 bias : 12; 958 u32 max : 4; 959 CMD_PADDING(4); 960 u32 min : 4; 961 CMD_PADDING(4); 962 }; 963 */ 964 965 // PICA_REG_TEXTURE0_LOD 0x084 966 // PICA_REG_TEXTURE1_LOD 0x094 967 // PICA_REG_TEXTURE2_LOD 0x09c 968 #define PICA_CMD_DATA_TEXTURE_LOD_LEVEL(lodBias, maxLodLevel, minLodLevel) \ 969 ( (lodBias) | \ 970 (maxLodLevel) << 16 | \ 971 (((minLodLevel) < 0) ? 0 : (minLodLevel)) << 24 ) 972 973 /////////////////////////////////// 974 // Texture Border Color 975 976 // PICA_REG_TEXTURE0_BORDER_COLOR 0x081 977 // PICA_REG_TEXTURE1_BORDER_COLOR 0x091 978 // PICA_REG_TEXTURE2_BORDER_COLOR 0x099 979 #define PICA_CMD_DATA_BORDER_COLOR( color8 ) \ 980 ( (color8.r) | \ 981 (color8.g) << 8 | \ 982 (color8.b) << 16 | \ 983 (color8.a) << 24 ) 984 985 /*! 986 @} 987 */ 988 989 #endif // NN_GX_CTR_PICA_MACRO_TEXTURE_H_ 990