1 #ifndef LP_STATE_SETUP_H
2 #define LP_STATE_SETUP_H
4 #include "lp_bld_interp.h"
7 struct llvmpipe_context;
8 struct lp_setup_variant;
10 struct lp_setup_variant_list_item
12 struct lp_setup_variant *base;
13 struct lp_setup_variant_list_item *next, *prev;
17 struct lp_setup_variant_key {
19 unsigned num_inputs:8;
20 unsigned color_slot:8;
22 unsigned bcolor_slot:8;
24 unsigned bspec_slot:8;
25 unsigned flatshade_first:1;
26 unsigned pixel_center_half:1;
32 struct lp_shader_input inputs[PIPE_MAX_SHADER_INPUTS];
36 typedef void (*lp_jit_setup_triangle)( const float (*v0)[4],
47 /* At this stage, for a given variant key, we create a
48 * draw_vertex_info struct telling the draw module how to format the
49 * vertices, and an llvm-generated function which calculates the
50 * attribute interpolants (a0, dadx, dady) from three of those
53 struct lp_setup_variant {
54 struct lp_setup_variant_key key;
56 struct lp_setup_variant_list_item list_item_global;
58 /* XXX: this is a pointer to the LLVM IR. Once jit_function is
59 * generated, we never need to use the IR again - need to find a
60 * way to release this data without destroying the generated
63 LLVMValueRef function;
65 /* The actual generated setup function:
67 lp_jit_setup_triangle jit_function;
72 void lp_setup_tri_fallback( const float (*v0)[4],
79 const struct lp_setup_variant_key *key );
81 void lp_delete_setup_variants(struct llvmpipe_context *lp);
84 lp_dump_setup_coef( const struct lp_setup_variant_key *key,
85 const float (*sa0)[4],
86 const float (*sdadx)[4],
87 const float (*sdady)[4]);