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