Thanks, I think that's better.
```diff + if (same_sub_resource && + !(dst_box->top < src_box->top || dst_box->right <= src_box->left || src_box->right <= dst_box->left) + && fx->fx & (WINEDDBLTFX_MIRRORLEFTRIGHT | WINEDDBLTFX_MIRRORUPDOWN | WINEDDBLTFX_ROTATE180 + | WINEDDBLTFX_ROTATE270 | WINEDDBLTFX_ROTATE90)) ```
Looking a bit closer at this bit, I'm not sure "dst_box->top < src_box->top" is quite right/sufficient. E.g. suppose we have WINEDDBLTFX_MIRRORUPDOWN with ``` src_box = {.top = 1, .bottom = 6, ...} dst_box = {.top = 0, .bottom = 5, ...} ``` I think we'd then copy ``` row 1 -> 4 row 2 -> 3 row 3 -> 2 row 4 -> 1 row 5 -> 0 ``` and copy data that was already overwritten. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10983#note_141222