Merge branch 'mesa_7_6_branch'
[mesa.git] / src / gallium / auxiliary / draw / draw_pt_post_vs.c
index 581f044dae10f0bef4f8e02ad449c051ee163e75..6c1cb48e8b82202da1638d2a7a9cdf9cbd40c247 100644 (file)
@@ -25,7 +25,7 @@
  *
  **************************************************************************/
 
-#include "pipe/p_util.h"
+#include "util/u_memory.h"
 #include "pipe/p_context.h"
 #include "draw/draw_context.h"
 #include "draw/draw_private.h"
@@ -61,6 +61,12 @@ compute_clipmask_gl(const float *clip, /*const*/ float plane[][4], unsigned nr)
    unsigned mask = 0x0;
    unsigned i;
 
+#if 0
+   debug_printf("compute clipmask %f %f %f %f\n",
+                clip[0], clip[1], clip[2], clip[3]);
+   assert(clip[3] != 0.0);
+#endif
+
    /* Do the hardwired planes first:
     */
    if (-clip[0] + clip[3] < 0) mask |= (1<<0);
@@ -94,17 +100,21 @@ static boolean post_vs_cliptest_viewport_gl( struct pt_post_vs *pvs,
    struct vertex_header *out = vertices;
    const float *scale = pvs->draw->viewport.scale;
    const float *trans = pvs->draw->viewport.translate;
-   unsigned j;
+   const unsigned pos = pvs->draw->vs.position_output;
    unsigned clipped = 0;
+   unsigned j;
+
+   if (0) debug_printf("%s\n", __FUNCTION__);
 
    for (j = 0; j < count; j++) {
-      out->clip[0] = out->data[0][0];
-      out->clip[1] = out->data[0][1];
-      out->clip[2] = out->data[0][2];
-      out->clip[3] = out->data[0][3];
+      float *position = out->data[pos];
+
+      out->clip[0] = position[0];
+      out->clip[1] = position[1];
+      out->clip[2] = position[2];
+      out->clip[3] = position[3];
 
       out->vertex_id = 0xffff;
-      out->edgeflag = 1;
       out->clipmask = compute_clipmask_gl(out->clip, 
                                          pvs->draw->plane,
                                          pvs->draw->nr_planes);
@@ -113,13 +123,20 @@ static boolean post_vs_cliptest_viewport_gl( struct pt_post_vs *pvs,
       if (out->clipmask == 0)
       {
         /* divide by w */
-        float w = 1.0f / out->data[0][3];
+        float w = 1.0f / position[3];
 
         /* Viewport mapping */
-        out->data[0][0] = out->data[0][0] * w * scale[0] + trans[0];
-        out->data[0][1] = out->data[0][1] * w * scale[1] + trans[1];
-        out->data[0][2] = out->data[0][2] * w * scale[2] + trans[2];
-        out->data[0][3] = w;
+        position[0] = position[0] * w * scale[0] + trans[0];
+        position[1] = position[1] * w * scale[1] + trans[1];
+        position[2] = position[2] * w * scale[2] + trans[2];
+        position[3] = w;
+#if 0
+         debug_printf("post viewport: %f %f %f %f\n",
+                      position[0],
+                      position[1],
+                      position[2],
+                      position[3]);
+#endif
       }
 
       out = (struct vertex_header *)( (char *)out + stride );
@@ -140,15 +157,18 @@ static boolean post_vs_viewport( struct pt_post_vs *pvs,
    struct vertex_header *out = vertices;
    const float *scale = pvs->draw->viewport.scale;
    const float *trans = pvs->draw->viewport.translate;
+   const unsigned pos = pvs->draw->vs.position_output;
    unsigned j;
 
-   debug_printf("%s\n", __FUNCTION__);
+   if (0) debug_printf("%s\n", __FUNCTION__);
    for (j = 0; j < count; j++) {
+      float *position = out->data[pos];
+
       /* Viewport mapping only, no cliptest/rhw divide
        */
-      out->data[0][0] = out->data[0][0] * scale[0] + trans[0];
-      out->data[0][1] = out->data[0][1] * scale[1] + trans[1];
-      out->data[0][2] = out->data[0][2] * scale[2] + trans[2];
+      position[0] = position[0] * scale[0] + trans[0];
+      position[1] = position[1] * scale[1] + trans[1];
+      position[2] = position[2] * scale[2] + trans[2];
 
       out = (struct vertex_header *)((char *)out + stride);
    }
@@ -165,7 +185,7 @@ static boolean post_vs_none( struct pt_post_vs *pvs,
                             unsigned count,
                             unsigned stride )
 {
-   debug_printf("%s\n", __FUNCTION__);
+   if (0) debug_printf("%s\n", __FUNCTION__);
    return FALSE;
 }
 
@@ -180,17 +200,17 @@ boolean draw_pt_post_vs_run( struct pt_post_vs *pvs,
 
 void draw_pt_post_vs_prepare( struct pt_post_vs *pvs,
                              boolean bypass_clipping,
-                             boolean identity_viewport,
+                             boolean bypass_viewport,
                              boolean opengl )
 {
    if (bypass_clipping) {
-      if (identity_viewport)
+      if (bypass_viewport)
         pvs->run = post_vs_none;
       else
         pvs->run = post_vs_viewport;
    }
    else {
-      //if (opengl) 
+      /* if (opengl) */
       pvs->run = post_vs_cliptest_viewport_gl;
    }
 }