From d3b1579a1f1fef0780c020a85c0bb5687825a205 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Tue, 12 Apr 2022 22:25:14 -0700 Subject: [PATCH] nir_to_tgsi: Add support for demote, is_helper_invocation, and subgroup ops. Found to be missing when testing on nvc0. Acked-by: Alyssa Rosenzweig Part-of: --- src/gallium/auxiliary/nir/nir_to_tgsi.c | 28 ++++++++++++++++++++ src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h | 8 ++++++ 2 files changed, 36 insertions(+) diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi.c b/src/gallium/auxiliary/nir/nir_to_tgsi.c index cae79a60d53..257129ea286 100644 --- a/src/gallium/auxiliary/nir/nir_to_tgsi.c +++ b/src/gallium/auxiliary/nir/nir_to_tgsi.c @@ -2399,6 +2399,7 @@ ntt_emit_intrinsic(struct ntt_compile *c, nir_intrinsic_instr *instr) case nir_intrinsic_load_subgroup_ge_mask: case nir_intrinsic_load_subgroup_gt_mask: case nir_intrinsic_load_subgroup_lt_mask: + case nir_intrinsic_load_subgroup_le_mask: ntt_emit_load_sysval(c, instr); break; @@ -2418,6 +2419,10 @@ ntt_emit_intrinsic(struct ntt_compile *c, nir_intrinsic_instr *instr) ntt_emit_load_output(c, instr); break; + case nir_intrinsic_demote: + ntt_DEMOTE(c); + break; + case nir_intrinsic_discard: ntt_KILL(c); break; @@ -2436,6 +2441,29 @@ ntt_emit_intrinsic(struct ntt_compile *c, nir_intrinsic_instr *instr) break; } + case nir_intrinsic_is_helper_invocation: + ntt_READ_HELPER(c, ntt_get_dest(c, &instr->dest)); + break; + + case nir_intrinsic_vote_all: + ntt_VOTE_ALL(c, ntt_get_dest(c, &instr->dest), ntt_get_src(c,instr->src[0])); + return; + case nir_intrinsic_vote_any: + ntt_VOTE_ANY(c, ntt_get_dest(c, &instr->dest), ntt_get_src(c, instr->src[0])); + return; + case nir_intrinsic_vote_ieq: + ntt_VOTE_EQ(c, ntt_get_dest(c, &instr->dest), ntt_get_src(c, instr->src[0])); + return; + case nir_intrinsic_ballot: + ntt_BALLOT(c, ntt_get_dest(c, &instr->dest), ntt_get_src(c, instr->src[0])); + return; + case nir_intrinsic_read_first_invocation: + ntt_READ_FIRST(c, ntt_get_dest(c, &instr->dest), ntt_get_src(c, instr->src[0])); + return; + case nir_intrinsic_read_invocation: + ntt_READ_INVOC(c, ntt_get_dest(c, &instr->dest), ntt_get_src(c, instr->src[0]), ntt_get_src(c, instr->src[1])); + return; + case nir_intrinsic_load_ssbo: case nir_intrinsic_store_ssbo: case nir_intrinsic_ssbo_atomic_add: diff --git a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h index 684c06144f1..ed87d736cde 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h +++ b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h @@ -73,7 +73,15 @@ OP11(DDX) OP11(DDY) OP11(DDX_FINE) OP11(DDY_FINE) +OP00(DEMOTE) OP00(KILL) +OP10(READ_HELPER) +OP11(VOTE_ALL) +OP11(VOTE_ANY) +OP11(VOTE_EQ) +OP11(BALLOT) +OP11(READ_FIRST) +OP12(READ_INVOC) OP11(PK2H) OP11(PK2US) OP11(PK4B)