1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gx_MacroFragment.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_FRAGMENT_H_ 17 #define NN_GX_CTR_PICA_MACRO_FRAGMENT_H_ 18 19 #include <nn/gx/CTR/gx_MacroCommon.h> 20 21 /* Please see man pages for details 22 23 24 */ 25 26 // PICA_REG_FRAG_LIGHT_EN0 0x08f 27 // PICA_REG_FRAG_LIGHT_EN1 0x1c6 28 #define PICA_CMD_DATA_FRAG_LIGHT_EN(flag) ( (flag) ? 1 : 0 ) 29 #define PICA_CMD_DATA_FRAG_LIGHT_EN_INV(flag) ( (flag) ? 0 : 1 ) 30 31 #define PICA_CMD_SET_FRAG_LIGHT_ENABLE(flag) \ 32 PICA_CMD_DATA_FRAG_LIGHT_EN(flag), PICA_CMD_HEADER_SINGLE(PICA_REG_FRAG_LIGHT_EN0), \ 33 PICA_CMD_DATA_FRAG_LIGHT_EN_INV(flag), PICA_CMD_HEADER_SINGLE(PICA_REG_FRAG_LIGHT_EN1) 34 35 // PICA_REG_FRAG_LIGHT_SRC_NUM 0x1c2 36 #define PICA_CMD_DATA_FRAG_LIGHT_NUM(num) ( (num > 0) ? (num - 1) : 0 ) 37 38 #define PICA_CMD_SET_FRAG_LIGHT_NUM(num) \ 39 PICA_CMD_DATA_FRAG_LIGHT_NUM(num), PICA_CMD_HEADER_SINGLE( PICA_REG_FRAG_LIGHT_SRC_NUM ) 40 41 /* 42 struct CommandFragLightSrc 43 { 44 u32 Id1 : 3; 45 u32 Id2 : 3; 46 u32 Id3 : 3; 47 u32 Id4 : 3; 48 u32 Id5 : 3; 49 u32 Id6 : 3; 50 u32 Id7 : 3; 51 u32 Id8 : 3; 52 CMD_PADDING(8); 53 }; 54 */ 55 56 // PICA_REG_FRAG_LIGHT_SRC_EN_ID 0x1d9 57 #define PICA_CMD_DATA_FRAG_LIGHT_EN_ID(Id1, Id2, Id3, Id4, Id5, Id6, Id7, Id8) \ 58 ( (Id1) | (Id2) << 4 | (Id3) << 8 | (Id4) << 12 | \ 59 (Id5) << 16 | (Id6) << 20 | (Id7) << 24 | (Id8) << 28 ) 60 61 /////////////////////////////////// 62 // Fragment Global Ambient 63 // Fragment LightEnv MiscGlobal 64 65 // PICA_REG_FRAG_LIGHT_AMBIENT 0x1c0 66 #define PICA_CMD_DATA_FRAG_LIGHT_AMBIENT(color) \ 67 ( (color.b) | (color.g) << 10 | (color.r) << 20 ) 68 69 /////////////////////////////////// 70 // Fragment Light Source 71 // Fragment LightEnv Misc 72 73 // PICA_REG_FRAG_LIGHT0_SPECULAR0 0x140 to 0x1b0 74 // PICA_REG_FRAG_LIGHT0_SPECULAR1 0x141 to 0x1b1 75 // PICA_REG_FRAG_LIGHT0_DIFFUSE 0x142 to 0x1b2 76 // PICA_REG_FRAG_LIGHT0_AMBIENT 0x143 to 0x1b3 77 #define PICA_CMD_DATA_FRAG_LIGHT_SRC(color) \ 78 ( (color.b) | (color.g) << 10 | (color.r) << 20 ) 79 80 /* 81 struct CommandFragLightPositionXY 82 { 83 u32 x : 16; 84 u32 y : 16; 85 }; 86 */ 87 // PICA_REG_FRAG_LIGHT0_POSITION_XY 0x144 to 0x1b4 88 #define PICA_CMD_DATA_FRAG_LIGHT_POSITION_XY(x, y) \ 89 ( (x) | (y) << 16 ) 90 91 // PICA_REG_FRAG_LIGHT0_SPOT_XY 0x146 to 0x1b6 92 #define PICA_CMD_DATA_FRAG_LIGHT_SPOT_XY(x, y) \ 93 ( (x) | (y) << 16 ) 94 95 /* 96 struct CommandFragLightPositionZ 97 { 98 u32 z : 16; 99 CMD_PADDING(16); 100 }; 101 */ 102 103 // PICA_REG_FRAG_LIGHT0_POSITION_Z 0x145 to 0x1b5 104 #define PICA_CMD_DATA_FRAG_LIGHT_POSITION_Z(z) ( z ) 105 106 // PICA_REG_FRAG_LIGHT0_SPOT_Z 0x147 to 0x1b7 107 #define PICA_CMD_DATA_FRAG_LIGHT_SPOT_Z(z) ( z ) 108 109 // PICA_REG_FRAG_LIGHT0_DIST_ATTN_BIAS 0x14a to 0x1ba 110 #define PICA_CMD_DATA_FRAG_LIGHT_DIST_ATTN_BIAS(bias) ( bias ) 111 112 // PICA_REG_FRAG_LIGHT0_DIST_ATTN_SCALE 0x14b to 0x1bb 113 #define PICA_CMD_DATA_FRAG_LIGHT_DIST_ATTN_SCALE(scale) ( scale ) 114 115 116 /* 117 struct CommandFragLightType 118 { 119 u32 w : 1; 120 u32 twoSideDiffuse : 1; 121 u32 geomFactor0 : 1; 122 u32 geomFactor1 : 1; 123 CMD_PADDING(28); 124 }; 125 */ 126 // PICA_REG_FRAG_LIGHT0_TYPE 0x149 to 0x1b9 127 #define PICA_CMD_DATA_FRAG_LIGHT_TYPE(w, twoSideDiffuse, geomFactor0, geomFactor1) \ 128 ( ((w) == 0) ? 1 : 0 | \ 129 ((twoSideDiffuse) ? 1 : 0) << 1 | \ 130 ((geomFactor0) ? 1 : 0) << 2 | \ 131 ((geomFactor1) ? 1 : 0) << 3) 132 133 /* 134 struct CommandFragLightFuncMode1 135 { 136 u32 shadowed : 8; 137 u32 spotEnabled : 8; 138 u32 lutEnabledD0 : 1; 139 u32 lutEnabledD1 : 1; 140 CMD_PADDING(1); 141 u32 fresnelSelector : 1; 142 u32 lutEnabledRefl : 3; 143 CMD_PADDING(1); 144 u32 distanceAttenuationEnabled : 8; 145 }; 146 */ 147 148 // PICA_REG_FRAG_LIGHT_FUNC_MODE1 0x1c4 149 // i is the number of light source number 150 #define PICA_CMD_DATA_FRAG_LIGHT_FUNC_MODE1(shadowed, spotEnabled, lutEnabledD0, \ 151 lutEnabledD1, fresnelSelector, lutEnabledRefl, distanceAttenuationEnabled, i) \ 152 ( ((shadowed) ? 0 : 1) << i | \ 153 ((spotEnabled) ? 0 : 1) << 8+i | \ 154 ((lutEnabledD0) ? 0 : 1) << 16 | \ 155 ((lutEnabledD1) ? 0 : 1) << 17 | \ 156 1 << 18 | \ 157 ((fresnelSelector) ? 0 : 1) << 19 | \ 158 ((lutEnabledRefl) ? 0 : 7) << 20 | \ 159 ((distanceAttenuationEnabled) ? 0 : 1) << 24+i ) 160 161 #define PICA_CMD_DATA_FRAG_LIGHT_FUNC_MODE1_LIGHT_SOURCE(i, \ 162 shadowed, spotEnabled, distanceAttenuationEnabled) \ 163 ( ((shadowed) ? 0 : 1) << i | \ 164 ((spotEnabled) ? 0 : 1) << 8+i | \ 165 1 << 18 | \ 166 ((distanceAttenuationEnabled) ? 0 : 1) << 24+i ) 167 168 #define PICA_CMD_DATA_FRAG_LIGHT_FUNC_MODE1_LUT(lutEnabledD0, \ 169 lutEnabledD1, fresnelSelector, lutEnabledRefl) \ 170 ( ((lutEnabledD0) ? 0 : 1) << 16 | \ 171 ((lutEnabledD1) ? 0 : 1) << 17 | \ 172 1 << 18 | \ 173 ((fresnelSelector) ? 0 : 1) << 19 | \ 174 ((lutEnabledRefl) ? 0 : 7) << 20 ) 175 176 /////////////////////////////////// 177 // Fragment light Lut Table 178 /* 179 struct CommandFragLightLut 180 { 181 u32 index : 8; 182 u32 type : 4; 183 CMD_PADDING(20); 184 }; 185 */ 186 187 /* Please see man pages for details 188 189 190 */ 191 enum PicaDataFragLightSampler 192 { 193 // 194 PICA_DATA_SAMPLER_D0 = 0x0, 195 // 196 PICA_DATA_SAMPLER_D1 = 0x1, 197 // 198 PICA_DATA_SAMPLER_FR = 0x3, 199 // 200 PICA_DATA_SAMPLER_RB = 0x4, 201 // 202 PICA_DATA_SAMPLER_RG = 0x5, 203 // 204 PICA_DATA_SAMPLER_RR = 0x6, 205 206 // 207 PICA_DATA_SAMPLER_SP = 0x8, 208 // 209 PICA_DATA_FRAG_LIGHT0_SAMPLER_SP = 0x8 + 0x0, 210 // 211 PICA_DATA_FRAG_LIGHT1_SAMPLER_SP = 0x8 + 0x1, 212 // 213 PICA_DATA_FRAG_LIGHT2_SAMPLER_SP = 0x8 + 0x2, 214 // 215 PICA_DATA_FRAG_LIGHT3_SAMPLER_SP = 0x8 + 0x3, 216 // 217 PICA_DATA_FRAG_LIGHT4_SAMPLER_SP = 0x8 + 0x4, 218 // 219 PICA_DATA_FRAG_LIGHT5_SAMPLER_SP = 0x8 + 0x5, 220 // 221 PICA_DATA_FRAG_LIGHT6_SAMPLER_SP = 0x8 + 0x6, 222 // 223 PICA_DATA_FRAG_LIGHT7_SAMPLER_SP = 0x8 + 0x7, 224 225 // 226 PICA_DATA_SAMPLER_DA = 0x10, 227 // 228 PICA_DATA_FRAG_LIGHT0_SAMPLER_DA = 0x10 + 0x0, 229 // 230 PICA_DATA_FRAG_LIGHT1_SAMPLER_DA = 0x10 + 0x1, 231 // 232 PICA_DATA_FRAG_LIGHT2_SAMPLER_DA = 0x10 + 0x2, 233 // 234 PICA_DATA_FRAG_LIGHT3_SAMPLER_DA = 0x10 + 0x3, 235 // 236 PICA_DATA_FRAG_LIGHT4_SAMPLER_DA = 0x10 + 0x4, 237 // 238 PICA_DATA_FRAG_LIGHT5_SAMPLER_DA = 0x10 + 0x5, 239 // 240 PICA_DATA_FRAG_LIGHT6_SAMPLER_DA = 0x10 + 0x6, 241 // 242 PICA_DATA_FRAG_LIGHT7_SAMPLER_DA = 0x10 + 0x7 243 }; 244 // PICA_REG_FRAG_LIGHT_LUT 0x1c5 245 #define PICA_CMD_DATA_FRAG_LIGHT_LUT(index, type) \ 246 ( (index) | (type) << 8) 247 248 /* 249 struct CommandFragLightLutData 250 { 251 u32 d1 : 12; 252 u32 d2 : 12; 253 CMD_PADDING(8); 254 }; 255 */ 256 // PICA_REG_FRAG_LIGHT_LUT_DATA0 0x1c8 to 0x1cf 257 #define PICA_CMD_DATA_FRAG_LIGHT_LUT_DATA(data1, data2) \ 258 ( (data1) | (data2) << 12 ) 259 260 /////////////////////////////////// 261 // Fragment LightEnv absLutInput 262 /* 263 struct CommandFragLightEnvAbsLutInput 264 { 265 CMD_PADDING(1); 266 u32 D0 : 1; 267 CMD_PADDING(3); 268 u32 D1 : 1; 269 CMD_PADDING(3); 270 u32 SP : 1; 271 CMD_PADDING(3); 272 u32 FR : 1; 273 CMD_PADDING(3); 274 u32 RB : 1; 275 CMD_PADDING(3); 276 u32 RG : 1; 277 CMD_PADDING(3); 278 u32 RR : 1; 279 CMD_PADDING(6); 280 }; 281 */ 282 // PICA_REG_FRAG_LIGHT_ABSLUTINPUT 0x1d0 283 #define PICA_CMD_DATA_FRAG_LIGHT_ABSLUTINPUT(D0, D1, SP, FR, RB, RG, RR) \ 284 ( ((D0) ? 0 : 1) << 1 | \ 285 ((D1) ? 0 : 1) << 5 | \ 286 ((SP) ? 0 : 1) << 9 | \ 287 ((FR) ? 0 : 1) << 13 | \ 288 ((RB) ? 0 : 1) << 17 | \ 289 ((RG) ? 0 : 1) << 21 | \ 290 ((RR) ? 0 : 1) << 25 ) 291 292 /////////////////////////////////// 293 // Fragment LightEnv LutInput 294 /* 295 struct CommandFragLightEnvLutInput 296 { 297 u32 D0 : 3; 298 CMD_PADDING(1); 299 u32 D1 : 3; 300 CMD_PADDING(1); 301 u32 SP : 3; 302 CMD_PADDING(1); 303 u32 FR : 3; 304 CMD_PADDING(1); 305 u32 RB : 3; 306 CMD_PADDING(1); 307 u32 RG : 3; 308 CMD_PADDING(1); 309 u32 RR : 3; 310 CMD_PADDING(5); 311 }; 312 */ 313 314 /* Please see man pages for details 315 316 317 */ 318 enum PicaDataFragLightEnvLutInput 319 { 320 // 321 PICA_DATA_FRAG_LIGHT_ENV_NH_DMP = 0x0, 322 // 323 PICA_DATA_FRAG_LIGHT_ENV_VH_DMP = 0x1, 324 // 325 PICA_DATA_FRAG_LIGHT_ENV_NV_DMP = 0x2, 326 // 327 PICA_DATA_FRAG_LIGHT_ENV_LN_DMP = 0x3, 328 // 329 PICA_DATA_FRAG_LIGHT_ENV_SP_DMP = 0x4, 330 // 331 PICA_DATA_FRAG_LIGHT_ENV_CP_DMP = 0x5 332 }; 333 334 // PICA_REG_FRAG_LIGHT_LUTINPUT 0x1d1 335 #define PICA_CMD_DATA_FRAG_LIGHT_ENV_LUTINPUT(D0, D1, SP, FR, RB, RG, RR) \ 336 ( (D0) | (D1) << 4 | (SP) << 8 | \ 337 (FR) << 12 | (RB) << 16 | (RG) << 20 | (RR) << 24 ) 338 339 /////////////////////////////////// 340 // Fragment LightEnv lutScale 341 /* 342 struct CommandFragLightEnvLutScale 343 { 344 u32 D0 : 3; 345 CMD_PADDING(1); 346 u32 D1 : 3; 347 CMD_PADDING(1); 348 u32 SP : 3; 349 CMD_PADDING(1); 350 u32 FR : 3; 351 CMD_PADDING(1); 352 u32 RB : 3; 353 CMD_PADDING(1); 354 u32 RG : 3; 355 CMD_PADDING(1); 356 u32 RR : 3; 357 CMD_PADDING(5); 358 }; 359 */ 360 361 /* Please see man pages for details 362 363 364 */ 365 enum PicaDataFragLightEnvLutScale 366 { 367 // 368 PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_1_0 = 0x0, 369 // 370 PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_2_0 = 0x1, 371 // 372 PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_4_0 = 0x2, 373 // 374 PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_8_0 = 0x3, 375 // 376 PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_0_25 = 0x6, 377 // 378 PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_0_5 = 0x7 379 }; 380 381 // PICA_REG_FRAG_LIGHT_LUTSCALE 0x1d2 382 #define PICA_CMD_DATA_FRAG_LIGHT_ENV_LUTSCALE(D0, D1, SP, FR, RB, RG, RR) \ 383 ( (D0) | (D1) << 4 | (SP) << 8 | \ 384 (FR) << 12 | (RB) << 16 | (RG) << 20 | (RR) << 24 ) 385 386 387 /////////////////////////////////// 388 // Fragment LightEnv Shadow 389 // Fragment LightEnv Misc 390 /* 391 struct CommandFragLightEnvFuncMode0 392 { 393 u32 common : 1; 394 CMD_PADDING(1); 395 u32 fresnelSelector : 2; 396 u32 config : 4; 397 CMD_PADDING(8); 398 u32 shadowPrimary : 1; 399 u32 shadowSecondary : 1; 400 u32 invertShadow : 1; 401 u32 shadowAlpha : 1; 402 CMD_PADDING(2); 403 u32 bumpSelector : 2; 404 u32 shadowSelector : 2; 405 CMD_PADDING(1); 406 u32 clampHighlights : 1; 407 u32 bumpMode : 2; 408 u32 bumpRenorm : 1; 409 CMD_PADDING(1); // 0x1 410 }; 411 */ 412 413 // 0x1c3 [0:0] 414 #define PICA_CMD_DATA_FRAG_LIGHT_ENV_SHADOW_ATTN(shadowPrimary, shadowSecondary, shadowAlpha) \ 415 ( ( (shadowPrimary) | (shadowSecondary) | (shadowAlpha) ) ? 1 : 0 ) 416 417 /* Please see man pages for details 418 419 420 421 */ 422 enum PicaDataFragLightEnvTexture 423 { 424 // 425 PICA_DATA_FRAG_LIGHT_ENV_TEXTURE0 = 0x0, 426 // 427 PICA_DATA_FRAG_LIGHT_ENV_TEXTURE1 = 0x1, 428 // 429 PICA_DATA_FRAG_LIGHT_ENV_TEXTURE2 = 0x2, 430 // 431 PICA_DATA_FRAG_LIGHT_ENV_TEXTURE3 = 0x3 432 }; 433 434 // 0x1c3 [7:4] 435 436 /* Please see man pages for details 437 438 439 440 */ 441 enum PicaDataFragLightEnvLayerConfig 442 { 443 // 444 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG0 = 0x0, 445 // 446 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG1 = 0x1, 447 // 448 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG2 = 0x2, 449 // 450 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG3 = 0x3, 451 // 452 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG4 = 0x4, 453 // 454 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG5 = 0x5, 455 // 456 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG6 = 0x6, 457 // 458 PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG7 = 0x8 459 }; 460 461 // 0x1c3 [3:2] 462 /* Please see man pages for details 463 464 465 466 */ 467 enum PicaDataFragLightEnvFresnel 468 { 469 // 470 PICA_DATA_FRAG_LIGHT_ENV_NO_FRESNEL = 0x0, 471 // 472 PICA_DATA_FRAG_LIGHT_ENV_PRI_ALPHA_FRESNEL = 0x1, 473 // 474 PICA_DATA_FRAG_LIGHT_ENV_SEC_ALPHA_FRESNEL = 0x2, 475 // 476 PICA_DATA_FRAG_LIGHT_ENV_PRI_SEC_ALPHA_FRESNEL = 0x3 477 }; 478 479 // 0x1c3 [29:28] 480 /* Please see man pages for details 481 482 483 484 */ 485 enum PicaDataFragLightEnvBump 486 { 487 // 488 PICA_DATA_FRAG_LIGHT_ENV_BUMP_NOT_USED_DMP = 0x0, 489 // 490 PICA_DATA_FRAG_LIGHT_ENV_BUMP_AS_BUMP_DMP = 0x1, 491 // 492 PICA_DATA_FRAG_LIGHT_ENV_BUMP_AS_TANG_DMP = 0x2 493 }; 494 495 #define PICA_CMD_DATA_FRAG_LIGHT_ENV_BUMP(bumpMode, bumpRenorm) \ 496 ( ((bumpRenorm) | (bumpMode == PICA_DATA_FRAG_LIGHT_ENV_BUMP_NOT_USED_DMP) ) ? 0 : 1 ) 497 498 // PICA_REG_FRAG_LIGHT_FUNC_MODE0 0x1c3 499 #define PICA_CMD_DATA_FRAG_LIGHT_FUNC_MODE0(fresnelSelector, config, \ 500 shadowPrimary, shadowSecondary, invertShadow, shadowAlpha, bumpSelector, \ 501 shadowSelector, clampHighlights, bumpMode, bumpRenorm) \ 502 ( PICA_CMD_DATA_FRAG_LIGHT_ENV_SHADOW_ATTN(shadowPrimary, shadowSecondary, shadowAlpha) | \ 503 ( (fresnelSelector) << 2) | \ 504 ( (config) << 4) | \ 505 ( 4 << 8) | \ 506 ( ((shadowPrimary) ? 1 : 0) << 16) | \ 507 ( ((shadowSecondary) ? 1 : 0) << 17) | \ 508 ( ((invertShadow) ? 1 : 0) << 18) | \ 509 ( ((shadowAlpha) ? 1 : 0) << 19) | \ 510 ( (bumpSelector) << 22) | \ 511 ( (shadowSelector) << 24) | \ 512 ( ((clampHighlights) ? 1 : 0) << 27) | \ 513 ( (bumpMode) << 28) | \ 514 ( PICA_CMD_DATA_FRAG_LIGHT_ENV_BUMP(bumpMode, bumpRenorm) << 30) | \ 515 0x80000000 ) 516 517 /* 518 519 */ 520 521 #endif // NN_GX_CTR_PICA_MACRO_FRAGMENT_H_ 522