Add flag to disable seperable shaders for osx Intel GPUs. Default is false

This commit is contained in:
B3n30 2020-04-18 13:37:58 +02:00
parent 79a0cbbba8
commit 1e54f27cde
10 changed files with 49 additions and 12 deletions

View file

@ -431,13 +431,12 @@ void Config::ReadRendererValues() {
Settings::values.use_hw_renderer =
ReadSetting(QStringLiteral("use_hw_renderer"), true).toBool();
Settings::values.use_hw_shader = ReadSetting(QStringLiteral("use_hw_shader"), true).toBool();
#ifdef __APPLE__
// Hardware shader is broken on macos thanks to poor drivers.
// We still want to provide this option for test/development purposes, but disable it by
// default.
Settings::values.use_hw_shader = ReadSetting(QStringLiteral("use_hw_shader"), false).toBool();
#else
Settings::values.use_hw_shader = ReadSetting(QStringLiteral("use_hw_shader"), true).toBool();
Settings::values.seperable_shader = ReadSetting(QStringLiteral("seperable_shader"), false).toBool();
#endif
Settings::values.shaders_accurate_mul =
ReadSetting(QStringLiteral("shaders_accurate_mul"), false).toBool();
@ -916,13 +915,11 @@ void Config::SaveRendererValues() {
qt_config->beginGroup(QStringLiteral("Renderer"));
WriteSetting(QStringLiteral("use_hw_renderer"), Settings::values.use_hw_renderer, true);
WriteSetting(QStringLiteral("use_hw_shader"), Settings::values.use_hw_shader, true);
#ifdef __APPLE__
// Hardware shader is broken on macos thanks to poor drivers.
// We still want to provide this option for test/development purposes, but disable it by
// default.
WriteSetting(QStringLiteral("use_hw_shader"), Settings::values.use_hw_shader, false);
#else
WriteSetting(QStringLiteral("use_hw_shader"), Settings::values.use_hw_shader, true);
// TODO: enable this for none Intel GPUs
WriteSetting(QStringLiteral("use_seperable_shader"), Settings::values.seperable_shader, false);
#endif
WriteSetting(QStringLiteral("shaders_accurate_mul"), Settings::values.shaders_accurate_mul,
false);

View file

@ -29,15 +29,23 @@ ConfigureGraphics::ConfigureGraphics(QWidget* parent)
connect(ui->toggle_hw_shader, &QCheckBox::toggled, ui->hw_shader_group, &QWidget::setEnabled);
#ifdef __APPLE__
connect(ui->toggle_hw_shader, &QCheckBox::stateChanged, this, [this](int state) {
if (state == Qt::Checked) {
ui->toggle_seperable_shader->setEnabled(true);
}
});
connect(ui->toggle_seperable_shader, &QCheckBox::stateChanged, this, [this](int state) {
if (state == Qt::Checked) {
QMessageBox::warning(
this, tr("Hardware Shader Warning"),
tr("Hardware Shader support is broken on macOS, and will cause graphical issues "
tr("Seperable Shader support is broken on macOS with Intel GPUs, and will cause graphical issues "
"like showing a black screen.<br><br>The option is only there for "
"test/development purposes. If you experience graphical issues with Hardware "
"Shader, please turn it off."));
}
});
#else
// TODO(B3N30): Hide this for macs with none Intel GPUs, too.
ui->toggle_seperable_shader->visible(false);
#endif
}
@ -46,6 +54,7 @@ ConfigureGraphics::~ConfigureGraphics() = default;
void ConfigureGraphics::SetConfiguration() {
ui->toggle_hw_renderer->setChecked(Settings::values.use_hw_renderer);
ui->toggle_hw_shader->setChecked(Settings::values.use_hw_shader);
ui->toggle_seperable_shader->setChecked(Settings::values.seperable_shader);
ui->toggle_accurate_mul->setChecked(Settings::values.shaders_accurate_mul);
ui->toggle_shader_jit->setChecked(Settings::values.use_shader_jit);
ui->toggle_vsync_new->setChecked(Settings::values.use_vsync_new);
@ -54,6 +63,7 @@ void ConfigureGraphics::SetConfiguration() {
void ConfigureGraphics::ApplyConfiguration() {
Settings::values.use_hw_renderer = ui->toggle_hw_renderer->isChecked();
Settings::values.use_hw_shader = ui->toggle_hw_shader->isChecked();
Settings::values.seperable_shader = ui->toggle_seperable_shader->isChecked();
Settings::values.shaders_accurate_mul = ui->toggle_accurate_mul->isChecked();
Settings::values.use_shader_jit = ui->toggle_shader_jit->isChecked();
Settings::values.use_vsync_new = ui->toggle_vsync_new->isChecked();

View file

@ -76,6 +76,13 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="toggle_seperable_shader">
<property name="text">
<string>Seperable Shader (Intel GPUs only)</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="toggle_accurate_mul">
<property name="toolTip">