virgl: also mark sampler views as dirty
authorGurchetan Singh <gurchetansingh@chromium.org>
Tue, 10 Jul 2018 23:19:24 +0000 (16:19 -0700)
committerDave Airlie <airlied@redhat.com>
Tue, 31 Jul 2018 22:05:39 +0000 (08:05 +1000)
When texture buffers are used as images in compute shaders, the guest
never sees the modified data since the TBO is always marked as clean.

Fixes most dEQP-GLES31.functional.image_load_store.buffer.* tests.

Example test cases:
   dEQP-GLES31.functional.image_load_store.buffer.load_store.r32ui
   dEQP-GLES31.functional.image_load_store.buffer.qualifiers.coherent_r32f
   dEQP-GLES31.functional.image_load_store.buffer.format_reinterpret.rgba8_rgba8ui

Note: virglrenderer side patch also needed to bind TBOs correctly

Reviewed-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/virgl/virgl_buffer.c

index 3288bb20bd1923d5863bebe2d9649bd1a72ceac2..88a22b56f9a2a6940ebb1231735381cfb2a26594 100644 (file)
@@ -164,7 +164,8 @@ struct pipe_resource *virgl_buffer_create(struct virgl_screen *vs,
    vbind = pipe_to_virgl_bind(template->bind);
    size = template->width0;
 
-   if (vbind == VIRGL_BIND_SHADER_BUFFER)
+   /* SSBOs and texture buffers can written to by host compute shaders. */
+   if (vbind == VIRGL_BIND_SHADER_BUFFER || vbind == VIRGL_BIND_SAMPLER_VIEW)
       buf->base.clean = FALSE;
    buf->base.hw_res = vs->vws->resource_create(vs->vws, template->target, template->format, vbind, template->width0, 1, 1, 1, 0, 0, size);