llvmpipe: Truncate the binned constants to max const buffer size.
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. Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
parent
f734d25560
commit
afeb922206
|
@ -51,8 +51,12 @@
|
||||||
|
|
||||||
#define LP_MAX_TGSI_PREDS 16
|
#define LP_MAX_TGSI_PREDS 16
|
||||||
|
|
||||||
|
#define LP_MAX_TGSI_CONSTS 4096
|
||||||
|
|
||||||
#define LP_MAX_TGSI_CONST_BUFFERS 16
|
#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
|
* For quick access we cache registers in statically
|
||||||
* allocated arrays. Here we define the maximum size
|
* 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:
|
case PIPE_SHADER_CAP_MAX_OUTPUTS:
|
||||||
return 32;
|
return 32;
|
||||||
case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE:
|
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:
|
case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
|
||||||
return PIPE_MAX_CONSTANT_BUFFERS;
|
return PIPE_MAX_CONSTANT_BUFFERS;
|
||||||
case PIPE_SHADER_CAP_MAX_TEMPS:
|
case PIPE_SHADER_CAP_MAX_TEMPS:
|
||||||
|
|
|
@ -1069,10 +1069,13 @@ try_update_scene_state( struct lp_setup_context *setup )
|
||||||
if (setup->dirty & LP_SETUP_NEW_CONSTANTS) {
|
if (setup->dirty & LP_SETUP_NEW_CONSTANTS) {
|
||||||
for (i = 0; i < Elements(setup->constants); ++i) {
|
for (i = 0; i < Elements(setup->constants); ++i) {
|
||||||
struct pipe_resource *buffer = setup->constants[i].current.buffer;
|
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;
|
const ubyte *current_data = NULL;
|
||||||
int num_constants;
|
int num_constants;
|
||||||
|
|
||||||
|
STATIC_ASSERT(DATA_BLOCK_SIZE >= LP_MAX_TGSI_CONST_BUFFER_SIZE);
|
||||||
|
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
/* resource buffer */
|
/* resource buffer */
|
||||||
current_data = (ubyte *) llvmpipe_resource_data(buffer);
|
current_data = (ubyte *) llvmpipe_resource_data(buffer);
|
||||||
|
|
Loading…
Reference in New Issue