Skip to content

Commit

Permalink
Merge pull request #14368 from unknownbrackets/postshader-off
Browse files Browse the repository at this point in the history
Stop using Off as terminator for postshaders
  • Loading branch information
hrydgard committed Apr 11, 2021
2 parents 9783a2e + b5d21b4 commit ec09fbf
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 54 deletions.
15 changes: 6 additions & 9 deletions Core/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1263,10 +1263,9 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
auto postShaderChain = iniFile.GetOrCreateSection("PostShaderList")->ToMap();
vPostShaderNames.clear();
for (auto it : postShaderChain) {
vPostShaderNames.push_back(it.second);
if (it.second != "Off")
vPostShaderNames.push_back(it.second);
}
if (vPostShaderNames.empty())
vPostShaderNames.push_back("Off");

// This caps the exponent 4 (so 16x.)
if (iAnisotropyLevel > 4) {
Expand Down Expand Up @@ -1699,10 +1698,9 @@ bool Config::loadGameConfig(const std::string &pGameId, const std::string &title
auto postShaderChain = iniFile.GetOrCreateSection("PostShaderList")->ToMap();
vPostShaderNames.clear();
for (auto it : postShaderChain) {
vPostShaderNames.push_back(it.second);
if (it.second != "Off")
vPostShaderNames.push_back(it.second);
}
if (vPostShaderNames.empty())
vPostShaderNames.push_back("Off");

IterateSettings(iniFile, [](Section *section, ConfigSetting *setting) {
if (setting->perGame_) {
Expand Down Expand Up @@ -1737,10 +1735,9 @@ void Config::unloadGameConfig() {
auto postShaderChain = iniFile.GetOrCreateSection("PostShaderList")->ToMap();
vPostShaderNames.clear();
for (auto it : postShaderChain) {
vPostShaderNames.push_back(it.second);
if (it.second != "Off")
vPostShaderNames.push_back(it.second);
}
if (vPostShaderNames.empty())
vPostShaderNames.push_back("Off");

LoadStandardControllerIni();
}
Expand Down
31 changes: 14 additions & 17 deletions Core/CwCheat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -953,8 +953,7 @@ void CWCheatEngine::ExecuteOp(const CheatOperation &op, const CheatCode &cheat,
auto shaderChain = GetFullPostShadersChain(g_Config.vPostShaderNames);
if (op.PostShaderUniform.shader < shaderChain.size()) {
std::string shaderName = shaderChain[op.PostShaderUniform.shader]->section;
if (shaderName != "Off")
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = op.PostShaderUniform.value.f;
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = op.PostShaderUniform.value.f;
}
}
break;
Expand All @@ -969,21 +968,19 @@ void CWCheatEngine::ExecuteOp(const CheatOperation &op, const CheatCode &cheat,
} value;
value.u = Memory::Read_U32(op.addr);
std::string shaderName = shaderChain[op.PostShaderUniform.shader]->section;
if (shaderName != "Off") {
switch (op.PostShaderUniform.format) {
case 0:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.u & 0x000000FF;
break;
case 1:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.u & 0x0000FFFF;
break;
case 2:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.u;
break;
case 3:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.f;
break;
}
switch (op.PostShaderUniform.format) {
case 0:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.u & 0x000000FF;
break;
case 1:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.u & 0x0000FFFF;
break;
case 2:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.u;
break;
case 3:
g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderName.c_str(), op.PostShaderUniform.uniform + 1)] = value.f;
break;
}
}
}
Expand Down
7 changes: 4 additions & 3 deletions GPU/Common/PostShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ void LoadPostShaderInfo(const std::vector<std::string> &directories) {
section.Get("SSAA", &info.SSAAFilterLevel, 0);
section.Get("60fps", &info.requires60fps, false);

if (info.parent == "Off")
info.parent = "";

for (size_t i = 0; i < ARRAY_SIZE(info.settings); ++i) {
auto &setting = info.settings[i];
section.Get(StringFromFormat("SettingName%d", i + 1).c_str(), &setting.name, "");
Expand Down Expand Up @@ -198,7 +201,7 @@ std::vector<const ShaderInfo *> GetPostShaderChain(const std::string &name) {
while (shaderInfo) {
backwards.push_back(shaderInfo);

if (!shaderInfo->parent.empty() && shaderInfo->parent != "Off") {
if (!shaderInfo->parent.empty()) {
shaderInfo = GetPostShaderInfo(shaderInfo->parent);
} else {
shaderInfo = nullptr;
Expand All @@ -219,8 +222,6 @@ std::vector<const ShaderInfo *> GetPostShaderChain(const std::string &name) {
std::vector<const ShaderInfo *> GetFullPostShadersChain(const std::vector<std::string> &names) {
std::vector<const ShaderInfo *> fullChain;
for (auto shaderName : names) {
if (shaderName == "Off")
break;
auto shaderChain = GetPostShaderChain(shaderName);
fullChain.insert(fullChain.end(), shaderChain.begin(), shaderChain.end());
}
Expand Down
4 changes: 2 additions & 2 deletions GPU/Common/PresentationCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ static std::string ReadShaderSrc(const std::string &filename) {
// Note: called on resize and settings changes.
bool PresentationCommon::UpdatePostShader() {
std::vector<const ShaderInfo *> shaderInfo;
if (!g_Config.vPostShaderNames.empty() && g_Config.vPostShaderNames[0] != "Off") {
if (!g_Config.vPostShaderNames.empty()) {
ReloadAllPostShaderInfo();
shaderInfo = GetFullPostShadersChain(g_Config.vPostShaderNames);
}
Expand Down Expand Up @@ -735,7 +735,7 @@ void PresentationCommon::CopyToOutput(OutputFlags flags, int uvRotation, float u
void PresentationCommon::CalculateRenderResolution(int *width, int *height, int *scaleFactor, bool *upscaling, bool *ssaa) {
// Check if postprocessing shader is doing upscaling as it requires native resolution
std::vector<const ShaderInfo *> shaderInfo;
if (!g_Config.vPostShaderNames.empty() && g_Config.vPostShaderNames[0] != "Off") {
if (!g_Config.vPostShaderNames.empty()) {
ReloadAllPostShaderInfo();
shaderInfo = GetFullPostShadersChain(g_Config.vPostShaderNames);
}
Expand Down
34 changes: 20 additions & 14 deletions UI/GameSettingsScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "ppsspp_config.h"

#include <algorithm>
#include <set>

#include "Common/Net/Resolve.h"
#include "Common/GPU/OpenGL/GLFeatures.h"
Expand Down Expand Up @@ -78,8 +79,6 @@
#include "Windows/W32Util/ShellUtil.h"
#endif

extern bool g_ShaderNameListChanged;

GameSettingsScreen::GameSettingsScreen(std::string gamePath, std::string gameID, bool editThenRestore)
: UIDialogScreenWithGameBackground(gamePath), gameID_(gameID), enableReports_(false), editThenRestore_(editThenRestore) {
lastVertical_ = UseVerticalLayout();
Expand Down Expand Up @@ -313,10 +312,10 @@ void GameSettingsScreen::CreateViews() {

graphicsSettings->Add(new ItemHeader(gr->T("Postprocessing effect")));

std::vector<std::string> alreadyAddedShader;
for (int i = 0; i < g_Config.vPostShaderNames.size() && i < ARRAY_SIZE(shaderNames_); ++i) {
std::set<std::string> alreadyAddedShader;
for (int i = 0; i < g_Config.vPostShaderNames.size() + 1 && i < ARRAY_SIZE(shaderNames_); ++i) {
// Vector element pointer get invalidated on resize, cache name to have always a valid reference in the rendering thread
shaderNames_[i] = g_Config.vPostShaderNames[i];
shaderNames_[i] = i == g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[i];
postProcChoice_ = graphicsSettings->Add(new ChoiceWithValueDisplay(&shaderNames_[i], StringFromFormat("%s #%d", gr->T("Postprocessing Shader"), i + 1), &PostShaderTranslateName));
postProcChoice_->OnClick.Add([=](EventParams &e) {
auto gr = GetI18NCategory("Graphics");
Expand All @@ -331,11 +330,15 @@ void GameSettingsScreen::CreateViews() {
return g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
});

// No need for settings on the last one.
if (i == g_Config.vPostShaderNames.size())
continue;

auto shaderChain = GetPostShaderChain(g_Config.vPostShaderNames[i]);
for (auto shaderInfo : shaderChain) {
// Disable duplicated shader slider
bool duplicated = std::find(alreadyAddedShader.begin(), alreadyAddedShader.end(), shaderInfo->section) != alreadyAddedShader.end();
alreadyAddedShader.push_back(shaderInfo->section);
bool duplicated = alreadyAddedShader.find(shaderInfo->section) != alreadyAddedShader.end();
alreadyAddedShader.insert(shaderInfo->section);
for (size_t i = 0; i < ARRAY_SIZE(shaderInfo->settings); ++i) {
auto &setting = shaderInfo->settings[i];
if (!setting.name.empty()) {
Expand Down Expand Up @@ -1255,11 +1258,6 @@ void GameSettingsScreen::update() {
RecreateViews();
lastVertical_ = vertical;
}
if (g_ShaderNameListChanged) {
g_ShaderNameListChanged = false;
g_Config.bShaderChainRequires60FPS = PostShaderChainRequires60FPS(GetFullPostShadersChain(g_Config.vPostShaderNames));
RecreateViews();
}
}

void GameSettingsScreen::onFinish(DialogResult result) {
Expand Down Expand Up @@ -1287,6 +1285,14 @@ void GameSettingsScreen::onFinish(DialogResult result) {
NativeMessageReceived("gpu_clearCache", "");
}

void GameSettingsScreen::sendMessage(const char *message, const char *value) {
UIDialogScreenWithGameBackground::sendMessage(message, value);
if (!strcmp(message, "postshader_updated")) {
g_Config.bShaderChainRequires60FPS = PostShaderChainRequires60FPS(GetFullPostShadersChain(g_Config.vPostShaderNames));
RecreateViews();
}
}

#if PPSSPP_PLATFORM(ANDROID)
void GameSettingsScreen::CallbackMemstickFolder(bool yes) {
auto sy = GetI18NCategory("System");
Expand Down Expand Up @@ -1525,9 +1531,9 @@ UI::EventReturn GameSettingsScreen::OnLanguageChange(UI::EventParams &e) {

UI::EventReturn GameSettingsScreen::OnPostProcShaderChange(UI::EventParams &e) {
g_Config.vPostShaderNames.erase(std::remove(g_Config.vPostShaderNames.begin(), g_Config.vPostShaderNames.end(), "Off"), g_Config.vPostShaderNames.end());
g_Config.vPostShaderNames.push_back("Off");
g_ShaderNameListChanged = true;

NativeMessageReceived("gpu_resized", "");
NativeMessageReceived("postshader_updated", "");
return UI::EVENT_DONE;
}

Expand Down
1 change: 1 addition & 0 deletions UI/GameSettingsScreen.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class GameSettingsScreen : public UIDialogScreenWithGameBackground {
std::string tag() const override { return "settings"; }

protected:
void sendMessage(const char *message, const char *value) override;
void CreateViews() override;
void CallbackRestoreDefaults(bool yes);
void CallbackRenderingBackend(bool yes);
Expand Down
9 changes: 7 additions & 2 deletions UI/MiscScreens.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -430,10 +430,11 @@ PostProcScreen::PostProcScreen(const std::string &title, int id) : ListPopupScre
shaders_ = GetAllPostShaderInfo();
std::vector<std::string> items;
int selected = -1;
const std::string selectedName = id_ >= g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[id_];
for (int i = 0; i < (int)shaders_.size(); i++) {
if (!shaders_[i].visible)
continue;
if (shaders_[i].section == g_Config.vPostShaderNames[id_])
if (shaders_[i].section == selectedName)
selected = i;
items.push_back(ps->T(shaders_[i].section.c_str(), shaders_[i].name.c_str()));
}
Expand All @@ -443,7 +444,11 @@ PostProcScreen::PostProcScreen(const std::string &title, int id) : ListPopupScre
void PostProcScreen::OnCompleted(DialogResult result) {
if (result != DR_OK)
return;
g_Config.vPostShaderNames[id_] = shaders_[listView_->GetSelected()].section;
const std::string &value = shaders_[listView_->GetSelected()].section;
if (id_ < g_Config.vPostShaderNames.size())
g_Config.vPostShaderNames[id_] = value;
else
g_Config.vPostShaderNames.push_back(value);
}

TextureShaderScreen::TextureShaderScreen(const std::string &title) : ListPopupScreen(title) {
Expand Down
1 change: 0 additions & 1 deletion UI/NativeApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,6 @@ std::string config_filename;

// Really need to clean this mess of globals up... but instead I add more :P
bool g_TakeScreenshot;
bool g_ShaderNameListChanged = false;
static bool isOuya;
static bool resized = false;
static bool restarting = false;
Expand Down
20 changes: 14 additions & 6 deletions Windows/MainWindowMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
#include "Core/Core.h"

extern bool g_TakeScreenshot;
extern bool g_ShaderNameListChanged;

namespace MainWindow {
extern HINSTANCE hInst;
Expand Down Expand Up @@ -156,8 +155,15 @@ namespace MainWindow {
void UpdateDynamicMenuCheckmarks(HMENU menu) {
int item = ID_SHADERS_BASE + 1;

for (size_t i = 0; i < availableShaders.size(); i++)
CheckMenuItem(menu, item++, ((g_Config.vPostShaderNames[0] == availableShaders[i] && (g_Config.vPostShaderNames[0] == "Off" || g_Config.vPostShaderNames[1] == "Off")) ? MF_CHECKED : MF_UNCHECKED));
for (size_t i = 0; i < availableShaders.size(); i++) {
bool checked = false;
if (g_Config.vPostShaderNames.empty() && availableShaders[i] == "Off")
checked = true;
else if (g_Config.vPostShaderNames.size() == 1 && availableShaders[i] == g_Config.vPostShaderNames[0])
checked = true;

CheckMenuItem(menu, item++, checked ? MF_CHECKED : MF_UNCHECKED);
}
}

bool CreateShadersSubmenu(HMENU menu) {
Expand Down Expand Up @@ -191,7 +197,9 @@ namespace MainWindow {
continue;
int checkedStatus = MF_UNCHECKED;
availableShaders.push_back(i->section);
if (g_Config.vPostShaderNames[0] == i->section && (g_Config.vPostShaderNames[0] == "Off" || g_Config.vPostShaderNames[1] == "Off")) {
if (g_Config.vPostShaderNames.empty() && i->section == "Off") {
checkedStatus = MF_CHECKED;
} else if (g_Config.vPostShaderNames.size() == 1 && g_Config.vPostShaderNames[0] == i->section) {
checkedStatus = MF_CHECKED;
}

Expand Down Expand Up @@ -1060,10 +1068,10 @@ namespace MainWindow {
g_Config.vPostShaderNames.clear();
if (availableShaders[index] != "Off")
g_Config.vPostShaderNames.push_back(availableShaders[index]);
g_Config.vPostShaderNames.push_back("Off");
g_ShaderNameListChanged = true;
g_Config.bShaderChainRequires60FPS = PostShaderChainRequires60FPS(GetFullPostShadersChain(g_Config.vPostShaderNames));

NativeMessageReceived("gpu_resized", "");
NativeMessageReceived("postshader_updated", "");
break;
}

Expand Down

0 comments on commit ec09fbf

Please sign in to comment.