mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-31 03:26:47 +01:00
User chain support
This commit is contained in:
1 parent
a81991f114
commit
0c885db052
13 files changed
+134
-48
No files matched your search
+39
-1
@@ -805,7 +805,6 @@ static ConfigSetting graphicsSettings[] = {
|
||||
// Not really a graphics setting...
|
||||
ReportedConfigSetting("SplineBezierQuality", &g_Config.iSplineBezierQuality, 2, true, true),
|
||||
ReportedConfigSetting("HardwareTessellation", &g_Config.bHardwareTessellation, false, true, true),
|
||||
ReportedConfigSetting("PostShader", &g_Config.sPostShaderName, "Off", true, true),
|
||||
ConfigSetting("TextureShader", &g_Config.sTextureShaderName, "Off", true, true),
|
||||
|
||||
ReportedConfigSetting("MemBlockTransferGPU", &g_Config.bBlockTransferGPU, true, true, true),
|
||||
@@ -1254,6 +1253,14 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
|
||||
mPostShaderSetting[it.first] = std::stof(it.second);
|
||||
}
|
||||
|
||||
auto postShaderChain = iniFile.GetOrCreateSection("PostShaderList")->ToMap();
|
||||
vPostShaderNames.clear();
|
||||
for (auto it : postShaderChain) {
|
||||
vPostShaderNames.push_back(it.second);
|
||||
}
|
||||
if (vPostShaderNames.empty())
|
||||
vPostShaderNames.push_back("Off");
|
||||
|
||||
// This caps the exponent 4 (so 16x.)
|
||||
if (iAnisotropyLevel > 4) {
|
||||
iAnisotropyLevel = 4;
|
||||
@@ -1385,6 +1392,13 @@ void Config::Save(const char *saveReason) {
|
||||
for (auto it = mPostShaderSetting.begin(), end = mPostShaderSetting.end(); it != end; ++it) {
|
||||
postShaderSetting->Set(it->first.c_str(), it->second);
|
||||
}
|
||||
Section *postShaderChain = iniFile.GetOrCreateSection("PostShaderList");
|
||||
postShaderChain->Clear();
|
||||
for (size_t i = 0; i < vPostShaderNames.size(); ++i) {
|
||||
char keyName[64];
|
||||
snprintf(keyName, sizeof(keyName), "PostShader%d", (int)i+1);
|
||||
postShaderChain->Set(keyName, vPostShaderNames[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Section *control = iniFile.GetOrCreateSection("Control");
|
||||
@@ -1643,6 +1657,14 @@ bool Config::saveGameConfig(const std::string &pGameId, const std::string &title
|
||||
postShaderSetting->Set(it->first.c_str(), it->second);
|
||||
}
|
||||
|
||||
Section *postShaderChain = iniFile.GetOrCreateSection("PostShaderList");
|
||||
postShaderChain->Clear();
|
||||
for (size_t i = 0; i < vPostShaderNames.size(); ++i) {
|
||||
char keyName[64];
|
||||
snprintf(keyName, sizeof(keyName), "PostShader%d", (int)i+1);
|
||||
postShaderChain->Set(keyName, vPostShaderNames[i]);
|
||||
}
|
||||
|
||||
KeyMap::SaveToIni(iniFile);
|
||||
iniFile.Save(fullIniFilePath);
|
||||
|
||||
@@ -1667,6 +1689,14 @@ bool Config::loadGameConfig(const std::string &pGameId, const std::string &title
|
||||
mPostShaderSetting[it.first] = std::stof(it.second);
|
||||
}
|
||||
|
||||
auto postShaderChain = iniFile.GetOrCreateSection("PostShaderList")->ToMap();
|
||||
vPostShaderNames.clear();
|
||||
for (auto it : postShaderChain) {
|
||||
vPostShaderNames.push_back(it.second);
|
||||
}
|
||||
if (vPostShaderNames.empty())
|
||||
vPostShaderNames.push_back("Off");
|
||||
|
||||
IterateSettings(iniFile, [](Section *section, ConfigSetting *setting) {
|
||||
if (setting->perGame_) {
|
||||
setting->Get(section);
|
||||
@@ -1697,6 +1727,14 @@ void Config::unloadGameConfig() {
|
||||
mPostShaderSetting[it.first] = std::stof(it.second);
|
||||
}
|
||||
|
||||
auto postShaderChain = iniFile.GetOrCreateSection("PostShaderList")->ToMap();
|
||||
vPostShaderNames.clear();
|
||||
for (auto it : postShaderChain) {
|
||||
vPostShaderNames.push_back(it.second);
|
||||
}
|
||||
if (vPostShaderNames.empty())
|
||||
vPostShaderNames.push_back("Off");
|
||||
|
||||
LoadStandardControllerIni();
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -212,9 +212,10 @@ public:
|
||||
bool bFragmentTestCache;
|
||||
int iSplineBezierQuality; // 0 = low , 1 = Intermediate , 2 = High
|
||||
bool bHardwareTessellation;
|
||||
std::string sPostShaderName; // Off for off.
|
||||
std::string sTextureShaderName;
|
||||
|
||||
std::vector<std::string> vPostShaderNames; // Off for chain end (only Off for no shader)
|
||||
std::map<std::string, float> mPostShaderSetting;
|
||||
std::string sTextureShaderName;
|
||||
bool bGfxDebugOutput;
|
||||
bool bGfxDebugSplitSubmit;
|
||||
int iInflightFrames;
|
||||
|
||||
+2
-2
@@ -950,7 +950,7 @@ void CWCheatEngine::ExecuteOp(const CheatOperation &op, const CheatCode &cheat,
|
||||
|
||||
case CheatOp::PostShader:
|
||||
{
|
||||
auto shaderChain = GetPostShaderChain(g_Config.sPostShaderName);
|
||||
auto shaderChain = GetFullPostShadersChain(g_Config.vPostShaderNames);
|
||||
if (op.PostShaderUniform.shader < shaderChain.size()) {
|
||||
std::string shaderName = shaderChain[op.PostShaderUniform.shader]->section;
|
||||
if (shaderName != "Off")
|
||||
@@ -961,7 +961,7 @@ void CWCheatEngine::ExecuteOp(const CheatOperation &op, const CheatCode &cheat,
|
||||
|
||||
case CheatOp::PostShaderFromMemory:
|
||||
{
|
||||
auto shaderChain = GetPostShaderChain(g_Config.sPostShaderName);
|
||||
auto shaderChain = GetFullPostShadersChain(g_Config.vPostShaderNames);
|
||||
if (Memory::IsValidAddress(op.addr) && op.PostShaderUniform.shader < shaderChain.size()) {
|
||||
union {
|
||||
float f;
|
||||
|
||||
@@ -751,7 +751,6 @@ void __DisplayFlip(int cyclesLate) {
|
||||
// But, let's flip at least once every 10 vblanks, to update fps, etc.
|
||||
const bool noRecentFlip = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE && numVBlanksSinceFlip >= 10;
|
||||
// Also let's always flip for animated shaders.
|
||||
const ShaderInfo *shaderInfo = g_Config.sPostShaderName == "Off" ? nullptr : GetPostShaderInfo(g_Config.sPostShaderName);
|
||||
bool postEffectRequiresFlip = false;
|
||||
|
||||
bool duplicateFrames = g_Config.bRenderDuplicateFrames && g_Config.iFrameSkip == 0;
|
||||
@@ -764,11 +763,7 @@ void __DisplayFlip(int cyclesLate) {
|
||||
|
||||
// postEffectRequiresFlip is not compatible with frameskip unthrottling, see #12325.
|
||||
if (g_Config.iRenderingMode != FB_NON_BUFFERED_MODE && !(unthrottleNeedsSkip && !FrameTimingThrottled())) {
|
||||
if (shaderInfo) {
|
||||
postEffectRequiresFlip = (shaderInfo->requires60fps || duplicateFrames);
|
||||
} else {
|
||||
postEffectRequiresFlip = duplicateFrames;
|
||||
}
|
||||
postEffectRequiresFlip = duplicateFrames || PostShaderChainRequires60FPS(GetFullPostShadersChain(g_Config.vPostShaderNames));
|
||||
}
|
||||
|
||||
const bool fbDirty = gpu->FramebufferDirty();
|
||||
|
||||
Reference in new issue
Block a user