svga: add SVGA3D_vgpu10_BufferCopy()
authorBrian Paul <brianp@vmware.com>
Thu, 23 Jun 2016 02:38:06 +0000 (20:38 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 30 Jun 2016 20:32:10 +0000 (14:32 -0600)
Acked-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/drivers/svga/svga_cmd.h
src/gallium/drivers/svga/svga_cmd_vgpu10.c

index 26e4690e649f86ff6c88c8f214bba25b74985edf..06e1b4a325396f1914bd9d53fb1975bfc5953c00 100644 (file)
@@ -642,4 +642,10 @@ enum pipe_error
 SVGA3D_vgpu10_GenMips(struct svga_winsys_context *swc,
                       const SVGA3dShaderResourceViewId shaderResourceViewId,
                       struct svga_winsys_surface *view);
+
+enum pipe_error
+SVGA3D_vgpu10_BufferCopy(struct svga_winsys_context *swc,
+                         struct svga_winsys_surface *src,
+                         struct svga_winsys_surface *dst,
+                         unsigned srcx, unsigned dstx, unsigned width);
 #endif /* __SVGA3D_H__ */
index 2729655ef47bde9313f88065e9221d97574227ed..1f13193d2333a609d11916f90284c823d23e3858 100644 (file)
@@ -1314,3 +1314,27 @@ SVGA3D_vgpu10_GenMips(struct svga_winsys_context *swc,
    swc->commit(swc);
    return PIPE_OK;
 }
+
+
+enum pipe_error
+SVGA3D_vgpu10_BufferCopy(struct svga_winsys_context *swc,
+                          struct svga_winsys_surface *src,
+                          struct svga_winsys_surface *dst,
+                          unsigned srcx, unsigned dstx, unsigned width)
+{
+   SVGA3dCmdDXBufferCopy *cmd;
+
+   cmd = SVGA3D_FIFOReserve(swc, SVGA_3D_CMD_DX_BUFFER_COPY, sizeof *cmd, 2);
+
+   if (!cmd)
+      return PIPE_ERROR_OUT_OF_MEMORY;
+
+   swc->surface_relocation(swc, &cmd->dest, NULL, dst, SVGA_RELOC_WRITE);
+   swc->surface_relocation(swc, &cmd->src, NULL, src, SVGA_RELOC_READ);
+   cmd->destX = dstx;
+   cmd->srcX = srcx;
+   cmd->width = width;
+
+   swc->commit(swc);
+   return PIPE_OK;
+}