Mesa (main): freedreno: Add missing valid range tracking for SSBOs/images
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 11 02:06:15 UTC 2021
Module: Mesa
Branch: main
Commit: 5a32976a1d8f0308a117839ddf66fd84378a7da6
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5a32976a1d8f0308a117839ddf66fd84378a7da6
Author: Rob Clark <robdclark at chromium.org>
Date: Thu Jun 10 14:20:36 2021 -0700
freedreno: Add missing valid range tracking for SSBOs/images
Normally TC takes care of this for us. But we might as well not get it
wrong in cases where TC is disabled.
Reported-by: Alyssa Rosenzweig <alyssa at collabora.com>
Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11311>
---
src/gallium/drivers/freedreno/freedreno_state.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c
index 8e12fdbb1af..6ff9c1e1e0f 100644
--- a/src/gallium/drivers/freedreno/freedreno_state.c
+++ b/src/gallium/drivers/freedreno/freedreno_state.c
@@ -169,6 +169,13 @@ fd_set_shader_buffers(struct pipe_context *pctx, enum pipe_shader_type shader,
fd_resource_set_usage(buffers[i].buffer, FD_DIRTY_SSBO);
so->enabled_mask |= BIT(n);
+
+ if (writable_bitmask & BIT(i)) {
+ struct fd_resource *rsc = fd_resource(buf->buffer);
+ util_range_add(&rsc->b.b, &rsc->valid_buffer_range,
+ buf->buffer_offset,
+ buf->buffer_offset + buf->buffer_size);
+ }
} else {
pipe_resource_reference(&buf->buffer, NULL);
}
@@ -205,6 +212,15 @@ fd_set_shader_images(struct pipe_context *pctx, enum pipe_shader_type shader,
if (buf->resource) {
fd_resource_set_usage(buf->resource, FD_DIRTY_IMAGE);
so->enabled_mask |= BIT(n);
+
+ if ((buf->access & PIPE_IMAGE_ACCESS_WRITE) &&
+ (buf->resource->target == PIPE_BUFFER)) {
+
+ struct fd_resource *rsc = fd_resource(buf->resource);
+ util_range_add(&rsc->b.b, &rsc->valid_buffer_range,
+ buf->u.buf.offset,
+ buf->u.buf.offset + buf->u.buf.size);
+ }
} else {
so->enabled_mask &= ~BIT(n);
}
More information about the mesa-commit
mailing list