From fbbf79377bcad0ed51d00a7d7e981375f8c29d54 Mon Sep 17 00:00:00 2001 From: Nanley Chery Date: Mon, 1 Jun 2020 08:48:56 -0700 Subject: [PATCH] iris: Remove the CCS_D fallback Remove the CCS_D fallback logic so that iris doesn't attempt to use a non-existent surface state for some renders. Also, add an assertion to catch the issue. The fallback in iris_resource_render_aux_usage can lead to this problem because it doesn't account for the fact that surface states created from resources with the Y_TILED_CCS modifier may only have CCS_E or NONE as aux usages (due to iris_resource_create_with_modifiers). Without this change, the next commit would have triggered the fallback and regressed the following tests on gen9: * dEQP-EGL.functional.wide_color.window_888_colorspace_srgb * dEQP-EGL.functional.wide_color.window_8888_colorspace_srgb * dEQP-EGL.functional.wide_color.pbuffer_888_colorspace_srgb * dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_srgb Reviewed-by: Kenneth Graunke Part-of: --- src/gallium/drivers/iris/iris_resolve.c | 3 +-- src/gallium/drivers/iris/iris_resource.c | 3 +-- src/gallium/drivers/iris/iris_state.c | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/iris/iris_resolve.c b/src/gallium/drivers/iris/iris_resolve.c index 0350e58a225..0d647630f5d 100644 --- a/src/gallium/drivers/iris/iris_resolve.c +++ b/src/gallium/drivers/iris/iris_resolve.c @@ -1019,8 +1019,7 @@ iris_resource_render_aux_usage(struct iris_context *ice, format_ccs_e_compat_with_resource(devinfo, res, render_format)) return ISL_AUX_USAGE_CCS_E; - /* Otherwise, we try to fall back to CCS_D */ - if (isl_format_supports_ccs_d(devinfo, render_format)) + if (res->aux.usage == ISL_AUX_USAGE_CCS_D) return ISL_AUX_USAGE_CCS_D; default: diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c index 513105d5c2c..232494a9c1f 100644 --- a/src/gallium/drivers/iris/iris_resource.c +++ b/src/gallium/drivers/iris/iris_resource.c @@ -525,8 +525,7 @@ iris_resource_configure_aux(struct iris_screen *screen, } else if (has_ccs) { if (want_ccs_e_for_format(devinfo, res->surf.format)) res->aux.possible_usages |= 1 << ISL_AUX_USAGE_CCS_E; - - if (isl_format_supports_ccs_d(devinfo, res->surf.format)) + else if (isl_format_supports_ccs_d(devinfo, res->surf.format)) res->aux.possible_usages |= 1 << ISL_AUX_USAGE_CCS_D; } diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 462a04091be..9d824507ad8 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -4521,6 +4521,7 @@ surf_state_offset_for_aux(struct iris_resource *res, unsigned aux_modes, enum isl_aux_usage aux_usage) { + assert(aux_modes & (1 << aux_usage)); return SURFACE_STATE_ALIGNMENT * util_bitcount(aux_modes & ((1 << aux_usage) - 1)); } -- 2.30.2