[Spice-devel] [PATCH 2/8] Add helper functions for surface info <-> id mapping

alexl at redhat.com alexl at redhat.com
Fri Aug 20 11:54:34 PDT 2010


From: Alexander Larsson <alexl at redhat.com>

---
 display/driver.c  |    6 ++----
 display/res.c     |    4 ++--
 display/surface.c |    8 ++++----
 display/surface.h |   20 ++++++++++++++------
 4 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/display/driver.c b/display/driver.c
index c00adb0..9abecb3 100644
--- a/display/driver.c
+++ b/display/driver.c
@@ -1283,14 +1283,12 @@ out_error:
 VOID APIENTRY DrvDeleteDeviceBitmap(DHSURF dhsurf)
 {
     UINT32 surface_id;
-    PDev *pdev;
     SurfaceInfo *surface;
 
     surface = (SurfaceInfo *)dhsurf;
-    pdev = surface->pdev;
-    surface_id = surface - pdev->surfaces_info;
+    surface_id = GetSurfaceIdFromInfo(surface);
 
-    DeleteDeviceBitmap(pdev, surface_id, DEVICE_BITMAP_ALLOCATION_TYPE_VRAM);
+    DeleteDeviceBitmap(surface->pdev, surface_id, DEVICE_BITMAP_ALLOCATION_TYPE_VRAM);
 }
 
 #ifdef CALL_TEST
diff --git a/display/res.c b/display/res.c
index 6be006e..e1bb110 100644
--- a/display/res.c
+++ b/display/res.c
@@ -648,11 +648,11 @@ static void FreeDelSurface(PDev *pdev, Resource *res)
     switch (internal->allocation_type) {
     case DEVICE_BITMAP_ALLOCATION_TYPE_DEVRAM:
         FreeMem(pdev, MSPACE_TYPE_DEVRAM,
-                pdev->surfaces_info[internal->surface_id].draw_area.base_mem);
+                GetSurfaceInfo(pdev, internal->surface_id)->draw_area.base_mem);
         break;
     case DEVICE_BITMAP_ALLOCATION_TYPE_VRAM:
         FreeMem(pdev, MSPACE_TYPE_VRAM,
-                pdev->surfaces_info[internal->surface_id].draw_area.base_mem);
+                GetSurfaceInfo(pdev, internal->surface_id)->draw_area.base_mem);
         break;
     default:
         PANIC(pdev, "bad allocation type");
diff --git a/display/surface.c b/display/surface.c
index 4a84f45..d9fc6f4 100644
--- a/display/surface.c
+++ b/display/surface.c
@@ -45,7 +45,7 @@ BOOL CreateDrawArea(PDev *pdev, UINT8 *base_mem, ULONG format, UINT32 cx, UINT32
     size.cx = cx;
     size.cy = cy;
 
-    drawarea = &pdev->surfaces_info[surface_id].draw_area;
+    drawarea = &GetSurfaceInfo(pdev, surface_id)->draw_area;
 
     if (!(drawarea->bitmap = (HSURF)EngCreateBitmap(size, stride, format, 0, base_mem))) {
         DEBUG_PRINT((pdev, 0, "%s: EngCreateBitmap failed\n", __FUNCTION__));
@@ -101,7 +101,7 @@ HBITMAP CreateDeviceBitmap(PDev *pdev, SIZEL size, ULONG format, QXLPHYSICAL *ph
             return 0;
     };
 
-    if (!(surf = EngCreateDeviceBitmap((DHSURF)&pdev->surfaces_info[surface_id], size, format))) {
+    if (!(surf = EngCreateDeviceBitmap((DHSURF)GetSurfaceInfo(pdev, surface_id), size, format))) {
         DEBUG_PRINT((NULL, 0, "%s: create device surface failed, 0x%lx\n",
                      __FUNCTION__, pdev));
         goto out_error1;
@@ -119,7 +119,7 @@ HBITMAP CreateDeviceBitmap(PDev *pdev, SIZEL size, ULONG format, QXLPHYSICAL *ph
         goto out_error2;
     }
 
-    pdev->surfaces_info[surface_id].pdev = pdev;
+    GetSurfaceInfo(pdev, surface_id)->pdev = pdev;
 
     QXLGetSurface(pdev, phys_mem, size.cx, size.cy, depth,
                   &stride, base_mem, allocation_type);
@@ -158,7 +158,7 @@ VOID DeleteDeviceBitmap(PDev *pdev, UINT32 surface_id, UINT8 allocation_type)
 {
     DrawArea *drawarea;
 
-    drawarea = &pdev->surfaces_info[surface_id].draw_area;
+    drawarea = &GetSurfaceInfo(pdev,surface_id)->draw_area;
 
     FreeDrawArea(drawarea);
 
diff --git a/display/surface.h b/display/surface.h
index ca1ffec..6390d77 100644
--- a/display/surface.h
+++ b/display/surface.h
@@ -3,17 +3,25 @@
 
 #include "qxldd.h"
 
+static _inline UINT32 GetSurfaceIdFromInfo(SurfaceInfo *info)
+{
+  PDev *pdev;
+
+  pdev = info->pdev;
+  return info - pdev->surfaces_info;
+}
+
+static _inline SurfaceInfo *GetSurfaceInfo(PDev *pdev, UINT32 id)
+{
+  return &pdev->surfaces_info[id];
+}
+
 static _inline UINT32 GetSurfaceId(SURFOBJ *surf)
 {
-    PDev *pdev;
     SurfaceInfo *surface;
-    UINT32 surface_id;
-
-    pdev = (PDev *)surf->dhpdev;
 
     surface = (SurfaceInfo *)surf->dhsurf;
-    surface_id = surface - pdev->surfaces_info;
-    return surface_id;
+    return GetSurfaceIdFromInfo(surface);
 }
 
 static _inline void FreeSurface(PDev *pdev, UINT32 surface_id)
-- 
1.7.2.1



More information about the Spice-devel mailing list