+
+int virgl_encode_launch_grid(struct virgl_context *ctx,
+ const struct pipe_grid_info *grid_info)
+{
+ virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_LAUNCH_GRID, 0, VIRGL_LAUNCH_GRID_SIZE));
+ virgl_encoder_write_dword(ctx->cbuf, grid_info->block[0]);
+ virgl_encoder_write_dword(ctx->cbuf, grid_info->block[1]);
+ virgl_encoder_write_dword(ctx->cbuf, grid_info->block[2]);
+ virgl_encoder_write_dword(ctx->cbuf, grid_info->grid[0]);
+ virgl_encoder_write_dword(ctx->cbuf, grid_info->grid[1]);
+ virgl_encoder_write_dword(ctx->cbuf, grid_info->grid[2]);
+ if (grid_info->indirect) {
+ struct virgl_resource *res = virgl_resource(grid_info->indirect);
+ virgl_encoder_write_res(ctx, res);
+ } else
+ virgl_encoder_write_dword(ctx->cbuf, 0);
+ virgl_encoder_write_dword(ctx->cbuf, grid_info->indirect_offset);
+ return 0;
+}
+
+int virgl_encode_texture_barrier(struct virgl_context *ctx,
+ unsigned flags)
+{
+ virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_TEXTURE_BARRIER, 0, 1));
+ virgl_encoder_write_dword(ctx->cbuf, flags);
+ return 0;
+}