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