p_shader_tokens.h revision 73317139a4f78126af0dc4ddaef8206352740727
1984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**************************************************************************
2984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca *
3984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
40a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol * Copyright 2009 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
364339744c1676f925d42251bd32795bba9928cd5fKeith Whitwell#include "p_compiler.h"
374339744c1676f925d42251bd32795bba9928cd5fKeith Whitwell
38abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
39abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_header
40abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
41abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned HeaderSize : 8;
42abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned BodySize   : 24;
43abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
44abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
45abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_FRAGMENT  0
46abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_VERTEX    1
47abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_PROCESSOR_GEOMETRY  2
48abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
49abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_processor
50abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
51abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Processor  : 4;  /* TGSI_PROCESSOR_ */
52abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Padding    : 28;
53abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
54abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
55abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_DECLARATION    0
56abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_IMMEDIATE      1
57abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TOKEN_TYPE_INSTRUCTION    2
583ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin#define TGSI_TOKEN_TYPE_PROPERTY       3
59abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
60abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_token
61abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
62868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_x */
63bf3930453cb85977510863e5cfba8487e09c093eMichal Krol   unsigned NrTokens   : 8;  /**< UINT */
64ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding    : 20;
65abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
66abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
67e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusinenum tgsi_file_type {
683ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_NULL         =0,
693ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_CONSTANT     =1,
703ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_INPUT        =2,
713ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_OUTPUT       =3,
723ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_TEMPORARY    =4,
733ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_SAMPLER      =5,
743ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_ADDRESS      =6,
753ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_IMMEDIATE    =7,
763ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_LOOP         =8,
773ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_PREDICATE    =9,
783ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   TGSI_FILE_SYSTEM_VALUE =10,
79e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin   TGSI_FILE_COUNT      /**< how many TGSI_FILE_ types */
80e884c7ed9a14aabaa86f6710c594d20812ed11d9Zack Rusin};
8135ca45daba3906ac94fb879d2374d476ba2dac47Brian
82abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
83abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_NONE     0x00
84abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_X        0x01
85abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_Y        0x02
86abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XY       0x03
87abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_Z        0x04
88abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XZ       0x05
89abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YZ       0x06
90abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYZ      0x07
91abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_W        0x08
92abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XW       0x09
93abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YW       0x0A
94abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYW      0x0B
95abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_ZW       0x0C
96abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XZW      0x0D
97abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_YZW      0x0E
98abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_WRITEMASK_XYZW     0x0F
99abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
1004e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_CONSTANT      0
1014e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_LINEAR        1
1024e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol#define TGSI_INTERPOLATE_PERSPECTIVE   2
103bd3b47590e2a8e91a8f5545d7c8872b26879c228Michal Krol#define TGSI_INTERPOLATE_COUNT         3
1044e33edfd06999e7c65b761be2d1cdc16e5b659c5Michal Krol
105abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration
106abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
107868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Type        : 4;  /**< TGSI_TOKEN_TYPE_DECLARATION */
108bf3930453cb85977510863e5cfba8487e09c093eMichal Krol   unsigned NrTokens    : 8;  /**< UINT */
109868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned File        : 4;  /**< one of TGSI_FILE_x */
110868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned UsageMask   : 4;  /**< bitmask of TGSI_WRITEMASK_x flags */
111868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Interpolate : 4;  /**< one of TGSI_INTERPOLATE_x */
1120adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol   unsigned Dimension   : 1;  /**< any extra dimension info? */
113868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Semantic    : 1;  /**< BOOL, any semantic info? */
114868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Centroid    : 1;  /**< centroid sampling? */
115868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Invariant   : 1;  /**< invariant optimization? */
1160adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol   unsigned Padding     : 4;
117abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
118abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
119abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration_range
120abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
121868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned First   : 16; /**< UINT */
122868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Last    : 16; /**< UINT */
123abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
124abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
1250adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krolstruct tgsi_declaration_dimension
1260adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol{
1270adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol   unsigned Index2D:16; /**< UINT */
1280adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol   unsigned Padding:16;
1290adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol};
1300adfdaeaa1e20c81a9f37455fe78d15c6406e3d3Michal Krol
1319b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_POSITION   0
1329b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_COLOR      1
1339b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_BCOLOR     2  /**< back-face color */
1349b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_FOG        3
1359b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_PSIZE      4
1369b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_GENERIC    5
1379b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_NORMAL     6
1389b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_FACE       7
1399b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_EDGEFLAG   8
1409b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_PRIMID     9
1419b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_INSTANCEID 10
1429b21b3c52a8a7d58d08151d1a6bf25c472dec213Michal Krol#define TGSI_SEMANTIC_COUNT      11 /**< number of semantic values */
143abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
144abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_declaration_semantic
145abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
146763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell   unsigned Name           : 8;  /**< one of TGSI_SEMANTIC_x */
147763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell   unsigned Index          : 16; /**< UINT */
148abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Padding        : 8;
149abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
150abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
151abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_IMM_FLOAT32   0
152b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol#define TGSI_IMM_UINT32    1
153b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol#define TGSI_IMM_INT32     2
154abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
155abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_immediate
156abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
157868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned Type       : 4;  /**< TGSI_TOKEN_TYPE_IMMEDIATE */
158bf3930453cb85977510863e5cfba8487e09c093eMichal Krol   unsigned NrTokens   : 8;  /**< UINT */
159868c607c1751fc3e6df1a8dc45e8b70e6bc315f6Brian Paul   unsigned DataType   : 4;  /**< one of TGSI_IMM_x */
160ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding    : 16;
161abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
162abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
163fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwellunion tgsi_immediate_data
164abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
165abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   float Float;
166b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol   unsigned Uint;
167b1c55e80aa600c88a20117cdca4bde2a46f79730Michal Krol   int Int;
168abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
169abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
1703ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin#define TGSI_PROPERTY_GS_INPUT_PRIM          0
1713ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin#define TGSI_PROPERTY_GS_OUTPUT_PRIM         1
1723ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin#define TGSI_PROPERTY_GS_MAX_VERTICES        2
17373317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_PROPERTY_FS_COORD_ORIGIN        3
17473317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_PROPERTY_FS_COORD_PIXEL_CENTER  4
17573317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_PROPERTY_COUNT                  5
1763ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin
1773ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_property {
1783ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned Type         : 4;  /**< TGSI_TOKEN_TYPE_PROPERTY */
1793ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned NrTokens     : 8;  /**< UINT */
1803ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned PropertyName : 8;  /**< one of TGSI_PROPERTY */
1813ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned Padding      : 12;
1823ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin};
1833ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin
18473317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_ORIGIN_UPPER_LEFT 0
18573317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_ORIGIN_LOWER_LEFT 1
18673317139a4f78126af0dc4ddaef8206352740727Luca Barbieri
18773317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER 0
18873317139a4f78126af0dc4ddaef8206352740727Luca Barbieri#define TGSI_FS_COORD_PIXEL_CENTER_INTEGER 1
18973317139a4f78126af0dc4ddaef8206352740727Luca Barbieri
1903ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_property_data {
1913ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   unsigned Data;
1923ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin};
1933ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin
194d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell/* TGSI opcodes.
195d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell *
196d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell * For more information on semantics of opcodes and
197d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell * which APIs are known to use which opcodes, see
198d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell * auxiliary/tgsi/tgsi-instruction-set.txt
199abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
200abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ARL                 0
201abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MOV                 1
202abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LIT                 2
203abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RCP                 3
204abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RSQ                 4
205abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_EXP                 5
206abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_LOG                 6
207abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MUL                 7
208abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ADD                 8
209abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP3                 9
210abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DP4                 10
211abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DST                 11
212abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MIN                 12
213abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MAX                 13
214abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SLT                 14
215abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SGE                 15
216abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_MAD                 16
217abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SUB                 17
218ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_LRP                 18
219abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CND                 19
220b3f4b56a3b7f979c631358caefed635c6ec56453Keith Whitwell                                /* gap */
221ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_DP2A                21
222d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell                                /* gap */
223ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_FRC                 24
224abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_CLAMP               25
225ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_FLR                 26
226abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ROUND               27
227ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_EX2                 28
228ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_LG2                 29
229ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_POW                 30
230ede9f3b52ecb27ada81fee06a943bb595c60eaeeKeith Whitwell#define TGSI_OPCODE_XPD                 31
231d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell                                /* gap */
232abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_ABS                 33
233abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RCC                 34
234abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DPH                 35
235abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_COS                 36
236abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DDX                 37
237abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_DDY                 38
238abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_KILP                39  /* predicated kill */
239abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK2H                40
240abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK2US               41
241abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK4B                42
242abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_PK4UB               43
243abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_RFL                 44
244abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SEQ                 45
245abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SFL                 46
246abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SGT                 47
247abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SIN                 48
248abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SLE                 49
249abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_SNE                 50
250abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_STR                 51
251abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TEX                 52
252abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_OPCODE_TXD                 53
253bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXP                 54
254bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP2H                55
255bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP2US               56
256bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP4B                57
257bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_UP4UB               58
258bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_X2D                 59
259bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ARA                 60
260bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ARR                 61
261bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BRA                 62
262bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CAL                 63
263bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_RET                 64
264d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell#define TGSI_OPCODE_SSG                 65 /* SGN */
265bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CMP                 66
266bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SCS                 67
267bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXB                 68
268bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NRM                 69
269bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_DIV                 70
270bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_DP2                 71
271bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXL                 72
272bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BRK                 73
273bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_IF                  74
274cb90c43676c258419e4b617c908570891d3674cbMichal Krol#define TGSI_OPCODE_BGNFOR              75
275bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_REP                 76
276bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ELSE                77
277bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDIF               78
278cb90c43676c258419e4b617c908570891d3674cbMichal Krol#define TGSI_OPCODE_ENDFOR              79
279bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDREP              80
280bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_PUSHA               81
281bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_POPA                82
282bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CEIL                83
283bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_I2F                 84
284bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOT                 85
285bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TRUNC               86
286bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SHL                 87
2872c046034dc5c95dd2fe84d0b4fd44f25235480b9Michal Krol                                /* gap */
288bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_AND                 89
289bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_OR                  90
290bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_MOD                 91
291bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_XOR                 92
292bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_SAD                 93
293bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXF                 94
294bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_TXQ                 95
295bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CONT                96
296bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_EMIT                97
297bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDPRIM             98
298cb90c43676c258419e4b617c908570891d3674cbMichal Krol#define TGSI_OPCODE_BGNLOOP             99
299bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BGNSUB              100
300cb90c43676c258419e4b617c908570891d3674cbMichal Krol#define TGSI_OPCODE_ENDLOOP             101
301bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_ENDSUB              102
3024e1d51786e0657c7430d731ac464f2a73e32eddfKeith Whitwell                                /* gap */
303bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NOP                 107
304d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell                                /* gap */
305bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_NRM4                112
306bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_CALLNZ              113
307bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_IFC                 114
308bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_BREAKC              115
309d0d98f3ecfed7d7e0c4426185c13ec4f7c1761f9Keith Whitwell#define TGSI_OPCODE_KIL                 116  /* conditional kill */
310bcb454e7a6e2f7efae114321c65bf98e91d5892fMichal Krol#define TGSI_OPCODE_END                 117  /* aka HALT */
311b9cb74c7f826dfd320f5e5b54aa933898f7ddd3dKeith Whitwell                                /* gap */
312c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_F2I                 119
313c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_IDIV                120
314c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_IMAX                121
315c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_IMIN                122
316c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_INEG                123
317c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_ISGE                124
318c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_ISHR                125
319c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_ISLT                126
320c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_F2U                 127
321c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_U2F                 128
322c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UADD                129
323c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UDIV                130
324c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UMAD                131
325c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UMAX                132
326c59eda099306aca3a950f7157bde6fe84d0db604Michal Krol#define TGSI_OPCODE_UMIN                133
327c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_UMOD                134
328c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_UMUL                135
329c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USEQ                136
330c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USGE                137
331c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USHR                138
332c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USLT                139
333c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_USNE                140
334c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_SWITCH              141
335c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_CASE                142
336c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_DEFAULT             143
337c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_ENDSWITCH           144
338c34f6faf35c16ff81a1c4420290be4ed7f542121Michal Krol#define TGSI_OPCODE_LAST                145
339abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
340abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_NONE            0  /* do not saturate */
341abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */
342abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SAT_MINUS_PLUS_ONE  2  /* clamp to [-1,1] */
343abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
344984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**
345abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Opcode is the operation code to execute. A given operation defines the
346abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * semantics how the source registers (if any) are interpreted and what is
347abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * written to the destination registers (if any) as a result of execution.
348abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
349abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * NumDstRegs and NumSrcRegs is the number of destination and source registers,
350abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * respectively. For a given operation code, those numbers are fixed and are
351abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * present here only for convenience.
352abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
35357221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol * If Predicate is TRUE, tgsi_instruction_predicate token immediately follows.
35457221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol *
355abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Saturate controls how are final results in destination registers modified.
356abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
357abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
358abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_instruction
359abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
360abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Type       : 4;  /* TGSI_TOKEN_TYPE_INSTRUCTION */
361bf3930453cb85977510863e5cfba8487e09c093eMichal Krol   unsigned NrTokens   : 8;  /* UINT */
362abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Opcode     : 8;  /* TGSI_OPCODE_ */
363abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Saturate   : 2;  /* TGSI_SAT_ */
364abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned NumDstRegs : 2;  /* UINT */
365abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned NumSrcRegs : 4;  /* UINT */
36657221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol   unsigned Predicate  : 1;  /* BOOL */
367ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Label      : 1;
368ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Texture    : 1;
369ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding    : 1;
370abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
371abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
372abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol/*
373ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell * If tgsi_instruction::Label is TRUE, tgsi_instruction_label follows.
374ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell *
375ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell * If tgsi_instruction::Texture is TRUE, tgsi_instruction_texture follows.
376abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
377abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow.
378abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
379abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow.
380abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
381bf3930453cb85977510863e5cfba8487e09c093eMichal Krol * tgsi_instruction::NrTokens contains the total number of words that make the
382abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * instruction, including the instruction word.
383abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
384abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
385abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_X      0
386abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_Y      1
387abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_Z      2
388abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_SWIZZLE_W      3
389abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
390ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_label
391abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
392abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Label    : 24;   /* UINT */
393ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding  : 8;
394abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
395abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
396abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_UNKNOWN        0
397abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_1D             1
398abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_2D             2
399abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_3D             3
400abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_CUBE           4
401abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_RECT           5
402abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOW1D       6
403abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOW2D       7
404abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#define TGSI_TEXTURE_SHADOWRECT     8
4053d5dcc2203f5018863ad51958871542696e1ed1bMichal Krol#define TGSI_TEXTURE_COUNT          9
406abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
407ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_texture
408abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
409abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Texture  : 8;    /* TGSI_TEXTURE_ */
410ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding  : 24;
411abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
412abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
4130a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol/*
4140a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol * For SM3, the following constraint applies.
4150a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol *   - Swizzle is either set to identity or replicate.
4160a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol */
41757221c54387a43e268a80ee6b578d57e03efcc5eMichal Krolstruct tgsi_instruction_predicate
418abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
41957221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol   int      Index    : 16; /* SINT */
4200a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleX : 2;  /* TGSI_SWIZZLE_x */
4210a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleY : 2;  /* TGSI_SWIZZLE_x */
4220a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleZ : 2;  /* TGSI_SWIZZLE_x */
4230a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned SwizzleW : 2;  /* TGSI_SWIZZLE_x */
4240a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol   unsigned Negate   : 1;  /* BOOL */
42557221c54387a43e268a80ee6b578d57e03efcc5eMichal Krol   unsigned Padding  : 7;
426abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
427abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
428984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**
429abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * File specifies the register array to access.
430abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
431abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Index specifies the element number of a register in the register file.
432abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
433abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Indirect is TRUE, Index should be offset by the X component of a source
434abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * register that follows. The register can be now fetched into local storage
435abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * for further processing.
436abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
437abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * If Negate is TRUE, all components of the fetched register are negated.
438abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
439abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * The fetched register components are swizzled according to SwizzleX, SwizzleY,
440abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * SwizzleZ and SwizzleW.
441abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
442abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
443abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
444abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_src_register
445abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
446abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned File        : 4;  /* TGSI_FILE_ */
447ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Indirect    : 1;  /* BOOL */
448ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Dimension   : 1;  /* BOOL */
449ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   int      Index       : 16; /* SINT */
450abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleX    : 2;  /* TGSI_SWIZZLE_ */
451abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleY    : 2;  /* TGSI_SWIZZLE_ */
452abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleZ    : 2;  /* TGSI_SWIZZLE_ */
453abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned SwizzleW    : 2;  /* TGSI_SWIZZLE_ */
454ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Absolute    : 1;    /* BOOL */
455ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Negate      : 1;    /* BOOL */
456abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
457abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
458984a7c4e9c42cf8ddfcff5b880b522a6dd58bce2José Fonseca/**
459ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell * If tgsi_src_register::Modifier is TRUE, tgsi_src_register_modifier follows.
460abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
461abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, if tgsi_src_register::Indirect is TRUE, another tgsi_src_register
462abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * follows.
463abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol *
464abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol * Then, if tgsi_src_register::Dimension is TRUE, tgsi_dimension follows.
465abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol */
466abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
467abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
468abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dimension
469abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
470abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Indirect    : 1;  /* BOOL */
471abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Dimension   : 1;  /* BOOL */
472ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding     : 14;
473abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   int      Index       : 16; /* SINT */
474abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
475abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
476abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krolstruct tgsi_dst_register
477abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol{
478abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned File        : 4;  /* TGSI_FILE_ */
479abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned WriteMask   : 4;  /* TGSI_WRITEMASK_ */
480abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Indirect    : 1;  /* BOOL */
481abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   unsigned Dimension   : 1;  /* BOOL */
482abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol   int      Index       : 16; /* SINT */
483ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell   unsigned Padding     : 6;
484abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol};
485abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
486abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
48794c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#ifdef __cplusplus
48894c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca}
48994c73d1bb9037a1eead1d5174f218b15852b52d7José Fonseca#endif
490abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol
4910a7d50ed7e7608eaccba8e9648685e740065c384Michal Krol#endif /* P_SHADER_TOKENS_H */
492