virgl: add encoder functions for new protocol
authorGurchetan Singh <gurchetansingh@chromium.org>
Wed, 28 Nov 2018 23:36:07 +0000 (15:36 -0800)
committerGert Wollny <gert.wollny@collabora.com>
Fri, 15 Feb 2019 10:19:05 +0000 (11:19 +0100)
Let's encode the new protocol with new helper functions.

Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
src/gallium/drivers/virgl/virgl_encode.c
src/gallium/drivers/virgl/virgl_encode.h

index fe390ea93fe797d919b1c13fce6e806875c315c6..ad7842f0f37a84b50d83f45c35eaf909bc275eee 100644 (file)
@@ -1103,3 +1103,25 @@ int virgl_encode_get_query_result_qbo(struct virgl_context *ctx,
    virgl_encoder_write_dword(ctx->cbuf, index);
    return 0;
 }
+
+void virgl_encode_transfer(struct virgl_screen *vs, struct virgl_cmd_buf *buf,
+                           struct virgl_transfer *trans, uint32_t direction)
+{
+   uint32_t command;
+   struct virgl_resource *res = virgl_resource(trans->base.resource);
+   command = VIRGL_CMD0(VIRGL_CCMD_TRANSFER3D, 0, VIRGL_TRANSFER3D_SIZE);
+   virgl_encoder_write_dword(buf, command);
+   virgl_encoder_transfer3d_common(vs, buf, trans);
+   virgl_encoder_write_dword(buf, trans->offset);
+   virgl_encoder_write_dword(buf, direction);
+}
+
+void virgl_encode_end_transfers(struct virgl_cmd_buf *buf)
+{
+   uint32_t command, diff;
+   diff = VIRGL_MAX_TBUF_DWORDS - buf->cdw;
+   if (diff) {
+      command = VIRGL_CMD0(VIRGL_CCMD_END_TRANSFERS, 0, diff - 1);
+      virgl_encoder_write_dword(buf, command);
+   }
+}
index 70fae1db4e5d4d248c6fd28e675fdf2d8e7fdf53..150ed17f994845b846e5c87717369ffaa305287e 100644 (file)
@@ -32,6 +32,8 @@ struct tgsi_token;
 
 struct virgl_context;
 struct virgl_resource;
+struct virgl_screen;
+struct virgl_transfer;
 struct virgl_sampler_view;
 
 struct virgl_surface {
@@ -287,4 +289,8 @@ int virgl_encode_get_query_result_qbo(struct virgl_context *ctx,
                                       uint32_t offset,
                                       uint32_t index);
 
+void virgl_encode_transfer(struct virgl_screen *vs, struct virgl_cmd_buf *buf,
+                           struct virgl_transfer *trans, uint32_t direction);
+
+void virgl_encode_end_transfers(struct virgl_cmd_buf *buf);
 #endif