From 60d524fd39155fc9d3343b61bd0e21da790ef8c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 21 May 2019 14:26:13 -0400 Subject: [PATCH] radeonsi: fix a regression in si_rebind_buffer Don't update non-buffer images. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110701 Fixes: 78e35df52aa2f7d770f929a0866a0faa89c261a9 "radeonsi: update buffer descriptors in all contexts after buffer invalidation" Cc: 19.1 Tested-By: Gert Wollny (cherry picked from commit d6053bf2a170a0fec6d232fda097d2f35f0e9eae) --- src/gallium/drivers/radeonsi/si_descriptors.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index 6a4dcacc0f3..ca25d424fb5 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -1719,7 +1719,8 @@ void si_rebind_buffer(struct si_context *sctx, struct pipe_resource *buf) unsigned i = u_bit_scan(&mask); struct pipe_resource *buffer = samplers->views[i]->texture; - if (buffer && (!buf || buffer == buf)) { + if (buffer && buffer->target == PIPE_BUFFER && + (!buf || buffer == buf)) { unsigned desc_slot = si_get_sampler_slot(i); si_set_buf_desc_address(si_resource(buffer), @@ -1749,7 +1750,8 @@ void si_rebind_buffer(struct si_context *sctx, struct pipe_resource *buf) unsigned i = u_bit_scan(&mask); struct pipe_resource *buffer = images->views[i].resource; - if (buffer && (!buf || buffer == buf)) { + if (buffer && buffer->target == PIPE_BUFFER && + (!buf || buffer == buf)) { unsigned desc_slot = si_get_image_slot(i); if (images->views[i].access & PIPE_IMAGE_ACCESS_WRITE) @@ -1780,7 +1782,8 @@ void si_rebind_buffer(struct si_context *sctx, struct pipe_resource *buf) unsigned desc_slot = (*tex_handle)->desc_slot; struct pipe_resource *buffer = view->texture; - if (buffer && (!buf || buffer == buf)) { + if (buffer && buffer->target == PIPE_BUFFER && + (!buf || buffer == buf)) { si_set_buf_desc_address(si_resource(buffer), view->u.buf.offset, descs->list + @@ -1807,7 +1810,8 @@ void si_rebind_buffer(struct si_context *sctx, struct pipe_resource *buf) unsigned desc_slot = (*img_handle)->desc_slot; struct pipe_resource *buffer = view->resource; - if (buffer && (!buf || buffer == buf)) { + if (buffer && buffer->target == PIPE_BUFFER && + (!buf || buffer == buf)) { if (view->access & PIPE_IMAGE_ACCESS_WRITE) si_mark_image_range_valid(view);