program_parser.h revision 770cebbc29863ae944a31463ee4bdeb789105aba
1770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/*
2770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Copyright © 2009 Intel Corporation
3770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick *
4770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Permission is hereby granted, free of charge, to any person obtaining a
5770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * copy of this software and associated documentation files (the "Software"),
6770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * to deal in the Software without restriction, including without limitation
7770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * and/or sell copies of the Software, and to permit persons to whom the
9770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Software is furnished to do so, subject to the following conditions:
10770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick *
11770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * The above copyright notice and this permission notice (including the next
12770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * paragraph) shall be included in all copies or substantial portions of the
13770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Software.
14770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick *
15770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * DEALINGS IN THE SOFTWARE.
22770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick */
23770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#pragma once
24770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
25770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#include "main/config.h"
26770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
27770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickenum asm_type {
28770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   at_none,
29770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   at_address,
30770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   at_attrib,
31770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   at_param,
32770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   at_temp,
33770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   at_output,
34770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick};
35770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
36770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstruct asm_symbol {
37770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   const char *name;
38770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   enum asm_type type;
39770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned attrib_binding;
40770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned output_binding;   /**< Output / result register number. */
41770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
42770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
43770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * One of PROGRAM_STATE_VAR, PROGRAM_LOCAL_PARAM, or PROGRAM_ENV_PARAM.
44770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
45770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned param_binding_type;
46770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
47770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
48770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Offset into the program_parameter_list where the tokens representing our
49770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * bound state (or constants) start.
50770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
51770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned param_binding_begin;
52770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
53770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /* This is how many entries in the the program_parameter_list we take up
54770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * with our state tokens or constants. Note that this is _not_ the same as
55770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * the number of param registers we eventually use.
56770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
57770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned param_binding_length;
58770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
59770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
60770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Index of the temp register assigned to this variable.
61770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
62770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned temp_binding;
63770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
64770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
65770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Flag whether or not a PARAM is an array
66770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
67770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned param_is_array:1;
68770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
69770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
70770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
71770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Flag whether or not a PARAM array is accessed indirectly
72770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
73770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned param_accessed_indirectly:1;
74770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
75770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
76770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
77770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * \brief Is first pass of parameter layout done with this variable?
78770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    *
79770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * The parameter layout routine operates in two passes.  This flag tracks
80770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * whether or not the first pass has handled this variable.
81770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    *
82770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * \sa _mesa_layout_parameters
83770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
84770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned pass1_done:1;
85770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick};
86770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
87770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
88770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstruct asm_vector {
89770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned count;
90770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   float    data[4];
91770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick};
92770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
93770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
94770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstruct asm_swizzle_mask {
95770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned swizzle:12;
96770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned mask:4;
97770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick};
98770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
99770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
100770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstruct asm_src_register {
101770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct prog_src_register Base;
102770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
103770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
104770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Symbol associated with indirect access to parameter arrays.
105770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    *
106770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * If \c Base::RelAddr is 1, this will point to the symbol for the parameter
107770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * that is being dereferenced.  Further, \c Base::Index will be the offset
108770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * from the address register being used.
109770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
110770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct asm_symbol *Symbol;
111770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick};
112770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
113770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
114770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstruct asm_instruction {
115770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct prog_instruction Base;
116770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct asm_instruction *next;
117770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct asm_src_register SrcReg[3];
118770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick};
119770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
120770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
121770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstruct asm_parser_state {
122770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct gl_program *prog;
123770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
124770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
125770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Per-program target limits
126770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
127770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct gl_program_constants *limits;
128770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
129770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct _mesa_symbol_table *st;
130770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
131770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
132770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * State for the lexer.
133770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
134770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   void *scanner;
135770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
136770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
137770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Linked list of instructions generated during parsing.
138770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
139770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /*@{*/
140770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct asm_instruction *inst_head;
141770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct asm_instruction *inst_tail;
142770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /*@}*/
143770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
144770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
145770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
146770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Selected limits copied from gl_constants
147770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    *
148770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * These are limits from the GL context, but various bits in the program
149770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * must be validated against these values.
150770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
151770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /*@{*/
152770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned MaxTextureCoordUnits;
153770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned MaxTextureImageUnits;
154770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned MaxTextureUnits;
155770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned MaxClipPlanes;
156770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned MaxLights;
157770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned MaxProgramMatrices;
158770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /*@}*/
159770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
160770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
161770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Value to use in state vector accessors for environment and local
162770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * parameters
163770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
164770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned state_param_enum;
165770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
166770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
167770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   /**
168770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * Input attributes bound to specific names
169770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    *
170770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * This is only needed so that errors can be properly produced when
171770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * multiple ATTRIB statements bind illegal combinations of vertex
172770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    * attributes.
173770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    */
174770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   unsigned InputsBound;
175770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
176770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   enum {
177770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      invalid_mode = 0,
178770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      ARB_vertex,
179770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      ARB_fragment
180770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   } mode;
181770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
182770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct {
183770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned PositionInvariant:1;
184770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned Fog:2;
185770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned PrecisionHint:2;
186770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned DrawBuffers:1;
187770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned Shadow:1;
188770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   } option;
189770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
190770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   struct {
191770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned TexturesUsed[MAX_TEXTURE_IMAGE_UNITS];
192770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned ShadowSamplers;
193770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick      unsigned UsesKill:1;
194770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   } fragment;
195770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick};
196770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
197770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define OPTION_NONE        0
198770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define OPTION_FOG_EXP     1
199770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define OPTION_FOG_EXP2    2
200770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define OPTION_FOG_LINEAR  3
201770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define OPTION_NICEST      1
202770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define OPTION_FASTEST     2
203770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
204770cebbc29863ae944a31463ee4bdeb789105abaIan Romanicktypedef struct YYLTYPE {
205770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   int first_line;
206770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   int first_column;
207770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   int last_line;
208770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   int last_column;
209770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick   int position;
210770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick} YYLTYPE;
211770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
212770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define YYLTYPE_IS_DECLARED 1
213770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#define YYLTYPE_IS_TRIVIAL 1
214770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
215770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
216770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#ifndef MTYPES_H
217770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickstruct __GLcontextRec;
218770cebbc29863ae944a31463ee4bdeb789105abaIan Romanicktypedef struct __GLcontextRec GLcontext;
219770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick#endif
220770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
221770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickextern GLboolean _mesa_parse_arb_program(GLcontext *ctx, GLenum target,
222770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    const GLubyte *str, GLsizei len, struct asm_parser_state *state);
223770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
224770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
225770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
226770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/* From program_lexer.l. */
227770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickextern void _mesa_program_lexer_dtor(void *scanner);
228770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
229770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickextern void _mesa_program_lexer_ctor(void **scanner,
230770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    struct asm_parser_state *state, const char *string, size_t len);
231770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
232770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
233770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/**
234770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick *\name From program_parse_extra.c
235770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick */
236770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/*@{*/
237770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
238770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/**
239770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Parses and processes an option string to an ARB vertex program
240770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick *
241770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * \return
242770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Non-zero on success, zero on failure.
243770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick */
244770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickextern int _mesa_ARBvp_parse_option(struct asm_parser_state *state,
245770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    const char *option);
246770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
247770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/**
248770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Parses and processes an option string to an ARB fragment program
249770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick *
250770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * \return
251770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick * Non-zero on success, zero on failure.
252770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick */
253770cebbc29863ae944a31463ee4bdeb789105abaIan Romanickextern int _mesa_ARBfp_parse_option(struct asm_parser_state *state,
254770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick    const char *option);
255770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick
256770cebbc29863ae944a31463ee4bdeb789105abaIan Romanick/*@}*/
257