Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always disable exclusive full-screen on Windows #4485

Merged
merged 2 commits into from
Nov 25, 2024
Merged

Always disable exclusive full-screen on Windows #4485

merged 2 commits into from
Nov 25, 2024

Conversation

doitsujin
Copy link
Owner

So far we're always letting the driver decide whatever it wants to, but since Windows doesn't seem to give drivers any sort of low-level access to anything more modern than D3D9-level presentation APIs we just end up in a situation that sucks for everyone anyway, so migth as well disable it and at least have a slim chance of things like alt+tab actually working.

Should also fix #4465 and related issues, I can't be arsed to add hundreds of app profiles for this garbage.

@doitsujin doitsujin requested a review from misyltoad November 23, 2024 22:48
@Blisto91
Copy link
Contributor

Touches issue
#2640
#3963
And maybe or maybe not
#3819
#1694
#4147

@qinlili23333
Copy link
Contributor

qinlili23333 commented Nov 25, 2024

Approve for short term until we can find some better way to handle FSE. Compatibility is more important than performance.

Actually these days I'm also considering about detecting WS_SYSMENU flag and only enable DSE for those without this flag. I tested variety of games including normal AAA titles and AVG with different engines. I found that those games cannot work well under FSE all have WS_SYSMENU flag even under fullscreen while most AAA titles like UE3 titles usually remove this flag when entering fullscreen. I'm not sure whether we can detect this flag and do sth better, so I approve we should disable FSE globally until we have developed sth better.

Edit:I tried to make an experimental FSE selection based on WS_SYSMENU. qinlili23333@2a0e98a

I have tested locally and it works well, but I'm not sure whether it will break sth else.

Tested games:
9-nine- series(Kirikiri Z, with top menu bar): FSE auto disabled
NEKOPARA vol.3 (CatSystem2, with top menu bar): FSE auto disabled
Fragile Ball (Normal game without top menu bar): FSE auto enabled
Cars (Normal game without top menu bar): FSE auto enabled
Time Leap Paradise SUPER LIVE! (game with top menu bar but d3d in child view while WS_SYSMENU only on parent): FSE auto enabled (Unexpected)

Sadly it seems WS_SYSMENU is still not a good idea.

@doitsujin
Copy link
Owner Author

doitsujin commented Nov 25, 2024

Meh. I want to avoid fucking around with window flags / messages at all costs. I also just don't want keep wasting time on annoying Windows quirks that simply do not exist on other platforms. If this fixes the problem then that's good enough.

@doitsujin doitsujin merged commit d7bd3cd into master Nov 25, 2024
8 checks passed
@mirh
Copy link

mirh commented Nov 27, 2024

Windows doesn't seem to give drivers any sort of low-level access to anything more modern than D3D9-level presentation APIs

I'm not sure I understand the referent.
Are we talking about modern presentation as in having vulkan use DXGI rather than GDI, or low-level access as in using something like D3DKMTWaitForVerticalBlankEvent rather than old ass (and/or finnicky) WaitForVBlank & friends?

Sadly it seems WS_SYSMENU is still not a good idea.

How about that and if it has any children?
(notably enough WS_CHILD and WS_POPUP are incompatible, the later being the old way I knew you could set non-d3d FSE)

@qinlili23333
Copy link
Contributor

Are we talking about modern presentation as in having vulkan use DXGI rather than GDI
Sadly, many applications rely on GDI compatibility, and some of them need DXGI in the same time. For a wrapper which prefer compatibility instead of performance, it's unacceptable to use these solutions which may break compatibility. SpecialK is more performance preferred and focus on game only, that's why it can use many aggressive optimization which may break compatibility. (e.g. You can even use DXVK for libcef based applications, but you cannot use SpeciakK)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants