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

DolphinQt: Once-off warning messages for unsupported graphics features #8270

Open
wants to merge 2 commits into
base: master
from

Conversation

@stenzek
Copy link
Contributor

commented Jul 29, 2019

This PR takes the concept in #8258 a step further and generalizes it to backend features, e.g. logic op, palette conversion, dual-source blending, etc.

One flaw with the design in #8258 is it only displays the message when switching backends. Therefore, if a user runs the default configuration of OpenGL, and features are missing, they will not be informed.

The idea is to make users aware that their system configurations may not support all the features required to run some games, or those which may effect performance (e.g. missing buffer_storage), but doing so in a non-intrusive and annoying way. This message will be displayed once, and if they choose to continue, it will not be displayed again. I'm not a fan of the long-running OSD message about "performance being terrible". I think we should inform users once of this fact, and if they choose to continue, not annoy them any more.

Some screenshots of what the warning currently looks like:
m1
m2

TODO:

  • Extend to buffer_storage detection
  • Find some way to detect driver changes and reset the "seen" flag accordingly

@stenzek stenzek added WIP RFC labels Jul 29, 2019

@JosJuice

This comment has been minimized.

Copy link
Contributor

commented Jul 29, 2019

The buffer storage OSD message is primarily targeted towards Android users, so I would suggest that you don't move it over to this new system before the new system gets Android support. (Not sure how tricky that would be to add with how decoupled from the core code the Android settings GUI is...)

// Feature checks.
std::vector<std::string> missing_features;
if (!g_Config.backend_info.bSupportsLogicOp)
missing_features.push_back(Common::GetStringT("Framebuffer Logical Operations"));

This comment has been minimized.

Copy link
@JosJuice

JosJuice Jul 29, 2019

Contributor

Just as a note, these strings are most likely going to be very hard to translate in a good way, which both makes things annoying for translators and potentially could lead to inaccurate translations. Leaving them untranslated might not hurt the user experience much since the average user probably won't understand these strings very well anyway.

This comment has been minimized.

Copy link
@stenzek

stenzek Jul 30, 2019

Author Contributor

Fair point. I wasn't sure whether to translate them in the first place, but that makes sense.

return std::nullopt;

std::stringstream ss;
ss << Common::GetStringT("Your GPU or driver does not support") << ":\n";

This comment has been minimized.

Copy link
@JosJuice

JosJuice Jul 29, 2019

Contributor

Putting the colon inside the translatable string would give translators more context.

if (!missing_perf_features.empty())
{
if (!missing_features.empty())
ss << "\n\n" << Common::GetStringT("It also does not support") << ":\n";

This comment has been minimized.

Copy link
@JosJuice

JosJuice Jul 29, 2019

Contributor

Same with the colon here.

@JosJuice

This comment has been minimized.

Copy link
Contributor

commented Jul 29, 2019

One thing that I could see users getting confused by is that the message doesn't say what to do about the problem. Can it be fixed by changing graphics backend, or by updating your operating system, or do you need an entirely new GPU?

@CookiePLMonster

This comment has been minimized.

Copy link
Contributor

commented Jul 29, 2019

About getting a GPU driver version, PPSSPP does it neatly here:
https://github.com/hrydgard/ppsspp/blob/962412682bbb5dd100105395f3df88ad452e0209/Windows/main.cpp#L119

This code is Windows only but I think corresponding implementations for other platforms also exist.

@stenzek

This comment has been minimized.

Copy link
Contributor Author

commented Jul 30, 2019

The buffer storage OSD message is primarily targeted towards Android users, so I would suggest that you don't move it over to this new system before the new system gets Android support. (Not sure how tricky that would be to add with how decoupled from the core code the Android settings GUI is...)

Indeed. Android was also one of my considerations, especially for missing features such as dual-source blend. The main difficulty is we can't test for features without creating a GL/Vulkan context first, and if surfaceless is not supported, we can't do that without starting emulation. I guess we display panic alerts on top of the emulation activity, so that could be one possible way of going about it.

One thing that I could see users getting confused by is that the message doesn't say what to do about the problem. Can it be fixed by changing graphics backend, or by updating your operating system, or do you need an entirely new GPU?

Fair point. Will adjust the message to include such suggestions.

About getting a GPU driver version, PPSSPP does it neatly here:
https://github.com/hrydgard/ppsspp/blob/962412682bbb5dd100105395f3df88ad452e0209/Windows/main.cpp#L119
This code is Windows only but I think corresponding implementations for other platforms also exist.

I don't think we need any platform-specific code here. Vulkan gives us the driver version as part of the device properties, GL has GL_VENDOR/GL_VERSION. That only leaves D3D, which might have its own way.

@mbc07

This comment has been minimized.

Copy link
Contributor

commented Jul 30, 2019

Does this feature has some way of detecting a GPU change/driver version change?

For example, let's say I launched Dolphin with the integrated GPU from my laptop, and it has missing features. I would get the one time message explaining what's missing and then it wouldn't appear again.

Let's say I now relaunched that same Dolphin install but now using the dedicated GPU from my laptop or the same GPU but with updated drivers, would this PR catch that and re-display the one time message with info about the new GPU/driver if necessary?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
4 participants
You can’t perform that action at this time.