llvmpipe: fix multisample lines.
authorDave Airlie <airlied@redhat.com>
Tue, 10 Nov 2020 03:52:05 +0000 (13:52 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 23 Nov 2020 20:50:34 +0000 (06:50 +1000)
This also needs another lines fix, but at least align the code
with tri and points

Cc: "20.3" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7705>

.gitlab-ci/deqp-virgl-gl-fails.txt
src/gallium/drivers/llvmpipe/lp_setup_line.c

index d0c81dd..eeebd7e 100644 (file)
@@ -71,10 +71,8 @@ dEQP-GLES3.functional.polygon_offset.fixed16_render_with_units,Fail
 dEQP-GLES3.functional.polygon_offset.fixed24_displacement_with_units,Fail
 dEQP-GLES3.functional.polygon_offset.fixed24_render_with_units,Fail
 dEQP-GLES3.functional.polygon_offset.float32_displacement_with_units,Fail
-dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.interpolation.lines,Fail
 dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.lines,Fail
 dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_4.primitives.points,Fail
-dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines,Fail
 dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines,Fail
 dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.points,Fail
 dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide,Fail
index d552e95..675e519 100644 (file)
@@ -298,7 +298,7 @@ try_setup_line( struct lp_setup_context *setup,
    int nr_planes = 4;
    unsigned viewport_index = 0;
    unsigned layer = 0;
-   
+   float pixel_offset = setup->multisample ? 0.0 : setup->pixel_offset;
    /* linewidth should be interpreted as integer */
    int fixed_width = util_iround(width) * FIXED_ONE;
 
@@ -444,15 +444,15 @@ try_setup_line( struct lp_setup_context *setup,
       }
   
       /* x/y positions in fixed point */
-      x[0] = subpixel_snap(v1[0][0] + x_offset     - setup->pixel_offset);
-      x[1] = subpixel_snap(v2[0][0] + x_offset_end - setup->pixel_offset);
-      x[2] = subpixel_snap(v2[0][0] + x_offset_end - setup->pixel_offset);
-      x[3] = subpixel_snap(v1[0][0] + x_offset     - setup->pixel_offset);
+      x[0] = subpixel_snap(v1[0][0] + x_offset     - pixel_offset);
+      x[1] = subpixel_snap(v2[0][0] + x_offset_end - pixel_offset);
+      x[2] = subpixel_snap(v2[0][0] + x_offset_end - pixel_offset);
+      x[3] = subpixel_snap(v1[0][0] + x_offset     - pixel_offset);
       
-      y[0] = subpixel_snap(v1[0][1] + y_offset     - setup->pixel_offset) - fixed_width/2;
-      y[1] = subpixel_snap(v2[0][1] + y_offset_end - setup->pixel_offset) - fixed_width/2;
-      y[2] = subpixel_snap(v2[0][1] + y_offset_end - setup->pixel_offset) + fixed_width/2;
-      y[3] = subpixel_snap(v1[0][1] + y_offset     - setup->pixel_offset) + fixed_width/2;
+      y[0] = subpixel_snap(v1[0][1] + y_offset     - pixel_offset) - fixed_width/2;
+      y[1] = subpixel_snap(v2[0][1] + y_offset_end - pixel_offset) - fixed_width/2;
+      y[2] = subpixel_snap(v2[0][1] + y_offset_end - pixel_offset) + fixed_width/2;
+      y[3] = subpixel_snap(v1[0][1] + y_offset     - pixel_offset) + fixed_width/2;
       
    }
    else {
@@ -541,15 +541,15 @@ try_setup_line( struct lp_setup_context *setup,
       }
 
       /* x/y positions in fixed point */
-      x[0] = subpixel_snap(v1[0][0] + x_offset     - setup->pixel_offset) - fixed_width/2;
-      x[1] = subpixel_snap(v2[0][0] + x_offset_end - setup->pixel_offset) - fixed_width/2;
-      x[2] = subpixel_snap(v2[0][0] + x_offset_end - setup->pixel_offset) + fixed_width/2;
-      x[3] = subpixel_snap(v1[0][0] + x_offset     - setup->pixel_offset) + fixed_width/2;
+      x[0] = subpixel_snap(v1[0][0] + x_offset     - pixel_offset) - fixed_width/2;
+      x[1] = subpixel_snap(v2[0][0] + x_offset_end - pixel_offset) - fixed_width/2;
+      x[2] = subpixel_snap(v2[0][0] + x_offset_end - pixel_offset) + fixed_width/2;
+      x[3] = subpixel_snap(v1[0][0] + x_offset     - pixel_offset) + fixed_width/2;
      
-      y[0] = subpixel_snap(v1[0][1] + y_offset     - setup->pixel_offset); 
-      y[1] = subpixel_snap(v2[0][1] + y_offset_end - setup->pixel_offset);
-      y[2] = subpixel_snap(v2[0][1] + y_offset_end - setup->pixel_offset);
-      y[3] = subpixel_snap(v1[0][1] + y_offset     - setup->pixel_offset);
+      y[0] = subpixel_snap(v1[0][1] + y_offset     - pixel_offset);
+      y[1] = subpixel_snap(v2[0][1] + y_offset_end - pixel_offset);
+      y[2] = subpixel_snap(v2[0][1] + y_offset_end - pixel_offset);
+      y[3] = subpixel_snap(v1[0][1] + y_offset     - pixel_offset);
    }
 
    /* Bounding rectangle (in pixels) */
@@ -670,7 +670,7 @@ try_setup_line( struct lp_setup_context *setup,
          plane[i].c++;
       }
       else if (plane[i].dcdx == 0) {
-         if (setup->pixel_offset == 0) {
+         if (pixel_offset == 0) {
             /* correct for top-left fill convention:
              */
             if (plane[i].dcdy > 0) plane[i].c++;