From 6b3627da08997701b837dfb166eb0fb35a6312ee Mon Sep 17 00:00:00 2001 From: Neha Bhende Date: Mon, 6 Mar 2017 15:53:58 -0800 Subject: [PATCH] svga: Add SVGA3dCmdIntraSurfaceCopy command support in OpenGL driver v2: changes as per Charmaine's comment Reviewed-by: Charmaine Lee Reviewed-by: Brian Paul --- src/gallium/drivers/svga/svga_cmd.h | 8 +++++++ src/gallium/drivers/svga/svga_cmd_vgpu10.c | 24 +++++++++++++++++++ src/gallium/drivers/svga/svgadump/svga_dump.c | 17 +++++++++++++ 3 files changed, 49 insertions(+) diff --git a/src/gallium/drivers/svga/svga_cmd.h b/src/gallium/drivers/svga/svga_cmd.h index 51788849d65..b191ed5d307 100644 --- a/src/gallium/drivers/svga/svga_cmd.h +++ b/src/gallium/drivers/svga/svga_cmd.h @@ -682,4 +682,12 @@ SVGA3D_vgpu10_TransferFromBuffer(struct svga_winsys_context *swc, unsigned dstSubResource, SVGA3dBox *dstBox); +/*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); + + #endif /* __SVGA3D_H__ */ diff --git a/src/gallium/drivers/svga/svga_cmd_vgpu10.c b/src/gallium/drivers/svga/svga_cmd_vgpu10.c index bed1403ac1b..e0e47e1c26e 100644 --- a/src/gallium/drivers/svga/svga_cmd_vgpu10.c +++ b/src/gallium/drivers/svga/svga_cmd_vgpu10.c @@ -1372,3 +1372,27 @@ SVGA3D_vgpu10_TransferFromBuffer(struct svga_winsys_context *swc, swc->commit(swc); return PIPE_OK; } + +enum pipe_error +SVGA3D_vgpu10_IntraSurfaceCopy(struct svga_winsys_context *swc, + struct svga_winsys_surface *surface, + unsigned level, unsigned face, + const SVGA3dCopyBox *box) +{ + SVGA3dCmdIntraSurfaceCopy *cmd = + SVGA3D_FIFOReserve(swc, + SVGA_3D_CMD_INTRA_SURFACE_COPY, + sizeof(SVGA3dCmdIntraSurfaceCopy), + 1); /* one relocation */ + if (!cmd) + return PIPE_ERROR_OUT_OF_MEMORY; + + swc->surface_relocation(swc, &cmd->surface.sid, NULL, surface, SVGA_RELOC_READ | SVGA_RELOC_WRITE); + cmd->surface.face = face; + cmd->surface.mipmap = level; + cmd->box = *box; + + swc->commit(swc); + + return PIPE_OK; +} diff --git a/src/gallium/drivers/svga/svgadump/svga_dump.c b/src/gallium/drivers/svga/svgadump/svga_dump.c index c8e6856f170..e93bb58de71 100644 --- a/src/gallium/drivers/svga/svgadump/svga_dump.c +++ b/src/gallium/drivers/svga/svgadump/svga_dump.c @@ -2041,6 +2041,15 @@ SVGA3D_DUMP_HEADER(TransferFromBuffer) dump_SVGA3dBox(&cmd->destBox); } +static void +dump_SVGA3dCmdIntraSurfaceCopy(const SVGA3dCmdIntraSurfaceCopy *cmd) +{ + SVGA3D_DUMP_PARAMETER(surface.sid, u); + SVGA3D_DUMP_PARAMETER(surface.face, u); + SVGA3D_DUMP_PARAMETER(surface.mipmap, u); + dump_SVGA3dCopyBox(&cmd->box); +} + static void dump_SVGA3dCmdInvalidateGBSurface(const SVGA3dCmdInvalidateGBSurface *cmd) { @@ -2559,6 +2568,14 @@ svga_dump_command(uint32_t cmd_id, const void *data, uint32_t size) body = (const uint8_t *)&cmd[1]; } break; + case SVGA_3D_CMD_INTRA_SURFACE_COPY: + _debug_printf("\tSVGA_3D_CMD_INTRA_SURFACE_COPY\n"); + { + const SVGA3dCmdIntraSurfaceCopy *cmd = (const SVGA3dCmdIntraSurfaceCopy *)body; + dump_SVGA3dCmdIntraSurfaceCopy(cmd); + body = (const uint8_t *)&cmd[1]; + } + break; default: _debug_printf("\t0x%08x\n", cmd_id); break; -- 2.30.2