GS: Force min/mag linear when trilinear is forced

Trilinear implies that min/mag will be linear. Less confusing, makes
sense, and the min/mag point + mip linear case is currently not handled
properly with regard to the GS registers.
This commit is contained in:
Connor McLaughlin 2022-03-26 14:06:40 +10:00 committed by refractionpcsx2
parent ddbdfd47be
commit 5987e03463
3 changed files with 21 additions and 3 deletions

View File

@ -146,7 +146,9 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsDialog* dialog, QWidget*
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.texturePreloading, "EmuCore/GS", "texture_preloading",
static_cast<int>(TexturePreloadingLevel::Off));
connect(m_ui.trilinearFiltering, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &GraphicsSettingsWidget::onTrilinearFilteringChanged);
connect(m_ui.gpuPaletteConversion, QOverload<int>::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<int>(TriFiltering::Automatic))
>= static_cast<int>(TriFiltering::Forced));
m_ui.textureFiltering->setDisabled(forced_bilinear);
}
void GraphicsSettingsWidget::onShadeBoostChanged()
{

View File

@ -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();

View File

@ -1055,8 +1055,12 @@ void GSRendererNew::EmulateTextureSampler(const GSTextureCache::Source* tex)
switch (GSConfig.UserHacks_TriFilter)
{
case TriFiltering::Forced:
trilinear = static_cast<u8>(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<u8>(GS_MIN_FILTER::Linear_Mipmap_Linear);
trilinear_auto = !need_mipmap || GSConfig.HWMipmap != HWMipmapLevel::Full;
}
break;
case TriFiltering::PS2: