I think this patch breaks geometry shaders with LLVM that doesn't support the kill instruction in GS. All GS piglit tests fail with:
SILowerControlFlow.cpp:296: void {anonymous}::SILowerControlFlowPass::Kill(llvm::MachineInstr&): Assertion `MBB.getParent()->getInfo<SIMachineFunctionInfo>()->ShaderType == ShaderType::PIXEL' failed. Marek On Mon, Feb 24, 2014 at 10:03 AM, Michel Dänzer <mic...@daenzer.net> wrote: > From: Michel Daenzer <michel.daen...@amd.com> > > Signed-off-by: Michel Dänzer <michel.daen...@amd.com> > --- > src/gallium/drivers/radeonsi/si_shader.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/src/gallium/drivers/radeonsi/si_shader.c > b/src/gallium/drivers/radeonsi/si_shader.c > index 54270cd..b22db0b 100644 > --- a/src/gallium/drivers/radeonsi/si_shader.c > +++ b/src/gallium/drivers/radeonsi/si_shader.c > @@ -1905,6 +1905,7 @@ static void si_llvm_emit_vertex( > LLVMValueRef soffset = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, > SI_PARAM_GS2VS_OFFSET); > LLVMValueRef gs_next_vertex; > + LLVMValueRef can_emit, kill; > LLVMValueRef t_list_ptr; > LLVMValueRef t_list; > LLVMValueRef args[2]; > @@ -1934,6 +1935,21 @@ static void si_llvm_emit_vertex( > > /* Write vertex attribute values to GSVS ring */ > gs_next_vertex = LLVMBuildLoad(gallivm->builder, > si_shader_ctx->gs_next_vertex, ""); > + > + /* If this thread has already emitted the declared maximum number of > + * vertices, kill it: excessive vertex emissions are not supposed to > + * have any effect, and GS threads have no externally observable > + * effects other than emitting vertices. > + */ > + can_emit = LLVMBuildICmp(gallivm->builder, LLVMIntULE, gs_next_vertex, > + lp_build_const_int32(gallivm, > + > shader->gs_max_out_vertices), ""); > + kill = lp_build_select(&bld_base->base, can_emit, > + lp_build_const_float(gallivm, 1.0f), > + lp_build_const_float(gallivm, -1.0f)); > + build_intrinsic(gallivm->builder, "llvm.AMDGPU.kill", > + LLVMVoidTypeInContext(gallivm->context), &kill, 1, 0); > + > for (i = 0; i < shader->noutput; i++) { > LLVMValueRef *out_ptr = > > si_shader_ctx->radeon_bld.soa.outputs[shader->output[i].index]; > -- > 1.9.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev