OSDN Git Service

t_dd_dmatmp: Pull out common 'count -= count & 3' code
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 14 Sep 2015 18:56:20 +0000 (11:56 -0700)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 23 Sep 2015 20:10:11 +0000 (21:10 +0100)
This was missing in the HAVE_TRIANGLES path, and that could cause
incorrect rendering.

No piglit regressions on i915 (G33) or radeon (Radeon 7500).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38109
Reviewed-by: Brian Paul <brianp@vmware.com>
Cc: Marius Predut <marius.predut@intel.com>
Cc: "10.6 11.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit c0b3b2f7603eab210acdb2e654e5411fe912ca34)

src/mesa/tnl_dd/t_dd_dmatmp.h

index a7cabc2..6e60acd 100644 (file)
@@ -542,6 +542,9 @@ static void TAG(render_quads_verts)( struct gl_context *ctx,
                                     GLuint count,
                                     GLuint flags )
 {
+   /* Emit whole number of quads in total. */
+   count -= count & 3;
+
    if (HAVE_QUADS) {
       LOCAL_VARS;
       int dmasz = (GET_SUBSEQUENT_VB_MAX_VERTS()/4) * 4;
@@ -550,11 +553,6 @@ static void TAG(render_quads_verts)( struct gl_context *ctx,
 
       INIT(GL_QUADS);
 
-      /* Emit whole number of quads in total.  dmasz is already a multiple
-       * of 4.
-       */
-      count -= count & 3;
-
       currentsz = (GET_CURRENT_VB_MAX_VERTS()/4) * 4;
       if (currentsz < 8)
          currentsz = dmasz;
@@ -584,7 +582,6 @@ static void TAG(render_quads_verts)( struct gl_context *ctx,
       /* Emit whole number of quads in total, and in each buffer.
        */
       dmasz -= dmasz & 3;
-      count -= count & 3;
       currentsz -= currentsz & 3;
 
       /* Adjust for rendering as triangles:
@@ -1070,6 +1067,9 @@ static void TAG(render_quads_elts)( struct gl_context *ctx,
                                    GLuint count,
                                    GLuint flags )
 {
+   /* Emit whole number of quads in total. */
+   count -= count & 3;
+
    if (HAVE_QUADS) {
       LOCAL_VARS;
       GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
@@ -1082,8 +1082,6 @@ static void TAG(render_quads_elts)( struct gl_context *ctx,
 
       currentsz = GET_CURRENT_VB_MAX_ELTS()/4*4;
 
-      count -= count & 3;
-
       if (currentsz < 8)
         currentsz = dmasz;
 
@@ -1106,7 +1104,6 @@ static void TAG(render_quads_elts)( struct gl_context *ctx,
       /* Emit whole number of quads in total, and in each buffer.
        */
       dmasz -= dmasz & 3;
-      count -= count & 3;
       currentsz -= currentsz & 3;
 
       /* Adjust for rendering as triangles: