On Fri Jun 21 10:34:07 2024 +0000, Grigory Vasilyev wrote:
@rbernon `win32u, server: Use the shared memory for GetClipCursor and GetAsyncKeyState.` The patch, along with the ntsync patches, caused my games to freeze when starting with a black screen. Proton changed [win32u/input.c NtUserGetAsyncKeyState](https://github.com/ValveSoftware/wine/blob/25af144e4ac4e8de6bf4d8ea5d960af06...) in commit [38660173bb5aa5250ad414ac27517dce25b30a6a ](https://github.com/ValveSoftware/wine/commit/38660173bb5aa5250ad414ac27517dc...) I simplified the NtUserGetAsyncKeyState function to look like this. I'm not sure if it's correct, but it's helped me.
SHORT WINAPI NtUserGetAsyncKeyState( INT key ) { const desktop_shm_t *desktop_shm; struct object_lock lock = OBJECT_LOCK_INIT; NTSTATUS status; BYTE state = 0; if (key < 0 || key >= 256) return 0; check_for_events( QS_INPUT ); while ((status = get_shared_desktop( &lock, &desktop_shm )) == STATUS_PENDING) state = desktop_shm->keystate[key]; return (state & 0x80) << 8; }
Yes, and it saves another wineserver request but it's also not strictly correct (hence Proton "HACK" flag).
Is this happening with just this MR? Can you name one game specifically where it happens?