... trivially (as allowed by the spec!) by reusing the existing nir_opt_intrinsics code. --- src/compiler/nir/nir.h | 4 ++++ src/compiler/nir/nir_opt_intrinsics.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 44a1d0887e..401c41f155 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -1821,6 +1821,10 @@ typedef struct nir_shader_compiler_options { bool lower_extract_byte; bool lower_extract_word; + bool lower_vote_any; + bool lower_vote_all; + bool lower_vote_eq; + /** * Does the driver support real 32-bit integers? (Otherwise, integers * are simulated by floats.) diff --git a/src/compiler/nir/nir_opt_intrinsics.c b/src/compiler/nir/nir_opt_intrinsics.c index b63449b4fe..0cd75d8b28 100644 --- a/src/compiler/nir/nir_opt_intrinsics.c +++ b/src/compiler/nir/nir_opt_intrinsics.c @@ -47,7 +47,7 @@ opt_intrinsics_impl(nir_function_impl *impl) switch (intrin->intrinsic) { case nir_intrinsic_vote_any: { nir_const_value *val = nir_src_as_const_value(intrin->src[0]); - if (!val) + if (!val || b.shader->options->lower_vote_any) continue; replacement = nir_imm_int(&b, val->i32[0]); @@ -55,7 +55,7 @@ opt_intrinsics_impl(nir_function_impl *impl) } case nir_intrinsic_vote_all: { nir_const_value *val = nir_src_as_const_value(intrin->src[0]); - if (!val) + if (!val || b.shader->options->lower_vote_all) continue; replacement = nir_imm_int(&b, val->i32[0]); @@ -63,7 +63,7 @@ opt_intrinsics_impl(nir_function_impl *impl) } case nir_intrinsic_vote_eq: { nir_const_value *val = nir_src_as_const_value(intrin->src[0]); - if (!val) + if (!val || b.shader->options->lower_vote_eq) continue; replacement = nir_imm_int(&b, NIR_TRUE); -- 2.13.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev