summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2018-09-10 10:58:28 -0400
committerRob Clark <[email protected]>2018-09-27 15:27:38 -0400
commitef6d15f8a86128251cb6320f7dcda0ee9e36d86a (patch)
tree90fe67f95debc37dac11b6bdd47a88c3079a5453
parent5bb96bf73a1b2a9978c4cb766477e453610345f1 (diff)
freedreno: fix corrupted fb state
In c3d9f29b we allowed ctx->batch to be null, and started tracking the current framebuffer state in fd_context. But the existing logic in fd_blitter_pipe_begin() would, if !ctx->batch, set null fb state to be restored after blit. Which broke the world of deqp (and probably other things) Fixes: c3d9f29b781 freedreno: allocate ctx's batch on demand Signed-off-by: Rob Clark <[email protected]>
-rw-r--r--src/gallium/drivers/freedreno/freedreno_resource.c3
-rw-r--r--src/gallium/drivers/freedreno/freedreno_state.c4
2 files changed, 5 insertions, 2 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c
index 344004f6965..88d420bdf3e 100644
--- a/src/gallium/drivers/freedreno/freedreno_resource.c
+++ b/src/gallium/drivers/freedreno/freedreno_resource.c
@@ -1085,8 +1085,7 @@ fd_blitter_pipe_begin(struct fd_context *ctx, bool render_cond, bool discard,
util_blitter_save_depth_stencil_alpha(ctx->blitter, ctx->zsa);
util_blitter_save_stencil_ref(ctx->blitter, &ctx->stencil_ref);
util_blitter_save_sample_mask(ctx->blitter, ctx->sample_mask);
- util_blitter_save_framebuffer(ctx->blitter,
- ctx->batch ? &ctx->batch->framebuffer : NULL);
+ util_blitter_save_framebuffer(ctx->blitter, &ctx->framebuffer);
util_blitter_save_fragment_sampler_states(ctx->blitter,
ctx->tex[PIPE_SHADER_FRAGMENT].num_samplers,
(void **)ctx->tex[PIPE_SHADER_FRAGMENT].samplers);
diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c
index 3ce8b6ed9fc..a50ae383b23 100644
--- a/src/gallium/drivers/freedreno/freedreno_state.c
+++ b/src/gallium/drivers/freedreno/freedreno_state.c
@@ -211,6 +211,10 @@ fd_set_framebuffer_state(struct pipe_context *pctx,
struct fd_context *ctx = fd_context(pctx);
struct pipe_framebuffer_state *cso;
+ DBG("%ux%u, %u layers, %u samples",
+ framebuffer->width, framebuffer->height,
+ framebuffer->layers, framebuffer->samples);
+
if (ctx->screen->reorder) {
struct fd_batch *old_batch = NULL;