From: Jason Ekstrand Date: Tue, 26 Apr 2022 16:28:36 +0000 (-0500) Subject: nir/constant_folding: Break TXB folding into a helper function X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9332598b26232e5c70e2050dd38e56efffe80d61;p=platform%2Fupstream%2Fmesa.git nir/constant_folding: Break TXB folding into a helper function Reviewed-by: Alyssa Rosenzweig Reviewed-by: Jesse Natalie Part-of: --- diff --git a/src/compiler/nir/nir_opt_constant_folding.c b/src/compiler/nir/nir_opt_constant_folding.c index 97aca6d..72e1f2f 100644 --- a/src/compiler/nir/nir_opt_constant_folding.c +++ b/src/compiler/nir/nir_opt_constant_folding.c @@ -306,31 +306,42 @@ try_fold_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, } static bool -try_fold_tex(nir_builder *b, nir_tex_instr *tex) +try_fold_txb_to_tex(nir_builder *b, nir_tex_instr *tex) { - /* txb with a bias of constant zero is just tex. */ - if (tex->op == nir_texop_txb) { - const int bias_idx = nir_tex_instr_src_index(tex, nir_tex_src_bias); + assert(tex->op == nir_texop_txb); - /* nir_to_tgsi_lower_tex mangles many kinds of texture instructions, - * including txb, into invalid states. It removes the special - * parameters and appends the values to the texture coordinate. - */ - if (bias_idx < 0) - return false; + const int bias_idx = nir_tex_instr_src_index(tex, nir_tex_src_bias); - if (nir_src_is_const(tex->src[bias_idx].src) && - nir_src_as_float(tex->src[bias_idx].src) == 0.0) { - nir_tex_instr_remove_src(tex, bias_idx); - tex->op = nir_texop_tex; - return true; - } + /* nir_to_tgsi_lower_tex mangles many kinds of texture instructions, + * including txb, into invalid states. It removes the special + * parameters and appends the values to the texture coordinate. + */ + if (bias_idx < 0) + return false; + + if (nir_src_is_const(tex->src[bias_idx].src) && + nir_src_as_float(tex->src[bias_idx].src) == 0.0) { + nir_tex_instr_remove_src(tex, bias_idx); + tex->op = nir_texop_tex; + return true; } return false; } static bool +try_fold_tex(nir_builder *b, nir_tex_instr *tex) +{ + bool progress = false; + + /* txb with a bias of constant zero is just tex. */ + if (tex->op == nir_texop_txb) + progress |= try_fold_txb_to_tex(b, tex); + + return progress; +} + +static bool try_fold_instr(nir_builder *b, nir_instr *instr, void *_state) { switch (instr->type) {