radeonsi: add ability to bind images as image buffers

so that we can bind DCC (texture) as an image buffer.
This commit is contained in:
Marek Olšák 2019-01-04 19:27:27 -05:00
parent fe3bfd7971
commit 029bfa3d25
2 changed files with 8 additions and 3 deletions

View File

@ -669,7 +669,8 @@ si_mark_image_range_valid(const struct pipe_image_view *view)
{ {
struct si_resource *res = si_resource(view->resource); 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, util_range_add(&res->valid_buffer_range,
view->u.buf.offset, view->u.buf.offset,
@ -686,7 +687,8 @@ static void si_set_shader_image_desc(struct si_context *ctx,
res = si_resource(view->resource); 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) if (view->access & PIPE_IMAGE_ACCESS_WRITE)
si_mark_image_range_valid(view); 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); 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); images->needs_color_decompress_mask &= ~(1 << slot);
res->bind_history |= PIPE_BIND_SHADER_IMAGE; res->bind_history |= PIPE_BIND_SHADER_IMAGE;
} else { } else {

View File

@ -123,6 +123,8 @@ enum si_clear_code
DCC_UNCOMPRESSED = 0xFFFFFFFF, DCC_UNCOMPRESSED = 0xFFFFFFFF,
}; };
#define SI_IMAGE_ACCESS_AS_BUFFER (1 << 7)
/* Debug flags. */ /* Debug flags. */
enum { enum {
/* Shader logging options: */ /* Shader logging options: */