svga: Add SVGA3dCmdIntraSurfaceCopy command support in OpenGL driver
authorNeha Bhende <bhenden@vmware.com>
Mon, 6 Mar 2017 23:53:58 +0000 (15:53 -0800)
committerBrian Paul <brianp@vmware.com>
Wed, 5 Sep 2018 17:22:42 +0000 (11:22 -0600)
v2: changes as per Charmaine's comment

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/drivers/svga/svga_cmd.h
src/gallium/drivers/svga/svga_cmd_vgpu10.c
src/gallium/drivers/svga/svgadump/svga_dump.c

index 51788849d65d3a6d250d8e32f8b9f839d593d509..b191ed5d30788e348de166b0121e5b2db35a655f 100644 (file)
@@ -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__ */
index bed1403ac1b8e0ee2e7379ed23b99ded11312b72..e0e47e1c26e4b1898b97c934ab80bade72ff1308 100644 (file)
@@ -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;
+}
index c8e6856f1706ade06d89c3c1795299e204c39174..e93bb58de710731f08fa96987feb163badc0ff66 100644 (file)
@@ -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;