summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2019-01-04 19:27:27 -0500
committerMarek Olšák <marek.olsak@amd.com>2019-04-04 09:53:24 -0400
commit029bfa3d253ca70186e245ccf0a7e17bb40a5bab (patch)
treee68dc746b5f2bd0533f927764219b8827a1161df
parentfe3bfd7971bf20a663e949a0a5633492a9412889 (diff)
radeonsi: add ability to bind images as image buffers
so that we can bind DCC (texture) as an image buffer.
-rw-r--r--src/gallium/drivers/radeonsi/si_descriptors.c9
-rw-r--r--src/gallium/drivers/radeonsi/si_pipe.h2
2 files changed, 8 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index 0f22c55723c..ce67bdb87c8 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -669,7 +669,8 @@ si_mark_image_range_valid(const struct pipe_image_view *view)
{
struct si_resource *res = si_resource(view->resource);
- assert(res && res->b.b.target == PIPE_BUFFER);
+ if (res->b.b.target != PIPE_BUFFER)
+ return;
util_range_add(&res->valid_buffer_range,
view->u.buf.offset,
@@ -686,7 +687,8 @@ static void si_set_shader_image_desc(struct si_context *ctx,
res = si_resource(view->resource);
- if (res->b.b.target == PIPE_BUFFER) {
+ if (res->b.b.target == PIPE_BUFFER ||
+ view->shader_access & SI_IMAGE_ACCESS_AS_BUFFER) {
if (view->access & PIPE_IMAGE_ACCESS_WRITE)
si_mark_image_range_valid(view);
@@ -787,7 +789,8 @@ static void si_set_shader_image(struct si_context *ctx,
si_set_shader_image_desc(ctx, view, skip_decompress, desc, NULL);
- if (res->b.b.target == PIPE_BUFFER) {
+ if (res->b.b.target == PIPE_BUFFER ||
+ view->shader_access & SI_IMAGE_ACCESS_AS_BUFFER) {
images->needs_color_decompress_mask &= ~(1 << slot);
res->bind_history |= PIPE_BIND_SHADER_IMAGE;
} else {
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index 16bd074f998..010374fde04 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -123,6 +123,8 @@ enum si_clear_code
DCC_UNCOMPRESSED = 0xFFFFFFFF,
};
+#define SI_IMAGE_ACCESS_AS_BUFFER (1 << 7)
+
/* Debug flags. */
enum {
/* Shader logging options: */