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#include "util/u_debug.h"
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_format.h"
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_shader_tokens.h"
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_build.h"
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_parse.h"
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * header
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_header
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_header( void )
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header header;
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header.HeaderSize = 1;
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header.BodySize = 0;
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return header;
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgheader_headersize_grow( struct tgsi_header *header )
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( header->HeaderSize < 0xFF );
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( header->BodySize == 0 );
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header->HeaderSize++;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgheader_bodysize_grow( struct tgsi_header *header )
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( header->BodySize < 0xFFFFFF );
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header->BodySize++;
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_processor
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_processor(
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned type,
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_processor processor;
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   processor.Processor = type;
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   processor.Padding = 0;
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_headersize_grow( header );
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return processor;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * declaration
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdeclaration_grow(
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration *declaration,
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( declaration->NrTokens < 0xFF );
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration->NrTokens++;
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration( void )
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration declaration;
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Type = TGSI_TOKEN_TYPE_DECLARATION;
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.NrTokens = 1;
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.File = TGSI_FILE_NULL;
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.UsageMask = TGSI_WRITEMASK_XYZW;
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Interpolate = 0;
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Dimension = 0;
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Semantic = 0;
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Invariant = 0;
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Local = 0;
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Padding = 0;
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return declaration;
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration(
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned file,
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned usage_mask,
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned interpolate,
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned dimension,
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned semantic,
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned invariant,
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned local,
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration declaration;
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( file < TGSI_FILE_COUNT );
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( interpolate < TGSI_INTERPOLATE_COUNT );
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration = tgsi_default_declaration();
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.File = file;
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.UsageMask = usage_mask;
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Interpolate = interpolate;
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Dimension = dimension;
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Semantic = semantic;
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Invariant = invariant;
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration.Local = local;
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return declaration;
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_range
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_range( void )
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_range dr;
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.First = 0;
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Last = 0;
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dr;
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_range
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_range(
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned first,
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned last,
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration *declaration,
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_range declaration_range;
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( last >= first );
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( last <= 0xFFFF );
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_range.First = first;
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_range.Last = last;
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_grow( declaration, header );
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return declaration_range;
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_dimension
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_dimension(unsigned index_2d,
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 struct tgsi_declaration *declaration,
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 struct tgsi_header *header)
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_dimension dd;
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(index_2d <= 0xFFFF);
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dd.Index2D = index_2d;
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dd.Padding = 0;
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_grow(declaration, header);
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dd;
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_interp
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_interp( void )
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_interp di;
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.Interpolate = TGSI_INTERPOLATE_CONSTANT;
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.Centroid = 0;
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.CylindricalWrap = 0;
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.Padding = 0;
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return di;
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_interp
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_interp(unsigned interpolate,
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned centroid,
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned cylindrical_wrap,
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct tgsi_declaration *declaration,
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct tgsi_header *header)
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_interp di;
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.Interpolate = interpolate;
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.Centroid = centroid;
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.CylindricalWrap = cylindrical_wrap;
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   di.Padding = 0;
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_grow(declaration, header);
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return di;
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_semantic
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_semantic( void )
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_semantic ds;
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ds.Name = TGSI_SEMANTIC_POSITION;
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ds.Index = 0;
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ds.Padding = 0;
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ds;
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_semantic
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_semantic(
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned semantic_name,
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned semantic_index,
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration *declaration,
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_semantic ds;
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( semantic_name <= TGSI_SEMANTIC_COUNT );
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( semantic_index <= 0xFFFF );
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ds.Name = semantic_name;
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ds.Index = semantic_index;
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ds.Padding = 0;
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_grow( declaration, header );
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ds;
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_resource
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_resource(void)
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_resource dr;
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Resource = TGSI_TEXTURE_BUFFER;
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Raw = 0;
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Writable = 0;
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Padding = 0;
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dr;
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_resource
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_resource(unsigned texture,
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                unsigned raw,
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                unsigned writable,
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct tgsi_declaration *declaration,
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct tgsi_header *header)
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_resource dr;
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr = tgsi_default_declaration_resource();
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Resource = texture;
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Raw = raw;
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr.Writable = writable;
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_grow(declaration, header);
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dr;
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_sampler_view
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_sampler_view(void)
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_sampler_view dsv;
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.Resource = TGSI_TEXTURE_BUFFER;
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeX = PIPE_TYPE_UNORM;
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeY = PIPE_TYPE_UNORM;
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeZ = PIPE_TYPE_UNORM;
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeW = PIPE_TYPE_UNORM;
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dsv;
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_sampler_view
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_sampler_view(unsigned texture,
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    unsigned return_type_x,
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    unsigned return_type_y,
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    unsigned return_type_z,
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    unsigned return_type_w,
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    struct tgsi_declaration *declaration,
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    struct tgsi_header *header)
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_sampler_view dsv;
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv = tgsi_default_declaration_sampler_view();
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.Resource = texture;
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeX = return_type_x;
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeY = return_type_y;
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeZ = return_type_z;
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dsv.ReturnTypeW = return_type_w;
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration_grow(declaration, header);
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dsv;
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_declaration
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_declaration( void )
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_declaration  full_declaration;
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_declaration.Declaration  = tgsi_default_declaration();
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_declaration.Range = tgsi_default_declaration_range();
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_declaration.Semantic = tgsi_default_declaration_semantic();
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_declaration.Interp = tgsi_default_declaration_interp();
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_declaration.ImmediateData.u = NULL;
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_declaration.Resource = tgsi_default_declaration_resource();
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_declaration.SamplerView = tgsi_default_declaration_sampler_view();
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return full_declaration;
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_declaration(
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct tgsi_full_declaration *full_decl,
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token *tokens,
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header,
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned maxsize )
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned size = 0;
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration *declaration;
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_declaration_range *dr;
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if( maxsize <= size )
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return 0;
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   declaration = (struct tgsi_declaration *) &tokens[size];
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   size++;
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *declaration = tgsi_build_declaration(
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Declaration.File,
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Declaration.UsageMask,
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Declaration.Interpolate,
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Declaration.Dimension,
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Declaration.Semantic,
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Declaration.Invariant,
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Declaration.Local,
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      header );
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (maxsize <= size)
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return 0;
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dr = (struct tgsi_declaration_range *) &tokens[size];
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   size++;
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *dr = tgsi_build_declaration_range(
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Range.First,
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_decl->Range.Last,
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      declaration,
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      header );
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_decl->Declaration.Dimension) {
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_declaration_dimension *dd;
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (maxsize <= size) {
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return 0;
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      dd = (struct tgsi_declaration_dimension *)&tokens[size];
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *dd = tgsi_build_declaration_dimension(full_decl->Dim.Index2D,
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                             declaration,
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                             header);
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_decl->Declaration.Interpolate) {
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_declaration_interp *di;
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (maxsize <= size) {
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return 0;
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      di = (struct tgsi_declaration_interp *)&tokens[size];
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *di = tgsi_build_declaration_interp(full_decl->Interp.Interpolate,
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          full_decl->Interp.Centroid,
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          full_decl->Interp.CylindricalWrap,
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          declaration,
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          header);
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if( full_decl->Declaration.Semantic ) {
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_declaration_semantic *ds;
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( maxsize <= size )
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return  0;
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ds = (struct tgsi_declaration_semantic *) &tokens[size];
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *ds = tgsi_build_declaration_semantic(
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_decl->Semantic.Name,
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_decl->Semantic.Index,
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         declaration,
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         header );
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_decl->Declaration.File == TGSI_FILE_IMMEDIATE_ARRAY) {
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      unsigned i, j;
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      union tgsi_immediate_data *data;
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      for (i = 0; i <= dr->Last; ++i) {
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         for (j = 0; j < 4; ++j) {
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            unsigned idx = i*4 + j;
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            if (maxsize <= size)
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               return 0;
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            data = (union tgsi_immediate_data *) &tokens[size];
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            ++size;
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            *data = full_decl->ImmediateData.u[idx];
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            declaration_grow( declaration, header );
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_decl->Declaration.File == TGSI_FILE_RESOURCE) {
447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_declaration_resource *dr;
448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (maxsize <= size) {
450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return  0;
451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      dr = (struct tgsi_declaration_resource *)&tokens[size];
453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *dr = tgsi_build_declaration_resource(full_decl->Resource.Resource,
456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                            full_decl->Resource.Raw,
457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                            full_decl->Resource.Writable,
458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                            declaration,
459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                            header);
460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) {
463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_declaration_sampler_view *dsv;
464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (maxsize <= size) {
466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return  0;
467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      dsv = (struct tgsi_declaration_sampler_view *)&tokens[size];
469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *dsv = tgsi_build_declaration_sampler_view(
472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_decl->SamplerView.Resource,
473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_decl->SamplerView.ReturnTypeX,
474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_decl->SamplerView.ReturnTypeY,
475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_decl->SamplerView.ReturnTypeZ,
476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_decl->SamplerView.ReturnTypeW,
477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         declaration,
478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         header);
479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return size;
482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * immediate
486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_immediate
489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_immediate( void )
490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_immediate immediate;
492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate.Type = TGSI_TOKEN_TYPE_IMMEDIATE;
494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate.NrTokens = 1;
495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate.DataType = TGSI_IMM_FLOAT32;
496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate.Padding = 0;
497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return immediate;
499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_immediate
502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_immediate(
503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header,
504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned type )
505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_immediate immediate;
507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate = tgsi_default_immediate();
509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate.DataType = type;
510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return immediate;
514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_immediate
517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_immediate( void )
518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_immediate fullimm;
520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   fullimm.Immediate = tgsi_default_immediate();
522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   fullimm.u[0].Float = 0.0f;
523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   fullimm.u[1].Float = 0.0f;
524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   fullimm.u[2].Float = 0.0f;
525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   fullimm.u[3].Float = 0.0f;
526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return fullimm;
528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimmediate_grow(
532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_immediate *immediate,
533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( immediate->NrTokens < 0xFF );
536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate->NrTokens++;
538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned
543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_immediate(
544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct tgsi_full_immediate *full_imm,
545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token *tokens,
546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header,
547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned maxsize )
548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned size = 0, i;
550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_immediate *immediate;
551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if( maxsize <= size )
553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return 0;
554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   immediate = (struct tgsi_immediate *) &tokens[size];
555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   size++;
556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *immediate = tgsi_build_immediate( header, full_imm->Immediate.DataType );
558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( full_imm->Immediate.NrTokens <= 4 + 1 );
560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for( i = 0; i < full_imm->Immediate.NrTokens - 1; i++ ) {
562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      union tgsi_immediate_data *data;
563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( maxsize <= size )
565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return  0;
566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      data = (union tgsi_immediate_data *) &tokens[size];
568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *data = full_imm->u[i];
569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      immediate_grow( immediate, header );
571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return size;
575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * instruction
579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_instruction
582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction( void )
583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction instruction;
585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Type = TGSI_TOKEN_TYPE_INSTRUCTION;
587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.NrTokens = 0;
588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Opcode = TGSI_OPCODE_MOV;
589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Saturate = TGSI_SAT_NONE;
590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Predicate = 0;
591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.NumDstRegs = 1;
592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.NumSrcRegs = 1;
593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Label = 0;
594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Texture = 0;
595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Padding  = 0;
596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction;
598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction
601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction(unsigned opcode,
602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned saturate,
603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned predicate,
604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned num_dst_regs,
605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned num_src_regs,
606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       struct tgsi_header *header)
607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction instruction;
609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert (opcode <= TGSI_OPCODE_LAST);
611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert (saturate <= TGSI_SAT_MINUS_PLUS_ONE);
612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert (num_dst_regs <= 3);
613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert (num_src_regs <= 15);
614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction = tgsi_default_instruction();
616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Opcode = opcode;
617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Saturate = saturate;
618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.Predicate = predicate;
619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.NumDstRegs = num_dst_regs;
620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction.NumSrcRegs = num_src_regs;
621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction;
625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginstruction_grow(
629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction,
630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert (instruction->NrTokens <   0xFF);
633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction->NrTokens++;
635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_instruction_predicate
640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction_predicate(void)
641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_predicate instruction_predicate;
643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleX = TGSI_SWIZZLE_X;
645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleY = TGSI_SWIZZLE_Y;
646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleZ = TGSI_SWIZZLE_Z;
647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleW = TGSI_SWIZZLE_W;
648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.Negate = 0;
649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.Index = 0;
650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.Padding = 0;
651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction_predicate;
653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_predicate
656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction_predicate(int index,
657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 unsigned negate,
658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 unsigned swizzleX,
659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 unsigned swizzleY,
660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 unsigned swizzleZ,
661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 unsigned swizzleW,
662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 struct tgsi_instruction *instruction,
663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 struct tgsi_header *header)
664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_predicate instruction_predicate;
666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate = tgsi_default_instruction_predicate();
668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleX = swizzleX;
669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleY = swizzleY;
670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleZ = swizzleZ;
671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.SwizzleW = swizzleW;
672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.Negate = negate;
673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_predicate.Index = index;
674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_grow(instruction, header);
676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction_predicate;
678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_label
681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction_label( void )
682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_label instruction_label;
684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_label.Label = 0;
686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_label.Padding = 0;
687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction_label;
689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_label
692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction_label(
693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned label,
694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token  *prev_token,
695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction,
696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_label instruction_label;
699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_label.Label = label;
701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_label.Padding = 0;
702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction->Label = 1;
703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_grow( instruction, header );
705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction_label;
707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_texture
710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction_texture( void )
711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_texture instruction_texture;
713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_texture.Texture = TGSI_TEXTURE_UNKNOWN;
715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_texture.NumOffsets = 0;
716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_texture.Padding = 0;
717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction_texture;
719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_texture
722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction_texture(
723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned texture,
724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned num_offsets,
725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token *prev_token,
726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction,
727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction_texture instruction_texture;
730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_texture.Texture = texture;
732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_texture.NumOffsets = num_offsets;
733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_texture.Padding = 0;
734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction->Texture = 1;
735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_grow( instruction, header );
737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return instruction_texture;
739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_texture_offset
743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_texture_offset( void )
744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_texture_offset texture_offset;
746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.Index = 0;
748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.File = 0;
749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.SwizzleX = 0;
750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.SwizzleY = 0;
751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.SwizzleZ = 0;
752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.Padding = 0;
753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return texture_offset;
755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_texture_offset
758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_texture_offset(
759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int index, int file, int swizzle_x, int swizzle_y, int swizzle_z,
760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token *prev_token,
761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction,
762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_texture_offset texture_offset;
765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.Index = index;
767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.File = file;
768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.SwizzleX = swizzle_x;
769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.SwizzleY = swizzle_y;
770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.SwizzleZ = swizzle_z;
771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   texture_offset.Padding = 0;
772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_grow( instruction, header );
774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return texture_offset;
776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_src_register
779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_src_register( void )
780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_src_register src_register;
782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.File = TGSI_FILE_NULL;
784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleX = TGSI_SWIZZLE_X;
785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleY = TGSI_SWIZZLE_Y;
786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleZ = TGSI_SWIZZLE_Z;
787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleW = TGSI_SWIZZLE_W;
788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Negate = 0;
789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Absolute = 0;
790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Indirect = 0;
791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Dimension = 0;
792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Index = 0;
793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return src_register;
795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_src_register
798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_src_register(
799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned file,
800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned swizzle_x,
801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned swizzle_y,
802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned swizzle_z,
803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned swizzle_w,
804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned negate,
805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned absolute,
806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned indirect,
807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned dimension,
808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int index,
809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction,
810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_src_register   src_register;
813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( file < TGSI_FILE_COUNT );
815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( swizzle_x <= TGSI_SWIZZLE_W );
816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( swizzle_y <= TGSI_SWIZZLE_W );
817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( swizzle_z <= TGSI_SWIZZLE_W );
818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( swizzle_w <= TGSI_SWIZZLE_W );
819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( negate <= 1 );
820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( index >= -0x8000 && index <= 0x7FFF );
821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.File = file;
823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleX = swizzle_x;
824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleY = swizzle_y;
825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleZ = swizzle_z;
826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.SwizzleW = swizzle_w;
827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Negate = negate;
828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Absolute = absolute;
829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Indirect = indirect;
830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Dimension = dimension;
831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src_register.Index = index;
832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_grow( instruction, header );
834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return src_register;
836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dimension
839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_dimension( void )
840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_dimension dimension;
842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Indirect = 0;
844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Dimension = 0;
845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Padding = 0;
846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Index = 0;
847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dimension;
849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_full_src_register
852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_src_register( void )
853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_src_register full_src_register;
855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_src_register.Register = tgsi_default_src_register();
857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_src_register.Indirect = tgsi_default_src_register();
858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_src_register.Dimension = tgsi_default_dimension();
859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_src_register.DimIndirect = tgsi_default_src_register();
860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return full_src_register;
862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dimension
865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_dimension(
866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned indirect,
867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned index,
868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction,
869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_dimension dimension;
872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Indirect = indirect;
874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Dimension = 0;
875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Padding = 0;
876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dimension.Index = index;
877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_grow( instruction, header );
879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dimension;
881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dst_register
884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_dst_register( void )
885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_dst_register dst_register;
887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.File = TGSI_FILE_NULL;
889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.WriteMask = TGSI_WRITEMASK_XYZW;
890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Indirect = 0;
891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Dimension = 0;
892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Index = 0;
893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Padding = 0;
894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dst_register;
896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dst_register
899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_dst_register(
900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned file,
901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned mask,
902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned indirect,
903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned dimension,
904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int index,
905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction,
906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_dst_register dst_register;
909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( file < TGSI_FILE_COUNT );
911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( mask <= TGSI_WRITEMASK_XYZW );
912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( index >= -32768 && index <= 32767 );
913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.File = file;
915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.WriteMask = mask;
916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Indirect = indirect;
917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Dimension = dimension;
918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Index = index;
919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst_register.Padding = 0;
920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction_grow( instruction, header );
922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dst_register;
924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_full_dst_register
927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_dst_register( void )
928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_dst_register full_dst_register;
930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_dst_register.Register = tgsi_default_dst_register();
932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_dst_register.Indirect = tgsi_default_src_register();
933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_dst_register.Dimension = tgsi_default_dimension();
934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_dst_register.DimIndirect = tgsi_default_src_register();
935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return full_dst_register;
937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_instruction
940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_instruction( void )
941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_instruction full_instruction;
943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned i;
944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_instruction.Instruction = tgsi_default_instruction();
946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_instruction.Predicate = tgsi_default_instruction_predicate();
947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_instruction.Label = tgsi_default_instruction_label();
948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_instruction.Texture = tgsi_default_instruction_texture();
949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for( i = 0;  i < TGSI_FULL_MAX_TEX_OFFSETS; i++ ) {
950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_instruction.TexOffsets[i] = tgsi_default_texture_offset();
951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for( i = 0;  i < TGSI_FULL_MAX_DST_REGISTERS; i++ ) {
953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_instruction.Dst[i] = tgsi_default_full_dst_register();
954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for( i = 0;  i < TGSI_FULL_MAX_SRC_REGISTERS; i++ ) {
956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_instruction.Src[i] = tgsi_default_full_src_register();
957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return full_instruction;
960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned
963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_instruction(
964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct tgsi_full_instruction *full_inst,
965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct  tgsi_token *tokens,
966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct  tgsi_header *header,
967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned  maxsize )
968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned size = 0;
970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned i;
971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_instruction *instruction;
972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token *prev_token;
973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if( maxsize <= size )
975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return 0;
976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   instruction = (struct tgsi_instruction *) &tokens[size];
977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   size++;
978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *instruction = tgsi_build_instruction(full_inst->Instruction.Opcode,
980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         full_inst->Instruction.Saturate,
981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         full_inst->Instruction.Predicate,
982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         full_inst->Instruction.NumDstRegs,
983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         full_inst->Instruction.NumSrcRegs,
984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         header);
985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   prev_token = (struct tgsi_token  *) instruction;
986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_inst->Instruction.Predicate) {
988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_instruction_predicate *instruction_predicate;
989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (maxsize <= size) {
991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return 0;
992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      instruction_predicate = (struct tgsi_instruction_predicate *)&tokens[size];
994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *instruction_predicate =
997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         tgsi_build_instruction_predicate(full_inst->Predicate.Index,
998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          full_inst->Predicate.Negate,
999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          full_inst->Predicate.SwizzleX,
1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          full_inst->Predicate.SwizzleY,
1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          full_inst->Predicate.SwizzleZ,
1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          full_inst->Predicate.SwizzleW,
1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          instruction,
1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          header);
1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_inst->Instruction.Label) {
1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_instruction_label *instruction_label;
1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( maxsize <= size )
1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return 0;
1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      instruction_label =
1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         (struct  tgsi_instruction_label *) &tokens[size];
1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *instruction_label = tgsi_build_instruction_label(
1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_inst->Label.Label,
1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         prev_token,
1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         instruction,
1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         header );
1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      prev_token = (struct tgsi_token  *) instruction_label;
1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (full_inst->Instruction.Texture) {
1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_instruction_texture *instruction_texture;
1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( maxsize <= size )
1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return 0;
1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      instruction_texture =
1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         (struct  tgsi_instruction_texture *) &tokens[size];
1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *instruction_texture = tgsi_build_instruction_texture(
1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_inst->Texture.Texture,
1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 full_inst->Texture.NumOffsets,
1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         prev_token,
1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         instruction,
1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         header   );
1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      prev_token = (struct tgsi_token  *) instruction_texture;
1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      for (i = 0; i < full_inst->Texture.NumOffsets; i++) {
1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         struct tgsi_texture_offset *texture_offset;
1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if ( maxsize <= size )
1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return 0;
1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 texture_offset = (struct tgsi_texture_offset *)&tokens[size];
1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         size++;
1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *texture_offset = tgsi_build_texture_offset(
1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            full_inst->TexOffsets[i].Index,
1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            full_inst->TexOffsets[i].File,
1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            full_inst->TexOffsets[i].SwizzleX,
1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            full_inst->TexOffsets[i].SwizzleY,
1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            full_inst->TexOffsets[i].SwizzleZ,
1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            prev_token,
1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            instruction,
1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            header);
1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         prev_token = (struct tgsi_token *) texture_offset;
1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for( i = 0;  i <   full_inst->Instruction.NumDstRegs; i++ ) {
1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      const struct tgsi_full_dst_register *reg = &full_inst->Dst[i];
1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_dst_register *dst_register;
1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( maxsize <= size )
1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return 0;
1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      dst_register = (struct tgsi_dst_register *) &tokens[size];
1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *dst_register = tgsi_build_dst_register(
1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.File,
1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.WriteMask,
1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Indirect,
1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Dimension,
1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Index,
1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         instruction,
1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         header );
1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( reg->Register.Indirect ) {
1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         struct tgsi_src_register *ind;
1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if( maxsize <= size )
1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return 0;
1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         ind = (struct tgsi_src_register *) &tokens[size];
1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         size++;
1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *ind = tgsi_build_src_register(
1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.File,
1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleX,
1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleY,
1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleZ,
1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleW,
1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Negate,
1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Absolute,
1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Indirect,
1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Dimension,
1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Index,
1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            instruction,
1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            header );
1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( reg->Register.Dimension ) {
1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         struct  tgsi_dimension *dim;
1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         assert( !reg->Dimension.Dimension );
1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if( maxsize <= size )
1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return 0;
1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         dim = (struct tgsi_dimension *) &tokens[size];
1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         size++;
1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *dim = tgsi_build_dimension(
1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Dimension.Indirect,
1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Dimension.Index,
1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            instruction,
1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            header );
1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if( reg->Dimension.Indirect ) {
1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            struct tgsi_src_register *ind;
1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            if( maxsize <= size )
1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               return 0;
1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            ind = (struct tgsi_src_register *) &tokens[size];
1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            size++;
1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            *ind = tgsi_build_src_register(
1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.File,
1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleX,
1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleY,
1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleZ,
1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleW,
1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Negate,
1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Absolute,
1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Indirect,
1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Dimension,
1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Index,
1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               instruction,
1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               header );
1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for( i = 0;  i < full_inst->Instruction.NumSrcRegs; i++ ) {
1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      const struct tgsi_full_src_register *reg = &full_inst->Src[i];
1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_src_register *src_register;
1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( maxsize <= size )
1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return 0;
1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      src_register = (struct tgsi_src_register *)  &tokens[size];
1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *src_register = tgsi_build_src_register(
1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.File,
1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.SwizzleX,
1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.SwizzleY,
1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.SwizzleZ,
1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.SwizzleW,
1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Negate,
1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Absolute,
1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Indirect,
1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Dimension,
1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         reg->Register.Index,
1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         instruction,
1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         header );
1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( reg->Register.Indirect ) {
1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         struct  tgsi_src_register *ind;
1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if( maxsize <= size )
1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return 0;
1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         ind = (struct tgsi_src_register *) &tokens[size];
1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         size++;
1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *ind = tgsi_build_src_register(
1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.File,
1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleX,
1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleY,
1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleZ,
1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.SwizzleW,
1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Negate,
1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Absolute,
1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Indirect,
1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Dimension,
1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Indirect.Index,
1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            instruction,
1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            header );
1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( reg->Register.Dimension ) {
1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         struct  tgsi_dimension *dim;
1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         assert( !reg->Dimension.Dimension );
1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if( maxsize <= size )
1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return 0;
1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         dim = (struct tgsi_dimension *) &tokens[size];
1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         size++;
1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *dim = tgsi_build_dimension(
1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Dimension.Indirect,
1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            reg->Dimension.Index,
1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            instruction,
1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            header );
1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if( reg->Dimension.Indirect ) {
1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            struct tgsi_src_register *ind;
1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            if( maxsize <= size )
1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               return 0;
1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            ind = (struct tgsi_src_register *) &tokens[size];
1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            size++;
1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            *ind = tgsi_build_src_register(
1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.File,
1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleX,
1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleY,
1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleZ,
1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.SwizzleW,
1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Negate,
1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Absolute,
1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Indirect,
1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Dimension,
1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               reg->DimIndirect.Index,
1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               instruction,
1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               header );
1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return size;
1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_property
1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_property( void )
1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property property;
1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property.Type = TGSI_TOKEN_TYPE_PROPERTY;
1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property.NrTokens = 1;
1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property.PropertyName = TGSI_PROPERTY_GS_INPUT_PRIM;
1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property.Padding = 0;
1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return property;
1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_property
1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_property(unsigned property_name,
1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    struct tgsi_header *header)
1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property property;
1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property = tgsi_default_property();
1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property.PropertyName = property_name;
1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return property;
1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_property
1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_property( void )
1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_full_property  full_property;
1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   full_property.Property  = tgsi_default_property();
1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   memset(full_property.u, 0,
1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org          sizeof(struct tgsi_property_data) * 8);
1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return full_property;
1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgproperty_grow(
1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property *property,
1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( property->NrTokens < 0xFF );
1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property->NrTokens++;
1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   header_bodysize_grow( header );
1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_property_data
1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_property_data(
1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned value,
1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property *property,
1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header )
1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property_data property_data;
1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property_data.Data = value;
1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property_grow( property, header );
1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return property_data;
1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned
1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_property(
1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct tgsi_full_property *full_prop,
1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_token *tokens,
1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_header *header,
1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned maxsize )
1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned size = 0, i;
1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct tgsi_property *property;
1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if( maxsize <= size )
1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return 0;
1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   property = (struct tgsi_property *) &tokens[size];
1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   size++;
1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   *property = tgsi_build_property(
1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      full_prop->Property.PropertyName,
1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      header );
1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert( full_prop->Property.NrTokens <= 8 + 1 );
1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for( i = 0; i < full_prop->Property.NrTokens - 1; i++ ) {
1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      struct tgsi_property_data *data;
1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if( maxsize <= size )
1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return  0;
1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      data = (struct tgsi_property_data *) &tokens[size];
1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      size++;
1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      *data = tgsi_build_property_data(
1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         full_prop->u[i].Data,
1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         property,
1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         header );
1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return size;
1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1336