From 9bd047aa268a7be1222edb10ee448886fcdc9a68 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 30 Jun 2017 14:02:20 -0700 Subject: [PATCH] svga: fix buffer binding flags initialization If a buffer is created/initialized with glNamedBufferData we will have no target (GL_ARRAY_BUFFER, GL_UNIFORM_BUFFER, etc) so the svga_buffer::bind_flags will be zero until we try to get the buffer handle. This patch initializes the svga_buffer::bind_flags field when it's zero. This fixes the Piglit arb_uniform_buffer_object-rendering-dsa test. Note that there's still issues in this area that'll have to be addressed in the future. For example, creating a buffer object as GL_UNIFORM_BUFFER and later using it as a vertex buffer will fail. Reviewed-by: Charmaine Lee --- src/gallium/drivers/svga/svga_resource_buffer_upload.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gallium/drivers/svga/svga_resource_buffer_upload.c b/src/gallium/drivers/svga/svga_resource_buffer_upload.c index 61f6fb0f03c..104cb6dbd2c 100644 --- a/src/gallium/drivers/svga/svga_resource_buffer_upload.c +++ b/src/gallium/drivers/svga/svga_resource_buffer_upload.c @@ -1003,6 +1003,12 @@ svga_buffer_handle(struct svga_context *svga, struct pipe_resource *buf, return NULL; } } else { + if (!sbuf->bind_flags) { + sbuf->bind_flags = tobind_flags; + } + + assert((sbuf->bind_flags & tobind_flags) == tobind_flags); + /* This call will set sbuf->handle */ if (svga_have_gb_objects(svga)) { ret = svga_buffer_update_hw(svga, sbuf, sbuf->bind_flags); -- 2.30.2