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: 33699 $
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     //! GL_FALSE です。
436     PICA_DATA_TEXTURE0_SAMPLER_TYPE_FALSE                   = 0x5
437 };
438 
439 /*!
440     @brief テクスチャ 1 のサンプルのタイプを指定します。
441            PICA_REG_TEXTURE_FUNC ( 0x080 [1:1] ) レジスタで使います。
442            dmp_Texture[1].samplerType ユニフォームに相当します。
443 */
444 enum PicaDataTexture1SamplerType
445 {
446     //! GL_FALSE です。
447     PICA_DATA_TEXTURE1_SAMPLER_TYPE_FALSE      = 0x0,
448     //! GL_TEXTUER_2D です。
449     PICA_DATA_TEXTURE1_SAMPLER_TYPE_TEXTURE_2D = 0x1
450 };
451 
452 /*!
453     @brief テクスチャ 2 のサンプルのタイプを指定します。
454            PICA_REG_TEXTURE_FUNC ( 0x080 [2:2] ) レジスタで使います。
455            dmp_Texture[2].samplerType ユニフォームに相当します。
456 */
457 enum PicaDataTexture2SamplerType
458 {
459     //! GL_FALSE です。
460     PICA_DATA_TEXTURE2_SAMPLER_TYPE_FALSE      = 0x0,
461     //! GL_TEXTUER_2D です。
462     PICA_DATA_TEXTURE2_SAMPLER_TYPE_TEXTURE_2D = 0x1
463 };
464 
465 /*!
466     @brief テクスチャ 3 のサンプルのタイプを指定します。
467            PICA_REG_TEXTURE_FUNC ( 0x080 [10:10] ) レジスタで使います。
468            dmp_Texture[3].samplerType ユニフォームに相当します。
469 */
470 enum PicaDataTexture3SamplerType
471 {
472     //! GL_FALSE です。
473     PICA_DATA_TEXTURE3_SAMPLER_TYPE_FALSE                  = 0x0,
474     //! GL_TEXTUER_PROCEDURAL_DMP です。
475     PICA_DATA_TEXTURE3_SAMPLER_TYPE_TEXTURE_PROCEDURAL_DMP = 0x1
476 };
477 
478 
479 /*!
480     @brief テクスチャ 2 のテクスチャ座標を設定します。
481            PICA_REG_TEXTURE_FUNC ( 0x080 [13:13] ) レジスタで使います。
482            dmp_Texture[2].texcoord ユニフォームに相当します。
483 */
484 enum PicaDataTexture2TexCoord
485 {
486     //! GL_TEXTURE1 です。
487     PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE1 = 0x1,
488     //! GL_TEXTURE2 です。
489     PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE2 = 0x0
490 };
491 
492 /*!
493     @brief テクスチャ 3 のテクスチャ座標を設定します。
494            PICA_REG_TEXTURE_FUNC ( 0x080 [9:8] ) レジスタで使います。
495            dmp_Texture[3].texcoord ユニフォームに相当します。
496 */
497 enum PicaDataTexture3TexCoord
498 {
499     //! GL_TEXTURE0 です。
500     PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE0 = 0x0,
501     //! GL_TEXTURE1 です。
502     PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE1 = 0x1,
503     //! GL_TEXTURE2 です。
504     PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE2 = 0x2
505 };
506 
507 // PICA_REG_TEXTURE_FUNC 0x080
508 #define PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \
509                                    texture3Texcoord, texture3SamplerType, \
510                                    texture2Texcoord, clearTextureCache)   \
511     ( ((texture0SamplerType == PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSE) ? 0 : 1)  | \
512       ((texture1SamplerType) ? 1 : 0)     <<  1  | \
513       ((texture2SamplerType) ? 1 : 0)     <<  2  | \
514       0                                   <<  3  | \
515        (texture3Texcoord)                 <<  8  | \
516       ((texture3SamplerType) ? 1 : 0)     << 10  | \
517       1                                   << 12  | \
518       ((texture2Texcoord) ? 1 : 0)        << 13  | \
519       (clearTextureCache)                 << 16  | \
520       0 << 17 )
521 
522 #define PICA_CMD_SET_TEXTURE_FUNC_CLEAR(texture0SamplerType, texture1SamplerType, texture2SamplerType, \
523                                         texture3SamplerType, texture2Texcoord, texture3Texcoord)       \
524     PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType,          \
525                                texture3Texcoord, texture3SamplerType,                                  \
526                                texture2Texcoord, 0x1),                                                 \
527     PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB ),                                           \
528     1 << 16,                                                                                           \
529     PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0x4 )
530 
531 #define PICA_CMD_SET_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType, \
532                                         texture3SamplerType, texture2Texcoord, texture3Texcoord) \
533     PICA_CMD_DATA_TEXTURE_FUNC(texture0SamplerType, texture1SamplerType, texture2SamplerType,    \
534                                texture3Texcoord, texture3SamplerType,                            \
535                                texture2Texcoord, 0x0),                                           \
536     PICA_CMD_HEADER_SINGLE_BE( PICA_REG_TEXTURE_FUNC, 0xB )
537 
538 ///////////////////////////////////
539 // Procedural Texture
540 //
541 /*
542 struct CommandProcTex0
543 {
544     u32 ptClampU        : 3;
545     u32 ptClampV        : 4;
546     u32 ptRgbMap        : 4;
547     u32 ptAlphaMap      : 4;
548     u32 ptAlphaSeparate : 1;
549     u32 ptNoiseEnable   : 1;
550     u32 ptShiftU        : 2;
551     u32 ptShiftV        : 2;
552     u32 ptTexBias1       : 8;
553     CMD_PADDING(3);
554 };
555 */
556 
557 /*!
558     @brief プロシージャルテクスチャの手続き計算で使用される関数を設定します。
559            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [9:6] ) レジスタで使います。
560            dmp_Texture[3].ptRgbMap, dmp_Texture[3].ptAlphaMap ユニフォームに相当します。
561 */
562 enum PicaDataProcTexMap
563 {
564     //! GL_PROCTEX_U_DMP です。
565     PICA_DATA_PROCTEX_U_DMP        = 0x0,
566     //! GL_PROCTEX_U2_DMP です。
567     PICA_DATA_PROCTEX_U2_DMP       = 0x1,
568     //! GL_PROCTEX_V_DMP です。
569     PICA_DATA_PROCTEX_V_DMP        = 0x2,
570     //! GL_PROCTEX_V2_DMP です。
571     PICA_DATA_PROCTEX_V2_DMP       = 0x3,
572     //! GL_PROCTEX_ADD_DMP です。
573     PICA_DATA_PROCTEX_ADD_DMP      = 0x4,
574     //! GL_PROCTEX_ADD2_DMP です。
575     PICA_DATA_PROCTEX_ADD2_DMP     = 0x5,
576     //! GL_PROCTEX_ADD2SQRT2_DMP です。
577     PICA_DATA_PROCTEX_ADDSQRT2_DMP = 0x6,
578     //! GL_PROCTEX_MIN_DMP です。
579     PICA_DATA_PROCTEX_MIN_DMP      = 0x7,
580     //! GL_PROCTEX_MAX_DMP です。
581     PICA_DATA_PROCTEX_MAX_DMP      = 0x8,
582     //! GL_PROCTEX_RMAX_DMP です。
583     PICA_DATA_PROCTEX_RMAX_DMP     = 0x9
584 };
585 
586 /*!
587     @brief プロシージャルテクスチャのクランプ方法を設定します。
588            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0], [5:3] ) レジスタで使います。
589            dmp_Texture[3].ptClampU, dmp_Texture[3].ptClampV ユニフォームに相当します。
590 */
591 enum PicaDataProcTexClamp
592 {
593     //! GL_CLAMP_TO_ZERO_DMP です。
594     PICA_DATA_PROCTEX_CLAMP_TO_ZERO_DMP       = 0x0,
595     //! GL_CLAMP_TO_EDGE です。
596     PICA_DATA_PROCTEX_CLAMP_TO_EDGE           = 0x1,
597     //! GL_SYMMETRICAL_REPEAT_DMP です。
598     PICA_DATA_PROCTEX_SYMMETRICAL_REPEAT_DMP  = 0x2,
599     //! GL_MIRRORED_REPEAT です。
600     PICA_DATA_PROCTEX_MIRRORED_REPEAT         = 0x3,
601     //! GL_PULSE_DMP です。
602     PICA_DATA_PROCTEX_PULSE_DMP               = 0x4
603 };
604 
605 /*!
606     @brief プロシージャルテクスチャの座標シフト方法を設定します。
607            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [17:16], [19:18] ) レジスタで使います。
608            dmp_Texture[3].ptShiftU, dmp_Texture[3].ptShiftV ユニフォームに相当します。
609 */
610 enum PicaDataProcTexShift
611 {
612     //! GL_NONE_DMP です。
613     PICA_DATA_PROCTEX_NONE_DMP = 0x0,
614     //! GL_ODD_DMP です。
615     PICA_DATA_PROCTEX_ODD_DMP  = 0x1,
616     //! GL_EVEN_DMP です。
617     PICA_DATA_PROCTEX_EVEN_DMP = 0x2
618 };
619 
620 // PICA_REG_TEXTURE3_PROCTEX0     0x0a8
621 #define PICA_CMD_DATA_PROCTEX0(ptClampU, ptClampV, \
622     ptRgbMap, ptAlphaMap, ptAlphaSeparate,         \
623     ptNoiseEnable, ptShiftU, ptShiftV, ptTexBiasF16Low8) \
624     ( (ptClampU)                         | \
625       (ptClampV)                   <<  3 | \
626       (ptRgbMap)                   <<  6 | \
627       (ptAlphaMap)                 << 10 | \
628       (ptAlphaSeparate ? 1 : 0)    << 14 | \
629       (ptNoiseEnable ? 1 : 0)      << 15 | \
630       (ptShiftU)                   << 16 | \
631       (ptShiftV)                   << 18 | \
632       (ptTexBiasF16Low8)           << 20 )
633 
634 
635 
636 // PICA_REG_TEXTURE3_PROCTEX1    0x0a9
637 #define PICA_CMD_DATA_PROCTEX1(ptNoiseU1, ptNoiseU2) \
638     ( (ptNoiseU1) << 16 | (ptNoiseU2) )
639 
640 // PICA_REG_TEXTURE3_PROCTEX2    0x0aa
641 #define PICA_CMD_DATA_PROCTEX2(ptNoiseV1, ptNoiseV2) \
642     ( (ptNoiseV1) << 16 | (ptNoiseV2) )
643 
644 // PICA_REG_TEXTURE3_PROCTEX3    0x0ab
645 #define PICA_CMD_DATA_PROCTEX3(ptNoiseU0, ptNoiseV0) \
646     ( (ptNoiseU0) | (ptNoiseV0) << 16 )
647 
648 /*
649 struct CommandProcTex4
650 {
651     u32 ptMinFilter  : 3;
652     CMD_PADDING(8);     // 0x60
653     u32 ptTexWidth   : 8;
654     u32 ptTexBias2   : 8;
655     CMD_PADDING(5);
656 };
657 */
658 
659 /*!
660     @brief プロシージャルテクスチャの MinFilter を設定します。
661            PICA_REG_TEXTURE3_PROCTEX0 ( 0x0a8 [2:0] ) レジスタで使います。
662            dmp_Texture[3].ptMinFilter ユニフォームに相当します。
663 */
664 enum PicaDataProcTexFilter
665 {
666     //! GL_NEAREST です。
667     PICA_DATA_PROCTEX_NEAREST                = 0x0,
668     //! GL_LINEAR です。
669     PICA_DATA_PROCTEX_LINEAR                 = 0x1,
670     //! GL_NEAREST_MIPMAP_NEAREST です。
671     PICA_DATA_PROCTEX_NEAREST_MIPMAP_NEAREST = 0x2,
672     //! GL_LINEAR_MIPMAP_NEAREST です。
673     PICA_DATA_PROCTEX_LINEAR_MIPMAP_NEAREST  = 0x3,
674     //! GL_NEAREST_MIPMAP_LINEAR です。
675     PICA_DATA_PROCTEX_NEAREST_MIPMAP_LINEAR  = 0x4,
676     //! GL_LINEAR_MIPMAP_LINEAR です。
677     PICA_DATA_PROCTEX_LINEAR_MIPMAP_LINEAR   = 0x5
678 };
679 
680 // PICA_REG_TEXTURE3_PROCTEX4    0x0ac
681 #define PICA_CMD_DATA_PROCTEX4(ptMinFilter, ptTexWidth, ptTexBiasF16Hi8) \
682     ( (ptMinFilter)                 | \
683        0x60                   <<  3 | \
684       (ptTexWidth)            << 11 | \
685       (ptTexBiasF16Hi8) << 19 )
686 
687 /*
688 struct CommandProcTex5
689 {
690     u32 ptTexOffset  : 8;
691     CMD_PADDING(24);   // 0xe0c080
692 };
693 */
694 
695 // PICA_REG_TEXTURE3_PROCTEX5    0x0ad
696 #define PICA_CMD_DATA_PROCTEX5(ptTexOffset) \
697     ( (ptTexOffset) | 0xe0c08000 )
698 
699 ///////////////////////////////////
700 // Procedural texture Reference Table
701 /*
702 struct CommandProTexRefTab
703 {
704     u32 index    : 8;
705     u32 attrib   : 4;
706     CMD_PADDING(20);
707 };
708 */
709 
710 
711 /*!
712     @brief プロシージャルテクスチャの参照テーブルを設定します。
713            PICA_REG_PROCTEX_LUT ( 0x0af [2:0] ) レジスタで使います。
714            dmp_Texture[3].ptSampler ユニフォームに相当します。
715 */
716 enum PicaDataProcTexRefTable
717 {
718     //! ノイズ変調関数参照テーブルです。
719     PICA_DATA_PROCTEX_NOISE_REF_TABLE      = 0x0,
720     //! RGB マッピングの F 関数参照テーブルです。
721     PICA_DATA_PROCTEX_RGB_MAP_REF_TABLE    = 0x2,
722     //! アルファマッピングの F 関数参照テーブルです。
723     PICA_DATA_PROCTEX_ALPHA_MAP_REF_TABLE  = 0x3,
724     //! カラー参照テーブル(カラー値)です。
725     PICA_DATA_PROCTEX_COLOR_REF_TABLE      = 0x4,
726     //! カラー参照テーブル(差分値)です。
727     PICA_DATA_PROCTEX_COLOR_DIFF_REF_TABLE = 0x5
728 };
729 
730 // PICA_REG_PROCTEX_LUT         0x0af
731 #define PICA_CMD_DATA_PROCTEX_LUT(index, refTable) \
732     ((index) | (refTable) << 8)
733 
734 // PICA_REG_PROCTEX_LUT_DATA0  0x0b0
735 // PICA_REG_PROCTEX_LUT_DATA1  0x0b1
736 // PICA_REG_PROCTEX_LUT_DATA2  0x0b2
737 // PICA_REG_PROCTEX_LUT_DATA3  0x0b3
738 // PICA_REG_PROCTEX_LUT_DATA4  0x0b4
739 // PICA_REG_PROCTEX_LUT_DATA5  0x0b5
740 // PICA_REG_PROCTEX_LUT_DATA6  0x0b6
741 // PICA_REG_PROCTEX_LUT_DATA7  0x0b7
742 #define PICA_CMD_DATA_PROCTEX_LUT_DATA(data) (data)
743 
744 ///////////////////////////////////
745 // Texture Resolution
746 /*
747 struct CommandTexSize
748 {
749     u32 height : 16;
750     u32 width  : 16;
751 };
752 */
753 
754 // PICA_REG_TEXTURE0_SIZE        0x082
755 // PICA_REG_TEXTURE1_SIZE        0x092
756 // PICA_REG_TEXTURE2_SIZE        0x09a
757 #define PICA_CMD_DATA_TEXTURE_SIZE( width, height ) \
758     ( (height) | (width) << 16 )
759 
760 ///////////////////////////////////
761 // Texture Format
762 
763 /*!
764     @brief テクスチャフォーマットを設定します。
765            PICA_REG_TEXTURE*_FORMAT ( 0x08e[3:0], 0x096[3:0], 0x09e[3:0] ) レジスタで使います。
766            glTexImage2D() の 引数 format, type や glCompressedTexImage2D() の 引数 internalformat に相当します。
767 */
768 enum PicaDataTextureFormat
769 {
770     //! GL_RGBA, GL_UNSIGNED_BYTE, GL_SHADOW_DMP, GL_UNSIGNED_BYTE, GL_GAS_DMP, GL_UNSIGNED_SHORT です。
771     PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_BYTE                    = 0x0,
772     //! GL_RGB, GL_UNSIGNED_BYTE です。
773     PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_BYTE                     = 0x1,
774     //! GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1 です。
775     PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_5_5_5_1           = 0x2,
776     //! GL_RGB, GL_UNSIGNED_SHORT_5_6_5 です。
777     PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_SHORT_5_6_5              = 0x3,
778     //! GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4 です。
779     PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_4_4_4_4           = 0x4,
780     //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE です。
781     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE         = 0x5,
782     //! GL_HILO8_DMP, GL_UNSIGNED_BYTE です。
783     PICA_DATA_TEXTURE_FORMAT_HILO8_DMP_UNSIGNED_BYTE               = 0x6,
784     //! GL_LUMINANCE, GL_UNSIGNED_BYTE です。
785     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_BYTE               = 0x7,
786     //! GL_ALPHA, GL_UNSIGNED_BYTE です。
787     PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_BYTE                   = 0x8,
788     //! GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE_4_4_DMP です。
789     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE_4_4_DMP = 0x9,
790     //! GL_LUMINANCE, GL_UNSIGNED_4BITS_DMP です。
791     PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_4BITS_DMP          = 0xa,
792     //! GL_ALPHA, GL_UNSIGNED_4BITS_DMP です。
793     PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_4BITS_DMP              = 0xb,
794     //! GL_ETC1_RGB8_NATIVE_DMP です。
795     PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP                  = 0xc,
796     //! GL_ETC1_ALPHA_RGB8_A4_NATIVE_DMP です。
797     PICA_DATA_TEXTURE_FORMAT_ETC1_ALPHA_RGB8_A4_NATIVE_DMP         = 0xd
798 };
799 
800 // PICA_REG_TEXTURE0_FORMAT      0x08e
801 // PICA_REG_TEXTURE1_FORMAT      0x096
802 // PICA_REG_TEXTURE2_FORMAT      0x09e
803 #define PICA_CMD_DATA_TEXTURE_FORMAT_TYPE( type ) (type)
804 
805 ///////////////////////////////////
806 // Texture Wrap Mode
807 // Texture Wrap Filter
808 // Texture Sampler
809 // Texture Format
810 // Texture Shadow Enable
811 /*
812 struct CommandTex0WrapFilter
813 {
814     CMD_PADDING(1);
815     u32 magFilter  : 1;
816     u32 minFilter1 : 1;
817     CMD_PADDING(1);
818     u32 isETC1    : 2;
819     CMD_PADDING(2);
820     u32 wrapT     : 3;
821     CMD_PADDING(1);
822     u32 wrapS     : 3;
823     CMD_PADDING(1);
824     CMD_PADDING(2);       // set to 0 [17:16]
825     CMD_PADDING(2);
826     u32 enable    : 1;
827     CMD_PADDING(3);
828     u32 minFilter2 : 1;
829     CMD_PADDING(3);
830     u32 type1_1 : 3;
831     CMD_PADDING(1);
832 };
833 */
834 
835 
836 /*!
837     @brief テクスチャの MAG フィルタのモードを設定します。
838            PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[1:1], 0x93[1:1], 0x9b[1:1]) レジスタで使います。
839            glTexParameter{if}( TEXTURE_MAG_FILTER, ...)に相当します。
840 */
841 enum PicaDataTextureMagFilter
842 {
843     //! GL_NEAREST です。
844     PICA_DATA_TEXTURE_MAG_FILTER_NEAREST                = 0x0,
845     //! GL_LINEAR です。
846     PICA_DATA_TEXTURE_MAG_FILTER_LINEAR                 = 0x1
847 };
848 
849 
850 /*!
851     @brief テクスチャの MIN フィルタのモードを設定します。
852            PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[24:24, 2:2], 0x93[24:24, 2:2], 0x9b[24:24, 2:2) レジスタで使います。
853            glTexParameter{if}( TEXTURE_MIN_FILTER, ...)に相当します。
854 */
855 enum PicaDataTextureMinFilter
856 {
857     //! GL_NEAREST です。
858     PICA_DATA_TEXTURE_MIN_FILTER_NEAREST                = 0x0,
859     //! GL_XXX_MIPMAP_NEAREST です。
860     PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_NEAREST = 0x1,
861     //! GL_XXX_MIPMAP_LINEAR です。
862     PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR  = 0x2,
863     //! GL_LINEAR です。
864     PICA_DATA_TEXTURE_MIN_FILTER_LINEAR                 = 0x3,
865     //! GL_XXX_MIPMAP_NEAREST です。
866     PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST  = 0x4,
867     //! GL_XXX_MIPMAP_LINEAR です。
868     PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR   = 0x5
869 };
870 
871 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER0(texture0MinFilter) \
872     ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR ) ||                \
873         ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST ) || \
874         ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR  ) )  \
875         ? 1 : 0 )
876 
877 #define PICA_CMD_DATA_TEXTURE_MIN_FILTER1(texture0MinFilter) \
878     ( ( ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR ) || \
879         ( (texture0MinFilter) == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR  ) )  \
880         ? 1 : 0 )
881 
882 /*!
883     @brief テクスチャの WRAP モードを設定します。
884            PICA_REG_TEXTURE*_WRAP_FILTER ( 0x83[14:12, 10:8], 0x93[14:12, 10:8], 0x9b[14:12, 10:8]) レジスタで使います。
885            glTexParameter{if}( TEXTURE_WRAP_*, ...)に相当します。
886 */
887 enum PicaDataTextureWrap
888 {
889     //! GL_CLAMP_TO_EDGE です。
890     PICA_DATA_TEXTURE_WRAP_CLAMP_TO_EDGE   = 0,
891     //! GL_CLAMP_TO_BORDER です。
892     PICA_DATA_TEXTURE_WRAP_CLAMP_TO_BORDER = 1,
893     //! GL_REPEAT です。
894     PICA_DATA_TEXTURE_WRAP_REPEAT          = 2,
895     //! GL_MIRRORED_REPEAT です。
896     PICA_DATA_TEXTURE_WRAP_MIRRORED_REPEAT = 3
897 };
898 
899 
900 #define PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter, \
901     textureFormat, textureWrapT, textureWrapS, \
902     useShadowTexture, textureSamplerType )     \
903     (  (textureMagFilter)                                                         <<  1 | \
904        PICA_CMD_DATA_TEXTURE_MIN_FILTER0(textureMinFilter)                        <<  2 | \
905       ((textureFormat == PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP) ? 2 : 0 ) <<  4 | \
906        (textureWrapT)                                                             <<  8 | \
907        (textureWrapS)                                                             << 12 | \
908        0                                                                          << 16 | \
909        (useShadowTexture)                                                         << 20 | \
910        PICA_CMD_DATA_TEXTURE_MIN_FILTER1(textureMinFilter)                        << 24 | \
911        (textureSamplerType) << 28 )
912 
913 #define PICA_CMD_DATA_TEXTURE0_WRAP_FILTER( textureMagFilter, textureMinFilter,        \
914                                             textureFormat, textureWrapT, textureWrapS, \
915                                             useShadowTexture, textureSamplerType )     \
916     PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter,             \
917                                        textureFormat, textureWrapT, textureWrapS,      \
918                                        useShadowTexture, textureSamplerType )
919 
920 #define PICA_CMD_DATA_TEXTURE1_WRAP_FILTER( textureMagFilter, textureMinFilter,    \
921                                         textureFormat, textureWrapT, textureWrapS) \
922     PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter,         \
923                                        textureFormat, textureWrapT, textureWrapS,  \
924                                        0x0, 0x0)
925 
926 #define PICA_CMD_DATA_TEXTURE2_WRAP_FILTER( textureMagFilter, textureMinFilter,     \
927                                         textureFormat, textureWrapT, textureWrapS ) \
928     PICA_CMD_DATA_TEXTURE_WRAP_FILTER( textureMagFilter, textureMinFilter,          \
929                                        textureFormat, textureWrapT, textureWrapS,   \
930                                        0x0, 0x0)
931 
932 /*
933 struct CommandTex12WrapFilter
934 {
935     CMD_PADDING(1);
936     u32 magFilter  : 1;
937     u32 minFilter1 : 1;
938     CMD_PADDING(1);
939     u32 isETC1    : 2;
940     CMD_PADDING(2);
941     u32 wrapT     : 3;
942     CMD_PADDING(1);
943     u32 wrapS     : 3;
944     CMD_PADDING(2); // set to 0[17:16]
945     CMD_PADDING(7);
946     u32 minFilter2 : 1;
947     CMD_PADDING(7);
948 };
949 */
950 
951 ///////////////////////////////////
952 // Texture LOD Level
953 // Texture LOD Bias
954 /*
955 struct CommandTexLODLev
956 {
957     u32 bias : 12;
958     u32 max : 4;
959     CMD_PADDING(4);
960     u32 min : 4;
961     CMD_PADDING(4);
962 };
963 */
964 
965 // PICA_REG_TEXTURE0_LOD         0x084
966 // PICA_REG_TEXTURE1_LOD         0x094
967 // PICA_REG_TEXTURE2_LOD         0x09c
968 #define PICA_CMD_DATA_TEXTURE_LOD_LEVEL(lodBias, maxLodLevel, minLodLevel) \
969     (  (lodBias)                              | \
970        (maxLodLevel)                    << 16 | \
971       (((minLodLevel) < 0) ? 0 : (minLodLevel)) << 24 )
972 
973 ///////////////////////////////////
974 // Texture Border Color
975 
976 // PICA_REG_TEXTURE0_BORDER_COLOR  0x081
977 // PICA_REG_TEXTURE1_BORDER_COLOR  0x091
978 // PICA_REG_TEXTURE2_BORDER_COLOR  0x099
979 #define PICA_CMD_DATA_BORDER_COLOR( color8 ) \
980     ( (color8.r)       | \
981       (color8.g) <<  8 | \
982       (color8.b) << 16 | \
983       (color8.a) << 24 )
984 
985 /*!
986   @}
987 */
988 
989 #endif  // NN_GX_CTR_PICA_MACRO_TEXTURE_H_
990