summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-06-14 12:26:19 -0700
committerAlyssa Rosenzweig <[email protected]>2019-06-17 07:59:14 -0700
commit6460442049012977a96e84307a128d2b7c27abfd (patch)
tree16d4d31522f99ad8393657dc11a60fd5d14ebe20 /src
parentfc3f57bd7fb5ccb5f1daac5d30f787f1538fb9ec (diff)
panfrost: Flush scanout too
In a poorly coded app, the framebuffer can be partially drawn, an FBO switched, switch back to the framebuffer and keep drawing, etc. Reordering would fix this, but for now we need to just be careful about flushing scanout too. Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index bce57625163..b6839e71ca1 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -2153,12 +2153,15 @@ panfrost_set_framebuffer_state(struct pipe_context *pctx,
{
struct panfrost_context *ctx = pan_context(pctx);
- /* Flush when switching away from an FBO, but not if the framebuffer
+ /* Flush when switching framebuffers, but not if the framebuffer
* state is being restored by u_blitter
*/
- if (!panfrost_is_scanout(ctx) && !ctx->blitter->running) {
- panfrost_flush(pctx, NULL, 0);
+ bool is_scanout = panfrost_is_scanout(ctx);
+ bool has_draws = ctx->draw_count > 0;
+
+ if (!ctx->blitter->running && (!is_scanout || has_draws)) {
+ panfrost_flush(pctx, NULL, PIPE_FLUSH_END_OF_FRAME);
}
ctx->pipe_framebuffer.nr_cbufs = fb->nr_cbufs;