From a986f9b90dc02ecb85c77978a9d607124eb361d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Thu, 9 Jan 2025 18:41:38 -0600 Subject: [PATCH] ac/nir: Move ac_nir_lower_sin_cos to separate file. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Part-of: --- src/amd/common/ac_nir.c | 21 ------------------ src/amd/common/ac_nir_lower_sin_cos.c | 31 +++++++++++++++++++++++++++ src/amd/common/meson.build | 1 + 3 files changed, 32 insertions(+), 21 deletions(-) create mode 100644 src/amd/common/ac_nir_lower_sin_cos.c diff --git a/src/amd/common/ac_nir.c b/src/amd/common/ac_nir.c index 48ffa474e3c..69ca8bd4f50 100644 --- a/src/amd/common/ac_nir.c +++ b/src/amd/common/ac_nir.c @@ -196,27 +196,6 @@ ac_nir_unpack_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct a return ac_nir_unpack_value(b, value, rshift, bitwidth); } -static bool -is_sin_cos(const nir_instr *instr, UNUSED const void *_) -{ - return instr->type == nir_instr_type_alu && (nir_instr_as_alu(instr)->op == nir_op_fsin || - nir_instr_as_alu(instr)->op == nir_op_fcos); -} - -static nir_def * -lower_sin_cos(struct nir_builder *b, nir_instr *instr, UNUSED void *_) -{ - nir_alu_instr *sincos = nir_instr_as_alu(instr); - nir_def *src = nir_fmul_imm(b, nir_ssa_for_alu_src(b, sincos, 0), 0.15915493667125702); - return sincos->op == nir_op_fsin ? nir_fsin_amd(b, src) : nir_fcos_amd(b, src); -} - -bool -ac_nir_lower_sin_cos(nir_shader *shader) -{ - return nir_shader_lower_instructions(shader, is_sin_cos, lower_sin_cos, NULL); -} - void ac_nir_store_var_components(nir_builder *b, nir_variable *var, nir_def *value, unsigned component, unsigned writemask) diff --git a/src/amd/common/ac_nir_lower_sin_cos.c b/src/amd/common/ac_nir_lower_sin_cos.c new file mode 100644 index 00000000000..f8d6ec4e7ec --- /dev/null +++ b/src/amd/common/ac_nir_lower_sin_cos.c @@ -0,0 +1,31 @@ +/* + * Copyright © 2021 Valve Corporation + * + * SPDX-License-Identifier: MIT + */ + +#include "ac_nir.h" +#include "ac_nir_helpers.h" + +#include "nir_builder.h" + +static bool +is_sin_cos(const nir_instr *instr, UNUSED const void *_) +{ + return instr->type == nir_instr_type_alu && (nir_instr_as_alu(instr)->op == nir_op_fsin || + nir_instr_as_alu(instr)->op == nir_op_fcos); +} + +static nir_def * +lower_sin_cos(struct nir_builder *b, nir_instr *instr, UNUSED void *_) +{ + nir_alu_instr *sincos = nir_instr_as_alu(instr); + nir_def *src = nir_fmul_imm(b, nir_ssa_for_alu_src(b, sincos, 0), 0.15915493667125702); + return sincos->op == nir_op_fsin ? nir_fsin_amd(b, src) : nir_fcos_amd(b, src); +} + +bool +ac_nir_lower_sin_cos(nir_shader *shader) +{ + return nir_shader_lower_instructions(shader, is_sin_cos, lower_sin_cos, NULL); +} diff --git a/src/amd/common/meson.build b/src/amd/common/meson.build index 5560d34f6e9..b2158480f90 100644 --- a/src/amd/common/meson.build +++ b/src/amd/common/meson.build @@ -102,6 +102,7 @@ amd_common_files = files( 'ac_nir_lower_ngg.c', 'ac_nir_lower_ps_early.c', 'ac_nir_lower_ps_late.c', + 'ac_nir_lower_sin_cos.c', 'ac_nir_meta.h', 'ac_nir_meta_cs_blit.c', 'ac_nir_meta_cs_clear_copy_buffer.c',