From 50cc738a6dfaeabf1f9fa5d519d4144e7a95dc66 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 25 Sep 2024 11:05:47 +0300 Subject: [PATCH] blorp: convert fast clear color for unsupported formats This tests is asserting on LNL like : dEQP-VK.pipeline.monolithic.sampler.border_swizzle.r8_srgb.gbar.custom.gather_1.no_swizzle_hint dEQP-VK.api.image_clearing.core.clear_color_image.2d.optimal.single_layer.e5b9g9r9_ufloat_pack32 Because blorp tries, for example, to setup a render target with L8_UNORM_SRGB (which is mapped to the R8_UNORM_SRGB of Vulkan) but is not supported for rendering. Signed-off-by: Lionel Landwerlin Fixes: 1c7fe9ad1b ("anv: Support fast clears in anv_CmdClearColorImage") Reviewed-by: Nanley Chery Part-of: --- src/intel/blorp/blorp_clear.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/intel/blorp/blorp_clear.c b/src/intel/blorp/blorp_clear.c index 6a2477ebde0..a13d817f118 100644 --- a/src/intel/blorp/blorp_clear.c +++ b/src/intel/blorp/blorp_clear.c @@ -414,14 +414,23 @@ blorp_fast_clear(struct blorp_batch *batch, params.y1 = y1; if (batch->blorp->isl_dev->info->ver >= 20) { + union isl_color_value clear_color = + isl_color_value_swizzle_inv(surf->clear_color, swizzle); + if (format == ISL_FORMAT_R9G9B9E5_SHAREDEXP) { + clear_color.u32[0] = float3_to_rgb9e5(clear_color.f32); + format = ISL_FORMAT_R32_UINT; + } else if (format == ISL_FORMAT_L8_UNORM_SRGB) { + clear_color.f32[0] = util_format_linear_to_srgb_float(clear_color.f32[0]); + format = ISL_FORMAT_R8_UNORM; + } + /* Bspec 57340 (r59562): * * Overview of Fast Clear: * Pixel shader's color output is treated as Clear Value, value * should be a constant. */ - memcpy(¶ms.wm_inputs.clear_color, &surf->clear_color, - 4 * sizeof(float)); + memcpy(¶ms.wm_inputs.clear_color, &clear_color, 4 * sizeof(float)); } else { /* BSpec: 2423 (r153658): *