Am 18.06.2015 um 16:52 schrieb Jose Fonseca: > Tested with Ilia Mirkin's gzdoom.trace and > "arb_uniform_buffer_object-maxuniformblocksize fsexceed" piglit test > without my earlier fix to fail linkage when UBO exceeds > GL_MAX_UNIFORM_BLOCK_SIZE. > --- > src/gallium/auxiliary/gallivm/lp_bld_limits.h | 6 +++++- > src/gallium/drivers/llvmpipe/lp_setup.c | 5 ++++- > 2 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_limits.h > b/src/gallium/auxiliary/gallivm/lp_bld_limits.h > index 49064fe..db50351 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_limits.h > +++ b/src/gallium/auxiliary/gallivm/lp_bld_limits.h > @@ -51,8 +51,12 @@ > > #define LP_MAX_TGSI_PREDS 16 > > +#define LP_MAX_TGSI_CONSTS 4096 > + > #define LP_MAX_TGSI_CONST_BUFFERS 16 > > +#define LP_MAX_TGSI_CONST_BUFFER_SIZE (LP_MAX_TGSI_CONSTS * sizeof(float[4])) > + > /* > * For quick access we cache registers in statically > * allocated arrays. Here we define the maximum size > @@ -100,7 +104,7 @@ gallivm_get_shader_param(enum pipe_shader_cap param) > case PIPE_SHADER_CAP_MAX_OUTPUTS: > return 32; > case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE: > - return sizeof(float[4]) * 4096; > + return LP_MAX_TGSI_CONST_BUFFER_SIZE; > case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: > return PIPE_MAX_CONSTANT_BUFFERS; > case PIPE_SHADER_CAP_MAX_TEMPS: > diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c > b/src/gallium/drivers/llvmpipe/lp_setup.c > index 56292c6..4c8167a 100644 > --- a/src/gallium/drivers/llvmpipe/lp_setup.c > +++ b/src/gallium/drivers/llvmpipe/lp_setup.c > @@ -1069,10 +1069,13 @@ try_update_scene_state( struct lp_setup_context > *setup ) > if (setup->dirty & LP_SETUP_NEW_CONSTANTS) { > for (i = 0; i < Elements(setup->constants); ++i) { > struct pipe_resource *buffer = setup->constants[i].current.buffer; > - const unsigned current_size = > setup->constants[i].current.buffer_size; > + const unsigned current_size = > MIN2(setup->constants[i].current.buffer_size, > + LP_MAX_TGSI_CONST_BUFFER_SIZE); > const ubyte *current_data = NULL; > int num_constants; > > + STATIC_ASSERT(DATA_BLOCK_SIZE >= LP_MAX_TGSI_CONST_BUFFER_SIZE); > + > if (buffer) { > /* resource buffer */ > current_data = (ubyte *) llvmpipe_resource_data(buffer); >
Reviewed-by: Roland Scheidegger <srol...@vmware.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev