1 /*---------------------------------------------------------------------------* 2 Project: PICA register macro header 3 File: gx_MacroMisc.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: 34260 $ 14 *---------------------------------------------------------------------------*/ 15 #ifndef NN_GX_CTR_PICA_MACRO_MISC_H_ 16 #define NN_GX_CTR_PICA_MACRO_MISC_H_ 17 18 #include <nn/gx/CTR/gx_MacroCommon.h> 19 20 /* Please see man pages for details 21 22 23 */ 24 25 /////////////////////////////////// 26 // Render Buffer 27 28 // PICA_REG_RENDER_BUFFER_COLOR_ADDR 0x11d 29 #define PICA_CMD_DATA_RENDER_BUFFER_COLOR_ADDR( addr ) ( (addr) >> 3 ) 30 31 32 // PICA_REG_RENDER_BUFFER_DEPTH_ADDR 0x11c 33 #define PICA_CMD_DATA_RENDER_BUFFER_DEPTH_ADDR( addr ) ( (addr) >> 3 ) 34 35 /* 36 struct CommandRenderBufColorMode 37 { 38 u32 pixSize : 2; 39 CMD_PADDING(14); 40 u32 format : 3; 41 CMD_PADDING(13); 42 }; 43 */ 44 45 /* Please see man pages for details 46 47 48 */ 49 enum PicaDataColorPixelSize 50 { 51 // 52 PICA_DATA_COLOR_PIXEL_SIZE16 = 0x0, 53 // 54 PICA_DATA_COLOR_PIXEL_SIZE32 = 0x2 55 }; 56 57 58 /* Please see man pages for details 59 60 61 */ 62 enum PicaDataColor 63 { 64 // 65 PICA_DATA_COLOR_RGBA8_OES = 0x0, 66 // 67 PICA_DATA_COLOR_GAS_DMP = 0x0, 68 // 69 PICA_DATA_COLOR_RGB5_A1 = 0x2, 70 // 71 PICA_DATA_COLOR_RGB565 = 0x3, 72 // 73 PICA_DATA_COLOR_RGBA4 = 0x4 74 }; 75 76 // PICA_REG_RENDER_BUFFER_COLOR_MODE 0x117 77 #define PICA_CMD_DATA_RENDER_BUFFER_COLOR_MODE( pixSize, format ) \ 78 ( (pixSize) | (format) << 16 ) 79 80 81 /* Please see man pages for details 82 83 84 */ 85 enum PicaDataDepth 86 { 87 // 88 PICA_DATA_DEPTH_COMPONENT16 = 0x0, 89 // 90 PICA_DATA_DEPTH_COMPONENT24_OES = 0x2, 91 // 92 PICA_DATA_DEPTH24_STENCIL8_EXT = 0x3 93 }; 94 95 // PICA_REG_RENDER_BUFFER_DEPTH_MODE 0x116 96 #define PICA_CMD_DATA_RENDER_BUFFER_DEPTH_MODE( mode ) (mode) 97 98 /* 99 struct CommandRenderBufResolution 100 { 101 u32 width : 11; 102 CMD_PADDING(1); 103 u32 height : 10; 104 CMD_PADDING(2); 105 CMD_PADDING(8): // 0x01 106 }; 107 */ 108 // PICA_REG_RENDER_BUFFER_RESOLUTION0 0x11e 109 // PICA_REG_RENDER_BUFFER_RESOLUTION1 0x6e 110 #define PICA_CMD_DATA_RENDER_BUFFER_RESOLUTION( width, height ) \ 111 ( (width) | \ 112 (height - 1) << 12 | \ 113 0x01000000 ) 114 115 116 /////////////////////////////////// 117 // Gas Light 118 // Fog 119 // Depth Test 120 // Gas 121 /* 122 struct CommandGasLightXY 123 { 124 u32 lightXY1 : 8; 125 u32 lightXY2 : 8; 126 u32 lightXY3 : 8; 127 CMD_PADDING(8); 128 }; 129 */ 130 // PICA_REG_GAS_LIGHT_XY 0x120 131 #define PICA_CMD_DATA_GAS_LIGHT_XY(lightXY1, lightXY2, lightXY3) \ 132 ( (lightXY1) | (lightXY2) << 8 | (lightXY3) << 16 ) 133 134 // PICA_REG_GAS_LIGHT_Z 0x121 135 #define PICA_CMD_DATA_GAS_LIGHT_Z(lightZ1, lightZ2, lightZ3) \ 136 ( (lightZ1) | (lightZ2) << 8 | (lightZ3) << 16 ) 137 138 /* 139 struct CommandGasLightZColor 140 { 141 u32 lightz : 8; 142 u32 colorLutInput : 1; 143 CMD_PADDING(23); 144 }; 145 */ 146 147 // colorLutInput 148 149 /* Please see man pages for details 150 151 152 153 154 */ 155 enum PicaDataGasColorLutInput 156 { 157 // 158 PICA_DATA_GAS_DENSITY_DMP = 0x0, 159 // 160 PICA_DATA_GAS_LIGHT_FACTOR_DMP = 0x1 161 }; 162 163 // PICA_REG_GAS_LIGHT_Z_COLOR 0x122 164 #define PICA_CMD_DATA_GAS_LIGHT_Z_COLOR(lightZ4, colorLutInput) \ 165 ( (lightZ4) | ((colorLutInput) ? 1 : 0) << 8 ) 166 167 /* 168 struct CommandGasDeltaZDepth 169 { 170 u32 deltaZ : 24; 171 u32 depthFunc : 2; 172 CMD_PADDING(6); 173 }; 174 */ 175 176 /* Please see man pages for details 177 178 179 180 */ 181 enum PicaDataDepthTest2 182 { 183 // 184 PICA_DATA_DEPTH_TEST2_NEVER = 0x0, 185 // 186 PICA_DATA_DEPTH_TEST2_ALWAYS = 0x1, 187 // 188 PICA_DATA_DEPTH_TEST2_GREATER = 0x2, 189 // 190 PICA_DATA_DEPTH_TEST2_GEQUAL = 0x2, 191 // 192 PICA_DATA_DEPTH_TEST2_OTHER = 0x3 193 }; 194 195 // PICA_REG_GAS_DELTAZ_DEPTH 0x126 196 #define PICA_CMD_DATA_GAS_DELTAZ_DEPTH(deltaZ, depthTest2Func) \ 197 ( (deltaZ) | (depthTest2Func) << 24 ) 198 199 /* 200 struct CommandGasFogMode 201 { 202 u32 FogMode : 3; 203 u32 shadingDensitySrc : 1; 204 CMD_PADDING(12); 205 u32 zFlip : 1; 206 CMD_PADDING(15); 207 }; 208 */ 209 210 // Fog 211 212 /* Please see man pages for details 213 214 215 216 */ 217 enum PicaDataFogMode 218 { 219 // 220 PICA_DATA_FOG_FALSE = 0x0, 221 // 222 PICA_DATA_FOG = 0x5, 223 // 224 PICA_DATA_GAS = 0x7 225 }; 226 227 /* Please see man pages for details 228 229 230 231 */ 232 enum PicaDataGasShadingDensitySrc 233 { 234 // 235 PICA_DATA_GAS_PLAIN_DENSITY_DMP = 0x0, 236 // 237 PICA_DATA_GAS_DEPTH_DENSITY_DMP = 0x1 238 }; 239 240 // PICA_REG_GAS_FOG_MODE 0x0e0 241 #define PICA_CMD_DATA_GAS_FOG_MODE(fogMode, shadingDensitySrc, zFlip) \ 242 ( (fogMode) | \ 243 ((shadingDensitySrc) ? 1 : 0) << 3 | \ 244 ((zFlip) ? 1 : 0) << 16) 245 246 #define PICA_CMD_SET_GAS_FOG_MODE(fogMode, shadingDensitySrc, zFlip) \ 247 PICA_CMD_DATA_GAS_FOG_MODE(fogMode, shadingDensitySrc, zFlip), \ 248 PICA_CMD_HEADER_SINGLE_BE(PICA_REG_GAS_FOG_MODE, 0x5) 249 250 // PICA_REG_GAS_ATTENUATION 0x0e4 251 #define PICA_CMD_DATA_GAS_ATTENUATION(attenuation) (attenuation) 252 253 // PICA_REG_GAS_ACCMAX 0x0e5 254 #define PICA_CMD_DATA_GAS_ACCMAX(accMax) (accMax) 255 256 /////////////////////////////////// 257 // Gas shading Lut Table 258 259 // PICA_REG_GAS_LUT_INDEX 0x123 260 #define PICA_CMD_DATA_GAS_LUT_INDEX(index) (index) 261 262 // PICA_REG_GAS_LUT_DATA 0x124 263 #define PICA_CMD_DATA_GAS_LUT_DATA(color8) \ 264 ( (color8.r) | (color8.g) << 8 | (color8.b) << 16 ) 265 266 /////////////////////////////////// 267 // Fog 268 269 // PICA_REG_FOG_COLOR 0x0e1 270 #define PICA_CMD_DATA_FOG_COLOR(color8) \ 271 ( (color8.r) | (color8.g) << 8 | (color8.b) << 16 ) 272 273 /////////////////////////////////// 274 // Fog Reference Table 275 276 // PICA_REG_FOG_LUT_INDEX 0x0e6 277 #define PICA_CMD_DATA_FOG_LUT_INDEX(index) (index) 278 279 // PICA_REG_FOG_LUT_DATA0 0x0e8 to 0x0ef 280 #define PICA_CMD_DATA_FOG_LUT_DATA(data) (data) 281 282 283 /////////////////////////////////// 284 // Fragment Operation mode 285 // Blend / LogicOp 286 /* 287 struct CommandColorOperation 288 { 289 u32 fragOpMode : 2; 290 CMD_PADDING(6); 291 u32 blendMode : 1; 292 CMD_PADDING(7); 293 CMD_PADDING(16); // 0x0e4 294 295 }; 296 */ 297 298 /* Please see man pages for details 299 300 301 302 */ 303 enum PicaDataFragOpMode 304 { 305 // 306 PICA_DATA_FRAGOP_MODE_DMP = 0x0, 307 // 308 PICA_DATA_FRAGOP_MODE_GAS_ACC_DMP = 0x1, 309 // 310 PICA_DATA_FRAGOP_MODE_SHADOW_DMP = 0x3 311 }; 312 313 /* Please see man pages for details 314 315 316 317 */ 318 enum PicaDataColorLogicOp 319 { 320 // 321 PICA_DATA_ENABLE_COLOR_LOGIC_OP = 0x0, 322 // 323 PICA_DATA_ENABLE_BLEND = 0x1 324 }; 325 326 // PICA_REG_COLOR_OPERATION 0x100 327 #define PICA_CMD_DATA_COLOR_OPERATION(fragOpMode, blendMode) \ 328 ( (fragOpMode) | (blendMode) << 8 | 0x0e4 << 16 ) 329 330 /////////////////////////////////// 331 // Fragment Operation shadow 332 333 // PICA_REG_FRAGOP_SHADOW 0x130 334 #define PICA_CMD_DATA_FRAGOP_SHADOW(penumbraScale, penumbraBias) \ 335 (( (penumbraScale) << 16) | (penumbraBias) ) 336 337 /////////////////////////////////// 338 // Fragment Operation Double buffer 339 340 // PICA_REG_FRAGOP_WSCALE 0x06d 341 #define PICA_CMD_DATA_FRAGOP_WSCALE(value) ((value == 0) ? 1 : 0) 342 343 // PICA_REG_FRAGOP_WSCALE_DATA1 0x04d 344 // PICA_REG_FRAGOP_WSCALE_DATA2 0x04e 345 #define PICA_CMD_DATA_FRAGOP_WSCALE_DATA(data) (data) 346 347 /////////////////////////////////// 348 // Fragment Operation User Clipping 349 350 // PICA_REG_FRAGOP_CLIP 0x047 351 352 // 0x47 [0:0] 353 #define PICA_CMD_DATA_FRAGOP_CLIP(mode) ((mode) ? 1 : 0) 354 355 #define PICA_CMD_SET_FRAGOP_CLIP(mode) \ 356 PICA_CMD_DATA_FRAGOP_CLIP(mode), \ 357 PICA_CMD_HEADER_SINGLE_BE(PICA_REG_FRAGOP_CLIP, 0x1) 358 359 // PICA_REG_FRAGOP_CLIP_DATA1 0x048 360 // PICA_REG_FRAGOP_CLIP_DATA2 0x049 361 // PICA_REG_FRAGOP_CLIP_DATA3 0x04a 362 // PICA_REG_FRAGOP_CLIP_DATA4 0x04b 363 #define PICA_CMD_DATA_FRAGOP_CLIP_DATA(data) (data) 364 365 /////////////////////////////////// 366 // Fragment Operation AlphaTest 367 368 /* Please see man pages for details 369 370 371 372 */ 373 enum PicaDataAlphaTest 374 { 375 // 376 PICA_DATA_ALPHA_TEST_NEVER = 0x0, 377 // 378 PICA_DATA_ALPHA_TEST_ALWAYS = 0x1, 379 // 380 PICA_DATA_ALPHA_TEST_EQUAL = 0x2, 381 // 382 PICA_DATA_ALPHA_TEST_NOTEQUAL = 0x3, 383 // 384 PICA_DATA_ALPHA_TEST_LESS = 0x4, 385 // 386 PICA_DATA_ALPHA_TEST_LEQUAL = 0x5, 387 // 388 PICA_DATA_ALPHA_TEST_GREATER = 0x6, 389 // 390 PICA_DATA_ALPHA_TEST_GEQUAL = 0x7 391 }; 392 393 /* 394 struct CommandAlphaTest 395 { 396 u32 alphaTestFunc : 7; 397 CMD_PADDING(1); 398 u32 alphaRefValue : 8; // [0-255] 399 CMD_PADDING(16); 400 }; 401 */ 402 403 #define PICA_CMD_DATA_FRAGOP_ALPHA_TEST_DISABLE() 0x0 404 405 // PICA_REG_FRAGOP_ALPHA_TEST 0x104 406 #define PICA_CMD_DATA_FRAGOP_ALPHA_TEST( enable, func, value ) \ 407 ( ((enable) ? 1 : 0) | \ 408 (func) << 4 | \ 409 (value) << 8 ) 410 411 #define PICA_CMD_SET_DISABLE_ALPHA_TEST() \ 412 PICA_CMD_DATA_FRAGOP_ALPHA_TEST_DISABLE(), \ 413 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_FRAGOP_ALPHA_TEST, 0x1 ) 414 415 #define PICA_CMD_SET_ENABLE_ALPHA_TEST(func, value) \ 416 PICA_CMD_DATA_FRAGOP_ALPHA_TEST(0x1, func, value), \ 417 PICA_CMD_HEADER_SINGLE_BE( PICA_REG_FRAGOP_ALPHA_TEST, 0x3 ) 418 419 /////////////////////////////////// 420 // Frame Buffer Access Control 421 422 // PICA_REG_FRAME_BUFFER_MODE1 0x112 423 // PICA_REG_FRAME_BUFFER_MODE2 0x113 424 // PICA_REG_FRAME_BUFFER_MODE3 0x114 425 // PICA_REG_FRAME_BUFFER_MODE4 0x115 426 427 #define PICA_CMD_DATA_FRAME_BUFFER_MODE(mode) (mode) 428 429 430 431 /////////////////////////////////// 432 // Viewport Position Setting 433 434 // PICA_REG_VIEWPORT_WIDTH1 0x041 435 // PICA_REG_VIEWPORT_WIDTH2 0x042 436 #define PICA_CMD_DATA_VIEWPORT_WIDTH(width) (width) 437 438 // PICA_REG_VIEWPORT_HEIGHT1 0x043 439 // PICA_REG_VIEWPORT_HEIGHT2 0x044 440 #define PICA_CMD_DATA_VIEWPORT_HEIGHT(height) (height) 441 442 /* 443 struct CommandViewportXY 444 { 445 u32 x : 10; 446 CMD_PADDING(6); 447 u32 y : 10; 448 CMD_PADDING(6); 449 }; 450 */ 451 // PICA_REG_VIEWPORT_XY 0x068 452 #define PICA_CMD_DATA_VIEWPORT_XY(x, y) ( (x) | (y) << 16 ) 453 454 455 /////////////////////////////////// 456 // Depth test 457 // Color Mask 458 459 /* Please see man pages for details 460 461 462 463 */ 464 enum PicaDataDepthTest 465 { 466 // 467 PICA_DATA_DEPTH_TEST_NEVER = 0x0, 468 // 469 PICA_DATA_DEPTH_TEST_ALWAYS = 0x1, 470 // 471 PICA_DATA_DEPTH_TEST_EQUAL = 0x2, 472 // 473 PICA_DATA_DEPTH_TEST_NOTEQUAL = 0x3, 474 // 475 PICA_DATA_DEPTH_TEST_LESS = 0x4, 476 // 477 PICA_DATA_DEPTH_TEST_LEQUAL = 0x5, 478 // 479 PICA_DATA_DEPTH_TEST_GREATER = 0x6, 480 // 481 PICA_DATA_DEPTH_TEST_GEQUAL = 0x7 482 }; 483 484 /* 485 struct CommandDepthColorMask 486 { 487 u32 depthFunc : 7; 488 CMD_PADDING(1); 489 u32 red : 1; 490 u32 green : 1; 491 u32 blue : 1; 492 u32 alpha : 1; 493 u32 depthMask : 1; 494 CMD_PADDING(19); 495 }; 496 */ 497 498 #define PICA_CMD_DATA_DEPTH_TEST_DISABLE() 0x0 499 500 // PICA_REG_DEPTH_COLOR_MASK 0x107 501 #define PICA_CMD_DATA_DEPTH_COLOR_MASK( enableDepthTest, depthFunc, \ 502 red, green, blue, alpha, depthMask ) \ 503 ( ((enableDepthTest) ? 1 : 0) | \ 504 (depthFunc << 4) | \ 505 ((red) ? 0x100 : 0) | \ 506 ((green) ? 0x200 : 0) | \ 507 ((blue) ? 0x400 : 0) | \ 508 ((alpha) ? 0x800 : 0) | \ 509 ((depthMask) ? 0x1000 : 0) ) 510 511 512 /////////////////////////////////// 513 // Blend / LogicOp 514 515 // Blend Equation 516 517 /* Please see man pages for details 518 519 520 521 */ 522 enum PicaDataBlendEquation 523 { 524 // 525 PICA_DATA_BLEND_EQUATION_ADD = 0, 526 // 527 PICA_DATA_BLEND_EQUATION_SUBTRACT = 1, 528 // 529 PICA_DATA_BLEND_EQUATION_REVERSE_SUBTRACT = 2, 530 // 531 PICA_DATA_BLEND_EQUATION_MIN = 3, 532 // 533 PICA_DATA_BLEND_EQUATION_MAX = 4 534 }; 535 536 /* Please see man pages for details 537 538 539 540 */ 541 enum PicaDataBlendFunc 542 { 543 // 544 PICA_DATA_BLEND_FUNC_ZERO = 0, 545 // 546 PICA_DATA_BLEND_FUNC_ONE = 1, 547 // 548 PICA_DATA_BLEND_FUNC_SRC_COLOR = 2, 549 // 550 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_COLOR = 3, 551 // 552 PICA_DATA_BLEND_FUNC_DST_COLOR = 4, 553 // 554 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_COLOR = 5, 555 // 556 PICA_DATA_BLEND_FUNC_SRC_ALPHA = 6, 557 // 558 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA = 7, 559 // 560 PICA_DATA_BLEND_FUNC_DST_ALPHA = 8, 561 // 562 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_ALPHA = 9, 563 // 564 PICA_DATA_BLEND_FUNC_CONSTANT_COLOR = 10, 565 // 566 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_COLOR = 11, 567 // 568 PICA_DATA_BLEND_FUNC_CONSTANT_ALPHA = 12, 569 // 570 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_ALPHA = 13, 571 // 572 PICA_DATA_BLEND_FUNC_SRC_ALPHA_SATURATE = 14 573 }; 574 575 // PICA_REG_BLEND_FUNC 0x101 576 #define PICA_CMD_DATA_BLEND_FUNC_SEPARATE(eqRgb, eqAlpha, srcRgb, dstRgb, srcAlpha, dstAlpha) \ 577 ((eqRgb) | (eqAlpha) << 8 | (srcRgb) << 16 | (dstRgb) << 20 | (srcAlpha) << 24 | static_cast<u32>(dstAlpha) << 28) 578 579 #define PICA_CMD_DATA_BLEND_FUNC( eq, src, dst) \ 580 PICA_CMD_DATA_BLEND_FUNC_SEPARATE(eq, eq, src, dst, src, dst) 581 582 #define PICA_CMD_SET_BLEND_FUNC( eq, src, dst ) \ 583 PICA_CMD_DATA_COLOR_OPERATION( PICA_DATA_FRAGOP_MODE, PICA_DATA_ENABLE_BLEND ), \ 584 PICA_CMD_HEADER_SINGLE( PICA_REG_COLOR_OPERATION ), \ 585 PICA_CMD_DATA_BLEND_FUNC( eq, src, dst ), \ 586 PICA_CMD_HEADER_SINGLE( PICA_REG_BLEND_FUNC ) 587 588 #define PICA_CMD_SET_BLEND_FUNC_SEPARATE( eqRgb, eqAlpha, srcRgb, dstRgb, srcAlpha, dstAlpha) \ 589 PICA_CMD_DATA_COLOR_OPERATION( PICA_DATA_FRAGOP_MODE, PICA_DATA_ENABLE_BLEND ), \ 590 PICA_CMD_HEADER_SINGLE( PICA_REG_COLOR_OPERATION ), \ 591 PICA_CMD_DATA_BLEND_FUNC_SEPARATE( eqRgb, eqAlpha, srcRgb, dstRgb, srcAlpha, dstAlpha ), \ 592 PICA_CMD_HEADER_SINGLE( PICA_REG_BLEND_FUNC ) 593 594 #define PICA_CMD_SET_BLEND_DEFAULT() \ 595 PICA_CMD_SET_BLEND_FUNC( PICA_DATA_BLEND_EQUATION_ADD, PICA_DATA_BLEND_FUNC_SRC_ALPHA, PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA ) 596 597 #define PICA_CMD_SET_BLEND_NOTHING() \ 598 PICA_CMD_SET_BLEND_FUNC( PICA_DATA_BLEND_EQUATION_ADD, PICA_DATA_BLEND_FUNC_ONE, PICA_DATA_BLEND_FUNC_ZERO ) 599 600 601 /* Please see man pages for details 602 603 604 605 */ 606 enum PicaDataLogicOp 607 { 608 // 609 PICA_DATA_LOGIC_CLEAR = 0x0, 610 // 611 PICA_DATA_LOGIC_AND = 0x1, 612 // 613 PICA_DATA_LOGIC_AND_REVERSE = 0x2, 614 // 615 PICA_DATA_LOGIC_COPY = 0x3, 616 // 617 PICA_DATA_LOGIC_SET = 0x4, 618 // 619 PICA_DATA_LOGIC_COPY_INVERTED = 0x5, 620 // 621 PICA_DATA_LOGIC_NOOP = 0x6, 622 // 623 PICA_DATA_LOGIC_INVERT = 0x7, 624 // 625 PICA_DATA_LOGIC_NAND = 0x8, 626 // 627 PICA_DATA_LOGIC_OR = 0x9, 628 // 629 PICA_DATA_LOGIC_NOR = 0xa, 630 // 631 PICA_DATA_LOGIC_XOR = 0xb, 632 // 633 PICA_DATA_LOGIC_EQUIV = 0xc, 634 // 635 PICA_DATA_LOGIC_AND_INVERTED = 0xd, 636 // 637 PICA_DATA_LOGIC_OR_REVERSE = 0xe, 638 // 639 PICA_DATA_LOGIC_OR_INVERTED = 0xf 640 }; 641 642 #define PICA_CMD_DATA_LOGIC_OP( logicOp ) (logicOp) 643 644 // 0x101 645 // [31:28] = 0x0, [27:24] = 0x1, [23:20] = 0x0, [19:16] = 0x1 646 #define PICA_CMD_DATA_LOGIC_OP_ENABLE() \ 647 ( (0x1 << 16) | (0x1 << 24) ) 648 649 #define PICA_CMD_SET_LOGIC_OP( logicOp ) \ 650 PICA_CMD_DATA_COLOR_OPERATION( PICA_DATA_FRAGOP_MODE, PICA_DATA_ENABLE_COLOR_LOGIC_OP ), \ 651 PICA_CMD_HEADER_SINGLE( PICA_REG_COLOR_OPERATION ), \ 652 PICA_CMD_DATA_LOGIC_OP(logicOp), PICA_CMD_HEADER_SINGLE( PICA_REG_LOGIC_OP ) 653 654 // PICA_REG_BLEND_COLOR 0x103 655 #define PICA_CMD_DATA_BLEND_COLOR( color8 ) \ 656 ( (color8.r) | (color8.g) << 8 | (color8.b) << 16 | (color8.a) << 24 ) 657 658 /////////////////////////////////// 659 // Early Depth Test 660 661 // PICA_REG_EARLY_DEPTH_TEST1 0x062 662 // PICA_REG_EARLY_DEPTH_TEST2 0x118 663 #define PICA_CMD_DATA_EARLY_DEPTH_TEST( mode ) ((mode) ? 1 : 0) 664 665 #define PICA_CMD_DATA_EARLY_DEPTH_TEST_DISABLE() 0x0 666 667 #define PICA_CMD_SET_DISABLE_EARLY_DEPTH_TEST() \ 668 PICA_CMD_DATA_EARLY_DEPTH_TEST_DISABLE(), PICA_CMD_HEADER_SINGLE_BE( PICA_REG_EARLY_DEPTH_TEST1, 0x1), \ 669 PICA_CMD_DATA_EARLY_DEPTH_TEST_DISABLE(), PICA_CMD_HEADER_SINGLE( PICA_REG_EARLY_DEPTH_TEST2 ) 670 671 /* Please see man pages for details 672 673 674 675 */ 676 enum PicaDataEarlyDepth 677 { 678 // 679 PICA_DATA_EARLY_DEPTH_GEQUAL = 0x0, 680 // 681 PICA_DATA_EARLY_DEPTH_GREATER = 0x1, 682 // 683 PICA_DATA_EARLY_DEPTH_LEQUAL = 0x2, 684 // 685 PICA_DATA_EARLY_DEPTH_LESS = 0x3 686 }; 687 688 // PICA_REG_EARLY_DEPTH_FUNC 0x061 689 #define PICA_CMD_DATA_EARLY_DEPTH_FUNC( func ) (func) 690 691 #define PICA_CMD_SET_EARLY_DEPTH_FUNC(func) \ 692 PICA_CMD_DATA_EARLY_DEPTH_FUNC(func), PICA_CMD_HEADER_SINGLE_BE( PICA_REG_EARLY_DEPTH_FUNC, 0x1) 693 694 // PICA_REG_EARLY_DEPTH_DATA 0x06a 695 #define PICA_CMD_DATA_EARLY_DEPTH_DATA( depth ) (depth) 696 697 #define PICA_CMD_SET_EARLY_DEPTH_DATA(data) \ 698 PICA_CMD_DATA_EARLY_DEPTH_DATA(data), PICA_CMD_HEADER_SINGLE_BE( PICA_REG_EARLY_DEPTH_DATA, 0x7) 699 700 701 702 /////////////////////////////////// 703 // Stencil Test 704 705 /* Please see man pages for details 706 707 708 709 */ 710 enum PicaDataStencilTest 711 { 712 // 713 PICA_DATA_STENCIL_TEST_NEVER = 0x0, 714 // 715 PICA_DATA_STENCIL_TEST_ALWAYS = 0x1, 716 // 717 PICA_DATA_STENCIL_TEST_EQUAL = 0x2, 718 // 719 PICA_DATA_STENCIL_TEST_NOTEQUAL = 0x3, 720 // 721 PICA_DATA_STENCIL_TEST_LESS = 0x4, 722 // 723 PICA_DATA_STENCIL_TEST_LEQUAL = 0x5, 724 // 725 PICA_DATA_STENCIL_TEST_GREATER = 0x6, 726 // 727 PICA_DATA_STENCIL_TEST_GEQUAL = 0x7 728 }; 729 730 /* 731 struct CommandStencilTest 732 { 733 u32 glStencilFunc : 7; 734 CMD_PADDING(1); 735 u32 glStencilMask : 8; 736 u32 ref : 8 737 u32 mask : 8; 738 }; 739 */ 740 741 // PICA_REG_STENCIL_TEST 0x105 742 #define PICA_CMD_DATA_STENCIL_TEST( enableStencilTest, stencilFunc, stencilMask, ref, mask) \ 743 ( ((enableStencilTest) ? 1 : 0 ) | \ 744 (stencilFunc) << 4 | \ 745 (stencilMask) << 8 | \ 746 (ref) << 16 | \ 747 (mask) << 24 ) 748 749 #define PICA_CMD_DATA_STENCIL_TEST_DISABLE() 0x0 750 751 #define PICA_CMD_SET_DISABLE_STENCIL_TEST()\ 752 PICA_CMD_DATA_STENCIL_TEST_DISABLE(), PICA_CMD_HEADER_SINGLE( PICA_REG_STENCIL_TEST ) 753 754 /* Please see man pages for details 755 756 757 758 */ 759 enum PicaDataStencilOp 760 { 761 // 762 PICA_DATA_STENCIL_OP_KEEP = 0x0, 763 // 764 PICA_DATA_STENCIL_OP_ZERO = 0x1, 765 // 766 PICA_DATA_STENCIL_OP_REPLACE = 0x2, 767 // 768 PICA_DATA_STENCIL_OP_INCR = 0x3, 769 // 770 PICA_DATA_STENCIL_OP_DECR = 0x4, 771 // 772 PICA_DATA_STENCIL_OP_INVERT = 0x5, 773 // 774 PICA_DATA_STENCIL_OP_INCR_WRAP = 0x6, 775 // 776 PICA_DATA_STENCIL_OP_DECR_WRAP = 0x7 777 }; 778 779 /* 780 struct CommandStencilOp 781 { 782 u32 fail : 3; 783 CMD_PADDING(1); 784 u32 zfail : 3; 785 CMD_PADDING(1); 786 u32 zpass : 3 787 CMD_PADDING(21); 788 }; 789 */ 790 791 // PICA_REG_STENCIL_OP 0x106 792 #define PICA_CMD_DATA_STENCIL_OP( fail, zfail, zpass) \ 793 ( (fail) | \ 794 (zfail) << 4 | \ 795 (zpass) << 8 ) 796 797 /////////////////////////////////// 798 // Cull Face 799 800 // PICA_REG_CULL_FACE 0x040 [1:0] 801 #define PICA_CMD_DATA_CULL_FACE( mode ) (mode) 802 803 #define PICA_CMD_SET_CULL_FACE( mode ) \ 804 PICA_CMD_DATA_CULL_FACE( mode ) , PICA_CMD_HEADER_SINGLE( PICA_REG_CULL_FACE ) 805 806 /////////////////////////////////// 807 // Scissor 808 809 // PICA_REG_SCISSOR 0x065 [1:0] 810 #define PICA_CMD_DATA_SCISSOR( mode ) ((mode) ? 3 : 0) 811 812 /* 813 struct CommandScissorSize 814 { 815 u32 size1 : 10; 816 CMD_PADDING(6); 817 u32 size2 : 10; 818 CMD_PADDING(6); 819 }; 820 */ 821 822 // PICA_REG_SCISSOR_XY 0x066 823 #define PICA_CMD_DATA_SCISSOR_XY( x, y, colorBufferWidth, colorBufferHeight) \ 824 ( ((x) < 0) ? 0 : ( (x >= colorBufferWidth) ? (colorBufferWidth - 1) : (x) ) ) | \ 825 ( ((y) < 0) ? 0 : ( (y >= colorBufferHeight) ? (colorBufferHeight - 1) : (y) ) << 16 ) 826 827 828 // PICA_REG_SCISSOR_SIZE 0x067 829 #define PICA_CMD_DATA_SCISSOR_SIZE( x, y ) \ 830 ( ((x) < 0) ? 0 : (x) | \ 831 ( ((y) < 0) ? 0 : (y)) << 16 ) 832 833 /////////////////////////////////// 834 // Render Block Format 835 836 837 /* Please see man pages for details 838 839 840 841 */ 842 enum PicaDataRenderBlockFormat 843 { 844 // 845 PICA_DATA_RENDER_BLOCK8_MODE_DMP = 0x0, 846 // 847 PICA_DATA_RENDER_BLOCK32_MODE_DMP = 0x1 848 }; 849 850 // PICA_REG_RENDER_BLOCK_FORMAT 0x11b 851 #define PICA_CMD_DATA_RENDER_BLOCK_FORMAT( mode ) ( (mode) ? 1 : 0 ) 852 853 /////////////////////////////////// 854 // Appendex registers 855 856 // PICA_REG_COLOR_BUFFER_CLEAR0 0x110 Append: clear buffer register 857 // PICA_REG_COLOR_BUFFER_CLEAR1 0x111 Append: clear buffer register 858 859 #define PICA_CMD_DATA_COLOR_DEPTH_BUFFER_CLEAR( data ) \ 860 ( (data) ? 1 : 0 ) 861 862 #define PICA_CMD_SET_COLOR_DEPTH_BUFFER_CLEAR( data1, data2 ) \ 863 PICA_CMD_DATA_COLOR_DEPTH_BUFFER_CLEAR(data1), PICA_CMD_HEADER_SINGLE(PICA_REG_COLOR_DEPTH_BUFFER_CLEAR1), \ 864 PICA_CMD_DATA_COLOR_DEPTH_BUFFER_CLEAR(data2), PICA_CMD_HEADER_SINGLE(PICA_REG_COLOR_DEPTH_BUFFER_CLEAR0) 865 866 /* 867 868 */ 869 870 #endif // NN_GX_CTR_PICA_MACRO_MISC_H_ 871 872