From 356a268b4619ee396a9eeb3b2fd0f404cf31b44e Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 2 Aug 2023 11:58:38 -0500 Subject: [PATCH] nir/builder: Don't assume we have compiler options We use nir_builder a variety of places where we may not yet have back-end compiler options such as for building meta shaders. Don't assume we always have an options struct. Reviewed-by: Iago Toral Quiroga Part-of: --- src/compiler/nir/nir_builder.c | 2 +- src/compiler/nir/nir_builder.h | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_builder.c b/src/compiler/nir/nir_builder.c index 465bbfc8ca4..2934e2de700 100644 --- a/src/compiler/nir/nir_builder.c +++ b/src/compiler/nir/nir_builder.c @@ -612,7 +612,7 @@ nir_gen_rect_vertices(nir_builder *b, nir_ssa_def *z, nir_ssa_def *w) w = nir_imm_float(b, 1.0); nir_ssa_def *vertex_id; - if (b->shader->options->vertex_id_zero_based) + if (b->shader->options && b->shader->options->vertex_id_zero_based) vertex_id = nir_load_vertex_id_zero_base(b); else vertex_id = nir_load_vertex_id(b); diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index 8608d5d1570..f4cb33260a9 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -795,7 +795,8 @@ _nir_mul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y, bool amul) return nir_imm_intN_t(build, 0, x->bit_size); } else if (y == 1) { return x; - } else if (!build->shader->options->lower_bitops && + } else if ((!build->shader->options || + !build->shader->options->lower_bitops) && util_is_power_of_two_or_zero64(y)) { return nir_ishl(build, x, nir_imm_int(build, ffsll(y) - 1)); } else if (amul) { @@ -983,7 +984,8 @@ nir_uclamp(nir_builder *b, static inline nir_ssa_def * nir_ffma_imm12(nir_builder *build, nir_ssa_def *src0, double src1, double src2) { - if (build->shader->options->avoid_ternary_with_two_constants) + if (build->shader->options && + build->shader->options->avoid_ternary_with_two_constants) return nir_fadd_imm(build, nir_fmul_imm(build, src0, src1), src2); else return nir_ffma(build, src0, nir_imm_floatN_t(build, src1, src0->bit_size),