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", SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.texturePreloading, "EmuCore/GS", "texture_preloading",
static_cast<int>(TexturePreloadingLevel::Off)); 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); connect(m_ui.gpuPaletteConversion, QOverload<int>::of(&QCheckBox::stateChanged), this, &GraphicsSettingsWidget::onGpuPaletteConversionChanged);
onTrilinearFilteringChanged();
onGpuPaletteConversionChanged(m_ui.gpuPaletteConversion->checkState()); onGpuPaletteConversionChanged(m_ui.gpuPaletteConversion->checkState());
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -290,7 +292,18 @@ void GraphicsSettingsWidget::onFullscreenModeChanged(int index)
g_emu_thread->applySettings(); 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() void GraphicsSettingsWidget::onShadeBoostChanged()
{ {

View File

@ -41,6 +41,7 @@ private Q_SLOTS:
void onAdapterChanged(int index); void onAdapterChanged(int index);
void onEnableHardwareFixesChanged(); void onEnableHardwareFixesChanged();
void onIntegerScalingChanged(); void onIntegerScalingChanged();
void onTrilinearFilteringChanged();
void onGpuPaletteConversionChanged(int state); void onGpuPaletteConversionChanged(int state);
void onFullscreenModeChanged(int index); void onFullscreenModeChanged(int index);
void onShadeBoostChanged(); void onShadeBoostChanged();

View File

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