Module: wine Branch: master Commit: 2e15ae85a1f7f0799a296cd8b7627a4ec5e2db3e URL: http://source.winehq.org/git/wine.git/?a=commit;h=2e15ae85a1f7f0799a296cd8b7...
Author: Józef Kucia jkucia@codeweavers.com Date: Thu Oct 20 12:50:57 2016 +0200
wined3d: Introduce wined3d_buffer_get_memory().
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wined3d/buffer.c | 26 +++++++++++++++++++++++++- dlls/wined3d/context.c | 2 +- dlls/wined3d/wined3d_private.h | 4 ++-- 3 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c index e559586..86493db 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c @@ -611,7 +611,7 @@ BYTE *wined3d_buffer_load_sysmem(struct wined3d_buffer *buffer, struct wined3d_c }
/* Context activation is done by the caller. */ -void buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_context *context, +static void buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_context *context, struct wined3d_bo_address *data) { data->buffer_object = buffer->buffer_object; @@ -635,6 +635,30 @@ void buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_context *co } }
+void wined3d_buffer_get_memory(struct wined3d_buffer *buffer, + struct wined3d_bo_address *data, DWORD locations) +{ + TRACE("buffer %p, data %p, locations %s.\n", + buffer, data, wined3d_debug_location(locations)); + + if (locations & WINED3D_LOCATION_BUFFER) + { + data->buffer_object = buffer->buffer_object; + data->addr = NULL; + return; + } + if (locations & WINED3D_LOCATION_SYSMEM) + { + data->buffer_object = 0; + data->addr = buffer->resource.heap_memory; + return; + } + + ERR("Unexpected locations %s.\n", wined3d_debug_location(locations)); + data->buffer_object = 0; + data->addr = NULL; +} + static void buffer_unload(struct wined3d_resource *resource) { struct wined3d_buffer *buffer = buffer_from_resource(resource); diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 1ca12bc..88d34e6 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -3201,7 +3201,7 @@ static void context_update_stream_info(struct wined3d_context *context, const st else { wined3d_buffer_load(buffer, context, state); - buffer_get_memory(buffer, context, &data); + wined3d_buffer_get_memory(buffer, &data, buffer->locations); element->data.buffer_object = data.buffer_object; element->data.addr += (ULONG_PTR)data.addr; } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 8001e5e..4e7bb88 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3179,9 +3179,9 @@ static inline struct wined3d_buffer *buffer_from_resource(struct wined3d_resourc return CONTAINING_RECORD(resource, struct wined3d_buffer, resource); }
-void buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_context *context, - struct wined3d_bo_address *data) DECLSPEC_HIDDEN; void buffer_mark_used(struct wined3d_buffer *buffer) DECLSPEC_HIDDEN; +void wined3d_buffer_get_memory(struct wined3d_buffer *buffer, + struct wined3d_bo_address *data, DWORD locations) DECLSPEC_HIDDEN; void wined3d_buffer_invalidate_location(struct wined3d_buffer *buffer, DWORD location) DECLSPEC_HIDDEN; void wined3d_buffer_load(struct wined3d_buffer *buffer, struct wined3d_context *context, const struct wined3d_state *state) DECLSPEC_HIDDEN;