Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
/**************************************************************************
2
 *
3
 * Copyright 2011-2012 Advanced Micro Devices, Inc.
4
 * Copyright 2009 VMware, Inc.
5
 * All Rights Reserved.
6
 *
7
 * Permission is hereby granted, free of charge, to any person obtaining a
8
 * copy of this software and associated documentation files (the
9
 * "Software"), to deal in the Software without restriction, including
10
 * without limitation the rights to use, copy, modify, merge, publish,
11
 * distribute, sub license, and/or sell copies of the Software, and to
12
 * permit persons to whom the Software is furnished to do so, subject to
13
 * the following conditions:
14
 *
15
 * The above copyright notice and this permission notice (including the
16
 * next paragraph) shall be included in all copies or substantial portions
17
 * of the Software.
18
 *
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22
 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
23
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
 *
27
 **************************************************************************/
28
 
29
/**
30
 * @file
31
 * TGSI to LLVM IR translation.
32
 *
33
 * @author Jose Fonseca 
34
 * @author Tom Stellard 
35
 */
36
 
37
#ifndef LP_BLD_TGSI_H
38
#define LP_BLD_TGSI_H
39
 
40
#include "gallivm/lp_bld.h"
41
#include "gallivm/lp_bld_tgsi_action.h"
42
#include "gallivm/lp_bld_limits.h"
43
#include "lp_bld_type.h"
44
#include "pipe/p_compiler.h"
45
#include "pipe/p_state.h"
46
#include "tgsi/tgsi_exec.h"
47
#include "tgsi/tgsi_scan.h"
48
#include "tgsi/tgsi_info.h"
49
 
50
#define LP_CHAN_ALL ~0
51
 
52
#define LP_MAX_INSTRUCTIONS 256
53
 
54
struct tgsi_full_declaration;
55
struct tgsi_full_immediate;
56
struct tgsi_full_instruction;
57
struct tgsi_full_src_register;
58
struct tgsi_opcode_info;
59
struct tgsi_token;
60
struct tgsi_shader_info;
61
struct lp_build_mask_context;
62
struct gallivm_state;
63
struct lp_derivatives;
64
struct lp_build_tgsi_gs_iface;
65
 
66
 
67
enum lp_build_tex_modifier {
68
   LP_BLD_TEX_MODIFIER_NONE = 0,
69
   LP_BLD_TEX_MODIFIER_PROJECTED,
70
   LP_BLD_TEX_MODIFIER_LOD_BIAS,
71
   LP_BLD_TEX_MODIFIER_EXPLICIT_LOD,
72
   LP_BLD_TEX_MODIFIER_EXPLICIT_DERIV,
73
   LP_BLD_TEX_MODIFIER_LOD_ZERO
74
};
75
 
76
 
77
/**
78
 * Describe a channel of a register.
79
 *
80
 * The value can be a:
81
 * - immediate value (i.e. derived from a IMM register)
82
 * - CONST[n].x/y/z/w
83
 * - IN[n].x/y/z/w
84
 * - undetermined (when .file == TGSI_FILE_NULL)
85
 *
86
 * This is one of the analysis results, and is used to described
87
 * the output color in terms of inputs.
88
 */
89
struct lp_tgsi_channel_info
90
{
91
   unsigned file:4; /* TGSI_FILE_* */
92
   unsigned swizzle:3; /* PIPE_SWIZZLE_x */
93
   union {
94
      uint32_t index;
95
      float value; /* for TGSI_FILE_IMMEDIATE */
96
   } u;
97
};
98
 
99
 
100
/**
101
 * Describe a texture sampler interpolator.
102
 *
103
 * The interpolation is described in terms of regular inputs.
104
 */
105
struct lp_tgsi_texture_info
106
{
107
   struct lp_tgsi_channel_info coord[4];
108
   unsigned target:8; /* TGSI_TEXTURE_* */
109
   unsigned sampler_unit:8;  /* Sampler unit */
110
   unsigned texture_unit:8;  /* Texture unit */
111
   unsigned modifier:8; /* LP_BLD_TEX_MODIFIER_* */
112
};
113
 
114
 
115
struct lp_tgsi_info
116
{
117
   struct tgsi_shader_info base;
118
 
119
   /*
120
    * Whether any of the texture opcodes access a register file other than
121
    * TGSI_FILE_INPUT.
122
    *
123
    * We could also handle TGSI_FILE_CONST/IMMEDIATE here, but there is little
124
    * benefit.
125
    */
126
   unsigned indirect_textures:1;
127
 
128
   /*
129
    * Whether any immediate values are outside the range of 0 and 1
130
    */
131
   unsigned unclamped_immediates:1;
132
 
133
   /*
134
    * Texture opcode description. Aimed at detecting and described direct
135
    * texture opcodes.
136
    */
137
   unsigned num_texs;
138
   struct lp_tgsi_texture_info tex[PIPE_MAX_SAMPLERS];
139
 
140
   /*
141
    * Output description. Aimed at detecting and describing simple blit
142
    * shaders.
143
    */
144
   struct lp_tgsi_channel_info output[PIPE_MAX_SHADER_OUTPUTS][4];
145
 
146
   /*
147
    * Shortcut pointers into the above (for fragment shaders).
148
    */
149
   const struct lp_tgsi_channel_info *cbuf[PIPE_MAX_COLOR_BUFS];
150
};
151
 
152
/**
153
 * Reference to system values.
154
 */
155
struct lp_bld_tgsi_system_values {
156
   LLVMValueRef instance_id;
157
   LLVMValueRef vertex_id;
158
   LLVMValueRef prim_id;
159
};
160
 
161
 
162
/**
163
 * Sampler code generation interface.
164
 *
165
 * Although texture sampling is a requirement for TGSI translation, it is
166
 * a very different problem with several different approaches to it. This
167
 * structure establishes an interface for texture sampling code generation, so
168
 * that we can easily use different texture sampling strategies.
169
 */
170
struct lp_build_sampler_soa
171
{
172
   void
173
   (*destroy)( struct lp_build_sampler_soa *sampler );
174
 
175
   void
176
   (*emit_fetch_texel)( const struct lp_build_sampler_soa *sampler,
177
                        struct gallivm_state *gallivm,
178
                        struct lp_type type,
179
                        boolean is_fetch,
180
                        unsigned texture_index,
181
                        unsigned sampler_index,
182
                        const LLVMValueRef *coords,
183
                        const LLVMValueRef *offsets,
184
                        const struct lp_derivatives *derivs,
185
                        LLVMValueRef lod_bias, /* optional */
186
                        LLVMValueRef explicit_lod, /* optional */
187
                        boolean scalar_lod,
188
                        LLVMValueRef *texel);
189
 
190
   void
191
   (*emit_size_query)( const struct lp_build_sampler_soa *sampler,
192
                       struct gallivm_state *gallivm,
193
                       struct lp_type type,
194
                       unsigned unit,
195
                       boolean need_nr_mips,
196
                       LLVMValueRef explicit_lod, /* optional */
197
                       LLVMValueRef *sizes_out);
198
};
199
 
200
 
201
struct lp_build_sampler_aos
202
{
203
   LLVMValueRef
204
   (*emit_fetch_texel)( struct lp_build_sampler_aos *sampler,
205
                        struct lp_build_context *bld,
206
                        unsigned target, /* TGSI_TEXTURE_* */
207
                        unsigned unit,
208
                        LLVMValueRef coords,
209
                        const struct lp_derivatives derivs,
210
                        enum lp_build_tex_modifier modifier);
211
};
212
 
213
 
214
void
215
lp_build_tgsi_info(const struct tgsi_token *tokens,
216
                   struct lp_tgsi_info *info);
217
 
218
 
219
void
220
lp_build_tgsi_soa(struct gallivm_state *gallivm,
221
                  const struct tgsi_token *tokens,
222
                  struct lp_type type,
223
                  struct lp_build_mask_context *mask,
224
                  LLVMValueRef consts_ptr,
225
                  const struct lp_bld_tgsi_system_values *system_values,
226
                  const LLVMValueRef (*inputs)[4],
227
                  LLVMValueRef (*outputs)[4],
228
                  struct lp_build_sampler_soa *sampler,
229
                  const struct tgsi_shader_info *info,
230
                  const struct lp_build_tgsi_gs_iface *gs_iface);
231
 
232
 
233
void
234
lp_build_tgsi_aos(struct gallivm_state *gallivm,
235
                  const struct tgsi_token *tokens,
236
                  struct lp_type type,
237
                  const unsigned char swizzles[4],
238
                  LLVMValueRef consts_ptr,
239
                  const LLVMValueRef *inputs,
240
                  LLVMValueRef *outputs,
241
                  struct lp_build_sampler_aos *sampler,
242
                  const struct tgsi_shader_info *info);
243
 
244
 
245
enum lp_exec_mask_break_type {
246
   LP_EXEC_MASK_BREAK_TYPE_LOOP,
247
   LP_EXEC_MASK_BREAK_TYPE_SWITCH
248
};
249
 
250
 
251
struct lp_exec_mask {
252
   struct lp_build_context *bld;
253
 
254
   boolean has_mask;
255
   boolean ret_in_main;
256
 
257
   LLVMTypeRef int_vec_type;
258
 
259
   LLVMValueRef cond_stack[LP_MAX_TGSI_NESTING];
260
   int cond_stack_size;
261
   LLVMValueRef cond_mask;
262
 
263
   /* keep track if break belongs to switch or loop */
264
   enum lp_exec_mask_break_type break_type_stack[LP_MAX_TGSI_NESTING];
265
   enum lp_exec_mask_break_type break_type;
266
 
267
   struct {
268
      LLVMValueRef switch_val;
269
      LLVMValueRef switch_mask;
270
      LLVMValueRef switch_mask_default;
271
      boolean switch_in_default;
272
      unsigned switch_pc;
273
   } switch_stack[LP_MAX_TGSI_NESTING];
274
   int switch_stack_size;
275
   LLVMValueRef switch_val;
276
   LLVMValueRef switch_mask;         /* current switch exec mask */
277
   LLVMValueRef switch_mask_default; /* reverse of switch mask used for default */
278
   boolean switch_in_default;        /* if switch exec is currently in default */
279
   unsigned switch_pc;               /* when used points to default or endswitch-1 */
280
 
281
   LLVMBasicBlockRef loop_block;
282
   LLVMValueRef cont_mask;
283
   LLVMValueRef break_mask;
284
   LLVMValueRef break_var;
285
   struct {
286
      LLVMBasicBlockRef loop_block;
287
      LLVMValueRef cont_mask;
288
      LLVMValueRef break_mask;
289
      LLVMValueRef break_var;
290
   } loop_stack[LP_MAX_TGSI_NESTING];
291
   int loop_stack_size;
292
 
293
   LLVMValueRef ret_mask;
294
   struct {
295
      int pc;
296
      LLVMValueRef ret_mask;
297
   } call_stack[LP_MAX_TGSI_NESTING];
298
   int call_stack_size;
299
 
300
   LLVMValueRef exec_mask;
301
   LLVMValueRef loop_limiter;
302
};
303
 
304
struct lp_build_tgsi_inst_list
305
{
306
   struct tgsi_full_instruction *instructions;
307
   uint max_instructions;
308
   uint num_instructions;
309
};
310
 
311
unsigned lp_bld_tgsi_list_init(struct lp_build_tgsi_context * bld_base);
312
 
313
 
314
unsigned lp_bld_tgsi_add_instruction(
315
   struct lp_build_tgsi_context * bld_base,
316
   struct tgsi_full_instruction *inst_to_add);
317
 
318
 
319
struct lp_build_tgsi_context;
320
 
321
 
322
typedef LLVMValueRef (*lp_build_emit_fetch_fn)(struct lp_build_tgsi_context *,
323
                                        const struct tgsi_full_src_register *,
324
                                        enum tgsi_opcode_type,
325
                                        unsigned);
326
 
327
struct lp_build_tgsi_context
328
{
329
   struct lp_build_context base;
330
 
331
   struct lp_build_context uint_bld;
332
   struct lp_build_context int_bld;
333
 
334
   /** This array stores functions that are used to transform TGSI opcodes to
335
     * LLVM instructions.
336
     */
337
   struct lp_build_tgsi_action op_actions[TGSI_OPCODE_LAST];
338
 
339
   /* TGSI_OPCODE_RSQ is defined as 1 / sqrt( abs(src0.x) ), rsq_action
340
    * should compute 1 / sqrt (src0.x) */
341
   struct lp_build_tgsi_action rsq_action;
342
 
343
   struct lp_build_tgsi_action sqrt_action;
344
 
345
   const struct tgsi_shader_info *info;
346
 
347
   lp_build_emit_fetch_fn emit_fetch_funcs[TGSI_FILE_COUNT];
348
 
349
   LLVMValueRef (*emit_swizzle)(struct lp_build_tgsi_context *,
350
                         LLVMValueRef, unsigned, unsigned, unsigned, unsigned);
351
 
352
   void (*emit_store)(struct lp_build_tgsi_context *,
353
                      const struct tgsi_full_instruction *,
354
                      const struct tgsi_opcode_info *,
355
                      LLVMValueRef dst[4]);
356
 
357
   void (*emit_declaration)(struct lp_build_tgsi_context *,
358
                             const struct tgsi_full_declaration *decl);
359
 
360
   void (*emit_immediate)(struct lp_build_tgsi_context *,
361
                          const struct tgsi_full_immediate *imm);
362
 
363
 
364
   /* Allow the user to store data in this structure rather than passing it
365
    * to every function. */
366
   void * userdata;
367
 
368
   boolean soa;
369
 
370
   int pc;
371
 
372
   struct tgsi_full_instruction *instructions;
373
   uint max_instructions;
374
   uint num_instructions;
375
 
376
   /** This function allows the user to insert some instructions at the
377
     * beginning of the program.  It is optional and does not need to be
378
     * implemented.
379
     */
380
   void (*emit_prologue)(struct lp_build_tgsi_context*);
381
 
382
   /** This function allows the user to insert some instructions at the end of
383
     * the program.  This callback is intended to be used for emitting
384
     * instructions to handle the export for the output registers, but it can
385
     * be used for any purpose.  Implementing this function is optiona, but
386
     * recommended.
387
     */
388
   void (*emit_epilogue)(struct lp_build_tgsi_context*);
389
};
390
 
391
struct lp_build_tgsi_gs_iface
392
{
393
   LLVMValueRef (*fetch_input)(const struct lp_build_tgsi_gs_iface *gs_iface,
394
                               struct lp_build_tgsi_context * bld_base,
395
                               boolean is_indirect,
396
                               LLVMValueRef vertex_index,
397
                               LLVMValueRef attrib_index,
398
                               LLVMValueRef swizzle_index);
399
   void (*emit_vertex)(const struct lp_build_tgsi_gs_iface *gs_iface,
400
                       struct lp_build_tgsi_context * bld_base,
401
                       LLVMValueRef (*outputs)[4],
402
                       LLVMValueRef emitted_vertices_vec);
403
   void (*end_primitive)(const struct lp_build_tgsi_gs_iface *gs_iface,
404
                         struct lp_build_tgsi_context * bld_base,
405
                         LLVMValueRef verts_per_prim_vec,
406
                         LLVMValueRef emitted_prims_vec);
407
   void (*gs_epilogue)(const struct lp_build_tgsi_gs_iface *gs_iface,
408
                       struct lp_build_tgsi_context * bld_base,
409
                       LLVMValueRef total_emitted_vertices_vec,
410
                       LLVMValueRef emitted_prims_vec);
411
};
412
 
413
struct lp_build_tgsi_soa_context
414
{
415
   struct lp_build_tgsi_context bld_base;
416
 
417
   /* Builder for scalar elements of shader's data type (float) */
418
   struct lp_build_context elem_bld;
419
 
420
   const struct lp_build_tgsi_gs_iface *gs_iface;
421
   LLVMValueRef emitted_prims_vec_ptr;
422
   LLVMValueRef total_emitted_vertices_vec_ptr;
423
   LLVMValueRef emitted_vertices_vec_ptr;
424
   LLVMValueRef max_output_vertices_vec;
425
 
426
   LLVMValueRef consts_ptr;
427
   const LLVMValueRef (*inputs)[TGSI_NUM_CHANNELS];
428
   LLVMValueRef (*outputs)[TGSI_NUM_CHANNELS];
429
 
430
   const struct lp_build_sampler_soa *sampler;
431
 
432
   struct tgsi_declaration_sampler_view sv[PIPE_MAX_SHADER_SAMPLER_VIEWS];
433
 
434
   LLVMValueRef immediates[LP_MAX_TGSI_IMMEDIATES][TGSI_NUM_CHANNELS];
435
   LLVMValueRef temps[LP_MAX_TGSI_TEMPS][TGSI_NUM_CHANNELS];
436
   LLVMValueRef addr[LP_MAX_TGSI_ADDRS][TGSI_NUM_CHANNELS];
437
   LLVMValueRef preds[LP_MAX_TGSI_PREDS][TGSI_NUM_CHANNELS];
438
 
439
   /* We allocate/use this array of temps if (1 << TGSI_FILE_TEMPORARY) is
440
    * set in the indirect_files field.
441
    * The temps[] array above is unused then.
442
    */
443
   LLVMValueRef temps_array;
444
 
445
   /* We allocate/use this array of output if (1 << TGSI_FILE_OUTPUT) is
446
    * set in the indirect_files field.
447
    * The outputs[] array above is unused then.
448
    */
449
   LLVMValueRef outputs_array;
450
 
451
   /* We allocate/use this array of inputs if (1 << TGSI_FILE_INPUT) is
452
    * set in the indirect_files field.
453
    * The inputs[] array above is unused then.
454
    */
455
   LLVMValueRef inputs_array;
456
 
457
   /* We allocate/use this array of temps if (1 << TGSI_FILE_IMMEDIATE) is
458
    * set in the indirect_files field.
459
    */
460
   LLVMValueRef imms_array;
461
 
462
 
463
   struct lp_bld_tgsi_system_values system_values;
464
 
465
   /** bitmask indicating which register files are accessed indirectly */
466
   unsigned indirect_files;
467
 
468
   struct lp_build_mask_context *mask;
469
   struct lp_exec_mask exec_mask;
470
 
471
   uint num_immediates;
472
 
473
};
474
 
475
void
476
lp_emit_declaration_soa(
477
   struct lp_build_tgsi_context *bld,
478
   const struct tgsi_full_declaration *decl);
479
 
480
void lp_emit_immediate_soa(
481
   struct lp_build_tgsi_context *bld_base,
482
   const struct tgsi_full_immediate *imm);
483
 
484
boolean
485
lp_emit_instruction_soa(
486
   struct lp_build_tgsi_soa_context *bld,
487
   const struct tgsi_full_instruction *inst,
488
   const struct tgsi_opcode_info *info);
489
 
490
 
491
LLVMValueRef
492
lp_get_temp_ptr_soa(
493
   struct lp_build_tgsi_soa_context *bld,
494
   unsigned index,
495
   unsigned chan);
496
 
497
LLVMValueRef
498
lp_get_output_ptr(
499
   struct lp_build_tgsi_soa_context *bld,
500
   unsigned index,
501
   unsigned chan);
502
 
503
struct lp_build_tgsi_aos_context
504
{
505
   struct lp_build_tgsi_context bld_base;
506
 
507
   /* Builder for integer masks and indices */
508
   struct lp_build_context int_bld;
509
 
510
   /*
511
    * AoS swizzle used:
512
    * - swizzles[0] = red index
513
    * - swizzles[1] = green index
514
    * - swizzles[2] = blue index
515
    * - swizzles[3] = alpha index
516
    */
517
   unsigned char swizzles[4];
518
   unsigned char inv_swizzles[4];
519
 
520
   LLVMValueRef consts_ptr;
521
   const LLVMValueRef *inputs;
522
   LLVMValueRef *outputs;
523
 
524
   struct lp_build_sampler_aos *sampler;
525
 
526
   LLVMValueRef immediates[LP_MAX_TGSI_IMMEDIATES];
527
   LLVMValueRef temps[LP_MAX_TGSI_TEMPS];
528
   LLVMValueRef addr[LP_MAX_TGSI_ADDRS];
529
   LLVMValueRef preds[LP_MAX_TGSI_PREDS];
530
 
531
   /* We allocate/use this array of temps if (1 << TGSI_FILE_TEMPORARY) is
532
    * set in the indirect_files field.
533
    * The temps[] array above is unused then.
534
    */
535
   LLVMValueRef temps_array;
536
 
537
   /** bitmask indicating which register files are accessed indirectly */
538
   unsigned indirect_files;
539
 
540
};
541
 
542
static INLINE struct lp_build_tgsi_soa_context *
543
lp_soa_context(struct lp_build_tgsi_context *bld_base)
544
{
545
   return (struct lp_build_tgsi_soa_context *)bld_base;
546
}
547
 
548
static INLINE struct lp_build_tgsi_aos_context *
549
lp_aos_context(struct lp_build_tgsi_context *bld_base)
550
{
551
   return (struct lp_build_tgsi_aos_context *)bld_base;
552
}
553
 
554
void
555
lp_emit_declaration_aos(
556
   struct lp_build_tgsi_aos_context *bld,
557
   const struct tgsi_full_declaration *decl);
558
 
559
 
560
boolean
561
lp_emit_instruction_aos(
562
   struct lp_build_tgsi_aos_context *bld,
563
   const struct tgsi_full_instruction *inst,
564
   const struct tgsi_opcode_info *info,
565
   int *pc);
566
 
567
void
568
lp_emit_store_aos(
569
   struct lp_build_tgsi_aos_context *bld,
570
   const struct tgsi_full_instruction *inst,
571
   unsigned index,
572
   LLVMValueRef value);
573
 
574
void lp_build_fetch_args(
575
   struct lp_build_tgsi_context * bld_base,
576
   struct lp_build_emit_data * emit_data);
577
 
578
LLVMValueRef
579
lp_build_tgsi_inst_llvm_aos(
580
   struct lp_build_tgsi_context * bld_base,
581
   const struct tgsi_full_instruction *inst);
582
 
583
void
584
lp_build_tgsi_intrinsic(
585
 const struct lp_build_tgsi_action * action,
586
 struct lp_build_tgsi_context * bld_base,
587
 struct lp_build_emit_data * emit_data);
588
 
589
LLVMValueRef
590
lp_build_emit_llvm(
591
   struct lp_build_tgsi_context *bld_base,
592
   unsigned tgsi_opcode,
593
   struct lp_build_emit_data * emit_data);
594
 
595
LLVMValueRef
596
lp_build_emit_llvm_unary(
597
   struct lp_build_tgsi_context *bld_base,
598
   unsigned tgsi_opcode,
599
   LLVMValueRef arg0);
600
 
601
LLVMValueRef
602
lp_build_emit_llvm_binary(
603
   struct lp_build_tgsi_context *bld_base,
604
   unsigned tgsi_opcode,
605
   LLVMValueRef arg0,
606
   LLVMValueRef arg1);
607
 
608
LLVMValueRef
609
lp_build_emit_llvm_ternary(
610
   struct lp_build_tgsi_context *bld_base,
611
   unsigned tgsi_opcode,
612
   LLVMValueRef arg0,
613
   LLVMValueRef arg1,
614
   LLVMValueRef arg2);
615
 
616
boolean
617
lp_build_tgsi_inst_llvm(
618
   struct lp_build_tgsi_context * bld_base,
619
   const struct tgsi_full_instruction *inst);
620
 
621
LLVMValueRef
622
lp_build_emit_fetch(
623
   struct lp_build_tgsi_context *bld_base,
624
   const struct tgsi_full_instruction *inst,
625
   unsigned src_op,
626
   const unsigned chan_index);
627
 
628
 
629
LLVMValueRef
630
lp_build_emit_fetch_texoffset(
631
   struct lp_build_tgsi_context *bld_base,
632
   const struct tgsi_full_instruction *inst,
633
   unsigned tex_off_op,
634
   const unsigned chan_index);
635
 
636
boolean
637
lp_build_tgsi_llvm(
638
   struct lp_build_tgsi_context * bld_base,
639
   const struct tgsi_token *tokens);
640
 
641
#endif /* LP_BLD_TGSI_H */