On 03/01/2013 04:52 PM, srol...@vmware.com wrote:
From: Roland Scheidegger<srol...@vmware.com>

Similar fix to what is done for the non-llvm case, we could otherwise still
hit the stages (near certainly with gs) which crash. It is probably a much
better idea to skip trying to draw at that point anyway.
---
  .../draw/draw_pt_fetch_shade_pipeline_llvm.c       |   42 +++++++++++---------
  1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c 
b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
index b0c18ed..a8ddad6 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
@@ -300,31 +300,37 @@ llvm_pipeline_generic( struct draw_pt_middle_end *middle,
        FREE(vert_info->verts);
        vert_info =&gs_vert_info;
        prim_info =&gs_prim_info;
-
-      clipped = draw_pt_post_vs_run( fpme->post_vs, vert_info );
-
     }

     /* stream output needs to be done before clipping */
     draw_pt_so_emit( fpme->so_emit,
-                   vert_info,
+                    vert_info,
                      prim_info );

-   if (clipped) {
-      opt |= PT_PIPELINE;
-   }
-
-   /* Do we need to run the pipeline? Now will come here if clipped
+   /*
+    * if there's no position, need to stop now, or the latter stages
+    * will try to access non-existent position output.
      */
-   if (opt&  PT_PIPELINE) {
-      pipeline( fpme,
-                vert_info,
-                prim_info );
-   }
-   else {
-      emit( fpme->emit,
-            vert_info,
-            prim_info );
+   if (draw_current_shader_position_output(draw) != -1) {
+      if ((opt&  PT_SHADE)&&  gshader) {
+         clipped = draw_pt_post_vs_run( fpme->post_vs, vert_info );
+      }
+      if (clipped) {
+         opt |= PT_PIPELINE;
+      }
+
+      /* Do we need to run the pipeline? Now will come here if clipped
+       */
+      if (opt&  PT_PIPELINE) {
+         pipeline( fpme,
+                   vert_info,
+                   prim_info );
+      }
+      else {
+         emit( fpme->emit,
+               vert_info,
+               prim_info );

Maybe it's just me, but I'd prefer to see these simple function calls have all their args on one line.


+      }
     }
     FREE(vert_info->verts);
  }

The series looks OK to me.

Reviewed-by: Brian Paul <bri...@vmware.com>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to