[Mesa-dev] [PATCH] llvmpipe: Truncate the binned constants to max const buffer size.

Roland Scheidegger sroland at vmware.com
Thu Jun 18 08:09:03 PDT 2015


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 <sroland at vmware.com>




More information about the mesa-dev mailing list