Skip to content

Commit 1d1905a

Browse files
GS: Add gamma control to ShadeBoost
1 parent f34db72 commit 1d1905a

File tree

8 files changed

+36
-2
lines changed

8 files changed

+36
-2
lines changed

bin/resources/shaders/opengl/shadeboost.glsl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ vec4 ContrastSaturationBrightness(vec4 color)
3030
float brt = params.x;
3131
float con = params.y;
3232
float sat = params.z;
33+
float gam = params.w;
3334

3435
// Increase or decrease these values to adjust r, g and b color channels separately
3536
const float AvgLumR = 0.5;
@@ -45,7 +46,10 @@ vec4 ContrastSaturationBrightness(vec4 color)
4546
vec3 satColor = mix(intensity, brtColor, sat);
4647
vec3 conColor = mix(AvgLumin, satColor, con);
4748

48-
color.rgb = conColor;
49+
vec3 csb = conColor;
50+
csb = pow(csb, vec3(1.0 / gam));
51+
color.rgb = csb;
52+
4953
return color;
5054
}
5155

bin/resources/shaders/vulkan/shadeboost.glsl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ vec4 ContrastSaturationBrightness(vec4 color)
4444
float brt = params.x;
4545
float con = params.y;
4646
float sat = params.z;
47+
float gam = params.w;
4748

4849
// Increase or decrease these values to adjust r, g and b color channels separately
4950
const float AvgLumR = 0.5;
@@ -59,7 +60,9 @@ vec4 ContrastSaturationBrightness(vec4 color)
5960
vec3 satColor = mix(intensity, brtColor, sat);
6061
vec3 conColor = mix(AvgLumin, satColor, con);
6162

62-
color.rgb = conColor;
63+
vec3 csb = conColor;
64+
csb = pow(csb, vec3(1.0 / gam));
65+
color.rgb = csb;
6366
return color;
6467
}
6568

pcsx2-qt/Settings/GraphicsSettingsWidget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
134134
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.fxaa, "EmuCore/GS", "fxaa", false);
135135
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.shadeBoost, "EmuCore/GS", "ShadeBoost", false);
136136
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.shadeBoostBrightness, "EmuCore/GS", "ShadeBoost_Brightness", false);
137+
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.shadeBoostGamma, "EmuCore/GS", "ShadeBoost_Gamma", false);
137138
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.shadeBoostContrast, "EmuCore/GS", "ShadeBoost_Contrast", false);
138139
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.shadeBoostSaturation, "EmuCore/GS", "ShadeBoost_Saturation", false);
139140
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.tvShader, "EmuCore/GS", "TVShader", DEFAULT_TV_SHADER_MODE);

pcsx2-qt/Settings/GraphicsSettingsWidget.ui

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,6 +1532,26 @@
15321532
</property>
15331533
</widget>
15341534
</item>
1535+
<item>
1536+
<widget class="QLabel" name="gammaLabel">
1537+
<property name="text">
1538+
<string>Gamma:</string>
1539+
</property>
1540+
</widget>
1541+
</item>
1542+
<item>
1543+
<widget class="QSpinBox" name="shadeBoostGamma">
1544+
<property name="minimum">
1545+
<number>1</number>
1546+
</property>
1547+
<property name="maximum">
1548+
<number>100</number>
1549+
</property>
1550+
<property name="value">
1551+
<number>50</number>
1552+
</property>
1553+
</widget>
1554+
</item>
15351555
</layout>
15361556
</item>
15371557
</layout>

pcsx2/Config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,7 @@ struct Pcsx2Config
818818
u8 ShadeBoost_Brightness = 50;
819819
u8 ShadeBoost_Contrast = 50;
820820
u8 ShadeBoost_Saturation = 50;
821+
u8 ShadeBoost_Gamma = 50;
821822
u8 PNGCompressionLevel = 1;
822823

823824
u16 SWExtraThreads = 2;

pcsx2/GS/Renderers/Common/GSDevice.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,7 @@ void GSDevice::ShadeBoost()
768768
static_cast<float>(GSConfig.ShadeBoost_Brightness) * (1.0f / 50.0f),
769769
static_cast<float>(GSConfig.ShadeBoost_Contrast) * (1.0f / 50.0f),
770770
static_cast<float>(GSConfig.ShadeBoost_Saturation) * (1.0f / 50.0f),
771+
static_cast<float>(GSConfig.ShadeBoost_Gamma) * (1.0f / 50.0f),
771772
};
772773

773774
DoShadeBoost(m_current, m_target_tmp, params);

pcsx2/ImGui/FullscreenUI.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4334,6 +4334,8 @@ void FullscreenUI::DrawGraphicsSettingsPage(SettingsInterface* bsi, bool show_ad
43344334
"ShadeBoost_Contrast", 50, 1, 100, "%d", shadeboost_active);
43354335
DrawIntRangeSetting(bsi, FSUI_CSTR("Shade Boost Saturation"), FSUI_CSTR("Adjusts saturation. 50 is normal."), "EmuCore/GS",
43364336
"ShadeBoost_Saturation", 50, 1, 100, "%d", shadeboost_active);
4337+
DrawIntRangeSetting(bsi, FSUI_CSTR("Shade Boost Gamma"), FSUI_CSTR("Adjusts gamma. 50 is normal."), "EmuCore/GS",
4338+
"ShadeBoost_Gamma", 50, 1, 100, "%d", shadeboost_active);
43374339

43384340
static constexpr const char* s_tv_shaders[] = {
43394341
FSUI_NSTR("None (Default)"),

pcsx2/Pcsx2Config.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,7 @@ bool Pcsx2Config::GSOptions::OptionsAreEqual(const GSOptions& right) const
838838
OpEqu(ShadeBoost_Brightness) &&
839839
OpEqu(ShadeBoost_Contrast) &&
840840
OpEqu(ShadeBoost_Saturation) &&
841+
OpEqu(ShadeBoost_Gamma) &&
841842
OpEqu(PNGCompressionLevel) &&
842843
OpEqu(SaveDrawStart) &&
843844
OpEqu(SaveDrawCount) &&
@@ -1029,6 +1030,7 @@ void Pcsx2Config::GSOptions::LoadSave(SettingsWrapper& wrap)
10291030
SettingsWrapBitfield(ShadeBoost_Brightness);
10301031
SettingsWrapBitfield(ShadeBoost_Contrast);
10311032
SettingsWrapBitfield(ShadeBoost_Saturation);
1033+
SettingsWrapBitfield(ShadeBoost_Gamma);
10321034
SettingsWrapBitfield(ExclusiveFullscreenControl);
10331035
SettingsWrapBitfieldEx(PNGCompressionLevel, "png_compression_level");
10341036
SettingsWrapBitfieldEx(SaveDrawStart, "SaveDrawStart");

0 commit comments

Comments
 (0)