From 89319a0dfde4bb548fcd848e4c253961bce8bd68 Mon Sep 17 00:00:00 2001 From: Nanley Chery Date: Fri, 3 Sep 2021 13:53:40 -0700 Subject: [PATCH] iris: Split clear color and aux BO checks CCS_E-enabled resources on XeHP have a clear color without an aux BO. Reviewed-by: Kenneth Graunke Part-of: --- src/gallium/drivers/iris/iris_state.c | 49 ++++++++++++++------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 12d6f330c2a..f31ad632e8c 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -4805,23 +4805,23 @@ use_surface(struct iris_context *ice, &surf->surface_state); } - if (res->aux.bo) { - iris_use_pinned_bo(batch, res->aux.bo, writeable, access); - if (res->aux.clear_color_bo) - iris_use_pinned_bo(batch, res->aux.clear_color_bo, false, access); - - if (memcmp(&res->aux.clear_color, &surf->clear_color, - sizeof(surf->clear_color)) != 0) { - update_clear_value(ice, batch, res, &surf->surface_state, - res->aux.possible_usages, &surf->view); - if (GFX_VER == 8) { - update_clear_value(ice, batch, res, &surf->surface_state_read, - res->aux.possible_usages, &surf->read_view); - } - surf->clear_color = res->aux.clear_color; + if (memcmp(&res->aux.clear_color, &surf->clear_color, + sizeof(surf->clear_color)) != 0) { + update_clear_value(ice, batch, res, &surf->surface_state, + res->aux.possible_usages, &surf->view); + if (GFX_VER == 8) { + update_clear_value(ice, batch, res, &surf->surface_state_read, + res->aux.possible_usages, &surf->read_view); } + surf->clear_color = res->aux.clear_color; } + if (res->aux.clear_color_bo) + iris_use_pinned_bo(batch, res->aux.clear_color_bo, false, access); + + if (res->aux.bo) + iris_use_pinned_bo(batch, res->aux.bo, writeable, access); + iris_use_pinned_bo(batch, iris_resource_bo(p_surf->texture), writeable, access); if (GFX_VER == 8 && is_read_surface) { @@ -4851,18 +4851,21 @@ use_sampler_view(struct iris_context *ice, if (!isv->surface_state.ref.res) upload_surface_states(ice->state.surface_uploader, &isv->surface_state); + if (memcmp(&isv->res->aux.clear_color, &isv->clear_color, + sizeof(isv->clear_color)) != 0) { + update_clear_value(ice, batch, isv->res, &isv->surface_state, + isv->res->aux.sampler_usages, &isv->view); + isv->clear_color = isv->res->aux.clear_color; + } + + if (isv->res->aux.clear_color_bo) { + iris_use_pinned_bo(batch, isv->res->aux.clear_color_bo, + false, IRIS_DOMAIN_OTHER_READ); + } + if (isv->res->aux.bo) { iris_use_pinned_bo(batch, isv->res->aux.bo, false, IRIS_DOMAIN_OTHER_READ); - if (isv->res->aux.clear_color_bo) - iris_use_pinned_bo(batch, isv->res->aux.clear_color_bo, - false, IRIS_DOMAIN_OTHER_READ); - if (memcmp(&isv->res->aux.clear_color, &isv->clear_color, - sizeof(isv->clear_color)) != 0) { - update_clear_value(ice, batch, isv->res, &isv->surface_state, - isv->res->aux.sampler_usages, &isv->view); - isv->clear_color = isv->res->aux.clear_color; - } } iris_use_pinned_bo(batch, isv->res->bo, false, IRIS_DOMAIN_OTHER_READ);