summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/draw
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/draw')
-rw-r--r--src/gallium/auxiliary/draw/draw_llvm.c57
1 files changed, 31 insertions, 26 deletions
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
index 8e466879c93..763158b5c93 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -1349,36 +1349,41 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant,
sampler,
variant->key.clamp_vertex_color);
- /* store original positions in clip before further manipulation */
- store_clip(gallivm, vs_type, io, outputs, 0, cv);
- store_clip(gallivm, vs_type, io, outputs, 1, pos);
-
- /* do cliptest */
- if (enable_cliptest) {
- LLVMValueRef temp = LLVMBuildLoad(builder, clipmask_bool_ptr, "");
- /* allocate clipmask, assign it integer type */
- clipmask = generate_clipmask(llvm,
- gallivm,
- vs_type,
- outputs,
- variant->key.clip_xy,
- variant->key.clip_z,
- variant->key.clip_user,
- variant->key.clip_halfz,
- variant->key.ucp_enable,
- context_ptr, &have_clipdist);
- temp = LLVMBuildOr(builder, clipmask, temp, "");
- /* store temporary clipping boolean value */
- LLVMBuildStore(builder, temp, clipmask_bool_ptr);
+ if (pos != -1) {
+ /* store original positions in clip before further manipulation */
+ store_clip(gallivm, vs_type, io, outputs, 0, cv);
+ store_clip(gallivm, vs_type, io, outputs, 1, pos);
+
+ /* do cliptest */
+ if (enable_cliptest) {
+ LLVMValueRef temp = LLVMBuildLoad(builder, clipmask_bool_ptr, "");
+ /* allocate clipmask, assign it integer type */
+ clipmask = generate_clipmask(llvm,
+ gallivm,
+ vs_type,
+ outputs,
+ variant->key.clip_xy,
+ variant->key.clip_z,
+ variant->key.clip_user,
+ variant->key.clip_halfz,
+ variant->key.ucp_enable,
+ context_ptr, &have_clipdist);
+ temp = LLVMBuildOr(builder, clipmask, temp, "");
+ /* store temporary clipping boolean value */
+ LLVMBuildStore(builder, temp, clipmask_bool_ptr);
+ }
+ else {
+ clipmask = lp_build_const_int_vec(gallivm, lp_int_type(vs_type), 0);
+ }
+
+ /* do viewport mapping */
+ if (!bypass_viewport) {
+ generate_viewport(variant, builder, vs_type, outputs, context_ptr);
+ }
}
else {
clipmask = lp_build_const_int_vec(gallivm, lp_int_type(vs_type), 0);
}
-
- /* do viewport mapping */
- if (!bypass_viewport) {
- generate_viewport(variant, builder, vs_type, outputs, context_ptr);
- }
/* store clipmask in vertex header,
* original positions in clip