p_shader_tokens.h revision 06f217d80f3d1318da4974bf7b31ea7edcf5eb0b
1/**************************************************************************
2 *
3 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4 * Copyright 2009-2010 VMware, Inc.
5 * All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sub license, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject to
13 * the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the
16 * next paragraph) shall be included in all copies or substantial portions
17 * of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
23 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 *
27 **************************************************************************/
28
29#ifndef P_SHADER_TOKENS_H
30#define P_SHADER_TOKENS_H
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36
37struct tgsi_header
38{
39   unsigned HeaderSize : 8;
40   unsigned BodySize   : 24;
41};
42
43#define TGSI_PROCESSOR_FRAGMENT  0
44#define TGSI_PROCESSOR_VERTEX    1
45#define TGSI_PROCESSOR_GEOMETRY  2
46
47struct tgsi_processor
48{
49   unsigned Processor  : 4;  /* TGSI_PROCESSOR_ */
50   unsigned Padding    : 28;
51};
52
53#define TGSI_TOKEN_TYPE_DECLARATION    0
54#define TGSI_TOKEN_TYPE_IMMEDIATE      1
55#define TGSI_TOKEN_TYPE_INSTRUCTION    2
56#define TGSI_TOKEN_TYPE_PROPERTY       3
57
58struct tgsi_token
59{
60   unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_x */
61   unsigned NrTokens   : 8;  /**< UINT */
62   unsigned Padding    : 20;
63};
64
65enum tgsi_file_type {
66   TGSI_FILE_NULL                =0,
67   TGSI_FILE_CONSTANT            =1,
68   TGSI_FILE_INPUT               =2,
69   TGSI_FILE_OUTPUT              =3,
70   TGSI_FILE_TEMPORARY           =4,
71   TGSI_FILE_SAMPLER             =5,
72   TGSI_FILE_ADDRESS             =6,
73   TGSI_FILE_IMMEDIATE           =7,
74   TGSI_FILE_PREDICATE           =8,
75   TGSI_FILE_SYSTEM_VALUE        =9,
76   TGSI_FILE_IMMEDIATE_ARRAY     =10,
77   TGSI_FILE_TEMPORARY_ARRAY     =11,
78   TGSI_FILE_RESOURCE            =12,
79   TGSI_FILE_COUNT      /**< how many TGSI_FILE_ types */
80};
81
82
83#define TGSI_WRITEMASK_NONE     0x00
84#define TGSI_WRITEMASK_X        0x01
85#define TGSI_WRITEMASK_Y        0x02
86#define TGSI_WRITEMASK_XY       0x03
87#define TGSI_WRITEMASK_Z        0x04
88#define TGSI_WRITEMASK_XZ       0x05
89#define TGSI_WRITEMASK_YZ       0x06
90#define TGSI_WRITEMASK_XYZ      0x07
91#define TGSI_WRITEMASK_W        0x08
92#define TGSI_WRITEMASK_XW       0x09
93#define TGSI_WRITEMASK_YW       0x0A
94#define TGSI_WRITEMASK_XYW      0x0B
95#define TGSI_WRITEMASK_ZW       0x0C
96#define TGSI_WRITEMASK_XZW      0x0D
97#define TGSI_WRITEMASK_YZW      0x0E
98#define TGSI_WRITEMASK_XYZW     0x0F
99
100#define TGSI_INTERPOLATE_CONSTANT      0
101#define TGSI_INTERPOLATE_LINEAR        1
102#define TGSI_INTERPOLATE_PERSPECTIVE   2
103#define TGSI_INTERPOLATE_COUNT         3
104
105#define TGSI_CYLINDRICAL_WRAP_X (1 << 0)
106#define TGSI_CYLINDRICAL_WRAP_Y (1 << 1)
107#define TGSI_CYLINDRICAL_WRAP_Z (1 << 2)
108#define TGSI_CYLINDRICAL_WRAP_W (1 << 3)
109
110struct tgsi_declaration
111{
112   unsigned Type        : 4;  /**< TGSI_TOKEN_TYPE_DECLARATION */
113   unsigned NrTokens    : 8;  /**< UINT */
114   unsigned File        : 4;  /**< one of TGSI_FILE_x */
115   unsigned UsageMask   : 4;  /**< bitmask of TGSI_WRITEMASK_x flags */
116   unsigned Interpolate : 4;  /**< one of TGSI_INTERPOLATE_x */
117   unsigned Dimension   : 1;  /**< any extra dimension info? */
118   unsigned Semantic    : 1;  /**< BOOL, any semantic info? */
119   unsigned Centroid    : 1;  /**< centroid sampling? */
120   unsigned Invariant   : 1;  /**< invariant optimization? */
121   unsigned CylindricalWrap:4;   /**< TGSI_CYLINDRICAL_WRAP_x flags */
122};
123
124struct tgsi_declaration_range
125{
126   unsigned First   : 16; /**< UINT */
127   unsigned Last    : 16; /**< UINT */
128};
129
130struct tgsi_declaration_dimension
131{
132   unsigned Index2D:16; /**< UINT */
133   unsigned Padding:16;
134};
135
136#define TGSI_SEMANTIC_POSITION   0
137#define TGSI_SEMANTIC_COLOR      1
138#define TGSI_SEMANTIC_BCOLOR     2  /**< back-face color */
139#define TGSI_SEMANTIC_FOG        3
140#define TGSI_SEMANTIC_PSIZE      4
141#define TGSI_SEMANTIC_GENERIC    5
142#define TGSI_SEMANTIC_NORMAL     6
143#define TGSI_SEMANTIC_FACE       7
144#define TGSI_SEMANTIC_EDGEFLAG   8
145#define TGSI_SEMANTIC_PRIMID     9
146#define TGSI_SEMANTIC_INSTANCEID 10
147#define TGSI_SEMANTIC_VERTEXID   11
148#define TGSI_SEMANTIC_STENCIL    12
149#define TGSI_SEMANTIC_COUNT      13 /**< number of semantic values */
150
151struct tgsi_declaration_semantic
152{
153   unsigned Name           : 8;  /**< one of TGSI_SEMANTIC_x */
154   unsigned Index          : 16; /**< UINT */
155   unsigned Padding        : 8;
156};
157
158struct tgsi_declaration_resource {
159   unsigned Resource    : 8; /**< one of TGSI_TEXTURE_ */
160   unsigned ReturnTypeX : 6; /**< one of enum pipe_type */
161   unsigned ReturnTypeY : 6; /**< one of enum pipe_type */
162   unsigned ReturnTypeZ : 6; /**< one of enum pipe_type */
163   unsigned ReturnTypeW : 6; /**< one of enum pipe_type */
164};
165
166#define TGSI_IMM_FLOAT32   0
167#define TGSI_IMM_UINT32    1
168#define TGSI_IMM_INT32     2
169
170struct tgsi_immediate
171{
172   unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_IMMEDIATE */
173   unsigned NrTokens   : 14; /**< UINT */
174   unsigned DataType   : 4;  /**< one of TGSI_IMM_x */
175   unsigned Padding    : 10;
176};
177
178union tgsi_immediate_data
179{
180   float Float;
181   unsigned Uint;
182   int Int;
183};
184
185#define TGSI_PROPERTY_GS_INPUT_PRIM          0
186#define TGSI_PROPERTY_GS_OUTPUT_PRIM         1
187#define TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES 2
188#define TGSI_PROPERTY_FS_COORD_ORIGIN        3
189#define TGSI_PROPERTY_FS_COORD_PIXEL_CENTER  4
190#define TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS 5
191#define TGSI_PROPERTY_FS_DEPTH_LAYOUT        6
192#define TGSI_PROPERTY_COUNT                  7
193
194struct tgsi_property {
195   unsigned Type         : 4;  /**< TGSI_TOKEN_TYPE_PROPERTY */
196   unsigned NrTokens     : 8;  /**< UINT */
197   unsigned PropertyName : 8;  /**< one of TGSI_PROPERTY */
198   unsigned Padding      : 12;
199};
200
201#define TGSI_FS_COORD_ORIGIN_UPPER_LEFT 0
202#define TGSI_FS_COORD_ORIGIN_LOWER_LEFT 1
203
204#define TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER 0
205#define TGSI_FS_COORD_PIXEL_CENTER_INTEGER 1
206
207#define TGSI_FS_DEPTH_LAYOUT_NONE         0
208#define TGSI_FS_DEPTH_LAYOUT_ANY          1
209#define TGSI_FS_DEPTH_LAYOUT_GREATER      2
210#define TGSI_FS_DEPTH_LAYOUT_LESS         3
211#define TGSI_FS_DEPTH_LAYOUT_UNCHANGED    4
212
213
214struct tgsi_property_data {
215   unsigned Data;
216};
217
218/* TGSI opcodes.
219 *
220 * For more information on semantics of opcodes and
221 * which APIs are known to use which opcodes, see
222 * gallium/docs/source/tgsi.rst
223 */
224#define TGSI_OPCODE_ARL                 0
225#define TGSI_OPCODE_MOV                 1
226#define TGSI_OPCODE_LIT                 2
227#define TGSI_OPCODE_RCP                 3
228#define TGSI_OPCODE_RSQ                 4
229#define TGSI_OPCODE_EXP                 5
230#define TGSI_OPCODE_LOG                 6
231#define TGSI_OPCODE_MUL                 7
232#define TGSI_OPCODE_ADD                 8
233#define TGSI_OPCODE_DP3                 9
234#define TGSI_OPCODE_DP4                 10
235#define TGSI_OPCODE_DST                 11
236#define TGSI_OPCODE_MIN                 12
237#define TGSI_OPCODE_MAX                 13
238#define TGSI_OPCODE_SLT                 14
239#define TGSI_OPCODE_SGE                 15
240#define TGSI_OPCODE_MAD                 16
241#define TGSI_OPCODE_SUB                 17
242#define TGSI_OPCODE_LRP                 18
243#define TGSI_OPCODE_CND                 19
244                                /* gap */
245#define TGSI_OPCODE_DP2A                21
246                                /* gap */
247#define TGSI_OPCODE_FRC                 24
248#define TGSI_OPCODE_CLAMP               25
249#define TGSI_OPCODE_FLR                 26
250#define TGSI_OPCODE_ROUND               27
251#define TGSI_OPCODE_EX2                 28
252#define TGSI_OPCODE_LG2                 29
253#define TGSI_OPCODE_POW                 30
254#define TGSI_OPCODE_XPD                 31
255                                /* gap */
256#define TGSI_OPCODE_ABS                 33
257#define TGSI_OPCODE_RCC                 34
258#define TGSI_OPCODE_DPH                 35
259#define TGSI_OPCODE_COS                 36
260#define TGSI_OPCODE_DDX                 37
261#define TGSI_OPCODE_DDY                 38
262#define TGSI_OPCODE_KILP                39  /* predicated kill */
263#define TGSI_OPCODE_PK2H                40
264#define TGSI_OPCODE_PK2US               41
265#define TGSI_OPCODE_PK4B                42
266#define TGSI_OPCODE_PK4UB               43
267#define TGSI_OPCODE_RFL                 44
268#define TGSI_OPCODE_SEQ                 45
269#define TGSI_OPCODE_SFL                 46
270#define TGSI_OPCODE_SGT                 47
271#define TGSI_OPCODE_SIN                 48
272#define TGSI_OPCODE_SLE                 49
273#define TGSI_OPCODE_SNE                 50
274#define TGSI_OPCODE_STR                 51
275#define TGSI_OPCODE_TEX                 52
276#define TGSI_OPCODE_TXD                 53
277#define TGSI_OPCODE_TXP                 54
278#define TGSI_OPCODE_UP2H                55
279#define TGSI_OPCODE_UP2US               56
280#define TGSI_OPCODE_UP4B                57
281#define TGSI_OPCODE_UP4UB               58
282#define TGSI_OPCODE_X2D                 59
283#define TGSI_OPCODE_ARA                 60
284#define TGSI_OPCODE_ARR                 61
285#define TGSI_OPCODE_BRA                 62
286#define TGSI_OPCODE_CAL                 63
287#define TGSI_OPCODE_RET                 64
288#define TGSI_OPCODE_SSG                 65 /* SGN */
289#define TGSI_OPCODE_CMP                 66
290#define TGSI_OPCODE_SCS                 67
291#define TGSI_OPCODE_TXB                 68
292#define TGSI_OPCODE_NRM                 69
293#define TGSI_OPCODE_DIV                 70
294#define TGSI_OPCODE_DP2                 71
295#define TGSI_OPCODE_TXL                 72
296#define TGSI_OPCODE_BRK                 73
297#define TGSI_OPCODE_IF                  74
298                                /* gap */
299#define TGSI_OPCODE_ELSE                77
300#define TGSI_OPCODE_ENDIF               78
301                                /* gap */
302#define TGSI_OPCODE_PUSHA               81
303#define TGSI_OPCODE_POPA                82
304#define TGSI_OPCODE_CEIL                83
305#define TGSI_OPCODE_I2F                 84
306#define TGSI_OPCODE_NOT                 85
307#define TGSI_OPCODE_TRUNC               86
308#define TGSI_OPCODE_SHL                 87
309                                /* gap */
310#define TGSI_OPCODE_AND                 89
311#define TGSI_OPCODE_OR                  90
312#define TGSI_OPCODE_MOD                 91
313#define TGSI_OPCODE_XOR                 92
314#define TGSI_OPCODE_SAD                 93
315#define TGSI_OPCODE_TXF                 94
316#define TGSI_OPCODE_TXQ                 95
317#define TGSI_OPCODE_CONT                96
318#define TGSI_OPCODE_EMIT                97
319#define TGSI_OPCODE_ENDPRIM             98
320#define TGSI_OPCODE_BGNLOOP             99
321#define TGSI_OPCODE_BGNSUB              100
322#define TGSI_OPCODE_ENDLOOP             101
323#define TGSI_OPCODE_ENDSUB              102
324                                /* gap */
325#define TGSI_OPCODE_NOP                 107
326                                /* gap */
327#define TGSI_OPCODE_NRM4                112
328#define TGSI_OPCODE_CALLNZ              113
329#define TGSI_OPCODE_IFC                 114
330#define TGSI_OPCODE_BREAKC              115
331#define TGSI_OPCODE_KIL                 116  /* conditional kill */
332#define TGSI_OPCODE_END                 117  /* aka HALT */
333                                /* gap */
334#define TGSI_OPCODE_F2I                 119
335#define TGSI_OPCODE_IDIV                120
336#define TGSI_OPCODE_IMAX                121
337#define TGSI_OPCODE_IMIN                122
338#define TGSI_OPCODE_INEG                123
339#define TGSI_OPCODE_ISGE                124
340#define TGSI_OPCODE_ISHR                125
341#define TGSI_OPCODE_ISLT                126
342#define TGSI_OPCODE_F2U                 127
343#define TGSI_OPCODE_U2F                 128
344#define TGSI_OPCODE_UADD                129
345#define TGSI_OPCODE_UDIV                130
346#define TGSI_OPCODE_UMAD                131
347#define TGSI_OPCODE_UMAX                132
348#define TGSI_OPCODE_UMIN                133
349#define TGSI_OPCODE_UMOD                134
350#define TGSI_OPCODE_UMUL                135
351#define TGSI_OPCODE_USEQ                136
352#define TGSI_OPCODE_USGE                137
353#define TGSI_OPCODE_USHR                138
354#define TGSI_OPCODE_USLT                139
355#define TGSI_OPCODE_USNE                140
356#define TGSI_OPCODE_SWITCH              141
357#define TGSI_OPCODE_CASE                142
358#define TGSI_OPCODE_DEFAULT             143
359#define TGSI_OPCODE_ENDSWITCH           144
360
361/* resource related opcodes */
362#define TGSI_OPCODE_LOAD                145
363#define TGSI_OPCODE_LOAD_MS             146
364#define TGSI_OPCODE_SAMPLE              147
365#define TGSI_OPCODE_SAMPLE_B            148
366#define TGSI_OPCODE_SAMPLE_C            149
367#define TGSI_OPCODE_SAMPLE_C_LZ         150
368#define TGSI_OPCODE_SAMPLE_D            151
369#define TGSI_OPCODE_SAMPLE_L            152
370#define TGSI_OPCODE_GATHER4             153
371#define TGSI_OPCODE_RESINFO             154
372#define TGSI_OPCODE_SAMPLE_POS          155
373#define TGSI_OPCODE_SAMPLE_INFO         156
374
375#define TGSI_OPCODE_UARL                157
376#define TGSI_OPCODE_UCMP                158
377
378#define TGSI_OPCODE_LAST                159
379
380#define TGSI_SAT_NONE            0  /* do not saturate */
381#define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */
382#define TGSI_SAT_MINUS_PLUS_ONE  2  /* clamp to [-1,1] */
383
384/**
385 * Opcode is the operation code to execute. A given operation defines the
386 * semantics how the source registers (if any) are interpreted and what is
387 * written to the destination registers (if any) as a result of execution.
388 *
389 * NumDstRegs and NumSrcRegs is the number of destination and source registers,
390 * respectively. For a given operation code, those numbers are fixed and are
391 * present here only for convenience.
392 *
393 * If Predicate is TRUE, tgsi_instruction_predicate token immediately follows.
394 *
395 * Saturate controls how are final results in destination registers modified.
396 */
397
398struct tgsi_instruction
399{
400   unsigned Type       : 4;  /* TGSI_TOKEN_TYPE_INSTRUCTION */
401   unsigned NrTokens   : 8;  /* UINT */
402   unsigned Opcode     : 8;  /* TGSI_OPCODE_ */
403   unsigned Saturate   : 2;  /* TGSI_SAT_ */
404   unsigned NumDstRegs : 2;  /* UINT */
405   unsigned NumSrcRegs : 4;  /* UINT */
406   unsigned Predicate  : 1;  /* BOOL */
407   unsigned Label      : 1;
408   unsigned Texture    : 1;
409   unsigned Padding    : 1;
410};
411
412/*
413 * If tgsi_instruction::Label is TRUE, tgsi_instruction_label follows.
414 *
415 * If tgsi_instruction::Texture is TRUE, tgsi_instruction_texture follows.
416 *   if texture instruction has a number of offsets,
417 *   then tgsi_instruction::Texture::NumOffset of tgsi_texture_offset follow.
418 *
419 * Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow.
420 *
421 * Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow.
422 *
423 * tgsi_instruction::NrTokens contains the total number of words that make the
424 * instruction, including the instruction word.
425 */
426
427#define TGSI_SWIZZLE_X      0
428#define TGSI_SWIZZLE_Y      1
429#define TGSI_SWIZZLE_Z      2
430#define TGSI_SWIZZLE_W      3
431
432struct tgsi_instruction_label
433{
434   unsigned Label    : 24;   /* UINT */
435   unsigned Padding  : 8;
436};
437
438#define TGSI_TEXTURE_UNKNOWN        0
439#define TGSI_TEXTURE_1D             1
440#define TGSI_TEXTURE_2D             2
441#define TGSI_TEXTURE_3D             3
442#define TGSI_TEXTURE_CUBE           4
443#define TGSI_TEXTURE_RECT           5
444#define TGSI_TEXTURE_SHADOW1D       6
445#define TGSI_TEXTURE_SHADOW2D       7
446#define TGSI_TEXTURE_SHADOWRECT     8
447#define TGSI_TEXTURE_1D_ARRAY       9
448#define TGSI_TEXTURE_2D_ARRAY       10
449#define TGSI_TEXTURE_SHADOW1D_ARRAY 11
450#define TGSI_TEXTURE_SHADOW2D_ARRAY 12
451#define TGSI_TEXTURE_COUNT          13
452
453struct tgsi_instruction_texture
454{
455   unsigned Texture  : 8;    /* TGSI_TEXTURE_ */
456   unsigned NumOffsets : 4;
457   unsigned Padding : 20;
458};
459
460/* for texture offsets in GLSL and DirectX.
461 * Generally these always come from TGSI_FILE_IMMEDIATE,
462 * however DX11 appears to have the capability to do
463 * non-constant texture offsets.
464 */
465struct tgsi_texture_offset
466{
467   int      Index    : 16;
468   unsigned File     : 4;  /**< one of TGSI_FILE_x */
469   unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
470   unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
471   unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
472   unsigned Padding  : 6;
473};
474
475/*
476 * For SM3, the following constraint applies.
477 *   - Swizzle is either set to identity or replicate.
478 */
479struct tgsi_instruction_predicate
480{
481   int      Index    : 16; /* SINT */
482   unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
483   unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
484   unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
485   unsigned SwizzleW : 2;  /* TGSI_SWIZZLE_x */
486   unsigned Negate   : 1;  /* BOOL */
487   unsigned Padding  : 7;
488};
489
490/**
491 * File specifies the register array to access.
492 *
493 * Index specifies the element number of a register in the register file.
494 *
495 * If Indirect is TRUE, Index should be offset by the X component of a source
496 * register that follows. The register can be now fetched into local storage
497 * for further processing.
498 *
499 * If Negate is TRUE, all components of the fetched register are negated.
500 *
501 * The fetched register components are swizzled according to SwizzleX, SwizzleY,
502 * SwizzleZ and SwizzleW.
503 *
504 */
505
506struct tgsi_src_register
507{
508   unsigned File        : 4;  /* TGSI_FILE_ */
509   unsigned Indirect    : 1;  /* BOOL */
510   unsigned Dimension   : 1;  /* BOOL */
511   int      Index       : 16; /* SINT */
512   unsigned SwizzleX    : 2;  /* TGSI_SWIZZLE_ */
513   unsigned SwizzleY    : 2;  /* TGSI_SWIZZLE_ */
514   unsigned SwizzleZ    : 2;  /* TGSI_SWIZZLE_ */
515   unsigned SwizzleW    : 2;  /* TGSI_SWIZZLE_ */
516   unsigned Absolute    : 1;    /* BOOL */
517   unsigned Negate      : 1;    /* BOOL */
518};
519
520/**
521 * If tgsi_src_register::Modifier is TRUE, tgsi_src_register_modifier follows.
522 *
523 * Then, if tgsi_src_register::Indirect is TRUE, another tgsi_src_register
524 * follows.
525 *
526 * Then, if tgsi_src_register::Dimension is TRUE, tgsi_dimension follows.
527 */
528
529
530struct tgsi_dimension
531{
532   unsigned Indirect    : 1;  /* BOOL */
533   unsigned Dimension   : 1;  /* BOOL */
534   unsigned Padding     : 14;
535   int      Index       : 16; /* SINT */
536};
537
538struct tgsi_dst_register
539{
540   unsigned File        : 4;  /* TGSI_FILE_ */
541   unsigned WriteMask   : 4;  /* TGSI_WRITEMASK_ */
542   unsigned Indirect    : 1;  /* BOOL */
543   unsigned Dimension   : 1;  /* BOOL */
544   int      Index       : 16; /* SINT */
545   unsigned Padding     : 6;
546};
547
548
549#ifdef __cplusplus
550}
551#endif
552
553#endif /* P_SHADER_TOKENS_H */
554