aux/draw: check for lines when setting clipping-mode
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Wed, 3 May 2023 17:24:58 +0000 (19:24 +0200)
committerMarge Bot <emma+marge@anholt.net>
Mon, 8 May 2023 16:55:50 +0000 (16:55 +0000)
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17284>

src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c

index 4991951..3b3921b 100644 (file)
@@ -81,8 +81,10 @@ fetch_pipeline_prepare(struct draw_pt_middle_end *middle,
                                  u_assembled_prim(prim));
    unsigned nr_vs_outputs = draw_total_vs_outputs(draw);
    unsigned nr = MAX2(vs->info.num_inputs, nr_vs_outputs);
-   unsigned point_clip = draw->rasterizer->fill_front == PIPE_POLYGON_MODE_POINT ||
-                         gs_out_prim == PIPE_PRIM_POINTS;
+   unsigned point_line_clip = draw->rasterizer->fill_front == PIPE_POLYGON_MODE_POINT ||
+                              draw->rasterizer->fill_front == PIPE_POLYGON_MODE_LINE ||
+                              gs_out_prim == PIPE_PRIM_POINTS ||
+                              gs_out_prim == PIPE_PRIM_LINE_STRIP;
 
    if (gs) {
       nr = MAX2(nr, gs->info.num_outputs + 1);
@@ -114,8 +116,8 @@ fetch_pipeline_prepare(struct draw_pt_middle_end *middle,
                            draw->clip_xy,
                            draw->clip_z,
                            draw->clip_user,
-                           point_clip ? draw->guard_band_points_lines_xy :
-                                        draw->guard_band_xy,
+                           point_line_clip ? draw->guard_band_points_lines_xy :
+                                             draw->guard_band_xy,
                            draw->bypass_viewport,
                            draw->rasterizer->clip_halfz,
                            (draw->vs.edgeflag_output ? TRUE : FALSE));
index 78777dc..41389a7 100644 (file)
@@ -289,8 +289,10 @@ llvm_middle_end_prepare(struct draw_pt_middle_end *middle,
    const enum pipe_prim_type out_prim =
       gs ? gs->output_primitive : tes ? get_tes_output_prim(tes) :
       u_assembled_prim(in_prim);
-   unsigned point_clip = draw->rasterizer->fill_front == PIPE_POLYGON_MODE_POINT ||
-                         out_prim == PIPE_PRIM_POINTS;
+   unsigned point_line_clip = draw->rasterizer->fill_front == PIPE_POLYGON_MODE_POINT ||
+                              draw->rasterizer->fill_front == PIPE_POLYGON_MODE_LINE ||
+                              out_prim == PIPE_PRIM_POINTS ||
+                              u_reduced_prim(out_prim) == PIPE_PRIM_LINES;
 
    fpme->input_prim = in_prim;
    fpme->opt = opt;
@@ -299,8 +301,8 @@ llvm_middle_end_prepare(struct draw_pt_middle_end *middle,
                            draw->clip_xy,
                            draw->clip_z,
                            draw->clip_user,
-                           point_clip ? draw->guard_band_points_lines_xy :
-                                        draw->guard_band_xy,
+                           point_line_clip ? draw->guard_band_points_lines_xy :
+                                             draw->guard_band_xy,
                            draw->bypass_viewport,
                            draw->rasterizer->clip_halfz,
                            (draw->vs.edgeflag_output ? TRUE : FALSE));