svga: fix incompatible bind flags at buffer validation time
authorCharmaine Lee <charmainel@vmware.com>
Fri, 11 May 2018 18:21:52 +0000 (11:21 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 16 May 2018 19:04:16 +0000 (13:04 -0600)
At buffer resource validation time, if the resource handle is not yet
created and if the initial buffer bind flags and the tobind flags are
incompatible, just use the tobind flags to create the resource handle.
On the other hand, if the bind flags are compatible, we can combine
the bind flags for the resource handle creation.

Fixes piglit gl-3.1-buffer-bindings crash.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/drivers/svga/svga_resource_buffer_upload.c

index 104cb6dbd2c13988bd1455156162994f1ba9ac8d..9daae9c0f448490d21d531a5c3548db8f756197b 100644 (file)
@@ -1003,9 +1003,14 @@ svga_buffer_handle(struct svga_context *svga, struct pipe_resource *buf,
             return NULL;
       }
    } else {
-      if (!sbuf->bind_flags) {
+      /* If there is no resource handle yet, then combine the buffer bind
+       * flags and the tobind_flags if they are compatible.
+       * If not, just use the tobind_flags for creating the resource handle.
+       */
+      if (compatible_bind_flags(sbuf->bind_flags, tobind_flags))
+         sbuf->bind_flags = sbuf->bind_flags | tobind_flags;
+      else
          sbuf->bind_flags = tobind_flags;
-      }
 
       assert((sbuf->bind_flags & tobind_flags) == tobind_flags);