From c1e08cb6d50cd7ee41478f47d92413a3ba089261 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 27 Aug 2019 14:37:24 -0400 Subject: [PATCH] radeonsi: disable DCC when importing a texture from an incompatible driver and unify the code. Reviewed-by: Pierre-Eric Pelloux-Prayer --- src/gallium/drivers/radeonsi/si_texture.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index be614e66440..cb239c3a6e6 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -443,6 +443,13 @@ static bool si_can_disable_dcc(struct si_texture *tex) !(tex->buffer.external_usage & PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE)); } +static void si_texture_zero_dcc_fields(struct si_texture *tex) +{ + tex->dcc_offset = 0; + tex->display_dcc_offset = 0; + tex->dcc_retile_map_offset = 0; +} + static bool si_texture_discard_dcc(struct si_screen *sscreen, struct si_texture *tex) { @@ -454,9 +461,7 @@ static bool si_texture_discard_dcc(struct si_screen *sscreen, assert(tex->dcc_separate_buffer == NULL); /* Disable DCC. */ - tex->dcc_offset = 0; - tex->display_dcc_offset = 0; - tex->dcc_retile_map_offset = 0; + si_texture_zero_dcc_fields(tex); /* Notify all contexts about the change. */ p_atomic_inc(&sscreen->dirty_tex_counter); @@ -755,6 +760,9 @@ static bool si_read_tex_bo_metadata(struct si_screen *sscreen, if (md->size_metadata < 10 * 4 || /* at least 2(header) + 8(desc) dwords */ md->metadata[0] == 0 || /* invalid version number */ md->metadata[1] != si_get_bo_metadata_word1(sscreen)) /* invalid PCI ID */ { + /* Disable DCC because it might not be enabled. */ + si_texture_zero_dcc_fields(tex); + /* Don't report an error if the texture comes from an incompatible driver, * but this might not work. */ @@ -829,7 +837,7 @@ static bool si_read_tex_bo_metadata(struct si_screen *sscreen, /* Disable DCC. dcc_offset is always set by texture_from_handle * and must be cleared here. */ - tex->dcc_offset = 0; + si_texture_zero_dcc_fields(tex); } return true; -- 2.30.2