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