diff options
author | Marek Olšák <marek.olsak@amd.com> | 2016-06-02 23:30:01 +0200 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2016-06-07 11:12:26 +0200 |
commit | 9e5b5fbde0b445df1a3265b33e2ac890d6505409 (patch) | |
tree | 816f3c99493bdb404f60c40865cc237995cb2c26 /src/gallium/drivers/radeonsi/si_descriptors.c | |
parent | c6b14bafa446d1556eb0dd344de34288617e1278 (diff) | |
download | external_mesa3d-9e5b5fbde0b445df1a3265b33e2ac890d6505409.zip external_mesa3d-9e5b5fbde0b445df1a3265b33e2ac890d6505409.tar.gz external_mesa3d-9e5b5fbde0b445df1a3265b33e2ac890d6505409.tar.bz2 |
gallium/radeon: don't discard DCC if an external user can write to it
We don't import textures with DCC now, but soon we will.
v2: if we can't disable DCC for image writes, at least decompress DCC
at bind time
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_descriptors.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_descriptors.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index f48ddb7..9ddb142 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -570,8 +570,14 @@ static void si_set_shader_image(struct si_context *ctx, assert(tex->fmask.size == 0); if (tex->dcc_offset && - view->access & PIPE_IMAGE_ACCESS_WRITE) - r600_texture_disable_dcc(&screen->b, tex); + view->access & PIPE_IMAGE_ACCESS_WRITE) { + /* If DCC can't be disabled, at least decompress it. + * The decompression is relatively cheap if the surface + * has been decompressed already. + */ + if (!r600_texture_disable_dcc(&screen->b, tex)) + ctx->b.decompress_dcc(&ctx->b.b, tex); + } if (is_compressed_colortex(tex)) { images->compressed_colortex_mask |= 1 << slot; |