From: Zebediah Figura zfigura@codeweavers.com
--- dlls/wined3d/texture.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 5f639ff4326..41f4e79aebf 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -887,7 +887,8 @@ BOOL wined3d_texture_load_location(struct wined3d_texture *texture, }
static void wined3d_texture_get_memory(struct wined3d_texture *texture, unsigned int sub_resource_idx, - struct wined3d_context *context, struct wined3d_bo_address *data) + struct wined3d_context *context, struct wined3d_bo_address *data, + unsigned int *row_pitch, unsigned int *slice_pitch) { struct wined3d_texture_sub_resource *sub_resource = &texture->sub_resources[sub_resource_idx]; DWORD locations = sub_resource->locations; @@ -907,13 +908,15 @@ static void wined3d_texture_get_memory(struct wined3d_texture *texture, unsigned } if (locations & WINED3D_LOCATION_BUFFER) { - wined3d_texture_get_bo_address(texture, sub_resource_idx, data, NULL, NULL, WINED3D_LOCATION_BUFFER); + wined3d_texture_get_bo_address(texture, sub_resource_idx, data, + row_pitch, slice_pitch, WINED3D_LOCATION_BUFFER); return; }
if (locations & WINED3D_LOCATION_SYSMEM) { - wined3d_texture_get_bo_address(texture, sub_resource_idx, data, NULL, NULL, WINED3D_LOCATION_SYSMEM); + wined3d_texture_get_bo_address(texture, sub_resource_idx, data, + row_pitch, slice_pitch, WINED3D_LOCATION_SYSMEM); return; }
@@ -3263,8 +3266,6 @@ static BOOL wined3d_texture_gl_load_texture(struct wined3d_texture_gl *texture_g wined3d_texture_load_location(&texture_gl->t, sub_resource_idx, &context_gl->c, WINED3D_LOCATION_SYSMEM); }
- wined3d_texture_get_pitch(&texture_gl->t, level, &src_row_pitch, &src_slice_pitch); - format = texture_gl->t.resource.format; if ((conversion = wined3d_format_get_color_key_conversion(&texture_gl->t, TRUE))) format = wined3d_get_format(device->adapter, conversion->dst_format, texture_gl->t.resource.bind_flags); @@ -3280,7 +3281,8 @@ static BOOL wined3d_texture_gl_load_texture(struct wined3d_texture_gl *texture_g wined3d_texture_set_map_binding(&texture_gl->t, WINED3D_LOCATION_SYSMEM); }
- wined3d_texture_get_memory(&texture_gl->t, sub_resource_idx, &context_gl->c, &data); + wined3d_texture_get_memory(&texture_gl->t, sub_resource_idx, &context_gl->c, + &data, &src_row_pitch, &src_slice_pitch); if (conversion) { width = src_box.right - src_box.left; @@ -4632,9 +4634,9 @@ void wined3d_texture_upload_from_texture(struct wined3d_texture *dst_texture, un { unsigned int src_row_pitch, src_slice_pitch; unsigned int update_w, update_h, update_d; - unsigned int src_level, dst_level; struct wined3d_context *context; struct wined3d_bo_address data; + unsigned int dst_level;
TRACE("dst_texture %p, dst_sub_resource_idx %u, dst_x %u, dst_y %u, dst_z %u, " "src_texture %p, src_sub_resource_idx %u, src_box %s.\n", @@ -4657,9 +4659,7 @@ void wined3d_texture_upload_from_texture(struct wined3d_texture *dst_texture, un else wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
- src_level = src_sub_resource_idx % src_texture->level_count; - wined3d_texture_get_memory(src_texture, src_sub_resource_idx, context, &data); - wined3d_texture_get_pitch(src_texture, src_level, &src_row_pitch, &src_slice_pitch); + wined3d_texture_get_memory(src_texture, src_sub_resource_idx, context, &data, &src_row_pitch, &src_slice_pitch);
dst_texture->texture_ops->texture_upload_data(context, wined3d_const_bo_address(&data), src_texture->resource.format, src_box, src_row_pitch, src_slice_pitch, dst_texture, @@ -5416,9 +5416,8 @@ static BOOL wined3d_texture_vk_load_texture(struct wined3d_texture_vk *texture_v }
level = sub_resource_idx % texture_vk->t.level_count; - wined3d_texture_get_memory(&texture_vk->t, sub_resource_idx, context, &data); + wined3d_texture_get_memory(&texture_vk->t, sub_resource_idx, context, &data, &row_pitch, &slice_pitch); wined3d_texture_get_level_box(&texture_vk->t, level, &src_box); - wined3d_texture_get_pitch(&texture_vk->t, level, &row_pitch, &slice_pitch); wined3d_texture_vk_upload_data(context, wined3d_const_bo_address(&data), texture_vk->t.resource.format, &src_box, row_pitch, slice_pitch, &texture_vk->t, sub_resource_idx, WINED3D_LOCATION_TEXTURE_RGB, 0, 0, 0);