From 4d3f535ebb341ddce05e5b1750fcf17c6c4166c9 Mon Sep 17 00:00:00 2001 From: James Xiong Date: Wed, 20 Nov 2019 15:59:00 -0800 Subject: [PATCH] iris: handle the failure of converting unsupported yuv formats to isl Signed-off-by: James Xiong Reviewed-by: Kenneth Graunke (cherry picked from commit d8569baaed1a38cf3da9e45375fa2267d9a1eeb0) Tested-by: Marge Bot Part-of: Signed-off-by: Laurent Carlier --- src/gallium/drivers/iris/iris_formats.c | 6 +++++- src/gallium/drivers/iris/iris_resource.c | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/iris/iris_formats.c b/src/gallium/drivers/iris/iris_formats.c index f6344cc7543..a35b663a53c 100644 --- a/src/gallium/drivers/iris/iris_formats.c +++ b/src/gallium/drivers/iris/iris_formats.c @@ -338,9 +338,13 @@ iris_format_for_usage(const struct gen_device_info *devinfo, isl_surf_usage_flags_t usage) { enum isl_format format = iris_isl_format_for_pipe_format(pformat); - const struct isl_format_layout *fmtl = isl_format_get_layout(format); struct isl_swizzle swizzle = ISL_SWIZZLE_IDENTITY; + if (format == ISL_FORMAT_UNSUPPORTED) + return (struct iris_format_info) { .fmt = format, .swizzle = swizzle }; + + const struct isl_format_layout *fmtl = isl_format_get_layout(format); + if (!util_format_is_srgb(pformat)) { if (util_format_is_intensity(pformat)) { swizzle = ISL_SWIZZLE(RED, RED, RED, RED); diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c index bdd715df2c9..7ca6097840a 100644 --- a/src/gallium/drivers/iris/iris_resource.c +++ b/src/gallium/drivers/iris/iris_resource.c @@ -85,7 +85,8 @@ modifier_is_supported(const struct gen_device_info *devinfo, enum isl_format linear_format = isl_format_srgb_to_linear(rt_format); - if (!isl_format_supports_ccs_e(devinfo, linear_format)) + if (linear_format == ISL_FORMAT_UNSUPPORTED || + !isl_format_supports_ccs_e(devinfo, linear_format)) return false; return devinfo->gen >= 9 && devinfo->gen <= 11; -- 2.25.1