On 02/28/2016 06:00 PM, Ilia Mirkin wrote:
Please add emitters for GK110 and GM107 as well if you want to do this.

Yes, sorry this is the wrong patch...


On Sun, Feb 28, 2016 at 11:50 AM, Samuel Pitoiset
<samuel.pitoi...@gmail.com> wrote:
Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
  src/gallium/drivers/nouveau/codegen/nv50_ir.h      |  4 ++++
  .../drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp  | 23 ++++++++++++++++++++++
  .../drivers/nouveau/codegen/nv50_ir_print.cpp      |  1 +
  .../drivers/nouveau/codegen/nv50_ir_target.cpp     |  3 +++
  4 files changed, 31 insertions(+)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h 
b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
index 97ebed4..7b0eb2f 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
@@ -161,6 +161,7 @@ enum operation
     OP_VSEL,
     OP_CCTL, // cache control
     OP_SHFL, // warp shuffle
+   OP_VOTE,
     OP_LAST
  };

@@ -244,6 +245,9 @@ enum operation
  #define NV50_IR_SUBOP_V2(d,a,b)    (((d) << 10) | ((b) << 5) | (a) | 0x4000)
  #define NV50_IR_SUBOP_V4(d,a,b)    (((d) << 10) | ((b) << 5) | (a) | 0x8000)
  #define NV50_IR_SUBOP_Vn(n)        ((n) >> 14)
+#define NV50_IR_SUBOP_VOTE_ALL 0
+#define NV50_IR_SUBOP_VOTE_ANY 1
+#define NV50_IR_SUBOP_VOTE_UNI 2

  enum DataType
  {
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp 
b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp
index d3ae545..71c05d2 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp
@@ -142,6 +142,8 @@ private:

     void emitPIXLD(const Instruction *);

+   void emitVOTE(const Instruction *);
+
     inline void defId(const ValueDef&, const int pos);
     inline void defId(const Instruction *, int d, const int pos);
     inline void srcId(const ValueRef&, const int pos);
@@ -2337,6 +2339,24 @@ CodeEmitterNVC0::emitPIXLD(const Instruction *i)
     code[1] |= 0x00e00000;
  }

+void
+CodeEmitterNVC0::emitVOTE(const Instruction *i)
+{
+   assert(i->src(0).getFile() == FILE_PREDICATE &&
+          i->def(1).getFile() == FILE_PREDICATE);
+
+   code[0] = 0x00000004 | (i->subOp << 5);
+   code[1] = 0x48000000;
+
+   emitPredicate(i);
+
+   defId(i->def(0), 14);
+   defId(i->def(1), 32 + 22);
+   if (i->src(0).mod == Modifier(NV50_IR_MOD_NOT))
+         code[0] |= 1 << 23;
+   srcId(i->src(0), 20);
+}
+
  bool
  CodeEmitterNVC0::emitInstruction(Instruction *insn)
  {
@@ -2607,6 +2627,9 @@ CodeEmitterNVC0::emitInstruction(Instruction *insn)
     case OP_PIXLD:
        emitPIXLD(insn);
        break;
+   case OP_VOTE:
+      emitVOTE(insn);
+      break;
     case OP_PHI:
     case OP_UNION:
     case OP_CONSTRAINT:
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp 
b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
index 85f7704..cfa85ec 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
@@ -190,6 +190,7 @@ const char *operationStr[OP_LAST + 1] =
     "vsel",
     "cctl",
     "shfl",
+   "vote",
     "(invalid)"
  };

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp 
b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
index 89d3a08..160e36f 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
@@ -55,6 +55,7 @@ const uint8_t Target::operationSrcNr[] =
     2, 2, 2, 2, 3, 2,       // VADD, VAVG, VMIN, VMAX, VSAD, VSET,
     2, 2, 2, 1,             // VSHR, VSHL, VSEL, CCTL
     3,                      // SHFL
+   1,                      // VOTE
     0
  };

@@ -129,6 +130,8 @@ const OpClass Target::operationClass[] =
     OPCLASS_VECTOR, OPCLASS_CONTROL,
     // SHFL
     OPCLASS_OTHER,
+   // VOTE
+   OPCLASS_OTHER,
     OPCLASS_PSEUDO // LAST
  };

--
2.7.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to