summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2020-11-03 23:15:41 -0500
committerMarek Olšák <marek.olsak@amd.com>2021-01-04 19:22:33 -0500
commit641dd03f15a876c23513a5eaaeee5275f041b5dc (patch)
treecd56854e0ebb76adb9584deba9629d68bdf6ccde
parentecac89b732f5871b87c51ae601dd60a1eafd5886 (diff)
mesa: fix an overflow check for MultiDrawElements
Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com> Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7679>
-rw-r--r--src/mesa/main/draw.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c
index 215d0dfff1b..915c24b6fac 100644
--- a/src/mesa/main/draw.c
+++ b/src/mesa/main/draw.c
@@ -1277,8 +1277,11 @@ _mesa_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
}
if (ctx->Const.MultiDrawWithUserIndices) {
- /* Check whether prim[i].start would overflow. */
- if (((max_index_ptr - min_index_ptr) >> ib.index_size_shift) > UINT_MAX)
+ /* "max_index_ptr - min_index_ptr >> index_size_shift" is stored
+ * in prims[i].start. The driver will multiply it later by index_size
+ * so make sure the final value won't overflow.
+ */
+ if (max_index_ptr - min_index_ptr > UINT32_MAX)
fallback = true;
} else {
/* If the index buffer isn't in a VBO, then treating the application's