virgl: don't flush an empty range
authorGurchetan Singh <gurchetansingh@chromium.org>
Fri, 28 Dec 2018 23:07:25 +0000 (00:07 +0100)
committerErik Faye-Lund <erik.faye-lund@collabora.com>
Thu, 3 Jan 2019 19:59:29 +0000 (20:59 +0100)
Otherwise, the gl-1.0-long-dlist Piglit test crashes.

Fixes: db7757 ("virgl: modify how we handle GL_MAP_FLUSH_EXPLICIT_BIT")
Reported by airlied@

v2: Exit on any invalid range (Erik)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109190
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
src/gallium/drivers/virgl/virgl_buffer.c

index cee26da41b77343e1a294d0c318e76b4b58bb19a..4d30c6c340e2baa26ad1e4966a5c80f694c3e6ed 100644 (file)
@@ -83,6 +83,9 @@ static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
    if (trans->base.usage & PIPE_TRANSFER_WRITE) {
       struct virgl_screen *vs = virgl_screen(ctx->screen);
       if (transfer->usage & PIPE_TRANSFER_FLUSH_EXPLICIT) {
+         if (trans->range.end <= trans->range.start)
+            goto out;
+
          transfer->box.x += trans->range.start;
          transfer->box.width = trans->range.end - trans->range.start;
          trans->offset = transfer->box.x;
@@ -96,6 +99,7 @@ static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
 
    }
 
+out:
    virgl_resource_destroy_transfer(vctx, trans);
 }