[Mesa-dev] [PATCH 1/2] st/mesa: allow creating buffers of size = 0
Jose Fonseca
jfonseca at vmware.com
Mon Nov 14 07:13:33 PST 2011
Is it really necessary to bother pipe drivers with zero size buffers?
It looks like a useless corner case, which will cause all sort of implementations problems (e.g., malloc(0) may return NULL; kernel drivers will likely refuse 0 size buffers), so pipe drivers will need a lot of
if (buffer->size == 0) {
// don't do something stupid
} else {
// business as usual
}
I'd prefer see this be completely handled in the state tracker.
Jose
----- Original Message -----
> Calling glBufferData(size=0) is legal. Instead of no-oping it, go
> ahead
> and create a gallium buffer of size zero. This lets us avoid a bunch
> of
> NULL pointer checking elsewhere. In the case of a zero-sized VBO,
> the
> bounds checking we do later will prevent invalid memory accesses.
> ---
> src/mesa/state_tracker/st_cb_bufferobjects.c | 22
> +++++++++-------------
> 1 files changed, 9 insertions(+), 13 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c
> b/src/mesa/state_tracker/st_cb_bufferobjects.c
> index adac92f..3abf029 100644
> --- a/src/mesa/state_tracker/st_cb_bufferobjects.c
> +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
> @@ -221,21 +221,17 @@ st_bufferobj_data(struct gl_context *ctx,
>
> pipe_resource_reference( &st_obj->buffer, NULL );
>
> - if (size != 0) {
> - st_obj->buffer = pipe_buffer_create(pipe->screen, bind,
> - pipe_usage, size);
> -
> - if (!st_obj->buffer) {
> - /* out of memory */
> - st_obj->Base.Size = 0;
> - return GL_FALSE;
> - }
> -
> - if (data)
> - pipe_buffer_write(pipe, st_obj->buffer, 0, size, data);
> - return GL_TRUE;
> + st_obj->buffer = pipe_buffer_create(pipe->screen, bind,
> pipe_usage, size);
> +
> + if (!st_obj->buffer) {
> + /* out of memory */
> + st_obj->Base.Size = 0;
> + return GL_FALSE;
> }
>
> + if (data && size > 0)
> + pipe_buffer_write(pipe, st_obj->buffer, 0, size, data);
> +
> return GL_TRUE;
> }
>
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list