svga: add a helper function to send ResolveCopy command

Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Charmaine Lee 2017-10-16 11:31:15 -07:00 committed by Brian Paul
parent 9a24b08a49
commit 2d39e6d0c8
2 changed files with 40 additions and 6 deletions

View file

@ -685,9 +685,16 @@ SVGA3D_vgpu10_TransferFromBuffer(struct svga_winsys_context *swc,
/*Cap2 commands*/
enum pipe_error
SVGA3D_vgpu10_IntraSurfaceCopy(struct svga_winsys_context *swc,
struct svga_winsys_surface *src,
unsigned level, unsigned face,
const SVGA3dCopyBox *box);
struct svga_winsys_surface *src,
unsigned level, unsigned face,
const SVGA3dCopyBox *box);
enum pipe_error
SVGA3D_vgpu10_ResolveCopy(struct svga_winsys_context *swc,
unsigned dstSubResource,
struct svga_winsys_surface *dst,
unsigned srcSubResource,
struct svga_winsys_surface *src,
const SVGA3dSurfaceFormat copyFormat);
#endif /* __SVGA3D_H__ */

View file

@ -1375,9 +1375,9 @@ SVGA3D_vgpu10_TransferFromBuffer(struct svga_winsys_context *swc,
enum pipe_error
SVGA3D_vgpu10_IntraSurfaceCopy(struct svga_winsys_context *swc,
struct svga_winsys_surface *surface,
unsigned level, unsigned face,
const SVGA3dCopyBox *box)
struct svga_winsys_surface *surface,
unsigned level, unsigned face,
const SVGA3dCopyBox *box)
{
SVGA3dCmdIntraSurfaceCopy *cmd =
SVGA3D_FIFOReserve(swc,
@ -1396,3 +1396,30 @@ SVGA3D_vgpu10_IntraSurfaceCopy(struct svga_winsys_context *swc,
return PIPE_OK;
}
enum pipe_error
SVGA3D_vgpu10_ResolveCopy(struct svga_winsys_context *swc,
unsigned dstSubResource,
struct svga_winsys_surface *dst,
unsigned srcSubResource,
struct svga_winsys_surface *src,
const SVGA3dSurfaceFormat copyFormat)
{
SVGA3dCmdDXResolveCopy *cmd =
SVGA3D_FIFOReserve(swc,
SVGA_3D_CMD_DX_RESOLVE_COPY,
sizeof(SVGA3dCmdDXResolveCopy),
2); /* two relocations */
if (!cmd)
return PIPE_ERROR_OUT_OF_MEMORY;
cmd->dstSubResource = dstSubResource;
swc->surface_relocation(swc, &cmd->dstSid, NULL, dst, SVGA_RELOC_WRITE);
cmd->srcSubResource = srcSubResource;
swc->surface_relocation(swc, &cmd->srcSid, NULL, src, SVGA_RELOC_READ);
cmd->copyFormat = copyFormat;
swc->commit(swc);
return PIPE_OK;
}