I think it would be better to change PIPE_MAX_CONSTANT_BUFFERS to 16, because no API has more than 16 constant buffers to my knowledge.
Marek On Wed, May 15, 2013 at 12:50 AM, Dave Airlie <airl...@gmail.com> wrote: > On Wed, May 15, 2013 at 2:03 AM, Marek Olšák <mar...@gmail.com> wrote: >> Some Gallium drivers were crashing, because the array was not large enough. >> >> NOTE: This is a candidate for the stable branches. >> --- >> src/mesa/main/bufferobj.c | 10 ++-------- >> src/mesa/main/config.h | 2 ++ >> src/mesa/main/mtypes.h | 3 ++- >> src/mesa/state_tracker/st_extensions.c | 7 ++++--- >> 4 files changed, 10 insertions(+), 12 deletions(-) >> >> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c >> index 1566cb4..ffb67b9 100644 >> --- a/src/mesa/main/bufferobj.c >> +++ b/src/mesa/main/bufferobj.c >> @@ -619,13 +619,10 @@ _mesa_init_buffer_objects( struct gl_context *ctx ) >> _mesa_reference_buffer_object(ctx, &ctx->CopyWriteBuffer, >> ctx->Shared->NullBufferObj); >> >> - ctx->UniformBufferBindings = calloc(ctx->Const.MaxUniformBufferBindings, >> - sizeof(*ctx->UniformBufferBindings)); >> - >> _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, >> ctx->Shared->NullBufferObj); >> >> - for (i = 0; i < ctx->Const.MaxUniformBufferBindings; i++) { >> + for (i = 0; i < MAX_COMBINED_UNIFORM_BUFFERS; i++) { >> _mesa_reference_buffer_object(ctx, >> >> &ctx->UniformBufferBindings[i].BufferObject, >> ctx->Shared->NullBufferObj); >> @@ -647,14 +644,11 @@ _mesa_free_buffer_objects( struct gl_context *ctx ) >> >> _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, NULL); >> >> - for (i = 0; i < ctx->Const.MaxUniformBufferBindings; i++) { >> + for (i = 0; i < MAX_COMBINED_UNIFORM_BUFFERS; i++) { >> _mesa_reference_buffer_object(ctx, >> >> &ctx->UniformBufferBindings[i].BufferObject, >> NULL); >> } >> - >> - free(ctx->UniformBufferBindings); >> - ctx->UniformBufferBindings = NULL; >> } >> >> static bool >> diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h >> index ea87b75..134c88a 100644 >> --- a/src/mesa/main/config.h >> +++ b/src/mesa/main/config.h >> @@ -168,6 +168,8 @@ >> /*@{*/ >> #define MAX_PROGRAM_LOCAL_PARAMS 4096 >> #define MAX_UNIFORMS 4096 >> +/* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */ >> +#define MAX_COMBINED_UNIFORM_BUFFERS (16 * 6) > > Hmm softpipe currently says it has 32 per stage, so this won't scale > long term. How would it work if we report 32 per stage but limit the > max combined to 16*6, is some other code going to do the wrong thing > > Dave. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev