gallium/util: make pipe_vertex_buffer_reference safe for hashing dst
authorMarek Olšák <marek.olsak@amd.com>
Sat, 21 Aug 2021 00:49:34 +0000 (20:49 -0400)
committerMarge Bot <eric+marge@anholt.net>
Fri, 1 Oct 2021 14:51:23 +0000 (14:51 +0000)
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13050>

src/gallium/auxiliary/util/u_inlines.h

index cd6e935..7e04013 100644 (file)
@@ -252,9 +252,17 @@ pipe_vertex_buffer_reference(struct pipe_vertex_buffer *dst,
    }
 
    pipe_vertex_buffer_unreference(dst);
-   if (!src->is_user_buffer)
+   /* Don't use memcpy because there is a hole between variables.
+    * dst can be used as a hash key.
+    */
+   dst->stride = src->stride;
+   dst->is_user_buffer = src->is_user_buffer;
+   dst->buffer_offset = src->buffer_offset;
+
+   if (src->is_user_buffer)
+      dst->buffer.user = src->buffer.user;
+   else
       pipe_resource_reference(&dst->buffer.resource, src->buffer.resource);
-   memcpy(dst, src, sizeof(*src));
 }
 
 static inline void