1984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**************************************************************************
2984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca *
3984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
46f6d740c851aa8bedc7c51dbd5db14de338787f1Michal Krol * Copyright 2009-2010 VMware, Inc.
5984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * All Rights Reserved.
6984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca *
7984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
8984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * copy of this software and associated documentation files (the
9984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * "Software"), to deal in the Software without restriction, including
10984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * without limitation the rights to use, copy, modify, merge, publish,
11984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * distribute, sub license, and/or sell copies of the Software, and to
12984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * permit persons to whom the Software is furnished to do so, subject to
13984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * the following conditions:
14984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca *
15984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * The above copyright notice and this permission notice (including the
16984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * next paragraph) shall be included in all copies or substantial portions
17984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * of the Software.
18984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca *
19984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
23984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca *
27984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca **************************************************************************/
28984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca
290a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol#ifndef P_SHADER_TOKENS_H
300a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol#define P_SHADER_TOKENS_H
31abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
3294c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#ifdef __cplusplus
33abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolextern "C" {
3494c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#endif
35abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
36abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
37abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_header
38abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
39abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned HeaderSize : 8;
40abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned BodySize   : 24;
41abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
42abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
43abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_FRAGMENT  0
44abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_VERTEX    1
45abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_GEOMETRY  2
4663428372cadc73a7124f4e7d383eb86a0c7affd7Francisco Jerez#define TGSI_PROCESSOR_COMPUTE   3
47abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
48abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_processor
49abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
50abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Processor  : 4;  /* TGSI_PROCESSOR_ */
51abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Padding    : 28;
52abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
53abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
54abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_DECLARATION    0
55abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_IMMEDIATE      1
56abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_INSTRUCTION    2
573ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin#define TGSI_TOKEN_TYPE_PROPERTY       3
58abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
59abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_token
60abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
61868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_x */
62bf3930453cb85977510863e5cfba8487e09c093eMichal Krol   unsigned NrTokens   : 8;  /**< UINT */
63ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding    : 20;
64abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
65abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
66e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusinenum tgsi_file_type {
672b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_NULL                =0,
682b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_CONSTANT            =1,
692b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_INPUT               =2,
702b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_OUTPUT              =3,
712b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_TEMPORARY           =4,
722b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_SAMPLER             =5,
732b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_ADDRESS             =6,
742b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_IMMEDIATE           =7,
752b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_PREDICATE           =8,
762b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_SYSTEM_VALUE        =9,
772b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   TGSI_FILE_IMMEDIATE_ARRAY     =10,
78101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin   TGSI_FILE_TEMPORARY_ARRAY     =11,
79bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin   TGSI_FILE_RESOURCE            =12,
80a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez   TGSI_FILE_SAMPLER_VIEW        =13,
81e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin   TGSI_FILE_COUNT      /**< how many TGSI_FILE_ types */
82e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin};
8335ca45daba3906ac94fb879d2374d476ba2dac47Brian
84abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
85abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_NONE     0x00
86abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_X        0x01
87abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_Y        0x02
88abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XY       0x03
89abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_Z        0x04
90abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XZ       0x05
91abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YZ       0x06
92abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYZ      0x07
93abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_W        0x08
94abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XW       0x09
95abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YW       0x0A
96abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYW      0x0B
97abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_ZW       0x0C
98abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XZW      0x0D
99abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YZW      0x0E
100abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYZW     0x0F
101abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
1024e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_CONSTANT      0
1034e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_LINEAR        1
1044e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_PERSPECTIVE   2
10567e3cbf1632e361220234013147331e4618b70cbDave Airlie#define TGSI_INTERPOLATE_COLOR         3 /* special color case for smooth/flat */
10667e3cbf1632e361220234013147331e4618b70cbDave Airlie#define TGSI_INTERPOLATE_COUNT         4
1074e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol
1086f6d740c851aa8bedc7c51dbd5db14de338787f1Michal Krol#define TGSI_CYLINDRICAL_WRAP_X (1 << 0)
1096f6d740c851aa8bedc7c51dbd5db14de338787f1Michal Krol#define TGSI_CYLINDRICAL_WRAP_Y (1 << 1)
1106f6d740c851aa8bedc7c51dbd5db14de338787f1Michal Krol#define TGSI_CYLINDRICAL_WRAP_Z (1 << 2)
1116f6d740c851aa8bedc7c51dbd5db14de338787f1Michal Krol#define TGSI_CYLINDRICAL_WRAP_W (1 << 3)
1126f6d740c851aa8bedc7c51dbd5db14de338787f1Michal Krol
113abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration
114abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
115868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Type        : 4;  /**< TGSI_TOKEN_TYPE_DECLARATION */
116bf3930453cb85977510863e5cfba8487e09c093eMichal Krol   unsigned NrTokens    : 8;  /**< UINT */
117868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned File        : 4;  /**< one of TGSI_FILE_x */
118868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned UsageMask   : 4;  /**< bitmask of TGSI_WRITEMASK_x flags */
1190adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol   unsigned Dimension   : 1;  /**< any extra dimension info? */
120868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Semantic    : 1;  /**< BOOL, any semantic info? */
1211279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez   unsigned Interpolate : 1;  /**< any interpolation info? */
122868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Invariant   : 1;  /**< invariant optimization? */
1232644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez   unsigned Local       : 1;  /**< optimize as subroutine local variable? */
1242644952bd4dfa3b75112dee8dfd287a12d770705Francisco Jerez   unsigned Padding     : 7;
125abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
126abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
127abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration_range
128abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
129868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned First   : 16; /**< UINT */
130868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Last    : 16; /**< UINT */
131abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
132abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
1330adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krolstruct tgsi_declaration_dimension
1340adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol{
1350adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol   unsigned Index2D:16; /**< UINT */
1360adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol   unsigned Padding:16;
1371279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez};
1381279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez
1391279923d72942ee201fcc6ad40d552143f651f03Francisco Jerezstruct tgsi_declaration_interp
1401279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez{
1411279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez   unsigned Interpolate : 4;   /**< one of TGSI_INTERPOLATE_x */
1421279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez   unsigned Centroid    : 1;   /**< centroid sampling? */
1431279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez   unsigned CylindricalWrap:4; /**< TGSI_CYLINDRICAL_WRAP_x flags */
1441279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez   unsigned Padding     : 23;
1450adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol};
1460adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol
1479b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_POSITION   0
1489b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_COLOR      1
1499b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_BCOLOR     2  /**< back-face color */
1509b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_FOG        3
1519b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_PSIZE      4
1529b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_GENERIC    5
1539b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_NORMAL     6
1549b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_FACE       7
1559b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_EDGEFLAG   8
1569b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_PRIMID     9
1579b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_INSTANCEID 10
158e7ccd703a28e14431b90f29540cec0bf67be1e0fChristoph Bumiller#define TGSI_SEMANTIC_VERTEXID   11
159e7ccd703a28e14431b90f29540cec0bf67be1e0fChristoph Bumiller#define TGSI_SEMANTIC_STENCIL    12
1606951870e5790a4b563bfa3b943ed338f9c5922acBryan Cain#define TGSI_SEMANTIC_CLIPDIST   13
1619cea86f501eab1f72a148280c12286244cd26acfDave Airlie#define TGSI_SEMANTIC_CLIPVERTEX 14
162581ddbcf93ea8111e71ef43e90fa6937cf46a2cbFrancisco Jerez#define TGSI_SEMANTIC_GRID_SIZE  15 /**< grid size in blocks */
163581ddbcf93ea8111e71ef43e90fa6937cf46a2cbFrancisco Jerez#define TGSI_SEMANTIC_BLOCK_ID   16 /**< id of the current block */
164581ddbcf93ea8111e71ef43e90fa6937cf46a2cbFrancisco Jerez#define TGSI_SEMANTIC_BLOCK_SIZE 17 /**< block size in threads */
165581ddbcf93ea8111e71ef43e90fa6937cf46a2cbFrancisco Jerez#define TGSI_SEMANTIC_THREAD_ID  18 /**< block-relative id of the current thread */
166581ddbcf93ea8111e71ef43e90fa6937cf46a2cbFrancisco Jerez#define TGSI_SEMANTIC_COUNT      19 /**< number of semantic values */
167abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
168abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration_semantic
169abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
170763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell   unsigned Name           : 8;  /**< one of TGSI_SEMANTIC_x */
171763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell   unsigned Index          : 16; /**< UINT */
172abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Padding        : 8;
173abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
174abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
175bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusinstruct tgsi_declaration_resource {
176bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin   unsigned Resource    : 8; /**< one of TGSI_TEXTURE_ */
17782c90b2da8e236bc134cb2bd0ec4e09551b12164Francisco Jerez   unsigned Raw         : 1;
178b8e808f1ef9462af8545999df514fddbbff34345Francisco Jerez   unsigned Writable    : 1;
179b8e808f1ef9462af8545999df514fddbbff34345Francisco Jerez   unsigned Padding     : 22;
180a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez};
181a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez
182a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerezstruct tgsi_declaration_sampler_view {
183a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez   unsigned Resource    : 8; /**< one of TGSI_TEXTURE_ */
184bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin   unsigned ReturnTypeX : 6; /**< one of enum pipe_type */
185bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin   unsigned ReturnTypeY : 6; /**< one of enum pipe_type */
186bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin   unsigned ReturnTypeZ : 6; /**< one of enum pipe_type */
187bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin   unsigned ReturnTypeW : 6; /**< one of enum pipe_type */
188bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin};
189bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin
190d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez/*
191d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * Special resources that don't need to be declared.  They map to the
192d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez * GLOBAL/LOCAL/PRIVATE/INPUT compute memory spaces.
193d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez */
194d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez#define TGSI_RESOURCE_GLOBAL	0x7fff
195d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez#define TGSI_RESOURCE_LOCAL	0x7ffe
196d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez#define TGSI_RESOURCE_PRIVATE	0x7ffd
197d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez#define TGSI_RESOURCE_INPUT	0x7ffc
198d9d82dcd006c124e6569789c90390c43c1360c06Francisco Jerez
199abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_IMM_FLOAT32   0
200b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol#define TGSI_IMM_UINT32    1
201b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol#define TGSI_IMM_INT32     2
202abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
203abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_immediate
204abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
205868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_IMMEDIATE */
2062b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   unsigned NrTokens   : 14; /**< UINT */
207868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned DataType   : 4;  /**< one of TGSI_IMM_x */
2082b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   unsigned Padding    : 10;
209abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
210abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
211fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwellunion tgsi_immediate_data
212abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
213abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   float Float;
214b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol   unsigned Uint;
215b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol   int Int;
216abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
217abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
2183ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin#define TGSI_PROPERTY_GS_INPUT_PRIM          0
2193ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin#define TGSI_PROPERTY_GS_OUTPUT_PRIM         1
220d4ef0f6c67aefe06d8dd647acf8d9005df39a709Zack Rusin#define TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES 2
22173317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_PROPERTY_FS_COORD_ORIGIN        3
22273317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_PROPERTY_FS_COORD_PIXEL_CENTER  4
223c9c8a5ed02408495b3132cabd7947cc352a117a2Dave Airlie#define TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS 5
22406f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák#define TGSI_PROPERTY_FS_DEPTH_LAYOUT        6
225dc4c821f0817a3db716f965692fb701079f66340Marek Olšák#define TGSI_PROPERTY_VS_PROHIBIT_UCPS       7
226dc4c821f0817a3db716f965692fb701079f66340Marek Olšák#define TGSI_PROPERTY_COUNT                  8
2273ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin
2283ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_property {
2293ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned Type         : 4;  /**< TGSI_TOKEN_TYPE_PROPERTY */
2303ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned NrTokens     : 8;  /**< UINT */
2313ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned PropertyName : 8;  /**< one of TGSI_PROPERTY */
2323ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned Padding      : 12;
2333ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin};
2343ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin
23573317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_ORIGIN_UPPER_LEFT 0
23673317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_ORIGIN_LOWER_LEFT 1
23773317139a4f78126af0dc4ddaef8206352740727Luca Barbieri
23873317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER 0
23973317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_PIXEL_CENTER_INTEGER 1
24073317139a4f78126af0dc4ddaef8206352740727Luca Barbieri
24106f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák#define TGSI_FS_DEPTH_LAYOUT_NONE         0
24206f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák#define TGSI_FS_DEPTH_LAYOUT_ANY          1
24306f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák#define TGSI_FS_DEPTH_LAYOUT_GREATER      2
24406f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák#define TGSI_FS_DEPTH_LAYOUT_LESS         3
24506f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák#define TGSI_FS_DEPTH_LAYOUT_UNCHANGED    4
24606f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák
24706f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák
2483ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_property_data {
2493ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned Data;
2503ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin};
2513ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin
252d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell/* TGSI opcodes.
253d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell *
254d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell * For more information on semantics of opcodes and
255d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell * which APIs are known to use which opcodes, see
25698e277111bd6f6e5bcbbcd663e42e18ce449b533Tilman Sauerbeck * gallium/docs/source/tgsi.rst
257abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
258abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ARL                 0
259abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MOV                 1
260abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LIT                 2
261abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RCP                 3
262abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RSQ                 4
263abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_EXP                 5
264abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LOG                 6
265abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MUL                 7
266abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ADD                 8
267abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP3                 9
268abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP4                 10
269abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DST                 11
270abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MIN                 12
271abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MAX                 13
272abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SLT                 14
273abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SGE                 15
274abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MAD                 16
275abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SUB                 17
276ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_LRP                 18
277abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CND                 19
278b3f4b56a3b7f979c631358caefed635c6ec56453Keith Whitwell                                /* gap */
279ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_DP2A                21
280d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell                                /* gap */
281ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_FRC                 24
282abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CLAMP               25
283ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_FLR                 26
284abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ROUND               27
285ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_EX2                 28
286ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_LG2                 29
287ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_POW                 30
288ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_XPD                 31
289d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell                                /* gap */
290abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ABS                 33
291abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RCC                 34
292abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DPH                 35
293abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_COS                 36
294abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DDX                 37
295abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DDY                 38
296abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_KILP                39  /* predicated kill */
297abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK2H                40
298abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK2US               41
299abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK4B                42
300abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK4UB               43
301abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RFL                 44
302abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SEQ                 45
303abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SFL                 46
304abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SGT                 47
305abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SIN                 48
306abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SLE                 49
307abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SNE                 50
308abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_STR                 51
309abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TEX                 52
310abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TXD                 53
311bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXP                 54
312bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP2H                55
313bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP2US               56
314bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP4B                57
315bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP4UB               58
316bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_X2D                 59
317bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ARA                 60
318bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ARR                 61
319bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BRA                 62
320bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CAL                 63
321bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_RET                 64
322d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell#define TGSI_OPCODE_SSG                 65 /* SGN */
323bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CMP                 66
324bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SCS                 67
325bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXB                 68
326bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NRM                 69
327bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_DIV                 70
328bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_DP2                 71
329bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXL                 72
330bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BRK                 73
331bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_IF                  74
332a5e032853a8bac8895fab6fe88ba8a1a692121a6José Fonseca                                /* gap */
333bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ELSE                77
334bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDIF               78
335a5e032853a8bac8895fab6fe88ba8a1a692121a6José Fonseca                                /* gap */
336bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_PUSHA               81
337bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_POPA                82
338bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CEIL                83
339bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_I2F                 84
340bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOT                 85
341bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TRUNC               86
342bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SHL                 87
3432c046034dc5c95dd2fe84d0b4fd44f25235480b9Michal Krol                                /* gap */
344bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_AND                 89
345bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_OR                  90
346bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_MOD                 91
347bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_XOR                 92
348bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SAD                 93
349bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXF                 94
350bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXQ                 95
351bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CONT                96
352bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_EMIT                97
353bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDPRIM             98
354cb90c43676c258419e4b617c908570891d3674cbMichal Krol#define TGSI_OPCODE_BGNLOOP             99
355bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BGNSUB              100
356cb90c43676c258419e4b617c908570891d3674cbMichal Krol#define TGSI_OPCODE_ENDLOOP             101
357bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDSUB              102
358dacf5dc9ac1a700b86e0dc385513afaff41e7aeaMarek Olšák#define TGSI_OPCODE_TXQ_LZ              103 /* TXQ for mipmap level 0 */
3594e1d51786e0657c7430d731ac464f2a73e32eddfKeith Whitwell                                /* gap */
360bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOP                 107
361d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell                                /* gap */
362bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NRM4                112
363bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CALLNZ              113
364bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_IFC                 114
365bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BREAKC              115
366d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell#define TGSI_OPCODE_KIL                 116  /* conditional kill */
367bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_END                 117  /* aka HALT */
368b9cb74c7f826dfd320f5e5b54aa933898f7ddd3dKeith Whitwell                                /* gap */
369c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_F2I                 119
370c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_IDIV                120
371c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_IMAX                121
372c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_IMIN                122
373c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_INEG                123
374c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_ISGE                124
375c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_ISHR                125
376c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_ISLT                126
377c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_F2U                 127
378c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_U2F                 128
379c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UADD                129
380c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UDIV                130
381c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UMAD                131
382c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UMAX                132
383c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UMIN                133
384c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_UMOD                134
385c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_UMUL                135
386c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USEQ                136
387c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USGE                137
388c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USHR                138
389c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USLT                139
390c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USNE                140
391c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_SWITCH              141
392c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_CASE                142
393c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_DEFAULT             143
394c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_ENDSWITCH           144
395bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin
396bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin/* resource related opcodes */
397a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez#define TGSI_OPCODE_SAMPLE              145
398a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez#define TGSI_OPCODE_SAMPLE_I            146
399a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez#define TGSI_OPCODE_SAMPLE_I_MS         147
400bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_SAMPLE_B            148
401bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_SAMPLE_C            149
402bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_SAMPLE_C_LZ         150
403bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_SAMPLE_D            151
404bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_SAMPLE_L            152
405bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_GATHER4             153
406a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez#define TGSI_OPCODE_SVIEWINFO           154
407bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_SAMPLE_POS          155
408bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_OPCODE_SAMPLE_INFO         156
409bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin
410324ac982d8e7c2693035342de2d24baff3042911Bryan Cain#define TGSI_OPCODE_UARL                157
411324ac982d8e7c2693035342de2d24baff3042911Bryan Cain#define TGSI_OPCODE_UCMP                158
4124c0f1fb5ec6117f07c9c911d7f74ff0d18c51d98Bryan Cain#define TGSI_OPCODE_IABS                159
413b6cbc28533a3fd68dbfe694c0774735233df8758Dave Airlie#define TGSI_OPCODE_ISSG                160
414324ac982d8e7c2693035342de2d24baff3042911Bryan Cain
415a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez#define TGSI_OPCODE_LOAD                161
416b8e808f1ef9462af8545999df514fddbbff34345Francisco Jerez#define TGSI_OPCODE_STORE               162
417a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez
4189e550c34237898385c07af2cbb2da76670ed994eFrancisco Jerez#define TGSI_OPCODE_MFENCE              163
4199e550c34237898385c07af2cbb2da76670ed994eFrancisco Jerez#define TGSI_OPCODE_LFENCE              164
4209e550c34237898385c07af2cbb2da76670ed994eFrancisco Jerez#define TGSI_OPCODE_SFENCE              165
4219e550c34237898385c07af2cbb2da76670ed994eFrancisco Jerez#define TGSI_OPCODE_BARRIER             166
4229e550c34237898385c07af2cbb2da76670ed994eFrancisco Jerez
423c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMUADD            167
424c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMXCHG            168
425c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMCAS             169
426c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMAND             170
427c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMOR              171
428c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMXOR             172
429c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMUMIN            173
430c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMUMAX            174
431c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMIMIN            175
432c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_ATOMIMAX            176
433c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez
434c2d31a83a8104acba05f92b025bc9b145ca34974Francisco Jerez#define TGSI_OPCODE_LAST                177
435abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
436abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_NONE            0  /* do not saturate */
437abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */
438abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_MINUS_PLUS_ONE  2  /* clamp to [-1,1] */
439abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
440984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**
441abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Opcode is the operation code to execute. A given operation defines the
442abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * semantics how the source registers (if any) are interpreted and what is
443abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * written to the destination registers (if any) as a result of execution.
444abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
445abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * NumDstRegs and NumSrcRegs is the number of destination and source registers,
446abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * respectively. For a given operation code, those numbers are fixed and are
447abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * present here only for convenience.
448abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
44957221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol * If Predicate is TRUE, tgsi_instruction_predicate token immediately follows.
45057221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol *
451abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Saturate controls how are final results in destination registers modified.
452abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
453abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
454abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction
455abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
456abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Type       : 4;  /* TGSI_TOKEN_TYPE_INSTRUCTION */
457bf3930453cb85977510863e5cfba8487e09c093eMichal Krol   unsigned NrTokens   : 8;  /* UINT */
458abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Opcode     : 8;  /* TGSI_OPCODE_ */
459abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Saturate   : 2;  /* TGSI_SAT_ */
460abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned NumDstRegs : 2;  /* UINT */
461abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned NumSrcRegs : 4;  /* UINT */
46257221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol   unsigned Predicate  : 1;  /* BOOL */
463ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Label      : 1;
464ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Texture    : 1;
465ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding    : 1;
466abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
467abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
468abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/*
469ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell * If tgsi_instruction::Label is TRUE, tgsi_instruction_label follows.
470ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell *
471ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell * If tgsi_instruction::Texture is TRUE, tgsi_instruction_texture follows.
4722083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie *   if texture instruction has a number of offsets,
4732083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie *   then tgsi_instruction::Texture::NumOffset of tgsi_texture_offset follow.
474abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
475abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow.
476abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
477abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow.
478abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
479bf3930453cb85977510863e5cfba8487e09c093eMichal Krol * tgsi_instruction::NrTokens contains the total number of words that make the
480abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * instruction, including the instruction word.
481abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
482abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
483abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_X      0
484abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_Y      1
485abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_Z      2
486abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_W      3
487abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
488ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_label
489abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
490abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Label    : 24;   /* UINT */
491ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding  : 8;
492abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
493abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
49496956dc5076fc03b9290368ca90e3f3b870ee613José Fonseca#define TGSI_TEXTURE_BUFFER         0
495abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_1D             1
496abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_2D             2
497abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_3D             3
498abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_CUBE           4
499abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_RECT           5
500abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOW1D       6
501abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOW2D       7
502abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOWRECT     8
503c0d941877b410b2402ed853d1d33b0664a3d1445Brian Paul#define TGSI_TEXTURE_1D_ARRAY       9
504d8452a0be810d7176b0cbfe6632fc0f8016b5733Marek Olšák#define TGSI_TEXTURE_2D_ARRAY       10
505d8452a0be810d7176b0cbfe6632fc0f8016b5733Marek Olšák#define TGSI_TEXTURE_SHADOW1D_ARRAY 11
506d8452a0be810d7176b0cbfe6632fc0f8016b5733Marek Olšák#define TGSI_TEXTURE_SHADOW2D_ARRAY 12
5070ec30805a4aad945515957e980374f65fbd3b66eDave Airlie#define TGSI_TEXTURE_SHADOWCUBE     13
508dacf5dc9ac1a700b86e0dc385513afaff41e7aeaMarek Olšák#define TGSI_TEXTURE_2D_MSAA        14
509dacf5dc9ac1a700b86e0dc385513afaff41e7aeaMarek Olšák#define TGSI_TEXTURE_2D_ARRAY_MSAA  15
510dacf5dc9ac1a700b86e0dc385513afaff41e7aeaMarek Olšák#define TGSI_TEXTURE_UNKNOWN        16
511dacf5dc9ac1a700b86e0dc385513afaff41e7aeaMarek Olšák#define TGSI_TEXTURE_COUNT          17
512abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
513ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_texture
514abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
515abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Texture  : 8;    /* TGSI_TEXTURE_ */
5162083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   unsigned NumOffsets : 4;
5172083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   unsigned Padding : 20;
5182083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie};
5192083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie
5202083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie/* for texture offsets in GLSL and DirectX.
5212083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie * Generally these always come from TGSI_FILE_IMMEDIATE,
5222083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie * however DX11 appears to have the capability to do
5232083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie * non-constant texture offsets.
5242083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie */
5252083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airliestruct tgsi_texture_offset
5262083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie{
5272083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   int      Index    : 16;
5282083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   unsigned File     : 4;  /**< one of TGSI_FILE_x */
5292083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
5302083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
5312083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
5322083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   unsigned Padding  : 6;
533abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
534abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
5350a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol/*
5360a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol * For SM3, the following constraint applies.
5370a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol *   - Swizzle is either set to identity or replicate.
5380a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol */
53957221c54387a43e268a80ee6b578d57e03efcc5eMichal Krolstruct tgsi_instruction_predicate
540abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
54157221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol   int      Index    : 16; /* SINT */
5420a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
5430a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
5440a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
5450a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleW : 2;  /* TGSI_SWIZZLE_x */
5460a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned Negate   : 1;  /* BOOL */
54757221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol   unsigned Padding  : 7;
548abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
549abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
550984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**
551abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * File specifies the register array to access.
552abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
553abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Index specifies the element number of a register in the register file.
554abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
555abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Indirect is TRUE, Index should be offset by the X component of a source
556abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * register that follows. The register can be now fetched into local storage
557abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * for further processing.
558abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
559abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Negate is TRUE, all components of the fetched register are negated.
560abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
561abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * The fetched register components are swizzled according to SwizzleX, SwizzleY,
562abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * SwizzleZ and SwizzleW.
563abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
564abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
565abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
566abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_src_register
567abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
568abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned File        : 4;  /* TGSI_FILE_ */
569ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Indirect    : 1;  /* BOOL */
570ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Dimension   : 1;  /* BOOL */
571ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   int      Index       : 16; /* SINT */
572abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleX    : 2;  /* TGSI_SWIZZLE_ */
573abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleY    : 2;  /* TGSI_SWIZZLE_ */
574abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleZ    : 2;  /* TGSI_SWIZZLE_ */
575abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleW    : 2;  /* TGSI_SWIZZLE_ */
576ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Absolute    : 1;    /* BOOL */
577ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Negate      : 1;    /* BOOL */
578abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
579abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
580984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**
581ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell * If tgsi_src_register::Modifier is TRUE, tgsi_src_register_modifier follows.
582abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
583abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, if tgsi_src_register::Indirect is TRUE, another tgsi_src_register
584abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * follows.
585abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
586abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, if tgsi_src_register::Dimension is TRUE, tgsi_dimension follows.
587abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
588abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
589abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
590abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dimension
591abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
592abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Indirect    : 1;  /* BOOL */
593abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Dimension   : 1;  /* BOOL */
594ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding     : 14;
595abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   int      Index       : 16; /* SINT */
596abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
597abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
598abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dst_register
599abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
600abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned File        : 4;  /* TGSI_FILE_ */
601abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned WriteMask   : 4;  /* TGSI_WRITEMASK_ */
602abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Indirect    : 1;  /* BOOL */
603abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Dimension   : 1;  /* BOOL */
604abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   int      Index       : 16; /* SINT */
605ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding     : 6;
606abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
607abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
608abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
60994c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#ifdef __cplusplus
61094c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca}
61194c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#endif
612abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
6130a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol#endif /* P_SHADER_TOKENS_H */
614