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