radeonsi: lower IO intrinsics - complete rewrite of input/output scanning
[mesa.git] / src / gallium / drivers / llvmpipe / lp_state_setup.h
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 multisample:1;
29 unsigned pad:3;
30
31 /* TODO: get those floats out of the key and use a jit_context for setup */
32 float pgon_offset_units;
33 float pgon_offset_scale;
34 float pgon_offset_clamp;
35 struct lp_shader_input inputs[PIPE_MAX_SHADER_INPUTS];
36 };
37
38
39 typedef void (*lp_jit_setup_triangle)( const float (*v0)[4],
40 const float (*v1)[4],
41 const float (*v2)[4],
42 boolean front_facing,
43 float (*a0)[4],
44 float (*dadx)[4],
45 float (*dady)[4] );
46
47
48
49
50 /* At this stage, for a given variant key, we create a
51 * draw_vertex_info struct telling the draw module how to format the
52 * vertices, and an llvm-generated function which calculates the
53 * attribute interpolants (a0, dadx, dady) from three of those
54 * vertices.
55 */
56 struct lp_setup_variant {
57 struct lp_setup_variant_key key;
58
59 struct lp_setup_variant_list_item list_item_global;
60
61 struct gallivm_state *gallivm;
62
63 /* XXX: this is a pointer to the LLVM IR. Once jit_function is
64 * generated, we never need to use the IR again - need to find a
65 * way to release this data without destroying the generated
66 * assembly.
67 */
68 LLVMValueRef function;
69
70 /* The actual generated setup function:
71 */
72 lp_jit_setup_triangle jit_function;
73
74 unsigned no;
75 };
76
77 void lp_delete_setup_variants(struct llvmpipe_context *lp);
78
79 void
80 lp_dump_setup_coef( const struct lp_setup_variant_key *key,
81 const float (*sa0)[4],
82 const float (*sdadx)[4],
83 const float (*sdady)[4]);
84
85 #endif