Mesa (master): svga: fix incorrect user buffer size computation

Thomas Hellstrom thomash at kemper.freedesktop.org
Fri Jul 1 11:32:04 UTC 2011


Module: Mesa
Branch: master
Commit: fa4bd302122c28ee00d77dcc36723fcd31656841
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fa4bd302122c28ee00d77dcc36723fcd31656841

Author: Brian Paul <brianp at vmware.com>
Date:   Wed Jun 15 16:41:13 2011 -0600

svga: fix incorrect user buffer size computation

Viewperf uses some unusual vertex arrays where the stride is less
than the element size.  In this case, the stride was 4 while the
element size was 12.  The difference of 8 bytes causes us to miss
uploading the tail bit of the array data.

Typically the stride is >= the element size so there was no problem
with other apps.

---

 src/gallium/drivers/svga/svga_pipe_draw.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_pipe_draw.c b/src/gallium/drivers/svga/svga_pipe_draw.c
index 8e1c764..78f5aa1 100644
--- a/src/gallium/drivers/svga/svga_pipe_draw.c
+++ b/src/gallium/drivers/svga/svga_pipe_draw.c
@@ -25,6 +25,7 @@
 
 #include "svga_cmd.h"
 
+#include "util/u_format.h"
 #include "util/u_inlines.h"
 #include "util/u_prim.h"
 #include "util/u_time.h"
@@ -75,8 +76,9 @@ svga_upload_user_buffers(struct svga_context *svga,
             size = vb->stride *
                (instance_count + instance_div - 1) / instance_div;
          } else if (vb->stride) {
+            uint elemSize = util_format_get_blocksize(ve->src_format);
             first = vb->stride * start;
-            size = vb->stride * count;
+            size = vb->stride * (count - 1) + elemSize;
          } else {
             /* Only a single vertex!
              * Upload with the largest vertex size the hw supports,




More information about the mesa-commit mailing list