On 05/14/2013 03:50 PM, Dave Airlie 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

I'm not 100% sure that's okay. I have some recollection (but I'll have to do spec archaeology) that MAX_COMBINED is eventually required to be the sum of all the other maximums... basically making it a useless query. This was done because that's what everyone was already doing, and it's what apps were implicitly expecting.

Dave.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to