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