[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