Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51848
SPORE creates a swapchain on a window, then destroys it, then creates a
different swapchain on the same window and uses it for the rest of its lifetime.
The swapchains have different GLX visuals (the details are unimportant).
The effect is that the second swapchain sees the pixel format set by the first
swapchain, through GetPixelFormat(), and therefore needs to set and then
restore the new pixel format on every present. This results in recreating the
GLX drawable twice per frame, which is extremely expensive.
This patch series changes WGL_WINE_pixel_format_passthrough to only set an
"internal" pixel format. The real pixel format will still be set as it is now,
but GetPixelFormat() will always return 0, signalling to wined3d that the
application has not set the pixel format, and therefore there is no need to
restore it.
As the tests show, this change also matches Windows, which does not report that
a pixel format has been set after presenting a Direct3D swapchain.
This is a large series by patch count, but I fear that splitting it into two
parts would make it difficult to grasp the entire picture, and purpose of the
earlier patches. It also contains six patches which are simply repetitions
across the three user drivers, which should ease the burden of review somewhat.
--
v4: wineandroid: Separately store the internal pixel format set by WGL_WINE_pixel_format_passthrough.
winemac: Separately store the internal pixel format set by WGL_WINE_pixel_format_passthrough.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2217
When len is zero (to obtain the length needed), nothing is written to `output`, even though the rewrite (correctly) uses WideCharToMultiByte on the output to determine the returned length. But this leads to reading garbage uninitialized values instead of the proper value.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2351
Silences a very common warning.
--
v3: vkd3d-shader/dxbc: Validate and skip the signature section header size.
vkd3d-shader/dxbc: Emit a shader error for an invalid signature data size.
vkd3d-shader/dxbc: Pass a message context to for_each_dxbc_section().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/113
--
v7: vkd3d: Do not keep the CS queue locked while processing it.
vkd3d: Always enqueue wait operations, even when they can be executed right away.
vkd3d: Always enqueue signal operations, even when they can be executed right away.
vkd3d: Always enqueue execute operations, even when they can be executed right away.
vkd3d: Hold the queue mutex when adding the queue to a blocked list.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/94