[PATCH 5/5] wined3d: Move access_flags into the sub resource.

Stefan Dösinger stefan at codeweavers.com
Mon Feb 10 06:28:21 CST 2014


---
 dlls/wined3d/resource.c        | 15 ++++++++-------
 dlls/wined3d/surface.c         | 14 +++++++-------
 dlls/wined3d/volume.c          | 10 +++++-----
 dlls/wined3d/wined3d_private.h |  8 ++++----
 4 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 255f636..f7331ed 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -43,19 +43,19 @@ struct private_data
     DWORD size;
 };
 
-static DWORD resource_access_from_pool(enum wined3d_pool pool)
+static DWORD sub_resource_access_from_pool(enum wined3d_pool pool)
 {
     switch (pool)
     {
         case WINED3D_POOL_DEFAULT:
-            return WINED3D_RESOURCE_ACCESS_GPU;
+            return WINED3D_SUB_RESOURCE_ACCESS_GPU;
 
         case WINED3D_POOL_MANAGED:
-            return WINED3D_RESOURCE_ACCESS_GPU | WINED3D_RESOURCE_ACCESS_CPU;
+            return WINED3D_SUB_RESOURCE_ACCESS_GPU | WINED3D_SUB_RESOURCE_ACCESS_CPU;
 
         case WINED3D_POOL_SCRATCH:
         case WINED3D_POOL_SYSTEM_MEM:
-            return WINED3D_RESOURCE_ACCESS_CPU;
+            return WINED3D_SUB_RESOURCE_ACCESS_CPU;
 
         default:
             FIXME("Unhandled pool %#x.\n", pool);
@@ -103,9 +103,6 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *
     resource->multisample_quality = multisample_quality;
     resource->usage = usage;
     resource->pool = pool;
-    resource->access_flags = resource_access_from_pool(pool);
-    if (usage & WINED3DUSAGE_DYNAMIC)
-        resource->access_flags |= WINED3D_RESOURCE_ACCESS_CPU;
     resource->width = width;
     resource->height = height;
     resource->depth = depth;
@@ -162,6 +159,10 @@ HRESULT wined3d_sub_resource_init(struct wined3d_sub_resource *sub_resource, str
         adapter_adjust_memory(device->adapter, size);
     }
 
+    sub_resource->access_flags = sub_resource_access_from_pool(pool);
+    if (usage & WINED3DUSAGE_DYNAMIC)
+        sub_resource->access_flags |= WINED3D_SUB_RESOURCE_ACCESS_CPU;
+
     return hr;
 }
 
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index f323c24..c9a1bbc 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -657,7 +657,7 @@ static BOOL surface_use_pbo(const struct wined3d_surface *surface)
     const struct wined3d_gl_info *gl_info = &surface->sub_resource.resource.device->adapter->gl_info;
 
     return surface->sub_resource.resource.pool == WINED3D_POOL_DEFAULT
-                && surface->sub_resource.resource.access_flags & WINED3D_RESOURCE_ACCESS_CPU
+                && surface->sub_resource.access_flags & WINED3D_SUB_RESOURCE_ACCESS_CPU
                 && gl_info->supported[ARB_PIXEL_BUFFER_OBJECT]
                 && !surface->sub_resource.resource.format->convert
                 && !(surface->flags & (SFLAG_NONPOW2 | SFLAG_PIN_SYSMEM));
@@ -3066,7 +3066,7 @@ HRESULT CDECL wined3d_surface_map(struct wined3d_surface *surface,
 
     ++surface->sub_resource.resource.map_count;
 
-    if (!(surface->sub_resource.resource.access_flags & WINED3D_RESOURCE_ACCESS_CPU))
+    if (!(surface->sub_resource.access_flags & WINED3D_SUB_RESOURCE_ACCESS_CPU))
         WARN("Trying to lock unlockable surface.\n");
 
     /* Performance optimization: Count how often a surface is mapped, if it is
@@ -4820,14 +4820,14 @@ static DWORD resource_access_from_location(DWORD location)
         case WINED3D_LOCATION_USER_MEMORY:
         case WINED3D_LOCATION_DIB:
         case WINED3D_LOCATION_BUFFER:
-            return WINED3D_RESOURCE_ACCESS_CPU;
+            return WINED3D_SUB_RESOURCE_ACCESS_CPU;
 
         case WINED3D_LOCATION_DRAWABLE:
         case WINED3D_LOCATION_TEXTURE_SRGB:
         case WINED3D_LOCATION_TEXTURE_RGB:
         case WINED3D_LOCATION_RB_MULTISAMPLE:
         case WINED3D_LOCATION_RB_RESOLVED:
-            return WINED3D_RESOURCE_ACCESS_GPU;
+            return WINED3D_SUB_RESOURCE_ACCESS_GPU;
 
         default:
             FIXME("Unhandled location %#x.\n", location);
@@ -5162,9 +5162,9 @@ HRESULT surface_load_location(struct wined3d_surface *surface, DWORD location)
     if (WARN_ON(d3d_surface))
     {
         DWORD required_access = resource_access_from_location(location);
-        if ((surface->sub_resource.resource.access_flags & required_access) != required_access)
+        if ((surface->sub_resource.access_flags & required_access) != required_access)
             WARN("Operation requires %#x access, but surface only has %#x.\n",
-                    required_access, surface->sub_resource.resource.access_flags);
+                    required_access, surface->sub_resource.access_flags);
     }
 
     if (!surface->locations)
@@ -6402,7 +6402,7 @@ static HRESULT surface_init(struct wined3d_surface *surface, struct wined3d_text
     if (flags & WINED3D_SURFACE_PIN_SYSMEM)
         surface->flags |= SFLAG_PIN_SYSMEM;
     if (lockable || desc->format == WINED3DFMT_D16_LOCKABLE)
-        surface->sub_resource.resource.access_flags |= WINED3D_RESOURCE_ACCESS_CPU;
+        surface->sub_resource.access_flags |= WINED3D_SUB_RESOURCE_ACCESS_CPU;
 
     surface->map_binding = WINED3D_LOCATION_SYSMEM;
 
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index e08a5e4..e7bbd51 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -223,12 +223,12 @@ static DWORD volume_access_from_location(DWORD location)
             return 0;
 
         case WINED3D_LOCATION_SYSMEM:
-            return WINED3D_RESOURCE_ACCESS_CPU;
+            return WINED3D_SUB_RESOURCE_ACCESS_CPU;
 
         case WINED3D_LOCATION_BUFFER:
         case WINED3D_LOCATION_TEXTURE_RGB:
         case WINED3D_LOCATION_TEXTURE_SRGB:
-            return WINED3D_RESOURCE_ACCESS_GPU;
+            return WINED3D_SUB_RESOURCE_ACCESS_GPU;
 
         default:
             FIXME("Unhandled location %#x.\n", location);
@@ -290,10 +290,10 @@ static void wined3d_volume_load_location(struct wined3d_volume *volume,
         return;
     }
 
-    if ((volume->sub_resource.resource.access_flags & required_access) != required_access)
+    if ((volume->sub_resource.access_flags & required_access) != required_access)
     {
         ERR("Operation requires %#x access, but volume only has %#x.\n",
-                required_access, volume->sub_resource.resource.access_flags);
+                required_access, volume->sub_resource.access_flags);
         return;
     }
 
@@ -641,7 +641,7 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
             volume, map_desc, box, flags);
 
     map_desc->data = NULL;
-    if (!(volume->sub_resource.resource.access_flags & WINED3D_RESOURCE_ACCESS_CPU))
+    if (!(volume->sub_resource.access_flags & WINED3D_SUB_RESOURCE_ACCESS_CPU))
     {
         WARN("Volume %p is not CPU accessible.\n", volume);
         return WINED3DERR_INVALIDCALL;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index facd0a0..e3cada9 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1973,9 +1973,6 @@ static inline void context_invalidate_active_texture(struct wined3d_context *con
         context_invalidate_state(context, STATE_SAMPLER(sampler));
 }
 
-#define WINED3D_RESOURCE_ACCESS_GPU     0x1
-#define WINED3D_RESOURCE_ACCESS_CPU     0x2
-
 struct wined3d_resource_ops
 {
     void (*resource_unload)(struct wined3d_resource *resource);
@@ -1993,7 +1990,6 @@ struct wined3d_resource
     UINT multisample_quality;
     DWORD usage;
     enum wined3d_pool pool;
-    DWORD access_flags;
     UINT width;
     UINT height;
     UINT depth;
@@ -2025,10 +2021,14 @@ GLenum wined3d_resource_gl_legacy_map_flags(DWORD d3d_flags) DECLSPEC_HIDDEN;
 /* Tests show that the start address of resources is 32 byte aligned */
 #define RESOURCE_ALIGNMENT 16
 
+#define WINED3D_SUB_RESOURCE_ACCESS_GPU         0x1
+#define WINED3D_SUB_RESOURCE_ACCESS_CPU         0x2
+
 struct wined3d_sub_resource
 {
     struct wined3d_resource resource;
     void *heap_memory;
+    DWORD access_flags;
 };
 
 BOOL wined3d_sub_resource_allocate_sysmem(struct wined3d_sub_resource *sub_resource) DECLSPEC_HIDDEN;
-- 
1.8.3.2




More information about the wine-patches mailing list