summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2011-11-09 18:58:28 +0000
committerJosé Fonseca <jfonseca@vmware.com>2011-11-14 10:06:00 +0000
commit9e29cdbe95810de8658dfd1cabf1a7d87264c2f7 (patch)
tree8890886709260d28912ace0e5f95c6559686edef
parente21c5157b6b39d2332e7e13eeb45a7d2b6a41756 (diff)
downloadexternal_mesa3d-9e29cdbe95810de8658dfd1cabf1a7d87264c2f7.zip
external_mesa3d-9e29cdbe95810de8658dfd1cabf1a7d87264c2f7.tar.gz
external_mesa3d-9e29cdbe95810de8658dfd1cabf1a7d87264c2f7.tar.bz2
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 <brianp@vmware.com>
-rw-r--r--src/gallium/auxiliary/draw/draw_vs.c12
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 957bbe5..bc1c90b 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];
}