Module: Mesa
Branch: master
Commit: bf5713d73689fa1a7cfefb989d4d793863b726b7
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf5713d73689fa1a7cfefb989d4d793863b726b7

Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Aug 19 14:32:30 2020 -0400

zink: handle vote intrinsics in ntv

these are super simple and straightforward

Reviewed-by: Erik Faye-Lund <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8950>

---

 .../drivers/zink/nir_to_spirv/nir_to_spirv.c       | 30 ++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c 
b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
index 99ce26c8243..75b52db8a5d 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
+++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
@@ -2462,6 +2462,29 @@ emit_image_intrinsic(struct ntv_context *ctx, 
nir_intrinsic_instr *intr)
    handle_atomic_op(ctx, intr, texel, param, param2);
 }
 
+static void
+emit_vote(struct ntv_context *ctx, nir_intrinsic_instr *intr)
+{
+   SpvOp op;
+
+   switch (intr->intrinsic) {
+   case nir_intrinsic_vote_all:
+      op = SpvOpGroupNonUniformAll;
+      break;
+   case nir_intrinsic_vote_any:
+      op = SpvOpGroupNonUniformAny;
+      break;
+   case nir_intrinsic_vote_ieq:
+   case nir_intrinsic_vote_feq:
+      op = SpvOpGroupNonUniformAllEqual;
+      break;
+   default:
+      unreachable("unknown vote intrinsic");
+   }
+   SpvId result = spirv_builder_emit_vote(&ctx->builder, op, get_src(ctx, 
&intr->src[0]));
+   store_dest_raw(ctx, &intr->dest, result);
+}
+
 static void
 emit_intrinsic(struct ntv_context *ctx, nir_intrinsic_instr *intr)
 {
@@ -2806,6 +2829,13 @@ emit_intrinsic(struct ntv_context *ctx, 
nir_intrinsic_instr *intr)
       emit_store_shared(ctx, intr);
       break;
 
+   case nir_intrinsic_vote_all:
+   case nir_intrinsic_vote_any:
+   case nir_intrinsic_vote_ieq:
+   case nir_intrinsic_vote_feq:
+      emit_vote(ctx, intr);
+      break;
+
    default:
       fprintf(stderr, "emit_intrinsic: not implemented (%s)\n",
               nir_intrinsic_infos[intr->intrinsic].name);

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to