draw: don't touch info values that aren't valid.

These shouldn't be accessed, and shows up as an uninit access in
valgrind with piglit rasterpos

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10641>
(cherry picked from commit 5449e6d14c)
This commit is contained in:
Dave Airlie
2022-08-04 13:24:25 +10:00
committed by Dylan Baker
parent 167af40dae
commit 8cd9d2fcc0
2 changed files with 9 additions and 6 deletions

View File

@@ -283,7 +283,7 @@
"description": "draw: don't touch info values that aren't valid.",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View File

@@ -153,7 +153,7 @@ draw_pt_arrays(struct draw_context *draw,
if (count >= first)
frontend->run(frontend, draw_info[i].start, count);
if (draw->pt.user.increment_draw_id)
if (num_draws > 1 && draw->pt.user.increment_draw_id)
draw->pt.user.drawid++;
}
@@ -525,11 +525,14 @@ draw_vbo(struct draw_context *draw,
num_draws = 1;
}
if (info->index_size)
if (info->index_size) {
assert(draw->pt.user.elts);
draw->pt.user.min_index = use_info->index_bounds_valid ? use_info->min_index : 0;
draw->pt.user.max_index = use_info->index_bounds_valid ? use_info->max_index : ~0;
draw->pt.user.min_index = use_info->index_bounds_valid ? use_info->min_index : 0;
draw->pt.user.max_index = use_info->index_bounds_valid ? use_info->max_index : ~0;
} else {
draw->pt.user.min_index = 0;
draw->pt.user.max_index = ~0;
}
draw->pt.user.eltSize = use_info->index_size ? draw->pt.user.eltSizeIB : 0;
draw->pt.user.drawid = drawid_offset;
draw->pt.user.increment_draw_id = use_info->increment_draw_id;