summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWiktor Janas <wixorpeek@gmail.com>2011-02-23 07:10:12 +0100
committerMarek Olšák <maraeo@gmail.com>2011-02-23 15:19:37 +0100
commitb65e2195c4a3aeb6179e2ec227ba0a2414efc8af (patch)
treeee68b3de0401e3068c0f8de6ad523b40a4e90a7b
parent6d1f28d6c045f768da2eee779006535acf382cce (diff)
st/mesa: fix computing the lowest address for interleaved attribs
Ptr can be very well NULL, so when there are two arrays, with one having offset 0 (and thus NULL Ptr), and the other having a non-zero offset, the non-zero value is taken as minimum (because of !low_addr ? start ...). On 32-bit systems, this somehow works. On 64-bit systems, it leads to crashes. Signed-off-by: Marek Olšák <maraeo@gmail.com>
-rw-r--r--src/mesa/state_tracker/st_draw.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 11ebd067e4..6530a06ade 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -315,10 +315,13 @@ setup_interleaved_attribs(struct gl_context *ctx,
const GLubyte *low_addr = NULL;
/* Find the lowest address. */
- for (attr = 0; attr < vpv->num_inputs; attr++) {
- const GLubyte *start = arrays[vp->index_to_input[attr]]->Ptr;
+ if(vpv->num_inputs) {
+ low_addr = arrays[vp->index_to_input[0]]->Ptr;
- low_addr = !low_addr ? start : MIN2(low_addr, start);
+ for (attr = 1; attr < vpv->num_inputs; attr++) {
+ const GLubyte *start = arrays[vp->index_to_input[attr]]->Ptr;
+ low_addr = MIN2(low_addr, start);
+ }
}
for (attr = 0; attr < vpv->num_inputs; attr++) {