diff options
author | Zack Rusin <zackr@vmware.com> | 2013-05-13 23:07:14 -0400 |
---|---|---|
committer | Zack Rusin <zackr@vmware.com> | 2013-05-14 03:10:56 -0400 |
commit | 5104ed3dbf18d47736fc67a8e3e317ea18360fa8 (patch) | |
tree | d161f1e6f09b3ab6846b064105b8cfc014b203cc /src/gallium/auxiliary/draw/draw_private.h | |
parent | d5250da8189d0fb9741049cdbfc50e84aab44ecb (diff) | |
download | external_mesa3d-5104ed3dbf18d47736fc67a8e3e317ea18360fa8.zip external_mesa3d-5104ed3dbf18d47736fc67a8e3e317ea18360fa8.tar.gz external_mesa3d-5104ed3dbf18d47736fc67a8e3e317ea18360fa8.tar.bz2 |
draw: try to prevent overflows on index buffers
Pass in the size of the index buffer, when available, and use it
to handle out of bounds conditions. The behavior in the case of
an overflow needs to be the same as with other overflows in the
vertex processing pipeline meaning that a vertex should still
be generated but all attributes in it set to zero.
Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: José Fonseca <jfonseca@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_private.h')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_private.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h index 84344c3..44698db 100644 --- a/src/gallium/auxiliary/draw/draw_private.h +++ b/src/gallium/auxiliary/draw/draw_private.h @@ -186,7 +186,8 @@ struct draw_context /** bytes per index (0, 1, 2 or 4) */ unsigned eltSizeIB; unsigned eltSize; - int eltBias; + unsigned eltMax; + int eltBias; unsigned min_index; unsigned max_index; @@ -460,4 +461,12 @@ draw_get_rasterizer_no_cull( struct draw_context *draw, boolean flatshade ); +/** + * Return index i from the index buffer. + * If the index buffer would overflow we return the + * index of the first element in the vb. + */ +#define DRAW_GET_IDX(elts, i) \ + ((i) >= draw->pt.user.eltMax) ? 0 : elts[i] + #endif /* DRAW_PRIVATE_H */ |