From: Karol Herbst Date: Sat, 30 Jun 2018 14:22:17 +0000 (+0200) Subject: nv50/ir/nir: handle user clip planes for each emitted vertex X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4ded1cdef9b488859e6aadb089eb3435ba73682f;p=mesa.git nv50/ir/nir: handle user clip planes for each emitted vertex v9: convert to C++ style comments handle for tess eval shaders as well Signed-off-by: Karol Herbst --- diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp index 627848a457f..53102e485fe 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp @@ -1561,7 +1561,9 @@ Converter::visit(nir_function *function) bb->cfg.attach(&exit->cfg, Graph::Edge::TREE); setPosition(exit, true); - if (info->io.genUserClip > 0) + if ((prog->getType() == Program::TYPE_VERTEX || + prog->getType() == Program::TYPE_TESSELLATION_EVAL) + && info->io.genUserClip > 0) handleUserClipPlanes(); // TODO: for non main function this needs to be a OP_RETURN @@ -1889,6 +1891,7 @@ Converter::visit(nir_intrinsic_instr *insn) } break; } + case Program::TYPE_GEOMETRY: case Program::TYPE_VERTEX: { if (info->io.genUserClip > 0 && idx == clipVertexOutput) { mkMov(clipVtx[i], src); @@ -2187,6 +2190,9 @@ Converter::visit(nir_intrinsic_instr *insn) break; } case nir_intrinsic_emit_vertex: + if (info->io.genUserClip > 0) + handleUserClipPlanes(); + // fallthrough case nir_intrinsic_end_primitive: { uint32_t idx = nir_intrinsic_stream_id(insn); mkOp1(getOperation(op), TYPE_U32, NULL, mkImm(idx))->fixed = 1;