llvmpipe: fix position offset interpolation
authorDave Airlie <airlied@redhat.com>
Mon, 13 Jul 2020 05:44:24 +0000 (15:44 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 16 Jul 2020 19:09:54 +0000 (05:09 +1000)
pos offset only applies to the gl_FragPos input, when I refactored
I messed that up, only use pos_offset for the position inputs
and use 0.5 otherwise.

This fixes:
GTF-GL45.gtf30.GL3Tests.fragment_coord_conventions.fragment_coord_conventions_multisample

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5926>

src/gallium/drivers/llvmpipe/lp_bld_interp.c

index 52ba7dbdd2a252caaa11d903e6c22725a6c4d659..7ec8bd13cbc48a320fe02204c302a003e97bb6b6 100644 (file)
@@ -291,7 +291,7 @@ attribs_update_simple(struct lp_build_interp_soa_context *bld,
    LLVMValueRef pixoffx;
    LLVMValueRef pixoffy;
    LLVMValueRef ptr;
-   LLVMValueRef pix_center_offset = lp_build_const_vec(gallivm, coeff_bld->type, bld->pos_offset);
+   LLVMValueRef pix_center_offset = lp_build_const_vec(gallivm, coeff_bld->type, 0.5);
 
    /* could do this with code-generated passed in pixel offsets too */
 
@@ -333,7 +333,7 @@ attribs_update_simple(struct lp_build_interp_soa_context *bld,
                      x_val_idx = lp_build_array_get(gallivm, bld->sample_pos_array, x_val_idx);
                      a = lp_build_broadcast_scalar(coeff_bld, x_val_idx);
                   } else {
-                     a = pix_center_offset;
+                     a = lp_build_const_vec(gallivm, coeff_bld->type, bld->pos_offset);
                   }
                }
                else if (attrib == 0 && chan == 1) {
@@ -344,7 +344,7 @@ attribs_update_simple(struct lp_build_interp_soa_context *bld,
                      y_val_idx = lp_build_array_get(gallivm, bld->sample_pos_array, y_val_idx);
                      a = lp_build_broadcast_scalar(coeff_bld, y_val_idx);
                   } else {
-                     a = pix_center_offset;
+                     a = lp_build_const_vec(gallivm, coeff_bld->type, bld->pos_offset);
                   }
                }
                else {
@@ -534,7 +534,7 @@ lp_build_interp_soa(struct lp_build_interp_soa_context *bld,
    pixoffy = LLVMBuildFAdd(builder, pixoffy,
                            lp_build_broadcast_scalar(coeff_bld, bld->y), "");
 
-   LLVMValueRef pix_center_offset = lp_build_const_vec(gallivm, coeff_bld->type, bld->pos_offset);
+   LLVMValueRef pix_center_offset = lp_build_const_vec(gallivm, coeff_bld->type, 0.5);
 
    if (loc == TGSI_INTERPOLATE_LOC_CENTER) {
       if (bld->coverage_samples > 1) {