diff options
Diffstat (limited to '0001-radeonsi-fix-a-regression-in-si_rebind_buffer.patch')
-rw-r--r-- | 0001-radeonsi-fix-a-regression-in-si_rebind_buffer.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/0001-radeonsi-fix-a-regression-in-si_rebind_buffer.patch b/0001-radeonsi-fix-a-regression-in-si_rebind_buffer.patch new file mode 100644 index 000000000000..b9c5609d75c0 --- /dev/null +++ b/0001-radeonsi-fix-a-regression-in-si_rebind_buffer.patch @@ -0,0 +1,61 @@ +From a879a55525c0dc5b7f647d96779b475323988363 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com> +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 <mesa-stable@lists.freedesktop.org> +--- + 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 84c9d674981..1cb0ac93caa 100644 +--- a/src/gallium/drivers/radeonsi/si_descriptors.c ++++ b/src/gallium/drivers/radeonsi/si_descriptors.c +@@ -1705,7 +1705,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), +@@ -1735,7 +1736,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) +@@ -1766,7 +1768,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 + +@@ -1793,7 +1796,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); + +-- +2.17.1 + |