On Thu, Mar 18, 2021 at 2:33 PM Henri Verbeet hverbeet@gmail.com wrote:
On Wed, 17 Mar 2021 at 13:35, Matteo Bruni mbruni@codeweavers.com wrote:
@@ -1666,6 +1666,16 @@ HRESULT texture2d_blt(struct wined3d_texture *dst_texture, unsigned int dst_sub_ TRACE("Not doing download because of partial download (src).\n"); else if (!wined3d_texture_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, &dst_rect)) TRACE("Not doing download because of partial download (dst).\n");
else if (src_sub_resource->locations == WINED3D_LOCATION_DRAWABLE)
{
context = context_acquire(device, src_texture, src_sub_resource_idx);
texture2d_read_from_framebuffer(src_texture, src_sub_resource_idx, context,
WINED3D_LOCATION_DRAWABLE, dst_texture->resource.map_binding);
wined3d_texture_validate_location(src_texture, src_sub_resource_idx, dst_texture->resource.map_binding);
context_release(context);
return texture2d_blt(dst_texture, dst_sub_resource_idx, dst_box,
src_texture, src_sub_resource_idx, src_box, flags, fx, filter);
}
It's perhaps not immediately obvious from the function name, but texture2d_read_from_framebuffer() is specific to the GL backend. Calling it from common code like texture2d_blt() is problematic.
You're right :/ For some background, this patch was also related to backbuffer ORM: IIRC after this the d3d tests start to give sensible results (mostly broken, of course, but at least backbuffer readback works so SOME tests pass).
I'll retest and rework these as necessary.