Module: Mesa Branch: master Commit: 99c42d11a245d6709b33353c2d88e2640f6d101e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=99c42d11a245d6709b33353c2d88e2640f6d101e
Author: Brian Paul <bri...@vmware.com> Date: Thu Jul 25 09:13:47 2013 -0600 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 <mar...@gmail.com> Reviewed-by: José Fonseca <jfons...@vmware.com> --- src/gallium/drivers/softpipe/sp_state_shader.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_state_shader.c b/src/gallium/drivers/softpipe/sp_state_shader.c index 79bd597..d80955e 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); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit