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