Mesa (master): i965: allow unsourced enabled VAO

Juan Antonio Suárez Romero jasuarez at kemper.freedesktop.org
Wed Dec 21 11:38:02 UTC 2016


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

Author: Juan A. Suarez Romero <jasuarez at igalia.com>
Date:   Thu Nov  3 08:56:23 2016 +0100

i965: allow unsourced enabled VAO

The GL 4.5 spec says:
    "If any enabled array’s buffer binding is zero when DrawArrays
    or one of the other drawing commands defined in section 10.4 is
    called, the result is undefined."

This commits avoids crashing the code, which is not a very good
"undefined result".

This fixes spec/!opengl 3.1/vao-broken-attrib piglit test.

---

 src/mesa/drivers/dri/i965/brw_draw_upload.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index b138cb7..5781564 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -423,13 +423,22 @@ copy_array_to_vbo_array(struct brw_context *brw,
    uint8_t *dst = intel_upload_space(brw, size, dst_stride,
                                      &buffer->bo, &buffer->offset);
 
-   if (dst_stride == src_stride) {
-      memcpy(dst, src, size);
-   } else {
-      while (count--) {
-	 memcpy(dst, src, dst_stride);
-	 src += src_stride;
-	 dst += dst_stride;
+   /* The GL 4.5 spec says:
+    *      "If any enabled array’s buffer binding is zero when DrawArrays or
+    *      one of the other drawing commands defined in section 10.4 is called,
+    *      the result is undefined."
+    *
+    * In this case, let's the dst with undefined values
+    */
+   if (src != NULL) {
+      if (dst_stride == src_stride) {
+         memcpy(dst, src, size);
+      } else {
+         while (count--) {
+            memcpy(dst, src, dst_stride);
+            src += src_stride;
+            dst += dst_stride;
+         }
       }
    }
    buffer->stride = dst_stride;




More information about the mesa-commit mailing list