diff options
author | Erik Faye-Lund <[email protected]> | 2018-06-25 21:10:31 +0100 |
---|---|---|
committer | Erik Faye-Lund <[email protected]> | 2018-07-02 10:51:29 +0200 |
commit | 4c8770570549e5093dddb568cdaf168821179451 (patch) | |
tree | 87888ef4f5dab0aa12f1b6a902a962c9fc53e2d6 /src/gallium/auxiliary | |
parent | 02db2363f0f9174ecd8b3484c186b250c2a1259a (diff) |
gallium/u_vbuf: drop min/max-scanning for empty indirect draws
When building with asserts enabled, we'll end up triggering an assert
in pipe_buffer_map_range down this code-path, due to trying to map
an empty range. Even if we avoid that, we'll trigger another assert
a bit later, because u_vbuf_get_minmax_index returns a min-index of
-1 here, which gets promoted to an unsigned value, and gives us an
out-of-bounds buffer-mapping offset.
Since we can't really have a well-defined min/max range here when
the range is empty anyway, we should just drop this dance in the
first place. After all, no rendering is going to be produced.
This fixes a crash in dEQP-GLES31.functional.draw_indirect.random.0
on VirGL for me.
Signed-off-by: Erik Faye-Lund <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/util/u_vbuf.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_vbuf.c b/src/gallium/auxiliary/util/u_vbuf.c index 42f37c75742..76a1d143d91 100644 --- a/src/gallium/auxiliary/util/u_vbuf.c +++ b/src/gallium/auxiliary/util/u_vbuf.c @@ -1183,6 +1183,9 @@ void u_vbuf_draw_vbo(struct u_vbuf *mgr, const struct pipe_draw_info *info) new_info.start = data[2]; pipe_buffer_unmap(pipe, transfer); new_info.indirect = NULL; + + if (!new_info.count) + return; } if (new_info.index_size) { |