On Fri, 29 Nov 2019 at 17:58, Paul Gofman <gofmanp(a)gmail.com> wrote:
release: - wined3d_context_unmap_bo_address(context, &dst_data, 0, 1, &dst_range); + if (upload) + { + struct wined3d_bo_address data; + + data.buffer_object = 0; + data.addr = dst_map.data; + + texture_level = dst_sub_resource_idx % dst_texture->level_count; + + wined3d_texture_prepare_location(dst_texture, texture_level, context, WINED3D_LOCATION_TEXTURE_RGB); + dst_texture->texture_ops->texture_upload_data(context, wined3d_const_bo_address(&data), dst_format, + dst_box, dst_map.row_pitch, dst_map.slice_pitch, dst_texture, texture_level, + WINED3D_LOCATION_TEXTURE_RGB, dst_box->left, dst_box->top, 0); + + wined3d_texture_validate_location(dst_texture, texture_level, WINED3D_LOCATION_TEXTURE_RGB); + wined3d_texture_invalidate_location(dst_texture, texture_level, ~WINED3D_LOCATION_TEXTURE_RGB); + + heap_free(dst_map.data); + } + else + { + wined3d_context_unmap_bo_address(context, &dst_data, 0, 1, &dst_range); + } +
It probably works out in practice because we only jump to "release:" from error paths when "upload" is FALSE, but it doesn't seem right to depend on that. I.e., we should probably explicitly check for success before uploading here.