diff options
author | José Fonseca <[email protected]> | 2012-11-16 17:57:38 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2012-12-04 19:35:19 +0000 |
commit | 4da0cb83ab6d82ba3cf011bb3b9b012bd27f7bfc (patch) | |
tree | c2dc6b3cc460691b70e892b1c26e9bf217ec2348 /src | |
parent | 7da3a947c72111dfb605781be6c0d61423b56e76 (diff) |
util/u_draw: Skip rendering instead of aborting when excessive number of instances is found.
This is a temporary hack. I believe the only way of properly fixing this
is to check buffer overflow just before fetching based on addresses,
instead of number of vertices/instances. This change simply allows tests
that stress buffer overflows to complete without asserting, and should
not affect valid rendering.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/util/u_draw.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/util/u_draw.c b/src/gallium/auxiliary/util/u_draw.c index 5b3c41231a2..83d9284b895 100644 --- a/src/gallium/auxiliary/util/u_draw.c +++ b/src/gallium/auxiliary/util/u_draw.c @@ -108,8 +108,15 @@ util_draw_max_index( else { /* Per-instance data. Simply make sure the state tracker didn't * request more instances than those that fit in the buffer */ - assert((info->start_instance + info->instance_count)/element->instance_divisor - <= (buffer_max_index + 1)); + if ((info->start_instance + info->instance_count)/element->instance_divisor + > (buffer_max_index + 1)) { + /* FIXME: We really should stop thinking in terms of maximum + * indices/instances and simply start clamping against buffer + * size. */ + debug_printf("%s: too many instances for vertex buffer\n", + __FUNCTION__); + return 0; + } } } } |