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