aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/tnl
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2020-04-07 20:19:41 -0700
committerIan Romanick <[email protected]>2020-04-13 10:26:38 -0700
commit65f14fd68dac4fb52c765c82f08931d7aa745e61 (patch)
tree53a9cd006228701a2939a24abcf13efee8a522a3 /src/mesa/tnl
parent28d36d26c2212276e1238fad8f0b12caab97fee8 (diff)
tnl: Don't dereference NULL obj pointer in bind_indices
Structurally the code is now similar to bind_inputs. The fixes tag is a little bit misleading. I think the change in that commit just exposes a previously existing bug. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2746 Fixes: f3cce7087a5 ("mesa: don't ever bind NullBufferObj for glBindBuffer targets") Reviewed-by: Marek Olšák <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4512>
Diffstat (limited to 'src/mesa/tnl')
-rw-r--r--src/mesa/tnl/t_draw.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c
index 335161ef0d0..2146fe92c88 100644
--- a/src/mesa/tnl/t_draw.c
+++ b/src/mesa/tnl/t_draw.c
@@ -362,20 +362,22 @@ static void bind_indices( struct gl_context *ctx,
return;
}
- if (ib->obj &&
- !_mesa_bufferobj_mapped(ib->obj, MAP_INTERNAL)) {
- /* if the buffer object isn't mapped yet, map it now */
- bo[*nr_bo] = ib->obj;
- (*nr_bo)++;
- ptr = ctx->Driver.MapBufferRange(ctx, (GLsizeiptr) ib->ptr,
- ib->count << ib->index_size_shift,
- GL_MAP_READ_BIT, ib->obj,
- MAP_INTERNAL);
- assert(ib->obj->Mappings[MAP_INTERNAL].Pointer);
- } else {
- /* user-space elements, or buffer already mapped */
- ptr = ADD_POINTERS(ib->obj->Mappings[MAP_INTERNAL].Pointer, ib->ptr);
- }
+ if (ib->obj) {
+ if (!_mesa_bufferobj_mapped(ib->obj, MAP_INTERNAL)) {
+ /* if the buffer object isn't mapped yet, map it now */
+ bo[*nr_bo] = ib->obj;
+ (*nr_bo)++;
+ ptr = ctx->Driver.MapBufferRange(ctx, (GLsizeiptr) ib->ptr,
+ ib->count << ib->index_size_shift,
+ GL_MAP_READ_BIT, ib->obj,
+ MAP_INTERNAL);
+ assert(ib->obj->Mappings[MAP_INTERNAL].Pointer);
+ } else {
+ /* user-space elements, or buffer already mapped */
+ ptr = ADD_POINTERS(ib->obj->Mappings[MAP_INTERNAL].Pointer, ib->ptr);
+ }
+ } else
+ ptr = ib->ptr;
if (ib->index_size_shift == 2 && VB->Primitive[0].basevertex == 0) {
VB->Elts = (GLuint *) ptr;