• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef LP_STATE_SETUP_H
2 #define LP_STATE_SETUP_H
3 
4 #include "lp_bld_interp.h"
5 
6 
7 struct llvmpipe_context;
8 struct lp_setup_variant;
9 
10 struct lp_setup_variant_list_item
11 {
12    struct lp_setup_variant *base;
13    struct lp_setup_variant_list_item *next, *prev;
14 };
15 
16 
17 struct lp_setup_variant_key {
18    unsigned size:16;
19    unsigned num_inputs:8;
20    int color_slot:8;
21    int bcolor_slot:8;
22    int spec_slot:8;
23    int bspec_slot:8;
24    unsigned flatshade_first:1;
25    unsigned pixel_center_half:1;
26    unsigned twoside:1;
27    unsigned floating_point_depth:1;
28    unsigned pad:4;
29 
30    /* TODO: get those floats out of the key and use a jit_context for setup */
31    float pgon_offset_units;
32    float pgon_offset_scale;
33    float pgon_offset_clamp;
34    struct lp_shader_input inputs[PIPE_MAX_SHADER_INPUTS];
35 };
36 
37 
38 typedef void (*lp_jit_setup_triangle)( const float (*v0)[4],
39 				       const float (*v1)[4],
40 				       const float (*v2)[4],
41 				       boolean front_facing,
42 				       float (*a0)[4],
43 				       float (*dadx)[4],
44 				       float (*dady)[4] );
45 
46 
47 
48 
49 /* At this stage, for a given variant key, we create a
50  * draw_vertex_info struct telling the draw module how to format the
51  * vertices, and an llvm-generated function which calculates the
52  * attribute interpolants (a0, dadx, dady) from three of those
53  * vertices.
54  */
55 struct lp_setup_variant {
56    struct lp_setup_variant_key key;
57 
58    struct lp_setup_variant_list_item list_item_global;
59 
60    struct gallivm_state *gallivm;
61 
62    /* XXX: this is a pointer to the LLVM IR.  Once jit_function is
63     * generated, we never need to use the IR again - need to find a
64     * way to release this data without destroying the generated
65     * assembly.
66     */
67    LLVMValueRef function;
68 
69    /* The actual generated setup function:
70     */
71    lp_jit_setup_triangle jit_function;
72 
73    unsigned no;
74 };
75 
76 void lp_delete_setup_variants(struct llvmpipe_context *lp);
77 
78 void
79 lp_dump_setup_coef( const struct lp_setup_variant_key *key,
80 		    const float (*sa0)[4],
81 		    const float (*sdadx)[4],
82 		    const float (*sdady)[4]);
83 
84 #endif
85