=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Fix initial data for non-GPU buffers.
Alexandre Julliard
julliard at winehq.org
Fri Sep 7 16:49:26 CDT 2018
Module: wine
Branch: master
Commit: 3cd28caf17284af48a57538e06effbce26cefe0c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=3cd28caf17284af48a57538e06effbce26cefe0c
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Thu Sep 6 22:01:58 2018 +0200
wined3d: Fix initial data for non-GPU buffers.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44655
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wined3d/buffer.c | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index a824d94..639a145 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -1230,6 +1230,28 @@ void wined3d_buffer_upload_data(struct wined3d_buffer *buffer, struct wined3d_co
wined3d_buffer_upload_ranges(buffer, context, data, range.offset, 1, &range);
}
+static void wined3d_buffer_init_data(struct wined3d_buffer *buffer,
+ struct wined3d_device *device, const struct wined3d_sub_resource_data *data)
+{
+ struct wined3d_resource *resource = &buffer->resource;
+ struct wined3d_bo_address bo;
+ struct wined3d_box box;
+
+ if (buffer->flags & WINED3D_BUFFER_USE_BO)
+ {
+ wined3d_box_set(&box, 0, 0, resource->size, 1, 0, 1);
+ wined3d_cs_emit_update_sub_resource(device->cs, resource,
+ 0, &box, data->data, data->row_pitch, data->slice_pitch);
+ }
+ else
+ {
+ wined3d_buffer_get_memory(buffer, &bo, WINED3D_LOCATION_SYSMEM);
+ memcpy(bo.addr, data->data, resource->size);
+ wined3d_buffer_validate_location(buffer, WINED3D_LOCATION_SYSMEM);
+ wined3d_buffer_invalidate_location(buffer, ~WINED3D_LOCATION_SYSMEM);
+ }
+}
+
static ULONG buffer_resource_incref(struct wined3d_resource *resource)
{
return wined3d_buffer_incref(buffer_from_resource(resource));
@@ -1326,7 +1348,6 @@ static HRESULT buffer_init(struct wined3d_buffer *buffer, struct wined3d_device
const struct wined3d_format *format = wined3d_get_format(device->adapter, format_id, usage);
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
struct wined3d_resource *resource = &buffer->resource;
- struct wined3d_box box;
BOOL dynamic_buffer_ok;
HRESULT hr;
@@ -1408,11 +1429,7 @@ static HRESULT buffer_init(struct wined3d_buffer *buffer, struct wined3d_device
buffer->maps_size = 1;
if (data)
- {
- wined3d_box_set(&box, 0, 0, resource->size, 1, 0, 1);
- wined3d_cs_emit_update_sub_resource(device->cs, resource,
- 0, &box, data->data, data->row_pitch, data->slice_pitch);
- }
+ wined3d_buffer_init_data(buffer, device, data);
return WINED3D_OK;
}
More information about the wine-cvs
mailing list