1  /*---------------------------------------------------------------------------*
2   Project:  PICA register macro header
3   File:     gx_MacroTexture.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: 27384 $
14  *---------------------------------------------------------------------------*/
15 #ifndef NN_GX_CTR_PICA_MACRO_TEXTURE_H_
16 #define NN_GX_CTR_PICA_MACRO_TEXTURE_H_
17 
18 #include <nn/gx/CTR/gx_MacroCommon.h>
19 
20 /*!
21   @addtogroup   nn_gx_CTR_Pica   PicaMacroHeader
22   @{
23 */
24 
25 ///////////////////////////////////
26 // Texture Address
27 
28 // PICA_REG_TEXTURE0_ADDR1       0x085
29 // PICA_REG_TEXTURE0_ADDR2       0x086
30 // PICA_REG_TEXTURE0_ADDR3       0x087
31 // PICA_REG_TEXTURE0_ADDR4       0x088
32 // PICA_REG_TEXTURE0_ADDR5       0x089
33 // PICA_REG_TEXTURE0_ADDR6       0x08a
34 // PICA_REG_TEXTURE2_ADDR        0x09d
35 // PICA_REG_TEXTURE1_ADDR        0x095
36 #define PICA_CMD_DATA_TEXTURE_ADDR( addr ) \
37     ( (u32)(addr) >> 3 )
38 
39 /*
40 struct CommandTexCubeMap
41 {
42     CMD_PADDING(22);
43     u32 CubeMap   : 6;
44     CMD_PADDING(4);
45 };
46 */
47 
48 /*!
49     @brief テクスチャ 0 のターゲットの設定です。
50 */
51 enum PicaDataTexture
52 {
53     //! GL_TEXTURE_2D です。
54     PICA_DATA_TEXTURE_2D                  = 0x0,
55     //! GL_TEXTURE_CUBE_MAP_POSITIVE_X です。
56     PICA_DATA_TEXTURE_CUBE_MAP_POSITIVE_X = 0x0,
57     //! GL_TEXTURE_CUBE_MAP_NEGATIVE_X です。
58     PICA_DATA_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x1,
59     //! GL_TEXTURE_CUBE_MAP_POSITIVE_Y です。
60     PICA_DATA_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x2,
61     //! GL_TEXTURE_CUBE_MAP_NEGATIVE_Y です。
62     PICA_DATA_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x3,
63     //! GL_TEXTURE_CUBE_MAP_POSITIVE_Z です。
64     PICA_DATA_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x4,
65     //! GL_TEXTURE_CUBE_MAP_NEGATIVE_Z です。
66     PICA_DATA_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x5
67 };
68 
69 // PICA_REG_TEXTURE0_ADDR1      0x085
70 #define PICA_CMD_DATA_TEXTURE_CUBE_MAP_ADDR(cubeMapAddr) \
71     ( (cubeMapAddr) & 0x3fffff )
72 
73 ///////////////////////////////////
74 // Texture combiner
75 // TexEnv
76 
77 /*
78 struct CommandTexEnvSrc
79 {
80     u32 srcRgb0   : 4;
81     u32 srcRgb1   : 4;
82     u32 srcRgb2   : 4;
83     CMD_PADDING(4);
84     u32 srcAlpha0 : 4;
85     u32 srcAlpha1 : 4;
86     u32 srcAlpha2 : 4;
87     CMD_PADDING(4);
88 };
89 */
90 
91 /*!
92     @brief テクスチャコンバイナの srcRgb, srcAlpha を設定します。
93            PICA_REG_TEX_ENV* レジスタで使います。
94            dmp_TexEnv[i].srcRgb, dmp_TexEnv[i].srcAlpha ユニフォームに相当します。
95 */
96 enum PicaDataTexEnvSrc
97 {
98     //! GL_PRIMARY_COLOR です。
99     PICA_DATA_TEX_ENV_SRC_RGBA_PRIMARY_COLOR                = 0x0,
100     //! GL_FRAGMENT_PRIMARY_COLOR です。
101     PICA_DATA_TEX_ENV_SRC_RGBA_FRAGMENT_PRIMARY_COLOR_DMP   = 0x1,
102     //! GL_FRAGMENT_SECONDARY_COLOR です。
103     PICA_DATA_TEX_ENV_SRC_RGBA_FRAGMENT_SECONDARY_COLOR_DMP = 0x2,
104     //! GL_TEXTURE0 です。
105     PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE0                     = 0x3,
106     //! GL_TEXTURE1 です。
107     PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE1                     = 0x4,
108     //! GL_TEXTURE2 です。
109     PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE2                     = 0x5,
110     //! GL_TEXTURE3 です。
111     PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE3                     = 0x6,
112     //! GL_PREVIOUS_BUFFER_DMP です。
113     PICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUS_BUFFER_DMP          = 0xd,
114     //! GL_CONSTANT です。
115     PICA_DATA_TEX_ENV_SRC_RGBA_CONSTANT                     = 0xe,
116     //! GL_PREVIOUS です。
117     PICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUS                     = 0xf
118 };
119 
120 #define PICA_TEX_ENV_SRC_RGB0_SHIFT         0
121 #define PICA_TEX_ENV_SRC_RGB1_SHIFT         4
122 #define PICA_TEX_ENV_SRC_RGB2_SHIFT         8
123 #define PICA_TEX_ENV_SRC_ALPHA0_SHIFT      16
124 #define PICA_TEX_ENV_SRC_ALPHA1_SHIFT      20
125 #define PICA_TEX_ENV_SRC_ALPHA2_SHIFT      24
126 
127 // PICA_REG_TEX_ENV0            0x0c0
128 // PICA_REG_TEX_ENV1            0x0c8
129 // PICA_REG_TEX_ENV2            0x0d0
130 // PICA_REG_TEX_ENV3            0x0d8
131 // PICA_REG_TEX_ENV4            0x0f0
132 // PICA_REG_TEX_ENV5            0x0f8
133 #define PICA_CMD_DATA_TEX_ENV_SRC( srcRgb0, srcRgb1, srcRgb2, \
134                                    srcAlpha0, srcAlpha1, srcAlpha2 ) \
135     ( (srcRgb0)   << PICA_TEX_ENV_SRC_RGB0_SHIFT   | \
136       (srcRgb1)   << PICA_TEX_ENV_SRC_RGB1_SHIFT   | \
137       (srcRgb2)   << PICA_TEX_ENV_SRC_RGB2_SHIFT   | \
138       (srcAlpha0) << PICA_TEX_ENV_SRC_ALPHA0_SHIFT | \
139       (srcAlpha1) << PICA_TEX_ENV_SRC_ALPHA1_SHIFT | \
140       (srcAlpha2) << PICA_TEX_ENV_SRC_ALPHA2_SHIFT )
141 
142 /*
143 struct CommandTexEnvOperand
144 {
145     u32 operandRg0    : 4;
146     u32 operandRg1    : 4;
147     u32 operandRg2    : 4;
148     u32 operandAlpha0 : 3;
149     CMD_PADDING(1);
150     u32 operandAlpha1 : 3;
151     CMD_PADDING(1);
152     u32 operandAlpha2 : 3;
153     CMD_PADDING(9);
154 };
155 */
156 
157 /*!
158     @brief テクスチャコンバイナの operandRgb, operandAlpha を設定します。
159            PICA_REG_TEX_ENV*_OPERAND レジスタで使います。
160            dmp_TexEnv[i].srcRgb, dmp_TexEnv[i].srcAlpha ユニフォームに相当します。
161 */
162 enum PicaDataTexEnvOperand
163 {
164     //! GL_SRC_COLOR です。
165     PICA_DATA_OPE_RGB_SRC_COLOR            = 0x0,
166     //! GL_ONE_MINUS_SRC_COLOR です。
167     PICA_DATA_OPE_RGB_ONE_MINUS_SRC_COLOR  = 0x1,
168     //! GL_SRC_ALPHA です。
169     PICA_DATA_OPE_RGB_SRC_ALPHA            = 0x2,
170     //! GL_ONE_MINUS_SRC_ALPHA です。
171     PICA_DATA_OPE_RGB_ONE_MINUS_SRC_ALPHA  = 0x3,
172     //! GL_SRC_R_DMP です。
173     PICA_DATA_OPE_RGB_SRC_R_DMP            = 0x4,
174     //! GL_ONE_MINUS_SRC_R_DMP です。
175     PICA_DATA_OPE_RGB_ONE_MINUS_SRC_R_DMP  = 0x5,
176     //! GL_SRC_G_DMP です。
177     PICA_DATA_OPE_RGB_SRC_G_DMP            = 0x8,
178     //! GL_ONE_MINUS_SRC_G_DMP です。
179     PICA_DATA_OPE_RGB_ONE_MINUS_SRC_G_DMP  = 0x9,
180     //! GL_SRC_B_DMP です。
181     PICA_DATA_OPE_RGB_SRC_B_DMP            = 0xc,
182     //! GL_ONE_MINUS_SRC_B_DMP です。
183     PICA_DATA_OPE_RGB_ONE_MINUS_SRC_B_DMP  = 0xd,
184     //! GL_SRC_ALPHA です。
185     PICA_DATA_OPE_ALPHA_SRC_ALPHA           = 0x0,
186     //! GL_ONE_MINUS_SRC_ALPHA_DMP です。
187     PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_ALPHA = 0x1,
188     //! GL_SRC_R_DMP です。
189     PICA_DATA_OPE_ALPHA_SRC_R_DMP           = 0x2,
190     //! GL_ONE_MINUS_SRC_R_DMP です。
191     PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_R_DMP = 0x3,
192     //! GL_SRC_G_DMP です。
193     PICA_DATA_OPE_ALPHA_SRC_G_DMP           = 0x4,
194     //! GL_ONE_MINUS_SRC_G_DMP です。
195     PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_G_DMP = 0x5,
196     //! GL_SRC_B_DMP です。
197     PICA_DATA_OPE_ALPHA_SRC_B_DMP           = 0x6,
198     //! GL_ONE_MINUS_SRC_B_DMP です。
199     PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_B_DMP = 0x7
200 };
201 
202 
203 #define PICA_TEX_ENV_OPE_RGB0_SHIFT         0
204 #define PICA_TEX_ENV_OPE_RGB1_SHIFT         4
205 #define PICA_TEX_ENV_OPE_RGB2_SHIFT         8
206 #define PICA_TEX_ENV_OPE_ALPHA0_SHIFT      12
207 #define PICA_TEX_ENV_OPE_ALPHA1_SHIFT      16
208 #define PICA_TEX_ENV_OPE_ALPHA2_SHIFT      20
209 
210 // PICA_REG_TEX_ENV0_OPERAND    0x0c1
211 // PICA_REG_TEX_ENV1_OPERAND    0x0c9
212 // PICA_REG_TEX_ENV2_OPERAND    0x0d1
213 // PICA_REG_TEX_ENV3_OPERAND    0x0d9
214 // PICA_REG_TEX_ENV4_OPERAND    0x0f1
215 // PICA_REG_TEX_ENV5_OPERAND    0x0f9
216 #define PICA_CMD_DATA_TEX_ENV_OPERAND(operandRgb0, operandRgb1, operandRgb2, \
217                                       operandAlpha0, operandAlpha1, operandAlpha2) \
218     ( (operandRgb0)   << PICA_TEX_ENV_OPE_RGB0_SHIFT   | \
219       (operandRgb1)   << PICA_TEX_ENV_OPE_RGB1_SHIFT   | \
220       (operandRgb2)   << PICA_TEX_ENV_OPE_RGB2_SHIFT   | \
221       (operandAlpha0) << PICA_TEX_ENV_OPE_ALPHA0_SHIFT | \
222       (operandAlpha1) << PICA_TEX_ENV_OPE_ALPHA1_SHIFT | \
223       (operandAlpha2) << PICA_TEX_ENV_OPE_ALPHA2_SHIFT )
224 
225 /*
226 struct CommandTexEnvCombine
227 {
228     u32 combineRgb   : 4;
229     CMD_PADDING(12);
230     u32 combineAlpha : 4;
231     CMD_PADDING(12);
232 };
233 */
234 
235 /*!
236     @brief テクスチャコンバイナの combineRgb, combineAlpha を設定します。
237            PICA_REG_TEX_ENV*_COMBINE レジスタで使います。
238            dmp_TexEnv[i].combineRgb, dmp_TexEnv[i].combineAlpha ユニフォームに相当します。
239 */
240 enum PicaDataTexEnvCombine
241 {
242     //! GL_REPLACE です。
243     PICA_DATA_TEX_ENV_COMBINE_REPLACE      = 0x0,
244     //! GL_MODULATE です。
245     PICA_DATA_TEX_ENV_COMBINE_MODULATE     = 0x1,
246     //! GL_ADD です。
247     PICA_DATA_TEX_ENV_COMBINE_ADD          = 0x2,
248     //! GL_ADD_SIGNED です。
249     PICA_DATA_TEX_ENV_COMBINE_ADD_SIGNED   = 0x3,
250     //! GL_INTERPOLATE です。
251     PICA_DATA_TEX_ENV_COMBINE_INTERPOLATE  = 0x4,
252     //! GL_SUBSTRACT です。
253     PICA_DATA_TEX_ENV_COMBINE_SUBTRACT     = 0x5,
254     //! GL_DOT3_RGB です。
255     PICA_DATA_TEX_ENV_COMBINE_DOT3_RGB     = 0x6,
256     //! GL_DOT3_RGBA です。
257     PICA_DATA_TEX_ENV_COMBINE_DOT3_RGBA    = 0x7,
258     //! GL_MULT_ADD_DMP です。
259     PICA_DATA_TEX_ENV_COMBINE_MULT_ADD_DMP = 0x8,
260     //! GL_ADD_MULT_DMP です。
261     PICA_DATA_TEX_ENV_COMBINE_ADD_MULT_DMP = 0x9
262 };
263 
264 // PICA_REG_TEX_ENV0_COMBINE    0x0c2
265 // PICA_REG_TEX_ENV1_COMBINE    0x0ca
266 // PICA_REG_TEX_ENV2_COMBINE    0x0d2
267 // PICA_REG_TEX_ENV3_COMBINE    0x0da
268 // PICA_REG_TEX_ENV4_COMBINE    0x0f2
269 // PICA_REG_TEX_ENV5_COMBINE    0x0fa
270 #define PICA_CMD_DATA_TEX_ENV_COMBINE( combineRgb, combineAlpha ) \
271     ( (combineRgb) | (combineAlpha) << 16 )
272 
273 /*
274 struct CommandTexEnvConst
275 {
276     u32 constRgb1  : 8;
277     u32 constRgb2  : 8;
278     u32 constRgb3  : 8;
279     u32 constRgb4  : 8;
280 };
281 */
282 // PICA_REG_TEX_ENV0_COLOR      0x0c3
283 // PICA_REG_TEX_ENV1_COLOR      0x0cb
284 // PICA_REG_TEX_ENV2_COLOR      0x0d3
285 // PICA_REG_TEX_ENV3_COLOR      0x0db
286 // PICA_REG_TEX_ENV4_COLOR      0x0f3
287 // PICA_REG_TEX_ENV5_COLOR      0x0fb
288 #define PICA_CMD_DATA_TEX_ENV_CONST( constRgb0, constRgb1, constRgb2, constRgb3 ) \
289     ((constRgb0) | (constRgb1) << 8 | (constRgb2) << 16 | (constRgb3) << 24)
290 
291 /*
292 struct CommandTexEnvScale
293 {
294     u32 scaleRgb   : 2;
295     CMD_PADDING(14);
296     u32 scaleAlpha : 2;
297     CMD_PADDING(14);
298 };
299 */
300 
301 /*!
302     @brief テクスチャコンバイナの scaleRgb, scaleAlpha を設定します。
303            PICA_REG_TEX_ENV*_SCALE レジスタで使います。
304            dmp_TexEnv[i].scaleRgb, dmp_TexEnv[i].scaleAlpha ユニフォームに相当します。
305 */
306 enum PicaDataTexEnvScale
307 {
308     //! 1.0 です。
309     PICA_DATA_TEX_ENV_SCALE_1 = 0x0,
310     //! 2.0 です。
311     PICA_DATA_TEX_ENV_SCALE_2 = 0x1,
312     //! 4.0 です。
313     PICA_DATA_TEX_ENV_SCALE_4 = 0x2
314 };
315 
316 // PICA_REG_TEX_ENV0_SCALE      0x0c4
317 // PICA_REG_TEX_ENV1_SCALE      0x0cc
318 // PICA_REG_TEX_ENV2_SCALE      0x0d4
319 // PICA_REG_TEX_ENV3_SCALE      0x0dc
320 // PICA_REG_TEX_ENV4_SCALE      0x0f4
321 // PICA_REG_TEX_ENV5_SCALE      0x0fc
322 #define PICA_CMD_DATA_TEX_ENV_SCALE( scaleRgb, scaleAlpha ) \
323     ( (scaleRgb) | (scaleAlpha) << 16 )
324 
325 #define PICA_CMD_DATA_TEX_ENV_BUFFER_COLOR_WHITE 0xffffffff
326 #define PICA_CMD_DATA_TEX_ENV_BUFFER_COLOR_BLACK 0x00000000
327 
328 // PICA_REG_TEX_ENV_BUF_COLOR    0x0fd
329 #define PICA_CMD_DATA_COLOR( color8 ) \
330     ( (color8.r) | (color8.g) << 8 | (color8.b) << 16 | (color8.a) << 24 )
331 
332 /*
333 struct CommandTexEnvBufInput
334 {
335     CMD_PADDING(8);
336     u32 bufInput1 : 4; // 1 bit in this field
337     CMD_PADDING(4);
338     u32 bufInput2 : 4; // 1 bin in this field
339     CMD_PADDING(12);
340 };
341 */
342 
343 
344 /*!
345     @brief テクスチャコンバイナの bufferInput を設定します。
346            PICA_REG_TEX_ENV_BUF_INPUT ( 0x0e0 ) レジスタで使います。
347            dmp_TexEnv[i].bufferInput ユニフォームに相当します。
348 */
349 enum PicaDataTexEnvBufferInput
350 {
351     //! 前段のコンバイナバッファの出力を参照します。
352     PICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS_BUFFER_DMP = 0x0,
353     //! 前段のコンバイナの出力を参照します。
354     PICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS            = 0x1
355 };
356 
357 // PICA_REG_TEX_ENV_BUF_INPUT    0x0e0
358 // i is index of dmp_TexEnv[i]. The values are 1, 2, 3, 4 only.
359 
360 #define PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(i, bufInput0, bufInput1) \
361     ((bufInput0) << 7+(i) | (bufInput1) << 11+(i))
362 
363 // 0x0e0 [15:8]
364 #define PICA_CMD_SET_TEX_ENV_BUFFER_INPUT(bufInput0_0, bufInput0_1,     \
365                                           bufInput1_0, bufInput1_1,     \
366                                           bufInput2_0, bufInput2_1,     \
367                                           bufInput3_0, bufInput3_1)     \
368   ( PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(1, bufInput0_0, bufInput0_1) |   \
369     PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(2, bufInput1_0, bufInput1_1) |   \
370     PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(3, bufInput2_0, bufInput2_1) |   \
371     PICA_CMD_DATA_TEX_ENV_BUFFER_INPUT(4, bufInput3_0, bufInput3_1) ) , \
372     PICA_CMD_HEADER_SINGLE_BE(PICA_REG_GAS_FOG_MODE, 0x2)
373 
374 ///////////////////////////////////
375 // Shadow Textrue
376 //
377 /*
378 struct CommandTextureShadow
379 {
380     u32 perspectiveShadow : 1;
381     u32 shadowZBias       : 23;
382     u32 shadowZScale      : 8;
383 };
384 */
385 
386 // PICA_REG_TEXTURE0_SHADOW      0x08b
387 #define PICA_CMD_DATA_TEXTURE_SHADOW(perspectiveShadow, shadowZBias, shadowZScale) \
388     (( (perspectiveShadow) ? 0 : 1) | (shadowZBias) << 1 | (shadowZScale) << 24)
389 
390 ///////////////////////////////////
391 // Texture Sampler
392 // Texture Texcoord
393 // Texture Cache Clear
394 /*
395 struct CommandTextureFunc
396 {
397     u32 type0_0 : 1;
398     u32 type1   : 1;
399     u32 type2   : 1;
400     CMD_PADDING(1);   // 0x0
401     CMD_PADDING(4);
402     u32 texcoord3   : 2;
403     u32 type3   : 1;
404     CMD_PADDING(1);
405     CMD_PADDING(1);   // 0x1
406     u32 texcoord2   : 1;
407     CMD_PADDING(2);
408     u32 clear : 1;
409     CMD_PADDING(15);
410 
411 };
412 */
413 
414 //  Texture Sampler
415 
416 /*!
417     @brief テクスチャ 0 のサンプルのタイプを指定します。
418            PICA_REG_TEXTURE_FUNC ( 0x080 [30:28] ) レジスタで使います。
419            dmp_Texture[0].samplerType ユニフォームに相当します。
420 */
421 enum PicaDataTexture0SamplerType
422 {
423     //! GL_TEXTURE_2D です。
424     PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_2D              = 0x0,
425     //! GL_TEXTURE_CUBE_MAP です。
426     PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_CUBE_MAP        = 0x1,
427     //! GL_TEXTURE_SHADOW_2D_DMP です。
428     PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_SHADOW_2D_DMP   = 0x2,
429     //! GL_TEXTURE_PROJECTION_DMP です。
430     PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_PROJECTION_DMP  = 0x3,
431     //! GL_TEXTURE_SHADOW_CUBE_DMP です。
432     PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_SHADOW_CUBE_DMP = 0x4,
433     //! GL_FALSE です。
434     PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSE           = 0x5
435 };
436 
437 /*!
438     @brief テクスチャ 1 のサンプルのタイプを指定します。
439            PICA_REG_TEXTURE_FUNC ( 0x080 [1:1] ) レジスタで使います。
440            dmp_Texture[1].samplerType ユニフォームに相当します。
441 */
442 enum PicaDataTexture1SamplerType
443 {
444     //! GL_FALSE です。
445     PICA_DATA_TEXTURE1_SAMPLER_TYPE_FALSE      = 0x0,
446     //! GL_TEXTUER_2D です。
447     PICA_DATA_TEXTURE1_SAMPLER_TYPE_TEXTURE_2D = 0x1
448 };
449 
450 /*!
451     @brief テクスチャ 2 のサンプルのタイプを指定します。
452            PICA_REG_TEXTURE_FUNC ( 0x080 [2:2] ) レジスタで使います。
453            dmp_Texture[2].samplerType ユニフォームに相当します。
454 */
455 enum PicaDataTexture2SamplerType
456 {
457     //! GL_FALSE です。
458     PICA_DATA_TEXTURE2_SAMPLER_TYPE_FALSE      = 0x0,
459     //! GL_TEXTUER_2D です。
460     PICA_DATA_TEXTURE2_SAMPLER_TYPE_TEXTURE_2D = 0x1
461 };
462 
463 /*!
464     @brief テクスチャ 3 のサンプルのタイプを指定します。
465            PICA_REG_TEXTURE_FUNC ( 0x080 [10:10] ) レジスタで使います。
466            dmp_Texture[3].samplerType ユニフォームに相当します。
467 */
468 enum PicaDataTexture3SamplerType
469 {
470     //! GL_FALSE です。
471     PICA_DATA_TEXTURE3_SAMPLER_TYPE_FALSE                  = 0x0,
472     //! GL_TEXTUER_PROCEDURAL_DMP です。
473     PICA_DATA_TEXTURE3_SAMPLER_TYPE_TEXTURE_PROCEDURAL_DMP = 0x1
474 };
475 
476 
477 /*!
478     @brief テクスチャ 2 のテクスチャ座標を設定します。
479            PICA_REG_TEXTURE_FUNC ( 0x080 [13:13] ) レジスタで使います。
480            dmp_Texture[2].texcoord ユニフォームに相当します。
481 */
482 enum PicaDataTexture2TexCoord
483 {
484     //! GL_TEXTURE1 です。
485     PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE1 = 0x1,
486     //! GL_TEXTURE2 です。
487     PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE2 = 0x0
488 };
489 
490 /*!
491     @brief テクスチャ 3 のテクスチャ座標を設定します。
492            PICA_REG_TEXTURE_FUNC ( 0x080 [9:8] ) レジスタで使います。
493            dmp_Texture[3].texcoord ユニフォームに相当します。
494 */
495 enum PicaDataTexture3TexCoord
496 {
497     //! GL_TEXTURE0 です。
498     PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE0 = 0x0,
499     //! GL_TEXTURE1 です。
500     PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE1 = 0x1,
501     //! GL_TEXTURE2 です。
502     PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE2 = 0x2
503 };
504 
505 // PICA_REG_TEXTURE_FUNC 0x080
506 #define PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \
507                                    texture3Texcoord, texture3SamplerType, \
508                                    texture2Texcoord, clearTextureCache)   \
509     ( ((texture0SamplerType == PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSE) ? 0 : 1)  | \
510       ((texture1SamplerType) ? 1 : 0)     <<  1  | \
511       ((texture2SamplerType) ? 1 : 0)     <<  2  | \
512       0                                   <<  3  | \
513        (texture3Texcoord)                 <<  8  | \
514       ((texture3SamplerType) ? 1 : 0)     << 10  | \
515       1                                   << 12  | \
516       ((texture2Texcoord) ? 1 : 0)        << 13  | \
517       (clearTextureCache)                 << 16  | \
518       0 << 17 )
519 
520 #define PICA_CMD_SET_TEXTURE_FUNC_CLEAR(texture0SamplerType, texture1SamplerType, texture2SamplerType, \
521                                         texture3SamplerType, texture2Texcoord, texture3Texcoord)       \
522     PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType,          \
523                                texture3Texcoord, texture3SamplerType,                                  \
524                                texture2Texcoord, 0x1),                                                 \
525     PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB ),                                           \
526     1 << 16,                                                                                           \
527     PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0x4 )
528 
529 #define PICA_CMD_SET_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \
530                                         texture3SamplerType, texture2Texcoord, texture3Texcoord) \
531     PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType,    \
532                                texture3Texcoord, texture3SamplerType,                            \
533                                texture2Texcoord, 0x0),                                           \
534     PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB )
535 
536 ///////////////////////////////////
537 // Procedural Texture
538 //
539 /*
540 struct CommandProcTex0
541 {
542     u32 ptClampU        : 3;
543     u32 ptClampV        : 4;
544     u32 ptRgbMap        : 4;
545     u32 ptAlphaMap      : 4;
546     u32 ptAlphaSeparate : 1;
547     u32 ptNoiseEnable   : 1;
548     u32 ptShiftU        : 2;
549     u32 ptShiftV        : 2;
550     u32 ptTexBias1       : 8;
551     CMD_PADDING(3);
552 };
553 */
554 
555 /*!
556     @brief プロシージャルテクスチャの手続き計算で使用される関数を設定します。
557            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [9:6] ) レジスタで使います。
558            dmp_Texture[3].ptRgbMap, dmp_Texture[3].ptAlphaMap ユニフォームに相当します。
559 */
560 enum PicaDataProcTexMap
561 {
562     //! GL_PROCTEX_U_DMP です。
563     PICA_DATA_PROCTEX_U_DMP        = 0x0,
564     //! GL_PROCTEX_U2_DMP です。
565     PICA_DATA_PROCTEX_U2_DMP       = 0x1,
566     //! GL_PROCTEX_V_DMP です。
567     PICA_DATA_PROCTEX_V_DMP        = 0x2,
568     //! GL_PROCTEX_V2_DMP です。
569     PICA_DATA_PROCTEX_V2_DMP       = 0x3,
570     //! GL_PROCTEX_ADD_DMP です。
571     PICA_DATA_PROCTEX_ADD_DMP      = 0x4,
572     //! GL_PROCTEX_ADD2_DMP です。
573     PICA_DATA_PROCTEX_ADD2_DMP     = 0x5,
574     //! GL_PROCTEX_ADD2SQRT2_DMP です。
575     PICA_DATA_PROCTEX_ADDSQRT2_DMP = 0x6,
576     //! GL_PROCTEX_MIN_DMP です。
577     PICA_DATA_PROCTEX_MIN_DMP      = 0x7,
578     //! GL_PROCTEX_MAX_DMP です。
579     PICA_DATA_PROCTEX_MAX_DMP      = 0x8,
580     //! GL_PROCTEX_RMAX_DMP です。
581     PICA_DATA_PROCTEX_RMAX_DMP     = 0x9
582 };
583 
584 /*!
585     @brief プロシージャルテクスチャのクランプ方法を設定します。
586            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0], [5:3] ) レジスタで使います。
587            dmp_Texture[3].ptClampU, dmp_Texture[3].ptClampV ユニフォームに相当します。
588 */
589 enum PicaDataProcTexClamp
590 {
591     //! GL_CLAMP_TO_ZERO_DMP です。
592     PICA_DATA_PROCTEX_CLAMP_TO_ZERO_DMP       = 0x0,
593     //! GL_CLAMP_TO_EDGE です。
594     PICA_DATA_PROCTEX_CLAMP_TO_EDGE           = 0x1,
595     //! GL_SYMMETRICAL_REPEAT_DMP です。
596     PICA_DATA_PROCTEX_SYMMETRICAL_REPEAT_DMP  = 0x2,
597     //! GL_MIRRORED_REPEAT です。
598     PICA_DATA_PROCTEX_MIRRORED_REPEAT         = 0x3,
599     //! GL_PULSE_DMP です。
600     PICA_DATA_PROCTEX_PULSE_DMP               = 0x4
601 };
602 
603 /*!
604     @brief プロシージャルテクスチャの座標シフト方法を設定します。
605            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [17:16], [19:18] ) レジスタで使います。
606            dmp_Texture[3].ptShiftU, dmp_Texture[3].ptShiftV ユニフォームに相当します。
607 */
608 enum PicaDataProcTexShift
609 {
610     //! GL_NONE_DMP です。
611     PICA_DATA_PROCTEX_NONE_DMP = 0x0,
612     //! GL_ODD_DMP です。
613     PICA_DATA_PROCTEX_ODD_DMP  = 0x1,
614     //! GL_EVEN_DMP です。
615     PICA_DATA_PROCTEX_EVEN_DMP = 0x2
616 };
617 
618 // PICA_REG_TEXTURE3_PROCTEX0     0x0a8
619 #define PICA_CMD_DATA_PROCTEX0(ptClampU, ptClampV, \
620     ptRgbMap, ptAlphaMap, ptAlphaSeparate,         \
621     ptNoiseEnable, ptShiftU, ptShiftV, ptTexBiasF16Low8) \
622     ( (ptClampU)                         | \
623       (ptClampV)                   <<  3 | \
624       (ptRgbMap)                   <<  6 | \
625       (ptAlphaMap)                 << 10 | \
626       (ptAlphaSeparate ? 1 : 0)    << 14 | \
627       (ptNoiseEnable ? 1 : 0)      << 15 | \
628       (ptShiftU)                   << 16 | \
629       (ptShiftV)                   << 18 | \
630       (ptTexBiasF16Low8)           << 20 )
631 
632 
633 
634 // PICA_REG_TEXTURE3_PROCTEX1    0x0a9
635 #define PICA_CMD_DATA_PROCTEX1(ptNoiseU1, ptNoiseU2) \
636     ( (ptNoiseU1) << 16 | (ptNoiseU2) )
637 
638 // PICA_REG_TEXTURE3_PROCTEX2    0x0aa
639 #define PICA_CMD_DATA_PROCTEX2(ptNoiseV1, ptNoiseV2) \
640     ( (ptNoiseV1) << 16 | (ptNoiseV2) )
641 
642 // PICA_REG_TEXTURE3_PROCTEX3    0x0ab
643 #define PICA_CMD_DATA_PROCTEX3(ptNoiseU0, ptNoiseV0) \
644     ( (ptNoiseU0) | (ptNoiseV0) << 16 )
645 
646 /*
647 struct CommandProcTex4
648 {
649     u32 ptMinFilter  : 3;
650     CMD_PADDING(8);     // 0x60
651     u32 ptTexWidth   : 8;
652     u32 ptTexBias2   : 8;
653     CMD_PADDING(5);
654 };
655 */
656 
657 /*!
658     @brief プロシージャルテクスチャの MinFilter を設定します。
659            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0] ) レジスタで使います。
660            dmp_Texture[3].ptMinFilter ユニフォームに相当します。
661 */
662 enum PicaDataProcTexFilter
663 {
664     //! GL_NEAREST です。
665     PICA_DATA_PROCTEX_NEAREST                = 0x0,
666     //! GL_LINEAR です。
667     PICA_DATA_PROCTEX_LINEAR                 = 0x1,
668     //! GL_NEAREST_MIPMAP_NEAREST です。
669     PICA_DATA_PROCTEX_NEAREST_MIPMAP_NEAREST = 0x2,
670     //! GL_LINEAR_MIPMAP_NEAREST です。
671     PICA_DATA_PROCTEX_LINEAR_MIPMAP_NEAREST  = 0x3,
672     //! GL_NEAREST_MIPMAP_LINEAR です。
673     PICA_DATA_PROCTEX_NEAREST_MIPMAP_LINEAR  = 0x4,
674     //! GL_LINEAR_MIPMAP_LINEAR です。
675     PICA_DATA_PROCTEX_LINEAR_MIPMAP_LINEAR   = 0x5
676 };
677 
678 // PICA_REG_TEXTURE3_PROCTEX4    0x0ac
679 #define PICA_CMD_DATA_PROCTEX4(ptMinFilter, ptTexWidth, ptTexBiasF16Hi8) \
680     ( (ptMinFilter)                 | \
681        0x60                   <<  3 | \
682       (ptTexWidth)            << 11 | \
683       (ptTexBiasF16Hi8) << 19 )
684 
685 /*
686 struct CommandProcTex5
687 {
688     u32 ptTexOffset  : 8;
689     CMD_PADDING(24);   // 0xe0c080
690 };
691 */
692 
693 // PICA_REG_TEXTURE3_PROCTEX5    0x0ad
694 #define PICA_CMD_DATA_PROCTEX5(ptTexOffset) \
695     ( (ptTexOffset) | 0xe0c08000 )
696 
697 ///////////////////////////////////
698 // Procedural texture Reference Table
699 /*
700 struct CommandProTexRefTab
701 {
702     u32 index    : 8;
703     u32 attrib   : 4;
704     CMD_PADDING(20);
705 };
706 */
707 
708 
709 /*!
710     @brief プロシージャルテクスチャの参照テーブルを設定します。
711            PICA_REG_PROCTEX_LUT ( 0x0af [2:0] ) レジスタで使います。
712            dmp_Texture[3].ptSampler ユニフォームに相当します。
713 */
714 enum PicaDataProcTexRefTable
715 {
716     //! ノイズ変調関数参照テーブルです。
717     PICA_DATA_PROCTEX_NOISE_REF_TABLE      = 0x0,
718     //! RGB マッピングの F 関数参照テーブルです。
719     PICA_DATA_PROCTEX_RGB_MAP_REF_TABLE    = 0x2,
720     //! アルファマッピングの F 関数参照テーブルです。
721     PICA_DATA_PROCTEX_ALPHA_MAP_REF_TABLE  = 0x3,
722     //! カラー参照テーブル(カラー値)です。
723     PICA_DATA_PROCTEX_COLOR_REF_TABLE      = 0x4,
724     //! カラー参照テーブル(差分値)です。
725     PICA_DATA_PROCTEX_COLOR_DIFF_REF_TABLE = 0x5
726 };
727 
728 // PICA_REG_PROCTEX_LUT         0x0af
729 #define PICA_CMD_DATA_PROCTEX_LUT(index, refTable) \
730     ((index) | (refTable) << 8)
731 
732 // PICA_REG_PROCTEX_LUT_DATA0  0x0b0
733 // PICA_REG_PROCTEX_LUT_DATA1  0x0b1
734 // PICA_REG_PROCTEX_LUT_DATA2  0x0b2
735 // PICA_REG_PROCTEX_LUT_DATA3  0x0b3
736 // PICA_REG_PROCTEX_LUT_DATA4  0x0b4
737 // PICA_REG_PROCTEX_LUT_DATA5  0x0b5
738 // PICA_REG_PROCTEX_LUT_DATA6  0x0b6
739 // PICA_REG_PROCTEX_LUT_DATA7  0x0b7
740 #define PICA_CMD_DATA_PROCTEX_LUT_DATA(data) (data)
741 
742 ///////////////////////////////////
743 // Texture Resolution
744 /*
745 struct CommandTexSize
746 {
747     u32 height : 16;
748     u32 width  : 16;
749 };
750 */
751 
752 // PICA_REG_TEXTURE0_SIZE        0x082
753 // PICA_REG_TEXTURE1_SIZE        0x092
754 // PICA_REG_TEXTURE2_SIZE        0x09a
755 #define PICA_CMD_DATA_TEXTURE_SIZE( width, height ) \
756     ( (height) | (width) << 16 )
757 
758 ///////////////////////////////////
759 // Texture Format
760 
761 /*!
762     @brief テクスチャフォーマットを設定します。
763            PICA_REG_TEXTURE*_FORMAT ( 0x08e[3:0], 0x096[3:0], 0x09e[3:0] ) レジスタで使います。
764            glTexImage2D() の 引数 format, type や glCompressedTexImage2D() の 引数 internalformat に相当します。
765 */
766 enum PicaDataTextureFormat
767 {
768     //! GL_RGBA, GL_UNSIGNED_BYTE, GL_SHADOW_DMP, GL_UNSIGNED_BYTE, GL_GAS_DMP, GL_UNSIGNED_SHORT です。
769     PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_BYTE                    = 0x0,
770     //! GL_RGB, GL_UNSIGNED_BYTE です。
771     PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_BYTE                     = 0x1,
772     //! GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1 です。
773     PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_5_5_5_1           = 0x2,
774     //! GL_RGB, GL_UNSIGNED_SHORT_5_6_5 です。
775     PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_SHORT_5_6_5              = 0x3,
776     //! GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4 です。
777     PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_4_4_4_4           = 0x4,
778     //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE です。
779     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE         = 0x5,
780     //! GL_HILO8_DMP, GL_UNSIGNED_BYTE です。
781     PICA_DATA_TEXTURE_FORMAT_HILO8_DMP_UNSIGNED_BYTE               = 0x6,
782     //! GL_LUMINANCE, GL_UNSIGNED_BYTE です。
783     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_BYTE               = 0x7,
784     //! GL_ALPHA, GL_UNSIGNED_BYTE です。
785     PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_BYTE                   = 0x8,
786     //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE_4_4_DMP です。
787     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE_4_4_DMP = 0x9,
788     //! GL_LUMINANCE, GL_UNSIGNED_4BITS_DMP です。
789     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_4BITS_DMP          = 0xa,
790     //! GL_ALPHA, GL_UNSIGNED_4BITS_DMP です。
791     PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_4BITS_DMP              = 0xb,
792     //! GL_ETC1_RGB8_NATIVE_DMP です。
793     PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP                  = 0xc,
794     //! GL_ETC1_ALPHA_RGB8_A4_NATIVE_DMP です。
795     PICA_DATA_TEXTURE_FORMAT_ETC1_ALPHA_RGB8_A4_NATIVE_DMP         = 0xd
796 };
797 
798 // PICA_REG_TEXTURE0_FORMAT      0x08e
799 // PICA_REG_TEXTURE1_FORMAT      0x096
800 // PICA_REG_TEXTURE2_FORMAT      0x09e
801 #define PICA_CMD_DATA_TEXTURE_FORMAT_TYPE( type ) (type)
802 
803 ///////////////////////////////////
804 // Texture Wrap Mode
805 // Texture Wrap Filter
806 // Texture Sampler
807 // Texture Format
808 // Texture Shadow Enable
809 /*
810 struct CommandTex0WrapFilter
811 {
812     CMD_PADDING(1);
813     u32 magFilter  : 1;
814     u32 minFilter1 : 1;
815     CMD_PADDING(1);
816     u32 isETC1    : 2;
817     CMD_PADDING(2);
818     u32 wrapT     : 3;
819     CMD_PADDING(1);
820     u32 wrapS     : 3;
821     CMD_PADDING(1);
822     CMD_PADDING(2);       // set to 0 [17:16]
823     CMD_PADDING(2);
824     u32 enable    : 1;
825     CMD_PADDING(3);
826     u32 minFilter2 : 1;
827     CMD_PADDING(3);
828     u32 type1_1 : 3;
829     CMD_PADDING(1);
830 };
831 */
832 
833 
834 /*!
835     @brief テクスチャの MAG フィルタのモードを設定します。
836            PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[1:1], 0x93[1:1], 0x9b[1:1]) レジスタで使います。
837            glTexParameter{if}( TEXTURE_MAG_FILTER, ...)に相当します。
838 */
839 enum PicaDataTextureMagFilter
840 {
841     //! GL_NEAREST です。
842     PICA_DATA_TEXTURE_MAG_FILTER_NEAREST                = 0x0,
843     //! GL_LINEAR です。
844     PICA_DATA_TEXTURE_MAG_FILTER_LINEAR                 = 0x1
845 };
846 
847 
848 /*!
849     @brief テクスチャの MIN フィルタのモードを設定します。
850            PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[24:24, 2:2], 0x93[24:24, 2:2], 0x9b[24:24, 2:2) レジスタで使います。
851            glTexParameter{if}( TEXTURE_MIN_FILTER, ...)に相当します。
852 */
853 enum PicaDataTextureMinFilter
854 {
855     //! GL_NEAREST です。
856     PICA_DATA_TEXTURE_MIN_FILTER_NEAREST                = 0x0,
857     //! GL_XXX_MIPMAP_NEAREST です。
858     PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_NEAREST = 0x1,
859     //! GL_XXX_MIPMAP_LINEAR です。
860     PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR  = 0x2,
861     //! GL_LINEAR です。
862     PICA_DATA_TEXTURE_MIN_FILTER_LINEAR                 = 0x3,
863     //! GL_XXX_MIPMAP_NEAREST です。
864     PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST  = 0x4,
865     //! GL_XXX_MIPMAP_LINEAR です。
866     PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR   = 0x5
867 };
868 
869 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER0(texture0MinFilter) \
870     ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR ) ||                \
871         ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST ) || \
872         ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR  ) )  \
873         ? 1 : 0 )
874 
875 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER1(texture0MinFilter) \
876     ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR ) || \
877         ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR  ) )  \
878         ? 1 : 0 )
879 
880 /*!
881     @brief テクスチャの WRAP モードを設定します。
882            PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[14:12, 10:8], 0x93[14:12, 10:8], 0x9b[14:12, 10:8]) レジスタで使います。
883            glTexParameter{if}( TEXTURE_WRAP_*, ...)に相当します。
884 */
885 enum PicaDataTextureWrap
886 {
887     //! GL_CLAMP_TO_EDGE です。
888     PICA_DATA_TEXTURE_WRAP_CLAMP_TO_EDGE   = 0,
889     //! GL_CLAMP_TO_BORDER です。
890     PICA_DATA_TEXTURE_WRAP_CLAMP_TO_BORDER = 1,
891     //! GL_REPEAT です。
892     PICA_DATA_TEXTURE_WRAP_REPEAT          = 2,
893     //! GL_MIRRORED_REPEAT です。
894     PICA_DATA_TEXTURE_WRAP_MIRRORED_REPEAT = 3
895 };
896 
897 
898 #define PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \
899     textureFormat, textureWrapT, textureWrapS, \
900     useShadowTexture, textureSamplerType )     \
901     (  (textureMagFilter)                                                         <<  1 | \
902        PICA_CMD_DATA_TEXTURE_MIN_FILTER0(textureMinFilter)                        <<  2 | \
903       ((textureFormat == PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP) ? 2 : 0 ) <<  4 | \
904        (textureWrapT)                                                             <<  8 | \
905        (textureWrapS)                                                             << 12 | \
906        0                                                                          << 16 | \
907        (useShadowTexture)                                                         << 20 | \
908        PICA_CMD_DATA_TEXTURE_MIN_FILTER1(textureMinFilter)                        << 24 | \
909        (textureSamplerType) << 28 )
910 
911 #define PICA_CMD_DATA_TEXTURE0_WRAP_FILTER( textureMagFilter, textureMinFilter,        \
912                                             textureFormat, textureWrapT, textureWrapS, \
913                                             useShadowTexture, textureSamplerType )     \
914     PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter,             \
915                                        textureFormat, textureWrapT, textureWrapS,      \
916                                        useShadowTexture, textureSamplerType )
917 
918 #define PICA_CMD_DATA_TEXTURE1_WRAP_FILTER( textureMagFilter, textureMinFilter,    \
919                                         textureFormat, textureWrapT, textureWrapS) \
920     PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter,         \
921                                        textureFormat, textureWrapT, textureWrapS,  \
922                                        0x0, 0x0)
923 
924 #define PICA_CMD_DATA_TEXTURE2_WRAP_FILTER( textureMagFilter, textureMinFilter,     \
925                                         textureFormat, textureWrapT, textureWrapS ) \
926     PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter,          \
927                                        textureFormat, textureWrapT, textureWrapS,   \
928                                        0x0, 0x0)
929 
930 /*
931 struct CommandTex12WrapFilter
932 {
933     CMD_PADDING(1);
934     u32 magFilter  : 1;
935     u32 minFilter1 : 1;
936     CMD_PADDING(1);
937     u32 isETC1    : 2;
938     CMD_PADDING(2);
939     u32 wrapT     : 3;
940     CMD_PADDING(1);
941     u32 wrapS     : 3;
942     CMD_PADDING(2); // set to 0[17:16]
943     CMD_PADDING(7);
944     u32 minFilter2 : 1;
945     CMD_PADDING(7);
946 };
947 */
948 
949 ///////////////////////////////////
950 // Texture LOD Level
951 // Texture LOD Bias
952 /*
953 struct CommandTexLODLev
954 {
955     u32 bias : 12;
956     u32 max : 4;
957     CMD_PADDING(4);
958     u32 min : 4;
959     CMD_PADDING(4);
960 };
961 */
962 
963 // PICA_REG_TEXTURE0_LOD         0x084
964 // PICA_REG_TEXTURE1_LOD         0x094
965 // PICA_REG_TEXTURE2_LOD         0x09c
966 #define PICA_CMD_DATA_TEXTURE_LOD_LEVEL(lodBias, maxLodLevel, minLodLevel) \
967     (  (lodBias)                              | \
968        (maxLodLevel)                    << 16 | \
969       (((minLodLevel) < 0) ? 0 : (minLodLevel)) << 24 )
970 
971 ///////////////////////////////////
972 // Texture Border Color
973 
974 // PICA_REG_TEXTURE0_BORDER_COLOR  0x081
975 // PICA_REG_TEXTURE1_BORDER_COLOR  0x091
976 // PICA_REG_TEXTURE2_BORDER_COLOR  0x099
977 #define PICA_CMD_DATA_BORDER_COLOR( color8 ) \
978     ( (color8.r)       | \
979       (color8.g) <<  8 | \
980       (color8.b) << 16 | \
981       (color8.a) << 24 )
982 
983 /*!
984   @}
985 */
986 
987 #endif  // NN_GX_CTR_PICA_MACRO_TEXTURE_H_
988