Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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 floating_point_depth:1;
  29.    unsigned pad:4;
  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
  86.