i965/nir/gs: Implement EmitVertex and EndPrimitive
authorIago Toral Quiroga <itoral@igalia.com>
Mon, 29 Jun 2015 12:08:11 +0000 (14:08 +0200)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 3 Aug 2015 16:40:50 +0000 (09:40 -0700)
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp
src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h

index de38bdaa836dce42e984c56f1a15803ba1144f35..f627a8dbdae9072810660ef37918b9f9d8661631 100644 (file)
@@ -65,4 +65,26 @@ vec4_gs_visitor::nir_setup_inputs(nir_shader *shader)
       }
    }
 }
+
+void
+vec4_gs_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
+{
+   dst_reg dest;
+   src_reg src;
+
+   switch (instr->intrinsic) {
+   case nir_intrinsic_emit_vertex: {
+      int stream_id = instr->const_index[0];
+      gs_emit_vertex(stream_id);
+      break;
+   }
+
+   case nir_intrinsic_end_primitive:
+      gs_end_primitive();
+      break;
+
+   default:
+      vec4_visitor::nir_emit_intrinsic(instr);
+   }
+}
 }
index 6a52d580621526558ee1d881f279aefd75d2601e..517e99d78628864b449685c61cd3ae761340026a 100644 (file)
@@ -91,6 +91,7 @@ protected:
    virtual void visit(ir_end_primitive *);
    virtual void gs_emit_vertex(int stream_id);
    virtual void gs_end_primitive();
+   virtual void nir_emit_intrinsic(nir_intrinsic_instr *instr);
 
 protected:
    int setup_varying_inputs(int payload_reg, int *attribute_map,