From: Brian Paul Date: Thu, 25 Jul 2013 15:13:47 +0000 (-0600) Subject: softpipe: don't ignore pipe_constant_buffer::buffer_offset X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=99c42d11a245d6709b33353c2d88e2640f6d101e;p=mesa.git softpipe: don't ignore pipe_constant_buffer::buffer_offset This was never a problem since the Mesa state tracker always gives us a user-space constant buffer with buffer_offset=0. But if another state tracker ever gave us a "HW" constant buffer with non-zero buffer_offset we'd mis-render. Also, use the correct buffer size. And move an assertion to the top of the function. Reviewed-by: Marek Olšák Reviewed-by: José Fonseca --- diff --git a/src/gallium/drivers/softpipe/sp_state_shader.c b/src/gallium/drivers/softpipe/sp_state_shader.c index 79bd597ebcb..d80955e696c 100644 --- a/src/gallium/drivers/softpipe/sp_state_shader.c +++ b/src/gallium/drivers/softpipe/sp_state_shader.c @@ -347,6 +347,8 @@ softpipe_set_constant_buffer(struct pipe_context *pipe, unsigned size; const void *data; + assert(shader < PIPE_SHADER_TYPES); + if (cb && cb->user_buffer) { constants = softpipe_user_buffer_create(pipe->screen, (void *) cb->user_buffer, @@ -354,10 +356,10 @@ softpipe_set_constant_buffer(struct pipe_context *pipe, PIPE_BIND_CONSTANT_BUFFER); } - size = constants ? constants->width0 : 0; + size = cb ? cb->buffer_size : 0; data = constants ? softpipe_resource(constants)->data : NULL; - - assert(shader < PIPE_SHADER_TYPES); + if (data) + data = (const char *) data + cb->buffer_offset; draw_flush(softpipe->draw);