Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d81d346 authored by Neha Bhende's avatar Neha Bhende Committed by Thomas Hellstrom
Browse files

drm/vmwgfx: Add support for SVGA3dCmdIntraSurfaceCopy command



A new command to support Intra-Surface-Copy.

Signed-off-by: default avatarNeha Bhende <bhenden@vmware.com>
Reviewed-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
parent 3b4c2511
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -3116,6 +3116,32 @@ static int vmw_cmd_dx_transfer_from_buffer(struct vmw_private *dev_priv,
				 &cmd->body.destSid, NULL);
}

/**
 * vmw_cmd_intra_surface_copy -
 * Validate an SVGA_3D_CMD_INTRA_SURFACE_COPY command
 *
 * @dev_priv: Pointer to a device private struct.
 * @sw_context: The software context being used for this batch.
 * @header: Pointer to the command header in the command stream.
 */
static int vmw_cmd_intra_surface_copy(struct vmw_private *dev_priv,
					   struct vmw_sw_context *sw_context,
					   SVGA3dCmdHeader *header)
{
	struct {
		SVGA3dCmdHeader header;
		SVGA3dCmdIntraSurfaceCopy body;
	} *cmd = container_of(header, typeof(*cmd), header);

	if (!(dev_priv->capabilities2 & SVGA_CAP2_INTRA_SURFACE_COPY))
		return -EINVAL;

	return vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface,
				user_surface_converter,
				&cmd->body.surface.sid, NULL);
}


static int vmw_cmd_check_not_3d(struct vmw_private *dev_priv,
				struct vmw_sw_context *sw_context,
				void *buf, uint32_t *size)
@@ -3471,6 +3497,8 @@ static const struct vmw_cmd_entry vmw_cmd_entries[SVGA_3D_CMD_MAX] = {
	VMW_CMD_DEF(SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER,
		    &vmw_cmd_dx_transfer_from_buffer,
		    true, false, true),
	VMW_CMD_DEF(SVGA_3D_CMD_INTRA_SURFACE_COPY, &vmw_cmd_intra_surface_copy,
		    true, false, true),
};

bool vmw_cmd_describe(const void *buf, u32 *size, char const **cmd)