diff options
author | José Fonseca <[email protected]> | 2011-11-09 18:58:28 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2011-11-14 10:06:00 +0000 |
commit | 9e29cdbe95810de8658dfd1cabf1a7d87264c2f7 (patch) | |
tree | 8890886709260d28912ace0e5f95c6559686edef | |
parent | e21c5157b6b39d2332e7e13eeb45a7d2b6a41756 (diff) |
draw: Handle failure to allocate aligned_constant_storage.
Also, actually update const_storage_size, therefore avoiding to
unnecessarily reallocate aligned_constant_storage every single time
draw_vs_set_constants() is called.
Reviewed-by: Brian Paul <[email protected]>
-rw-r--r-- | src/gallium/auxiliary/draw/draw_vs.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/draw/draw_vs.c b/src/gallium/auxiliary/draw/draw_vs.c index 957bbe57a82..bc1c90b0f3a 100644 --- a/src/gallium/auxiliary/draw/draw_vs.c +++ b/src/gallium/auxiliary/draw/draw_vs.c @@ -69,14 +69,20 @@ draw_vs_set_constants(struct draw_context *draw, if (size > draw->vs.const_storage_size[slot]) { if (draw->vs.aligned_constant_storage[slot]) { align_free((void *)draw->vs.aligned_constant_storage[slot]); + draw->vs.const_storage_size[slot] = 0; } draw->vs.aligned_constant_storage[slot] = align_malloc(size, alignment); + if (draw->vs.aligned_constant_storage[slot]) { + draw->vs.const_storage_size[slot] = size; + } } assert(constants); - memcpy((void *)draw->vs.aligned_constant_storage[slot], - constants, - size); + if (draw->vs.aligned_constant_storage[slot]) { + memcpy((void *)draw->vs.aligned_constant_storage[slot], + constants, + size); + } constants = draw->vs.aligned_constant_storage[slot]; } |