virgl: support emulating planar image sampling
authorDavid Stevens <stevensd@chromium.org>
Wed, 23 Oct 2019 02:06:17 +0000 (11:06 +0900)
committerGert Wollny <gw.fossdev@gmail.com>
Fri, 8 Nov 2019 17:06:56 +0000 (17:06 +0000)
Mesa emulates planar format sampling with per-plane samplers. Virgl now
supports this by allowing the plane index to be passed when creating a
sampler view from a planar image. With this change, mesa now passes that
information to virgl.

Signed-off-by: David Stevens <stevensd@chromium.org>
Reviewed-by: Lepton Wu <lepton@chromium.org>
src/gallium/drivers/virgl/virgl_encode.c

index 5d2f7dff6beaee7c8febec936166e47ed59965e1..7a17a90c48d806e770a871e059ec647450639476 100644 (file)
@@ -879,7 +879,12 @@ int virgl_encode_sampler_view(struct virgl_context *ctx,
       virgl_encoder_write_dword(ctx->cbuf, state->u.buf.offset / elem_size);
       virgl_encoder_write_dword(ctx->cbuf, (state->u.buf.offset + state->u.buf.size) / elem_size - 1);
    } else {
       virgl_encoder_write_dword(ctx->cbuf, state->u.buf.offset / elem_size);
       virgl_encoder_write_dword(ctx->cbuf, (state->u.buf.offset + state->u.buf.size) / elem_size - 1);
    } else {
-      virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_layer | state->u.tex.last_layer << 16);
+      if (res->metadata.plane) {
+         debug_assert(state->u.tex.first_layer == 0 && state->u.tex.last_layer == 0);
+         virgl_encoder_write_dword(ctx->cbuf, res->metadata.plane);
+      } else {
+         virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_layer | state->u.tex.last_layer << 16);
+      }
       virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_level | state->u.tex.last_level << 8);
    }
    tmp = VIRGL_OBJ_SAMPLER_VIEW_SWIZZLE_R(state->swizzle_r) |
       virgl_encoder_write_dword(ctx->cbuf, state->u.tex.first_level | state->u.tex.last_level << 8);
    }
    tmp = VIRGL_OBJ_SAMPLER_VIEW_SWIZZLE_R(state->swizzle_r) |