diff --git a/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp b/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp index c647080bac..865b62802f 100644 --- a/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp +++ b/pcsx2-qt/Settings/GraphicsSettingsWidget.cpp @@ -146,7 +146,9 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget* SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.texturePreloading, "EmuCore/GS", "texture_preloading", static_cast(TexturePreloadingLevel::Off)); + connect(m_ui.trilinearFiltering, QOverload::of(&QComboBox::currentIndexChanged), this, &GraphicsSettingsWidget::onTrilinearFilteringChanged); connect(m_ui.gpuPaletteConversion, QOverload::of(&QCheckBox::stateChanged), this, &GraphicsSettingsWidget::onGpuPaletteConversionChanged); + onTrilinearFilteringChanged(); onGpuPaletteConversionChanged(m_ui.gpuPaletteConversion->checkState()); ////////////////////////////////////////////////////////////////////////// @@ -290,7 +292,18 @@ void GraphicsSettingsWidget::onFullscreenModeChanged(int index) g_emu_thread->applySettings(); } -void GraphicsSettingsWidget::onIntegerScalingChanged() { m_ui.bilinearFiltering->setEnabled(!m_ui.integerScaling->isChecked()); } +void GraphicsSettingsWidget::onIntegerScalingChanged() +{ + m_ui.bilinearFiltering->setEnabled(!m_ui.integerScaling->isChecked()); +} + +void GraphicsSettingsWidget::onTrilinearFilteringChanged() +{ + const bool forced_bilinear = + (m_dialog->getEffectiveIntValue("EmuCore/GS", "UserHacks_TriFilter", static_cast(TriFiltering::Automatic)) + >= static_cast(TriFiltering::Forced)); + m_ui.textureFiltering->setDisabled(forced_bilinear); +} void GraphicsSettingsWidget::onShadeBoostChanged() { diff --git a/pcsx2-qt/Settings/GraphicsSettingsWidget.h b/pcsx2-qt/Settings/GraphicsSettingsWidget.h index 2bcf6820cc..0026fc0a30 100644 --- a/pcsx2-qt/Settings/GraphicsSettingsWidget.h +++ b/pcsx2-qt/Settings/GraphicsSettingsWidget.h @@ -41,6 +41,7 @@ private Q_SLOTS: void onAdapterChanged(int index); void onEnableHardwareFixesChanged(); void onIntegerScalingChanged(); + void onTrilinearFilteringChanged(); void onGpuPaletteConversionChanged(int state); void onFullscreenModeChanged(int index); void onShadeBoostChanged(); diff --git a/pcsx2/GS/Renderers/HW/GSRendererNew.cpp b/pcsx2/GS/Renderers/HW/GSRendererNew.cpp index 16ff2e4a7d..5edad8bd7a 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererNew.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererNew.cpp @@ -1055,8 +1055,12 @@ void GSRendererNew::EmulateTextureSampler(const GSTextureCache::Source* tex) switch (GSConfig.UserHacks_TriFilter) { case TriFiltering::Forced: - trilinear = static_cast(GS_MIN_FILTER::Linear_Mipmap_Linear); - trilinear_auto = !need_mipmap || GSConfig.HWMipmap != HWMipmapLevel::Full; + { + // force bilinear otherwise we can end up with min/mag nearest and mip linear. + bilinear = true; + trilinear = static_cast(GS_MIN_FILTER::Linear_Mipmap_Linear); + trilinear_auto = !need_mipmap || GSConfig.HWMipmap != HWMipmapLevel::Full; + } break; case TriFiltering::PS2: