Module: wine Branch: master Commit: 261246ef21d285727fc2da69fb223b649d56d142 URL: http://source.winehq.org/git/wine.git/?a=commit;h=261246ef21d285727fc2da69fb...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Mon Sep 16 10:57:24 2013 +0200
wined3d: Pass a resource to wined3d_resource_allocate_sysmem().
---
dlls/wined3d/buffer.c | 3 ++- dlls/wined3d/resource.c | 17 +++++++++-------- dlls/wined3d/surface.c | 11 +++++------ dlls/wined3d/volume.c | 6 ++++-- dlls/wined3d/wined3d_private.h | 2 +- 5 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c index 2deb7d2..b61c3ce 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c @@ -500,7 +500,8 @@ BYTE *buffer_get_sysmem(struct wined3d_buffer *This, struct wined3d_context *con /* AllocatedMemory exists if the buffer is double buffered or has no buffer object at all */ if(This->resource.allocatedMemory) return This->resource.allocatedMemory;
- This->resource.heap_memory = wined3d_resource_allocate_sysmem(This->resource.size); + if (!wined3d_resource_allocate_sysmem(&This->resource)) + ERR("Failed to allocate system memory.\n"); This->resource.allocatedMemory = This->resource.heap_memory;
if (This->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB) diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c index a677d00..78f35e9 100644 --- a/dlls/wined3d/resource.c +++ b/dlls/wined3d/resource.c @@ -120,11 +120,10 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *
if (size) { - resource->heap_memory = wined3d_resource_allocate_sysmem(size); - if (!resource->heap_memory) + if (!wined3d_resource_allocate_sysmem(resource)) { - ERR("Out of memory!\n"); - return WINED3DERR_OUTOFVIDEOMEMORY; + ERR("Failed to allocate system memory.\n"); + return E_OUTOFMEMORY; } } else @@ -344,19 +343,21 @@ void CDECL wined3d_resource_get_desc(const struct wined3d_resource *resource, st desc->size = resource->size; }
-void *wined3d_resource_allocate_sysmem(SIZE_T size) +BOOL wined3d_resource_allocate_sysmem(struct wined3d_resource *resource) { void **p; SIZE_T align = RESOURCE_ALIGNMENT - 1 + sizeof(*p); void *mem;
- if (!(mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size + align))) - return NULL; + if (!(mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, resource->size + align))) + return FALSE;
p = (void **)(((ULONG_PTR)mem + align) & ~(RESOURCE_ALIGNMENT - 1)) - 1; *p = mem;
- return ++p; + resource->heap_memory = ++p; + + return TRUE; }
void wined3d_resource_free_sysmem(void *mem) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index b64c8e9..e40a65a 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -587,9 +587,8 @@ static void surface_prepare_system_memory(struct wined3d_surface *surface) { /* Whatever surface we have, make sure that there is memory allocated * for the downloaded copy, or a PBO to map. */ - if (!surface->resource.heap_memory) - surface->resource.heap_memory = wined3d_resource_allocate_sysmem(surface->resource.size); - + if (!surface->resource.heap_memory && !wined3d_resource_allocate_sysmem(&surface->resource)) + ERR("Failed to allocate system memory.\n"); surface->resource.allocatedMemory = surface->resource.heap_memory;
if (surface->flags & SFLAG_INSYSMEM) @@ -1432,7 +1431,7 @@ static void surface_remove_pbo(struct wined3d_surface *surface, const struct win else { if (!surface->resource.heap_memory) - surface->resource.heap_memory = wined3d_resource_allocate_sysmem(surface->resource.size); + wined3d_resource_allocate_sysmem(&surface->resource); else if (!(surface->flags & SFLAG_CLIENT)) ERR("Surface %p has heap_memory %p and flags %#x.\n", surface, surface->resource.heap_memory, surface->flags); @@ -1458,9 +1457,9 @@ static BOOL surface_init_sysmem(struct wined3d_surface *surface) { if (!surface->resource.heap_memory) { - if (!(surface->resource.heap_memory = wined3d_resource_allocate_sysmem(surface->resource.size))) + if (!wined3d_resource_allocate_sysmem(&surface->resource)) { - ERR("Failed to allocate memory.\n"); + ERR("Failed to allocate system memory.\n"); return FALSE; } } diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c index 7f2dbf9..62c6ab9 100644 --- a/dlls/wined3d/volume.c +++ b/dlls/wined3d/volume.c @@ -391,9 +391,11 @@ static BOOL volume_prepare_system_memory(struct wined3d_volume *volume) if (volume->resource.allocatedMemory) return TRUE;
- volume->resource.heap_memory = wined3d_resource_allocate_sysmem(volume->resource.size); - if (!volume->resource.heap_memory) + if (!wined3d_resource_allocate_sysmem(&volume->resource)) + { + ERR("Failed to allocate system memory.\n"); return FALSE; + } volume->resource.allocatedMemory = volume->resource.heap_memory; return TRUE; } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index a30db57..cbf6e78 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1984,7 +1984,6 @@ struct wined3d_resource_ops void (*resource_unload)(struct wined3d_resource *resource); };
-void *wined3d_resource_allocate_sysmem(SIZE_T size) DECLSPEC_HIDDEN; void wined3d_resource_free_sysmem(void *mem) DECLSPEC_HIDDEN;
struct wined3d_resource @@ -2025,6 +2024,7 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device * const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN; DWORD resource_set_priority(struct wined3d_resource *resource, DWORD priority) DECLSPEC_HIDDEN; void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN; +BOOL wined3d_resource_allocate_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN; DWORD wined3d_resource_sanitize_map_flags(const struct wined3d_resource *resource, DWORD flags) DECLSPEC_HIDDEN; GLbitfield wined3d_resource_gl_map_flags(DWORD d3d_flags) DECLSPEC_HIDDEN;