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