19671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul/**************************************************************************
29671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul *
39671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
49671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * All Rights Reserved.
59671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul *
69671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
79671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * copy of this software and associated documentation files (the
89671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * "Software"), to deal in the Software without restriction, including
99671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * without limitation the rights to use, copy, modify, merge, publish,
109671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * distribute, sub license, and/or sell copies of the Software, and to
119671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * permit persons to whom the Software is furnished to do so, subject to
129671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * the following conditions:
139671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul *
149671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * The above copyright notice and this permission notice (including the
159671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * next paragraph) shall be included in all copies or substantial portions
169671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * of the Software.
179671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul *
189671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
199671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
209671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
219671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
229671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
239671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
249671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
259671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul *
269671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul **************************************************************************/
279671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul
289671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul#ifndef TGSI_PARSE_H
29ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_PARSE_H
30ffe58739da9eee2e99682747cc8f26e412c87430michal
31ec21ed1ce7963551d824b8b1f4c4ffa8d6cb3363Vinson Lee#include "pipe/p_compiler.h"
32e29583afcb238cf7a70089cfdf50a69ca277c53aJosé Fonseca#include "pipe/p_shader_tokens.h"
33e29583afcb238cf7a70089cfdf50a69ca277c53aJosé Fonseca
34ffe58739da9eee2e99682747cc8f26e412c87430michal#if defined __cplusplus
35ffe58739da9eee2e99682747cc8f26e412c87430michalextern "C" {
369a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca#endif
37ffe58739da9eee2e99682747cc8f26e412c87430michal
38ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_header
39ffe58739da9eee2e99682747cc8f26e412c87430michal{
40ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_header      Header;
41ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_processor   Processor;
42ffe58739da9eee2e99682747cc8f26e412c87430michal};
43ffe58739da9eee2e99682747cc8f26e412c87430michal
44ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_dst_register
45ffe58739da9eee2e99682747cc8f26e412c87430michal{
465b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell   struct tgsi_dst_register               Register;
475b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell   struct tgsi_src_register               Indirect;
48101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin   struct tgsi_dimension                  Dimension;
49101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin   struct tgsi_src_register               DimIndirect;
50ffe58739da9eee2e99682747cc8f26e412c87430michal};
51ffe58739da9eee2e99682747cc8f26e412c87430michal
52ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_src_register
53ffe58739da9eee2e99682747cc8f26e412c87430michal{
5491a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell   struct tgsi_src_register         Register;
5591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell   struct tgsi_src_register         Indirect;
5691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell   struct tgsi_dimension            Dimension;
5791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell   struct tgsi_src_register         DimIndirect;
58ffe58739da9eee2e99682747cc8f26e412c87430michal};
59ffe58739da9eee2e99682747cc8f26e412c87430michal
602b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusinstruct tgsi_immediate_array_data
612b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin{
622b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   union tgsi_immediate_data *u;
632b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin};
642b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin
65ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_declaration
66ffe58739da9eee2e99682747cc8f26e412c87430michal{
67ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_declaration Declaration;
68fe2b31e4a896167a33d267822b36eb2de0ceecbaKeith Whitwell   struct tgsi_declaration_range Range;
694367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol   struct tgsi_declaration_dimension Dim;
701279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez   struct tgsi_declaration_interp Interp;
71a49381587f73c67469ec7546419cfc41387f938cMichal Krol   struct tgsi_declaration_semantic Semantic;
722b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin   struct tgsi_immediate_array_data ImmediateData;
73bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin   struct tgsi_declaration_resource Resource;
74a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez   struct tgsi_declaration_sampler_view SamplerView;
75ffe58739da9eee2e99682747cc8f26e412c87430michal};
76ffe58739da9eee2e99682747cc8f26e412c87430michal
77ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_immediate
78ffe58739da9eee2e99682747cc8f26e412c87430michal{
79ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_immediate   Immediate;
80fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell   union tgsi_immediate_data u[4];
81ffe58739da9eee2e99682747cc8f26e412c87430michal};
82ffe58739da9eee2e99682747cc8f26e412c87430michal
833ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_full_property
843ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{
853ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   struct tgsi_property   Property;
863ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   struct tgsi_property_data u[8];
873ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin};
883ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin
89ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_FULL_MAX_DST_REGISTERS 2
90bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_FULL_MAX_SRC_REGISTERS 5 /* SAMPLE_D has 5 */
912083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie#define TGSI_FULL_MAX_TEX_OFFSETS 4
92ffe58739da9eee2e99682747cc8f26e412c87430michal
93ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_instruction
94ffe58739da9eee2e99682747cc8f26e412c87430michal{
95ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_instruction             Instruction;
967d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell   struct tgsi_instruction_predicate   Predicate;
977d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell   struct tgsi_instruction_label       Label;
987d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell   struct tgsi_instruction_texture     Texture;
997d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell   struct tgsi_full_dst_register       Dst[TGSI_FULL_MAX_DST_REGISTERS];
1007d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell   struct tgsi_full_src_register       Src[TGSI_FULL_MAX_SRC_REGISTERS];
1012083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie   struct tgsi_texture_offset          TexOffsets[TGSI_FULL_MAX_TEX_OFFSETS];
102ffe58739da9eee2e99682747cc8f26e412c87430michal};
103ffe58739da9eee2e99682747cc8f26e412c87430michal
104ffe58739da9eee2e99682747cc8f26e412c87430michalunion tgsi_full_token
105ffe58739da9eee2e99682747cc8f26e412c87430michal{
106ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_token             Token;
107ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_full_declaration  FullDeclaration;
108ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_full_immediate    FullImmediate;
109ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_full_instruction  FullInstruction;
1103ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin   struct tgsi_full_property     FullProperty;
111ffe58739da9eee2e99682747cc8f26e412c87430michal};
112ffe58739da9eee2e99682747cc8f26e412c87430michal
113ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_parse_context
114ffe58739da9eee2e99682747cc8f26e412c87430michal{
115ffe58739da9eee2e99682747cc8f26e412c87430michal   const struct tgsi_token    *Tokens;
116b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal   unsigned                   Position;
117ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_full_header    FullHeader;
118ffe58739da9eee2e99682747cc8f26e412c87430michal   union tgsi_full_token      FullToken;
119ffe58739da9eee2e99682747cc8f26e412c87430michal};
120ffe58739da9eee2e99682747cc8f26e412c87430michal
121ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_PARSE_OK      0
122ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_PARSE_ERROR   1
123ffe58739da9eee2e99682747cc8f26e412c87430michal
12470af238b494ed1b6da4841c2065c33ee0f0f37c9Keith Whitwellunsigned
125ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_init(
126ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_parse_context *ctx,
127ffe58739da9eee2e99682747cc8f26e412c87430michal   const struct tgsi_token *tokens );
128ffe58739da9eee2e99682747cc8f26e412c87430michal
129ffe58739da9eee2e99682747cc8f26e412c87430michalvoid
130ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_free(
131ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_parse_context *ctx );
132ffe58739da9eee2e99682747cc8f26e412c87430michal
133a6e2b76fb570dea8f4a1384e4a9df36f6b81ca84michalboolean
134ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_end_of_tokens(
135ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_parse_context *ctx );
136ffe58739da9eee2e99682747cc8f26e412c87430michal
137ffe58739da9eee2e99682747cc8f26e412c87430michalvoid
138ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_token(
139ffe58739da9eee2e99682747cc8f26e412c87430michal   struct tgsi_parse_context *ctx );
140ffe58739da9eee2e99682747cc8f26e412c87430michal
141285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwellstatic INLINE unsigned
142285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwelltgsi_num_tokens(const struct tgsi_token *tokens)
143285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell{
144c398f1544ea113279e5f038f4a643005743cab62Marek Olšák   struct tgsi_header header;
145c398f1544ea113279e5f038f4a643005743cab62Marek Olšák   memcpy(&header, tokens, sizeof(header));
146285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell   return header.HeaderSize + header.BodySize;
147285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell}
148285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell
149285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwellvoid
150285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwelltgsi_dump_tokens(const struct tgsi_token *tokens);
151648e26aa95b519f1f4abc429b5a23abaf4a5195bBrian
1529671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paulstruct tgsi_token *
1539671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paultgsi_dup_tokens(const struct tgsi_token *tokens);
154648e26aa95b519f1f4abc429b5a23abaf4a5195bBrian
155439036739db2855bba5f0ffc12b7b727897cb530Brian Paulstruct tgsi_token *
156439036739db2855bba5f0ffc12b7b727897cb530Brian Paultgsi_alloc_tokens(unsigned num_tokens);
157439036739db2855bba5f0ffc12b7b727897cb530Brian Paul
158439036739db2855bba5f0ffc12b7b727897cb530Brian Paul
159ffe58739da9eee2e99682747cc8f26e412c87430michal#if defined __cplusplus
1609a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca}
1619a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca#endif
162ffe58739da9eee2e99682747cc8f26e412c87430michal
1639a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca#endif /* TGSI_PARSE_H */
164ffe58739da9eee2e99682747cc8f26e412c87430michal
165