On Mon, 9 Mar 2020 at 14:08, Paul Gofman gofmanp@gmail.com wrote:
@@ -188,9 +194,14 @@ void texture2d_blt_fbo(struct wined3d_device *device, struct wined3d_context *co * the purpose of loading the destination surface.) */ wined3d_texture_load_location(src_texture, src_sub_resource_idx, context, src_location); if (!texture2d_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, dst_rect))
- { wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, dst_location);
- } else
- { wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, dst_location);
wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, dst_location);
- }
...
- if (dst_location == WINED3D_LOCATION_DRAWABLE && dst_texture->swapchain->front_buffer == dst_texture)
- if (dst_location != orig_dst_location)
- {
wined3d_texture_invalidate_location(dst_texture, dst_sub_resource_idx, ~dst_location);
wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, orig_dst_location);
- }
As a general rule, it's not ideal to manipulate the valid locations here, for various reasons. It would probably be best to do any resolving in fbo_blitter_blit() instead of texture2d_blt_fbo(), and then return the valid locations to the caller. (Compare e.g. cpu_blitter_blit().)