1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**************************************************************************
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish,
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions:
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software.
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef TGSI_PARSE_H
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_PARSE_H
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_compiler.h"
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_shader_tokens.h"
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined __cplusplus
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" {
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_header
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header      Header;
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_processor   Processor;
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_dst_register
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_dst_register               Register;
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_src_register               Indirect;
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_dimension                  Dimension;
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_src_register               DimIndirect;
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_src_register
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_src_register         Register;
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_src_register         Indirect;
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_dimension            Dimension;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_src_register         DimIndirect;
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_immediate_array_data
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union tgsi_immediate_data *u;
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_declaration
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration Declaration;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_range Range;
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_dimension Dim;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_interp Interp;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_semantic Semantic;
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_immediate_array_data ImmediateData;
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_resource Resource;
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_sampler_view SamplerView;
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_immediate
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_immediate   Immediate;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union tgsi_immediate_data u[4];
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_property
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property   Property;
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property_data u[8];
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_FULL_MAX_DST_REGISTERS 2
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_FULL_MAX_SRC_REGISTERS 5 /* SAMPLE_D has 5 */
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_FULL_MAX_TEX_OFFSETS 4
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_instruction
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction             Instruction;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_predicate   Predicate;
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_label       Label;
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_texture     Texture;
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_dst_register       Dst[TGSI_FULL_MAX_DST_REGISTERS];
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_src_register       Src[TGSI_FULL_MAX_SRC_REGISTERS];
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_texture_offset          TexOffsets[TGSI_FULL_MAX_TEX_OFFSETS];
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion tgsi_full_token
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token             Token;
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_declaration  FullDeclaration;
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_immediate    FullImmediate;
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_instruction  FullInstruction;
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_property     FullProperty;
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_parse_context
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct tgsi_token    *Tokens;
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned                   Position;
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_header    FullHeader;
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union tgsi_full_token      FullToken;
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_PARSE_OK      0
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_PARSE_ERROR   1
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_parse_init(
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_parse_context *ctx,
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct tgsi_token *tokens );
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_parse_free(
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_parse_context *ctx );
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgboolean
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_parse_end_of_tokens(
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_parse_context *ctx );
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_parse_token(
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_parse_context *ctx );
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE unsigned
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_num_tokens(const struct tgsi_token *tokens)
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header header;
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   memcpy(&header, tokens, sizeof(header));
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return header.HeaderSize + header.BodySize;
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_dump_tokens(const struct tgsi_token *tokens);
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_token *
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_dup_tokens(const struct tgsi_token *tokens);
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_token *
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_alloc_tokens(unsigned num_tokens);
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined __cplusplus
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* TGSI_PARSE_H */
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
165