From d6deb977c8a1c9441c9b3bccc208fb173d86d576 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Mon, 8 May 2023 10:28:45 +0200 Subject: [PATCH] radeonsi,radv: use nir_format_linear_to_srgb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There's little point in open-coding this, when we already have a helper for it. This adds an fsat to both code-paths. Not sure if that's good or bad, or if it even matters at all. Acked-by: Pierre-Eric Pelloux-Prayer Reviewed-by: Samuel Pitoiset Reviewed-by: Marek Olšák Part-of: --- src/amd/vulkan/meta/radv_meta_resolve_cs.c | 21 +++---------------- .../drivers/radeonsi/si_shaderlib_nir.c | 19 +++-------------- 2 files changed, 6 insertions(+), 34 deletions(-) diff --git a/src/amd/vulkan/meta/radv_meta_resolve_cs.c b/src/amd/vulkan/meta/radv_meta_resolve_cs.c index a5cdc35aeca..86658700697 100644 --- a/src/amd/vulkan/meta/radv_meta_resolve_cs.c +++ b/src/amd/vulkan/meta/radv_meta_resolve_cs.c @@ -25,6 +25,8 @@ #include #include "nir/nir_builder.h" +#include "nir/nir_format_convert.h" + #include "radv_meta.h" #include "radv_private.h" #include "sid.h" @@ -34,26 +36,9 @@ static nir_ssa_def * radv_meta_build_resolve_srgb_conversion(nir_builder *b, nir_ssa_def *input) { unsigned i; - - nir_ssa_def *cmp[3]; - for (i = 0; i < 3; i++) - cmp[i] = nir_flt(b, nir_channel(b, input, i), nir_imm_int(b, 0x3b4d2e1c)); - - nir_ssa_def *ltvals[3]; - for (i = 0; i < 3; i++) - ltvals[i] = nir_fmul_imm(b, nir_channel(b, input, i), 12.92); - - nir_ssa_def *gtvals[3]; - - for (i = 0; i < 3; i++) { - gtvals[i] = nir_fpow(b, nir_channel(b, input, i), nir_imm_float(b, 1.0 / 2.4)); - gtvals[i] = nir_fmul_imm(b, gtvals[i], 1.055); - gtvals[i] = nir_fadd_imm(b, gtvals[i], -0.055); - } - nir_ssa_def *comp[4]; for (i = 0; i < 3; i++) - comp[i] = nir_bcsel(b, cmp[i], ltvals[i], gtvals[i]); + comp[i] = nir_format_linear_to_srgb(b, nir_channel(b, input, i)); comp[3] = nir_channels(b, input, 1 << 3); return nir_vec(b, comp, 4); } diff --git a/src/gallium/drivers/radeonsi/si_shaderlib_nir.c b/src/gallium/drivers/radeonsi/si_shaderlib_nir.c index 3e1883c05d8..bee8d28d479 100644 --- a/src/gallium/drivers/radeonsi/si_shaderlib_nir.c +++ b/src/gallium/drivers/radeonsi/si_shaderlib_nir.c @@ -8,6 +8,8 @@ #include "ac_surface.h" #include "si_pipe.h" +#include "nir_format_convert.h" + static void *create_shader_state(struct si_context *sctx, nir_shader *nir) { sctx->b.screen->finalize_nir(sctx->b.screen, (void*)nir); @@ -285,25 +287,10 @@ static nir_ssa_def *convert_linear_to_srgb(nir_builder *b, nir_ssa_def *input) /* There are small precision differences compared to CB, so the gfx blit will return slightly * different results. */ - nir_ssa_def *cmp[3]; - for (unsigned i = 0; i < 3; i++) - cmp[i] = nir_flt(b, nir_channel(b, input, i), nir_imm_float(b, 0.0031308)); - - nir_ssa_def *ltvals[3]; - for (unsigned i = 0; i < 3; i++) - ltvals[i] = nir_fmul_imm(b, nir_channel(b, input, i), 12.92); - - nir_ssa_def *gtvals[3]; - - for (unsigned i = 0; i < 3; i++) { - gtvals[i] = nir_fpow(b, nir_channel(b, input, i), nir_imm_float(b, 1.0/2.4)); - gtvals[i] = nir_fmul_imm(b, gtvals[i], 1.055); - gtvals[i] = nir_fadd_imm(b, gtvals[i], -0.055); - } nir_ssa_def *comp[4]; for (unsigned i = 0; i < 3; i++) - comp[i] = nir_bcsel(b, cmp[i], ltvals[i], gtvals[i]); + comp[i] = nir_format_linear_to_srgb(b, nir_channel(b, input, i)); comp[3] = nir_channel(b, input, 3); return nir_vec(b, comp, 4);