Mesa (master): r600: fix rendering regression on r6/7 gpus

Dave Airlie airlied at kemper.freedesktop.org
Wed Feb 7 23:37:30 UTC 2018


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Thu Feb  8 08:12:36 2018 +1000

r600: fix rendering regression on r6/7 gpus

Fixes: 2d5b5d267e (r600: work out target mask at framebuffer bind.)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104989

Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/gallium/drivers/r600/r600_state.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
index 5cf99c18b6..7f6da1a3ed 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -1088,6 +1088,7 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
 	struct r600_surface *surf;
 	struct r600_texture *rtex;
 	unsigned i;
+	uint32_t target_mask = 0;
 
 	/* Flush TC when changing the framebuffer state, because the only
 	 * client not using TC that can change textures is the framebuffer.
@@ -1128,6 +1129,8 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
 		rtex = (struct r600_texture*)surf->base.texture;
 		r600_context_add_resource_size(ctx, state->cbufs[i]->texture);
 
+		target_mask |= (0xf << (i * 4));
+
 		if (!surf->color_initialized || force_cmask_fmask) {
 			r600_init_color_surface(rctx, surf, force_cmask_fmask);
 			if (force_cmask_fmask) {
@@ -1187,7 +1190,9 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
 		r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom);
 	}
 
-	if (rctx->cb_misc_state.nr_cbufs != state->nr_cbufs) {
+	if (rctx->cb_misc_state.nr_cbufs != state->nr_cbufs ||
+	    rctx->cb_misc_state.bound_cbufs_target_mask != target_mask) {
+		rctx->cb_misc_state.bound_cbufs_target_mask = target_mask;
 		rctx->cb_misc_state.nr_cbufs = state->nr_cbufs;
 		r600_mark_atom_dirty(rctx, &rctx->cb_misc_state.atom);
 	}




More information about the mesa-commit mailing list