From: Nicolai Hähnle <nicolai.haeh...@amd.com>

We'll use it in the scissors / clip / guardband state.

Cc: mesa-sta...@lists.freedesktop.org
---
 src/gallium/drivers/radeon/r600_pipe_common.h   | 1 +
 src/gallium/drivers/radeonsi/si_pipe.h          | 1 -
 src/gallium/drivers/radeonsi/si_state_draw.c    | 8 ++++----
 src/gallium/drivers/radeonsi/si_state_shaders.c | 8 ++++----
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h 
b/src/gallium/drivers/radeon/r600_pipe_common.h
index debedd402b4..f6ded92dc5b 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -592,20 +592,21 @@ struct r600_common_context {
        struct r600_streamout           streamout;
        struct r600_scissors            scissors;
        struct r600_viewports           viewports;
        bool                            scissor_enabled;
        bool                            clip_halfz;
        bool                            vs_writes_viewport_index;
        bool                            vs_disables_clipping_viewport;
 
        /* Additional context states. */
        unsigned flags; /* flush flags */
+       enum pipe_prim_type             current_rast_prim; /* primitive type 
after TES, GS */
 
        /* Queries. */
        /* Maintain the list of active queries for pausing between IBs. */
        int                             num_occlusion_queries;
        int                             num_perfect_occlusion_queries;
        struct list_head                active_queries;
        unsigned                        num_cs_dw_queries_suspend;
        /* Misc stats. */
        unsigned                        num_draw_calls;
        unsigned                        num_decompress_calls;
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h 
b/src/gallium/drivers/radeonsi/si_pipe.h
index 46c89e2f38a..08d47ea414e 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -402,21 +402,20 @@ struct si_context {
        int                     last_sh_base_reg;
        int                     last_primitive_restart_en;
        int                     last_restart_index;
        int                     last_gs_out_prim;
        int                     last_prim;
        int                     last_multi_vgt_param;
        int                     last_rast_prim;
        unsigned                last_sc_line_stipple;
        unsigned                current_vs_state;
        unsigned                last_vs_state;
-       enum pipe_prim_type     current_rast_prim; /* primitive type after TES, 
GS */
 
        /* Scratch buffer */
        struct r600_atom        scratch_state;
        struct r600_resource    *scratch_buffer;
        unsigned                scratch_waves;
        unsigned                spi_tmpring_size;
 
        struct r600_resource    *compute_scratch_buffer;
 
        /* Emitted derived tessellation state. */
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c 
b/src/gallium/drivers/radeonsi/si_state_draw.c
index 0a672c503fd..e4f592c3845 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -524,21 +524,21 @@ static unsigned si_get_ia_multi_vgt_param(struct 
si_context *sctx,
                        sctx->b.flags |= SI_CONTEXT_VGT_FLUSH;
        }
 
        return ia_multi_vgt_param;
 }
 
 /* rast_prim is the primitive type after GS. */
 static void si_emit_rasterizer_prim_state(struct si_context *sctx)
 {
        struct radeon_winsys_cs *cs = sctx->b.gfx.cs;
-       enum pipe_prim_type rast_prim = sctx->current_rast_prim;
+       enum pipe_prim_type rast_prim = sctx->b.current_rast_prim;
        struct si_state_rasterizer *rs = sctx->emitted.named.rasterizer;
 
        /* Skip this if not rendering lines. */
        if (rast_prim != PIPE_PRIM_LINES &&
            rast_prim != PIPE_PRIM_LINE_LOOP &&
            rast_prim != PIPE_PRIM_LINE_STRIP &&
            rast_prim != PIPE_PRIM_LINES_ADJACENCY &&
            rast_prim != PIPE_PRIM_LINE_STRIP_ADJACENCY)
                return;
 
@@ -574,21 +574,21 @@ static void si_emit_vs_state(struct si_context *sctx,
                sctx->last_vs_state = sctx->current_vs_state;
        }
 }
 
 static void si_emit_draw_registers(struct si_context *sctx,
                                   const struct pipe_draw_info *info,
                                   unsigned num_patches)
 {
        struct radeon_winsys_cs *cs = sctx->b.gfx.cs;
        unsigned prim = si_conv_pipe_prim(info->mode);
-       unsigned gs_out_prim = si_conv_prim_to_gs_out(sctx->current_rast_prim);
+       unsigned gs_out_prim = 
si_conv_prim_to_gs_out(sctx->b.current_rast_prim);
        unsigned ia_multi_vgt_param;
 
        ia_multi_vgt_param = si_get_ia_multi_vgt_param(sctx, info, num_patches);
 
        /* Draw state. */
        if (ia_multi_vgt_param != sctx->last_multi_vgt_param) {
                if (sctx->b.chip_class >= GFX9)
                        radeon_set_uconfig_reg_idx(cs, 
R_030960_IA_MULTI_VGT_PARAM, 4, ia_multi_vgt_param);
                else if (sctx->b.chip_class >= CIK)
                        radeon_set_context_reg_idx(cs, 
R_028AA8_IA_MULTI_VGT_PARAM, 1, ia_multi_vgt_param);
@@ -1247,22 +1247,22 @@ void si_draw_vbo(struct pipe_context *ctx, const struct 
pipe_draw_info *info)
         * This must be done after si_decompress_textures, which can call
         * draw_vbo recursively, and before si_update_shaders, which uses
         * current_rast_prim for this draw_vbo call. */
        if (sctx->gs_shader.cso)
                rast_prim = sctx->gs_shader.cso->gs_output_prim;
        else if (sctx->tes_shader.cso)
                rast_prim = 
sctx->tes_shader.cso->info.properties[TGSI_PROPERTY_TES_PRIM_MODE];
        else
                rast_prim = info->mode;
 
-       if (rast_prim != sctx->current_rast_prim) {
-               sctx->current_rast_prim = rast_prim;
+       if (rast_prim != sctx->b.current_rast_prim) {
+               sctx->b.current_rast_prim = rast_prim;
                sctx->do_update_shaders = true;
        }
 
        if (sctx->tes_shader.cso &&
            (sctx->b.family == CHIP_VEGA10 || sctx->b.family == CHIP_RAVEN)) {
                /* Determine whether the LS VGPR fix should be applied.
                 *
                 * It is only required when num input CPs > num output CPs,
                 * which cannot happen with the fixed function TCS. We should
                 * also update this bit when switching from TCS to fixed
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 889cd8e7246..1146e5e3949 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1401,24 +1401,24 @@ static inline void si_shader_selector_key(struct 
pipe_context *ctx,
                }
 
                /* Disable unwritten outputs (if WRITE_ALL_CBUFS isn't 
enabled). */
                if (!key->part.ps.epilog.last_cbuf) {
                        key->part.ps.epilog.spi_shader_col_format &= 
sel->colors_written_4bit;
                        key->part.ps.epilog.color_is_int8 &= 
sel->info.colors_written;
                        key->part.ps.epilog.color_is_int10 &= 
sel->info.colors_written;
                }
 
                if (rs) {
-                       bool is_poly = (sctx->current_rast_prim >= 
PIPE_PRIM_TRIANGLES &&
-                                       sctx->current_rast_prim <= 
PIPE_PRIM_POLYGON) ||
-                                      sctx->current_rast_prim >= 
PIPE_PRIM_TRIANGLES_ADJACENCY;
-                       bool is_line = !is_poly && sctx->current_rast_prim != 
PIPE_PRIM_POINTS;
+                       bool is_poly = (sctx->b.current_rast_prim >= 
PIPE_PRIM_TRIANGLES &&
+                                       sctx->b.current_rast_prim <= 
PIPE_PRIM_POLYGON) ||
+                                      sctx->b.current_rast_prim >= 
PIPE_PRIM_TRIANGLES_ADJACENCY;
+                       bool is_line = !is_poly && sctx->b.current_rast_prim != 
PIPE_PRIM_POINTS;
 
                        key->part.ps.prolog.color_two_side = rs->two_side && 
sel->info.colors_read;
                        key->part.ps.prolog.flatshade_colors = rs->flatshade && 
sel->info.colors_read;
 
                        if (sctx->queued.named.blend) {
                                key->part.ps.epilog.alpha_to_one = 
sctx->queued.named.blend->alpha_to_one &&
                                                              
rs->multisample_enable;
                        }
 
                        key->part.ps.prolog.poly_stipple = 
rs->poly_stipple_enable && is_poly;
-- 
2.11.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to