Module: Mesa Branch: master Commit: f62cad6b7f8d6061dccc1fe548aee1477805d3e8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f62cad6b7f8d6061dccc1fe548aee1477805d3e8
Author: Rob Clark <[email protected]> Date: Wed Apr 22 15:26:02 2020 -0700 freedreno: scissor vs disabled scissor micro-opt We don't need to deref and check rast state every time scissor changes, only when rast state changes. Signed-off-by: Rob Clark <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4813> --- src/gallium/drivers/freedreno/freedreno_context.c | 2 ++ src/gallium/drivers/freedreno/freedreno_context.h | 7 ++++--- src/gallium/drivers/freedreno/freedreno_state.c | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/freedreno/freedreno_context.c b/src/gallium/drivers/freedreno/freedreno_context.c index 7c9eb4186b2..17a40a9fa6a 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.c +++ b/src/gallium/drivers/freedreno/freedreno_context.c @@ -427,6 +427,8 @@ fd_context_init(struct fd_context *ctx, struct pipe_screen *pscreen, list_add(&ctx->node, &ctx->screen->context_list); fd_screen_unlock(ctx->screen); + ctx->current_scissor = &ctx->disabled_scissor; + ctx->log_out = stdout; if ((fd_mesa_debug & FD_DBG_LOG) && diff --git a/src/gallium/drivers/freedreno/freedreno_context.h b/src/gallium/drivers/freedreno/freedreno_context.h index b6a8aa3bf5f..b3a0f212dd0 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.h +++ b/src/gallium/drivers/freedreno/freedreno_context.h @@ -278,6 +278,9 @@ struct fd_context { */ bool in_discard_blit : 1; + /* points to either scissor or disabled_scissor depending on rast state: */ + struct pipe_scissor_state *current_scissor; + struct pipe_scissor_state scissor; /* we don't have a disable/enable bit for scissor, so instead we keep @@ -463,9 +466,7 @@ fd_context_all_clean(struct fd_context *ctx) static inline struct pipe_scissor_state * fd_context_get_scissor(struct fd_context *ctx) { - if (ctx->rasterizer && ctx->rasterizer->scissor) - return &ctx->scissor; - return &ctx->disabled_scissor; + return ctx->current_scissor; } static inline bool diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c index b2e8c53676c..698ca82e521 100644 --- a/src/gallium/drivers/freedreno/freedreno_state.c +++ b/src/gallium/drivers/freedreno/freedreno_state.c @@ -400,6 +400,12 @@ fd_rasterizer_state_bind(struct pipe_context *pctx, void *hwcso) ctx->rasterizer = hwcso; ctx->dirty |= FD_DIRTY_RASTERIZER; + if (ctx->rasterizer && ctx->rasterizer->scissor) { + ctx->current_scissor = &ctx->scissor; + } else { + ctx->current_scissor = &ctx->disabled_scissor; + } + /* if scissor enable bit changed we need to mark scissor * state as dirty as well: * NOTE: we can do a shallow compare, since we only care _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
