Home | History | Annotate | Download | only in llvmpipe
      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 
     22    int bcolor_slot:8;
     23    int spec_slot:8;
     24    int bspec_slot:8;
     25    unsigned flatshade_first:1;
     26    unsigned pixel_center_half:1;
     27    unsigned twoside:1;
     28    unsigned pad:5;
     29 
     30    float units;
     31    float scale;
     32    struct lp_shader_input inputs[PIPE_MAX_SHADER_INPUTS];
     33 };
     34 
     35 
     36 typedef void (*lp_jit_setup_triangle)( const float (*v0)[4],
     37 				       const float (*v1)[4],
     38 				       const float (*v2)[4],
     39 				       boolean front_facing,
     40 				       float (*a0)[4],
     41 				       float (*dadx)[4],
     42 				       float (*dady)[4] );
     43 
     44 
     45 
     46 
     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
     51  * vertices.
     52  */
     53 struct lp_setup_variant {
     54    struct lp_setup_variant_key key;
     55 
     56    struct lp_setup_variant_list_item list_item_global;
     57 
     58    struct gallivm_state *gallivm;
     59 
     60    /* XXX: this is a pointer to the LLVM IR.  Once jit_function is
     61     * generated, we never need to use the IR again - need to find a
     62     * way to release this data without destroying the generated
     63     * assembly.
     64     */
     65    LLVMValueRef function;
     66 
     67    /* The actual generated setup function:
     68     */
     69    lp_jit_setup_triangle jit_function;
     70 
     71    unsigned no;
     72 };
     73 
     74 void lp_delete_setup_variants(struct llvmpipe_context *lp);
     75 
     76 void
     77 lp_dump_setup_coef( const struct lp_setup_variant_key *key,
     78 		    const float (*sa0)[4],
     79 		    const float (*sdadx)[4],
     80 		    const float (*sdady)[4]);
     81 
     82 #endif
     83