Mesa (master): svga: Fix the guest offset of piecewise buffer DMAs.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Mon Feb 22 21:51:10 UTC 2010


Module: Mesa
Branch: master
Commit: 8ea7d8412c5c002b43824a5df5356cbe1a05ce20
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ea7d8412c5c002b43824a5df5356cbe1a05ce20

Author: José Fonseca <jfonseca at vmware.com>
Date:   Mon Feb 22 19:20:25 2010 +0000

svga: Fix the guest offset of piecewise buffer DMAs.

It was being erroneously set equal to the host offset, but it should be
zero.

---

 src/gallium/drivers/svga/svga_cmd.c           |    9 +++++----
 src/gallium/drivers/svga/svga_cmd.h           |    3 ++-
 src/gallium/drivers/svga/svga_screen_buffer.c |    4 ++--
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_cmd.c b/src/gallium/drivers/svga/svga_cmd.c
index a0da7d7..04307d1 100644
--- a/src/gallium/drivers/svga/svga_cmd.c
+++ b/src/gallium/drivers/svga/svga_cmd.c
@@ -478,7 +478,8 @@ SVGA3D_BufferDMA(struct svga_winsys_context *swc,
                  struct svga_winsys_surface *host,
                  SVGA3dTransferType transfer,      // IN
                  uint32 size,                      // IN
-                 uint32 offset,                    // IN
+                 uint32 guest_offset,              // IN
+                 uint32 host_offset,               // IN
                  SVGA3dSurfaceDMAFlags flags)      // IN
 {
    SVGA3dCmdSurfaceDMA *cmd;
@@ -517,19 +518,19 @@ SVGA3D_BufferDMA(struct svga_winsys_context *swc,
    cmd->transfer = transfer;
 
    box = (SVGA3dCopyBox *)&cmd[1];
-   box->x = offset;
+   box->x = host_offset;
    box->y = 0;
    box->z = 0;
    box->w = size;
    box->h = 1;
    box->d = 1;
-   box->srcx = offset;
+   box->srcx = guest_offset;
    box->srcy = 0;
    box->srcz = 0;
    
    pSuffix = (SVGA3dCmdSurfaceDMASuffix *)((uint8_t*)cmd + sizeof *cmd + sizeof *box);
    pSuffix->suffixSize = sizeof *pSuffix;
-   pSuffix->maximumOffset = offset + size;
+   pSuffix->maximumOffset = guest_offset + size;
    pSuffix->flags = flags;
 
    swc->commit(swc);
diff --git a/src/gallium/drivers/svga/svga_cmd.h b/src/gallium/drivers/svga/svga_cmd.h
index 8041054..da9fc43 100644
--- a/src/gallium/drivers/svga/svga_cmd.h
+++ b/src/gallium/drivers/svga/svga_cmd.h
@@ -111,7 +111,8 @@ SVGA3D_BufferDMA(struct svga_winsys_context *swc,
                  struct svga_winsys_surface *host,
                  SVGA3dTransferType transfer,
                  uint32 size,
-                 uint32 offset,
+                 uint32 guest_offset,
+                 uint32 host_offset,
                  SVGA3dSurfaceDMAFlags flags);
 
 /*
diff --git a/src/gallium/drivers/svga/svga_screen_buffer.c b/src/gallium/drivers/svga/svga_screen_buffer.c
index 54663e7..e3f4a46 100644
--- a/src/gallium/drivers/svga/svga_screen_buffer.c
+++ b/src/gallium/drivers/svga/svga_screen_buffer.c
@@ -715,13 +715,13 @@ svga_buffer_upload_piecewise(struct svga_screen *ss,
          ret = SVGA3D_BufferDMA(svga->swc,
                                 hwbuf, sbuf->handle,
                                 SVGA3D_WRITE_HOST_VRAM,
-                                size, offset, sbuf->dma.flags);
+                                size, 0, offset, sbuf->dma.flags);
          if(ret != PIPE_OK) {
             svga_context_flush(svga, NULL);
             ret =  SVGA3D_BufferDMA(svga->swc,
                                     hwbuf, sbuf->handle,
                                     SVGA3D_WRITE_HOST_VRAM,
-                                    size, offset, sbuf->dma.flags);
+                                    size, 0, offset, sbuf->dma.flags);
             assert(ret == PIPE_OK);
          }
 




More information about the mesa-commit mailing list