Am 25.04.2013 19:44, schrieb Zack Rusin: > ----- Original Message ----- >> Am 24.04.2013 00:58, schrieb Zack Rusin: >>> This was a very serious bug. We were always doing the viewport >>> transformations on the first output of the vertex shader. That means >>> that every application that was storing position in anything but >>> OUT[0] was outputing untransformed vertices and had broken output >>> for whatever it was storing at OUT[0]. Correctly take into >>> consideration where the vertex position is actually stored. >>> >>> Signed-off-by: Zack Rusin <za...@vmware.com> >>> --- >>> src/gallium/auxiliary/draw/draw_llvm.c | 9 +++++---- >>> 1 file changed, 5 insertions(+), 4 deletions(-) >>> >>> diff --git a/src/gallium/auxiliary/draw/draw_llvm.c >>> b/src/gallium/auxiliary/draw/draw_llvm.c >>> index 594b0ec..bdd24be 100644 >>> --- a/src/gallium/auxiliary/draw/draw_llvm.c >>> +++ b/src/gallium/auxiliary/draw/draw_llvm.c >>> @@ -996,18 +996,19 @@ generate_viewport(struct draw_llvm_variant *variant, >>> int i; >>> struct gallivm_state *gallivm = variant->gallivm; >>> struct lp_type f32_type = vs_type; >>> + const unsigned pos = >>> draw_current_shader_position_output(variant->llvm->draw); >>> LLVMTypeRef vs_type_llvm = lp_build_vec_type(gallivm, vs_type); >>> - LLVMValueRef out3 = LLVMBuildLoad(builder, outputs[0][3], ""); /*w0 w1 >>> .. wn*/ >>> + LLVMValueRef out3 = LLVMBuildLoad(builder, outputs[pos][3], ""); /*w0 >>> w1 .. wn*/ >>> LLVMValueRef const1 = lp_build_const_vec(gallivm, f32_type, 1.0); >>> /*1.0 1.0 1.0 1.0*/ >>> LLVMValueRef vp_ptr = draw_jit_context_viewport(gallivm, context_ptr); >>> >>> /* for 1/w convention*/ >>> out3 = LLVMBuildFDiv(builder, const1, out3, ""); >>> - LLVMBuildStore(builder, out3, outputs[0][3]); >>> + LLVMBuildStore(builder, out3, outputs[pos][3]); >>> >>> /* Viewport Mapping */ >>> for (i=0; i<3; i++) { >>> - LLVMValueRef out = LLVMBuildLoad(builder, outputs[0][i], ""); /*x0 >>> x1 .. xn*/ >>> + LLVMValueRef out = LLVMBuildLoad(builder, outputs[pos][i], ""); /*x0 >>> x1 .. xn*/ >>> LLVMValueRef scale; >>> LLVMValueRef trans; >>> LLVMValueRef scale_i; >>> @@ -1033,7 +1034,7 @@ generate_viewport(struct draw_llvm_variant *variant, >>> out = LLVMBuildFAdd(builder, out, trans, ""); >>> >>> /* store transformed outputs */ >>> - LLVMBuildStore(builder, out, outputs[0][i]); >>> + LLVMBuildStore(builder, out, outputs[pos][i]); >>> } >>> >>> } >>> >> >> The change itself looks good but I think there's quite some more >> assumptions that position must be output zero elsewhere. > > Nothing that I could find in draw. If you're aware of something I'd like to > know.
Hmm yes looks like that's not really the case anymore. Maybe you fixed those already :-). Roland _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev