llvmpipe: remove non-simple interpolation paths.
[mesa.git] / src / gallium / drivers / llvmpipe / lp_bld_interp.h
index a7ebdd1bfa2771e51dc33c49397510aab84ff9de..8de1ae0912ed4416ff7e5a99e0c2723e3281832f 100644 (file)
@@ -55,7 +55,7 @@
  * src_index.
  *
  * LP_INTERP_COLOR is translated to either LP_INTERP_CONSTANT or
- * LINEAR depending on flatshade state.
+ * PERSPECTIVE depending on flatshade state.
  */
 enum lp_interp {
    LP_INTERP_CONSTANT,
@@ -67,43 +67,62 @@ enum lp_interp {
 };
 
 struct lp_shader_input {
-   ushort interp:4;       /* enum lp_interp */
-   ushort usage_mask:4;   /* bitmask of TGSI_WRITEMASK_x flags */
-   ushort src_index:8;    /* where to find values in incoming vertices */
+   uint interp:4;       /* enum lp_interp */
+   uint usage_mask:4;   /* bitmask of TGSI_WRITEMASK_x flags */
+   uint src_index:8;    /* where to find values in incoming vertices */
+   uint cyl_wrap:4;     /* TGSI_CYLINDRICAL_WRAP_x flags */
+   uint location:2;     /* TGSI_INTERPOLOATE_LOC_* */
+   uint padding:10;
 };
 
 
 struct lp_build_interp_soa_context
 {
-   /* QUAD_SIZE x float */
+   /* TGSI_QUAD_SIZE x float */
    struct lp_build_context coeff_bld;
+   struct lp_build_context setup_bld;
 
    unsigned num_attribs;
    unsigned mask[1 + PIPE_MAX_SHADER_INPUTS]; /**< TGSI_WRITE_MASK_x */
    enum lp_interp interp[1 + PIPE_MAX_SHADER_INPUTS];
+   unsigned interp_loc[1 + PIPE_MAX_SHADER_INPUTS];
+   boolean depth_clamp;
+
+   double pos_offset;
+   unsigned coverage_samples;
+   LLVMValueRef num_loop;
+   LLVMValueRef sample_pos_array;
 
    LLVMValueRef x;
    LLVMValueRef y;
 
-   LLVMValueRef a   [1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
-   LLVMValueRef dadq[1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
+   LLVMValueRef a0aos[1 + PIPE_MAX_SHADER_INPUTS];
+   LLVMValueRef dadxaos[1 + PIPE_MAX_SHADER_INPUTS];
+   LLVMValueRef dadyaos[1 + PIPE_MAX_SHADER_INPUTS];
 
-   LLVMValueRef oow;
+   LLVMValueRef attribs[1 + PIPE_MAX_SHADER_INPUTS][TGSI_NUM_CHANNELS];
 
-   LLVMValueRef attribs[1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
+   LLVMValueRef xoffset_store;
+   LLVMValueRef yoffset_store;
 
    /*
     * Convenience pointers. Callers may access this one.
     */
    const LLVMValueRef *pos;
-   const LLVMValueRef (*inputs)[NUM_CHANNELS];
+   const LLVMValueRef (*inputs)[TGSI_NUM_CHANNELS];
 };
 
 
 void
 lp_build_interp_soa_init(struct lp_build_interp_soa_context *bld,
+                         struct gallivm_state *gallivm,
                          unsigned num_inputs,
                          const struct lp_shader_input *inputs,
+                         boolean pixel_center_integer,
+                         unsigned coverage_samples,
+                         LLVMValueRef sample_pos_array,
+                         LLVMValueRef num_loop,
+                         boolean depth_clamp,
                          LLVMBuilderRef builder,
                          struct lp_type type,
                          LLVMValueRef a0_ptr,
@@ -113,12 +132,16 @@ lp_build_interp_soa_init(struct lp_build_interp_soa_context *bld,
                          LLVMValueRef y);
 
 void
-lp_build_interp_soa_update_inputs(struct lp_build_interp_soa_context *bld,
-                           int quad_index);
+lp_build_interp_soa_update_inputs_dyn(struct lp_build_interp_soa_context *bld,
+                                      struct gallivm_state *gallivm,
+                                      LLVMValueRef quad_start_index,
+                                      LLVMValueRef mask_store,
+                                      LLVMValueRef sample_id);
 
 void
-lp_build_interp_soa_update_pos(struct lp_build_interp_soa_context *bld,
-                           int quad_index);
-
+lp_build_interp_soa_update_pos_dyn(struct lp_build_interp_soa_context *bld,
+                                   struct gallivm_state *gallivm,
+                                   LLVMValueRef quad_start_index,
+                                   LLVMValueRef sample_id);
 
 #endif /* LP_BLD_INTERP_H */