Module: Mesa
Branch: master
Commit: 5a47abb63e11853bf1f2f72e3c5371a720346b7d
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5a47abb63e11853bf1f2f72e3c5371a720346b7d

Author: Marek Olšák <[email protected]>
Date:   Thu Oct  5 21:29:35 2017 +0200

radeonsi: don't change viewport for blits, use window-space positions

The viewport state was an identity anyway.

Reviewed-by: Nicolai Hähnle <[email protected]>

---

 src/gallium/auxiliary/util/u_blitter.c           |  4 +++-
 src/gallium/auxiliary/util/u_blitter.h           |  1 +
 src/gallium/drivers/radeonsi/si_blit.c           |  1 -
 src/gallium/drivers/radeonsi/si_pipe.c           |  1 +
 src/gallium/drivers/radeonsi/si_state_draw.c     | 10 ----------
 src/gallium/drivers/radeonsi/si_state_shaders.c  |  1 +
 src/gallium/drivers/radeonsi/si_state_viewport.c |  7 -------
 7 files changed, 6 insertions(+), 19 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index a5c1f178a6..72e22e7d82 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -650,7 +650,9 @@ void util_blitter_restore_fragment_states(struct 
blitter_context *blitter)
    /* XXX check whether these are saved and whether they need to be restored
     * (depending on the operation) */
    pipe->set_stencil_ref(pipe, &ctx->base.saved_stencil_ref);
-   pipe->set_viewport_states(pipe, 0, 1, &ctx->base.saved_viewport);
+
+   if (!blitter->skip_viewport_restore)
+      pipe->set_viewport_states(pipe, 0, 1, &ctx->base.saved_viewport);
 }
 
 static void blitter_check_saved_fb_state(struct blitter_context_priv *ctx)
diff --git a/src/gallium/auxiliary/util/u_blitter.h 
b/src/gallium/auxiliary/util/u_blitter.h
index 0dd896d381..dba773906a 100644
--- a/src/gallium/auxiliary/util/u_blitter.h
+++ b/src/gallium/auxiliary/util/u_blitter.h
@@ -113,6 +113,7 @@ struct blitter_context
    struct pipe_stencil_ref saved_stencil_ref;     /**< stencil ref */
    struct pipe_viewport_state saved_viewport;
    struct pipe_scissor_state saved_scissor;
+   bool skip_viewport_restore;
    bool is_sample_mask_saved;
    unsigned saved_sample_mask;
 
diff --git a/src/gallium/drivers/radeonsi/si_blit.c 
b/src/gallium/drivers/radeonsi/si_blit.c
index b3f44c3c9a..40f8550592 100644
--- a/src/gallium/drivers/radeonsi/si_blit.c
+++ b/src/gallium/drivers/radeonsi/si_blit.c
@@ -68,7 +68,6 @@ static void si_blitter_begin(struct pipe_context *ctx, enum 
si_blitter_op op)
                util_blitter_save_stencil_ref(sctx->blitter, 
&sctx->stencil_ref.state);
                util_blitter_save_fragment_shader(sctx->blitter, 
sctx->ps_shader.cso);
                util_blitter_save_sample_mask(sctx->blitter, 
sctx->sample_mask.sample_mask);
-               util_blitter_save_viewport(sctx->blitter, 
&sctx->viewports.states[0]);
                util_blitter_save_scissor(sctx->blitter, 
&sctx->scissors.states[0]);
        }
 
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c 
b/src/gallium/drivers/radeonsi/si_pipe.c
index 3001a3a8cd..5cf71bec6a 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -255,6 +255,7 @@ static struct pipe_context *si_create_context(struct 
pipe_screen *screen,
        if (sctx->blitter == NULL)
                goto fail;
        sctx->blitter->draw_rectangle = si_draw_rectangle;
+       sctx->blitter->skip_viewport_restore = true;
 
        sctx->sample_mask.sample_mask = 0xffff;
 
diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c 
b/src/gallium/drivers/radeonsi/si_state_draw.c
index 8e541518ec..c6c15c1acf 100644
--- a/src/gallium/drivers/radeonsi/si_state_draw.c
+++ b/src/gallium/drivers/radeonsi/si_state_draw.c
@@ -1515,16 +1515,6 @@ void si_draw_rectangle(struct blitter_context *blitter,
 {
        struct pipe_context *pipe = util_blitter_get_pipe(blitter);
        struct si_context *sctx = (struct si_context*)pipe;
-       struct pipe_viewport_state viewport;
-
-       /* setup viewport */
-       viewport.scale[0] = 1.0f;
-       viewport.scale[1] = 1.0f;
-       viewport.scale[2] = 1.0f;
-       viewport.translate[0] = 0.0f;
-       viewport.translate[1] = 0.0f;
-       viewport.translate[2] = 0.0f;
-       pipe->set_viewport_states(pipe, 0, 1, &viewport);
 
        /* Pack position coordinates as signed int16. */
        sctx->vs_blit_sh_data[0] = (uint32_t)(x1 & 0xffff) |
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 90c3cf7e63..40a76c85f3 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -3442,6 +3442,7 @@ void *si_get_blit_vs(struct si_context *sctx, enum 
blitter_attrib_type type,
 
        /* Tell the shader to load VS inputs from SGPRs: */
        ureg_property(ureg, TGSI_PROPERTY_VS_BLIT_SGPRS, vs_blit_property);
+       ureg_property(ureg, TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION, true);
 
        /* This is just a pass-through shader with 1-3 MOV instructions. */
        ureg_MOV(ureg,
diff --git a/src/gallium/drivers/radeonsi/si_state_viewport.c 
b/src/gallium/drivers/radeonsi/si_state_viewport.c
index 0d6b7a8da8..f416558475 100644
--- a/src/gallium/drivers/radeonsi/si_state_viewport.c
+++ b/src/gallium/drivers/radeonsi/si_state_viewport.c
@@ -63,13 +63,6 @@ static void si_get_scissor_from_viewport(struct si_context 
*ctx,
        maxx = vp->scale[0] + vp->translate[0];
        maxy = vp->scale[1] + vp->translate[1];
 
-       /* r600_draw_rectangle sets this. Disable the scissor. */
-       if (minx == -1 && miny == -1 && maxx == 1 && maxy == 1) {
-               scissor->minx = scissor->miny = 0;
-               scissor->maxx = scissor->maxy = SI_MAX_SCISSOR;
-               return;
-       }
-
        /* Handle inverted viewports. */
        if (minx > maxx) {
                tmp = minx;

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to