From 0dfac8d7f9f2e4dc0c90a42791ac91af5c5ffab9 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Thu, 2 May 2024 20:48:51 +0200 Subject: [PATCH] radv, radeonsi: don't use D16 for f2f16_rtz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit D16 rounds towards zero for fp32 -> fp16, but for fixed point it rounds to nearest even in fp16. MIMG without D16 also rounds to nearest even, but in fp32. This means D16 and f2f16_rtz(tex@32) can produce different results. Sadly this also means we can never use d16 if fp16 rounding isn't undefined. Cc: mesa-stable Acked-by: Marek Olšák Part-of: (cherry picked from commit 3a35522c8a48bd19d37223c24d271e08ed5b1a34) --- .pick_status.json | 2 +- src/amd/vulkan/radv_pipeline.c | 2 +- src/gallium/drivers/radeonsi/si_shader_nir.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 18062ba1770..b2e18bc2355 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -34,7 +34,7 @@ "description": "radv, radeonsi: don't use D16 for f2f16_rtz", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index de06d834ae5..027e73c44aa 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -701,7 +701,7 @@ radv_postprocess_nir(struct radv_device *device, const struct radv_pipeline_key }, }; struct nir_fold_16bit_tex_image_options fold_16bit_options = { - .rounding_mode = nir_rounding_mode_rtz, + .rounding_mode = nir_rounding_mode_undef, .fold_tex_dest_types = nir_type_float, .fold_image_dest_types = nir_type_float, .fold_image_store_data = true, diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 027d9c410b8..3b03b3eaecb 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -208,7 +208,7 @@ static void si_late_optimize_16bit_samplers(struct si_screen *sscreen, nir_shade }, }; struct nir_fold_16bit_tex_image_options fold_16bit_options = { - .rounding_mode = nir_rounding_mode_rtz, + .rounding_mode = nir_rounding_mode_undef, .fold_tex_dest_types = nir_type_float, .fold_image_dest_types = nir_type_float, .fold_image_store_data = true,