GS: Get rid of GSApp for Qt

This commit is contained in:
Stenzek 2022-12-24 13:46:11 +10:00 committed by refractionpcsx2
parent 72fd5211f0
commit 35e28fc0d0
22 changed files with 107 additions and 154 deletions

View File

@ -692,7 +692,6 @@ set(pcsx2GSSources
GS/Renderers/SW/GSNewCodeGenerator.cpp
GS/Renderers/SW/GSTextureCacheSW.cpp
GS/Renderers/SW/GSTextureSW.cpp
GS/Window/GSSetting.cpp
)
# GS headers
@ -757,7 +756,6 @@ set(pcsx2GSHeaders
GS/Renderers/SW/GSTextureCacheSW.h
GS/Renderers/SW/GSTextureSW.h
GS/Renderers/SW/GSVertexSW.h
GS/Window/GSSetting.h
)
if(USE_OPENGL)
@ -815,9 +813,11 @@ if(PCSX2_CORE)
endif()
else()
list(APPEND pcsx2GSSources
GS/Window/GSSetting.cpp
GS/Window/GSwxDialog.cpp
)
list(APPEND pcsx2GSHeaders
GS/Window/GSSetting.h
GS/Window/GSwxDialog.h
)
if(WIN32)

View File

@ -734,6 +734,7 @@ struct Pcsx2Config
int ShadeBoost_Brightness{50};
int ShadeBoost_Contrast{50};
int ShadeBoost_Saturation{50};
int PNGCompressionLevel{1};
int SaveN{0};
int SaveL{5000};

View File

@ -111,6 +111,7 @@ int GSinit()
void GSinitConfig()
{
#ifndef PCSX2_CORE
static bool config_inited = false;
if (config_inited)
return;
@ -118,6 +119,7 @@ void GSinitConfig()
config_inited = true;
theApp.SetConfigDir();
theApp.Init();
#endif
}
void GSshutdown()
@ -258,8 +260,7 @@ static bool DoGSOpen(GSRendererType renderer, u8* basemem)
}
else
{
const int threads = theApp.GetConfigI("extrathreads");
g_gs_renderer = std::unique_ptr<GSRenderer>(MULTI_ISA_SELECT(makeGSRendererSW)(threads));
g_gs_renderer = std::unique_ptr<GSRenderer>(MULTI_ISA_SELECT(makeGSRendererSW)(GSConfig.SWExtraThreads));
}
}
catch (std::exception& ex)
@ -720,9 +721,12 @@ void GSgetStats(std::string& info)
void GSgetTitleStats(std::string& info)
{
static constexpr const char* deinterlace_modes[] = {
"Automatic", "None", "Weave tff", "Weave bff", "Bob tff", "Bob bff", "Blend tff", "Blend bff", "Adaptive tff", "Adaptive bff"};
const char* api_name = HostDisplay::RenderAPIToString(s_render_api);
const char* hw_sw_name = (GSConfig.Renderer == GSRendererType::Null) ? " Null" : (GSConfig.UseHardwareRenderer() ? " HW" : " SW");
const char* deinterlace_mode = theApp.m_gs_deinterlace[static_cast<int>(GSConfig.InterlaceMode)].name.c_str();
const char* deinterlace_mode = deinterlace_modes[static_cast<int>(GSConfig.InterlaceMode)];
#ifndef PCSX2_CORE
int iwidth, iheight;
@ -775,19 +779,10 @@ void GSUpdateConfig(const Pcsx2Config::GSOptions& new_config)
// Options which aren't using the global struct yet, so we need to recreate all GS objects.
if (
GSConfig.DumpGSData != old_config.DumpGSData ||
GSConfig.SaveRT != old_config.SaveRT ||
GSConfig.SaveFrame != old_config.SaveFrame ||
GSConfig.SaveTexture != old_config.SaveTexture ||
GSConfig.SaveDepth != old_config.SaveDepth ||
GSConfig.UpscaleMultiplier != old_config.UpscaleMultiplier ||
GSConfig.CRCHack != old_config.CRCHack ||
GSConfig.SWExtraThreads != old_config.SWExtraThreads ||
GSConfig.SWExtraThreadsHeight != old_config.SWExtraThreadsHeight ||
GSConfig.SaveN != old_config.SaveN ||
GSConfig.SaveL != old_config.SaveL)
GSConfig.SWExtraThreadsHeight != old_config.SWExtraThreadsHeight)
{
if (!GSreopen(false, old_config))
pxFailRel("Failed to do quick GS reopen");
@ -1050,12 +1045,10 @@ void GSFreeWrappedMemory(void* ptr, size_t size, size_t repeat)
#endif
#ifndef PCSX2_CORE
size_t GSApp::GetIniString(const char* lpAppName, const char* lpKeyName, const char* lpDefault, char* lpReturnedString, size_t nSize, const char* lpFileName)
{
#ifdef PCSX2_CORE
std::string ret(Host::GetStringSettingValue("EmuCore/GS", lpKeyName, lpDefault));
return StringUtil::Strlcpy(lpReturnedString, ret, nSize);
#else
BuildConfigurationMap(lpFileName);
std::string key(lpKeyName);
@ -1070,12 +1063,10 @@ size_t GSApp::GetIniString(const char* lpAppName, const char* lpKeyName, const c
strcpy(lpReturnedString, value.c_str());
return 0;
#endif
}
bool GSApp::WriteIniString(const char* lpAppName, const char* lpKeyName, const char* pString, const char* lpFileName)
{
#ifndef PCSX2_CORE
BuildConfigurationMap(lpFileName);
std::string key(lpKeyName);
@ -1104,12 +1095,10 @@ bool GSApp::WriteIniString(const char* lpAppName, const char* lpKeyName, const c
fprintf(f, "%s = %s\n", entry.first.c_str(), entry.second.c_str());
}
fclose(f);
#endif
return false;
}
#ifndef PCSX2_CORE
int GSApp::GetIniInt(const char* lpAppName, const char* lpKeyName, int nDefault, const char* lpFileName)
{
BuildConfigurationMap(lpFileName);
@ -1124,7 +1113,6 @@ int GSApp::GetIniInt(const char* lpAppName, const char* lpKeyName, int nDefault,
else
return atoi(value.c_str());
}
#endif
GSApp theApp;
@ -1394,7 +1382,6 @@ void GSApp::Init()
// clang-format on
}
#ifndef PCSX2_CORE
void GSApp::ReloadConfig()
{
if (m_configuration_map.empty())
@ -1453,7 +1440,6 @@ void GSApp::BuildConfigurationMap(const char* lpFileName)
m_configuration_map[key] = value;
}
}
#endif
void GSApp::SetConfigDir()
{
@ -1492,40 +1478,18 @@ int GSApp::GetConfigI(const char* entry)
if (def != m_default_configuration.end())
{
#ifndef PCSX2_CORE
return GetIniInt(m_section.c_str(), entry, std::stoi(def->second), m_ini.c_str());
#else
return Host::GetIntSettingValue("EmuCore/GS", entry, std::stoi(def->second));
#endif
}
else
{
fprintf(stderr, "Option %s doesn't have a default value\n", entry);
#ifndef PCSX2_CORE
return GetIniInt(m_section.c_str(), entry, 0, m_ini.c_str());
#else
return Host::GetIntSettingValue("EmuCore/GS", entry, 0);
#endif
}
}
bool GSApp::GetConfigB(const char* entry)
{
#ifndef PCSX2_CORE
return !!GetConfigI(entry);
#else
auto def = m_default_configuration.find(entry);
if (def != m_default_configuration.end())
{
return Host::GetBoolSettingValue("EmuCore/GS", entry, StringUtil::FromChars<bool>(def->second).value_or(false));
}
else
{
fprintf(stderr, "Option %s doesn't have a default value\n", entry);
return Host::GetBoolSettingValue("EmuCore/GS", entry, false);
}
#endif
}
void GSApp::SetConfig(const char* entry, int value)
@ -1537,6 +1501,8 @@ void GSApp::SetConfig(const char* entry, int value)
SetConfig(entry, buff);
}
#endif // PCSX2_CORE
#ifdef PCSX2_CORE
static void HotkeyAdjustUpscaleMultiplier(s32 delta)

View File

@ -16,7 +16,6 @@
#pragma once
#include "common/WindowInfo.h"
#include "Window/GSSetting.h"
#include "SaveState.h"
#include "pcsx2/Config.h"
#include "pcsx2/GS/config.h"
@ -24,6 +23,10 @@
#include <map>
#ifndef PCSX2_CORE
#include "Window/GSSetting.h"
#endif
#ifdef None
// X11 seems to like to define this, not fun
#undef None
@ -101,6 +104,8 @@ bool GSSaveSnapshotToMemory(u32 window_width, u32 window_height, bool apply_aspe
u32* width, u32* height, std::vector<u32>* pixels);
void GSJoinSnapshotThreads();
#ifndef PCSX2_CORE
class GSApp
{
std::string m_section;
@ -157,14 +162,13 @@ public:
std::vector<GSSetting> m_gs_dump_compression;
};
extern GSApp theApp;
#endif
struct GSError
{
};
struct GSRecoverableError : GSError
{
};
struct GSErrorGlVertexArrayTooSmall : GSError
{
};
extern GSApp theApp;

View File

@ -19,6 +19,10 @@
#include "GS.h"
#include "common/StringUtil.h"
#ifdef PCSX2_CORE
#include "HostSettings.h"
#endif
const CRC::Game CRC::m_games[] =
{
// Note: IDs 0x7ACF7E03, 0x7D4EA48F, 0x37C53760 - shouldn't be added as it's from the multiloaders when packing games.
@ -337,7 +341,11 @@ const CRC::Game& CRC::Lookup(u32 crc)
printf("GS Lookup CRC:%08X\n", crc);
if (m_map.empty())
{
#ifndef PCSX2_CORE
std::string exclusions = theApp.GetConfigS("CrcHacksExclusions");
#else
std::string exclusions = Host::GetStringSettingValue("EmuCore/GS", "CrcHacksExclusions");
#endif
if (exclusions.length() != 0)
printf("GS: CrcHacksExclusions: %s\n", exclusions.c_str());
int crcDups = 0;

View File

@ -25,6 +25,7 @@
#include <iomanip> // Dump Verticles
int GSState::s_n = 0;
std::string GSState::s_dump_root;
static __fi bool IsAutoFlushEnabled()
{
@ -55,16 +56,9 @@ GSState::GSState()
m_mipmap = GSConfig.Mipmap;
s_n = 0;
s_dump = theApp.GetConfigB("dump");
s_save = theApp.GetConfigB("save");
s_savet = theApp.GetConfigB("savet");
s_savez = theApp.GetConfigB("savez");
s_savef = theApp.GetConfigB("savef");
s_saven = theApp.GetConfigI("saven");
s_savel = theApp.GetConfigI("savel");
m_dump_root = "";
s_dump_root = "";
#if defined(__unix__)
if (s_dump)
if (GSConfig.DumpGSData)
{
GSmkdir(root_hw.c_str());
GSmkdir(root_sw.c_str());
@ -2085,9 +2079,9 @@ void GSState::Read(u8* mem, int len)
m_mem.ReadImageX(m_tr.x, m_tr.y, mem, len, m_env.BITBLTBUF, m_env.TRXPOS, m_env.TRXREG);
if (s_dump && s_save && s_n >= s_saven)
if (GSConfig.DumpGSData && GSConfig.SaveRT && s_n >= GSConfig.SaveN)
{
std::string s = m_dump_root + StringUtil::StdStringFromFormat(
std::string s = s_dump_root + StringUtil::StdStringFromFormat(
"%05d_read_%05x_%d_%d_%d_%d_%d_%d.bmp",
s_n, (int)m_env.BITBLTBUF.SBP, (int)m_env.BITBLTBUF.SBW, (int)m_env.BITBLTBUF.SPSM,
r.left, r.top, r.right, r.bottom);

View File

@ -241,14 +241,7 @@ public:
int m_backed_up_ctx;
static int s_n;
bool s_dump;
bool s_save;
bool s_savet;
bool s_savez;
bool s_savef;
int s_saven;
int s_savel;
std::string m_dump_root;
static std::string s_dump_root;
static constexpr u32 STATE_VERSION = 8;

View File

@ -629,7 +629,7 @@ void GSRenderer::VSync(u32 field, bool registers_written)
{
Flush(GSFlushReason::VSYNC);
if (s_dump && s_n >= s_saven)
if (GSConfig.DumpGSData && s_n >= GSConfig.SaveN)
{
m_regs->Dump(root_sw + StringUtil::StdStringFromFormat("%05d_f%lld_gs_reg.txt", s_n, g_perfmon.GetFrame()));
}

View File

@ -58,7 +58,7 @@ bool GSTexture::Save(const std::string& fn)
return false;
}
const int compression = theApp.GetConfigI("png_compression_level");
const int compression = GSConfig.PNGCompressionLevel;
bool success = GSPng::Save(format, fn, map.bits, m_size.x, m_size.y, map.pitch, compression);
g_gs_device->DownloadTextureComplete();

View File

@ -179,8 +179,7 @@ bool GSTexture11::Save(const std::string& fn)
return false;
}
int compression = theApp.GetConfigI("png_compression_level");
bool success = GSPng::Save(format, fn, static_cast<u8*>(sm.pData), desc.Width, desc.Height, sm.RowPitch, compression);
bool success = GSPng::Save(format, fn, static_cast<u8*>(sm.pData), desc.Width, desc.Height, sm.RowPitch, GSConfig.PNGCompressionLevel);
GSDevice11::GetInstance()->GetD3DContext()->Unmap(res.get(), 0);

View File

@ -37,7 +37,7 @@ GSRendererHW::GSRendererHW()
m_mipmap = (GSConfig.HWMipmap >= HWMipmapLevel::Basic);
SetTCOffset();
m_dump_root = root_hw;
s_dump_root = root_hw;
GSTextureReplacements::Initialize(m_tc);
// Hope nothing requires too many draw calls.
@ -267,11 +267,11 @@ GSTexture* GSRendererHW::GetOutput(int i, int& y_offset)
}
#ifdef ENABLE_OGL_DEBUG
if (s_dump)
if (GSConfig.DumpGSData)
{
if (s_savef && s_n >= s_saven)
if (GSConfig.SaveFrame && s_n >= GSConfig.SaveN)
{
t->Save(m_dump_root + StringUtil::StdStringFromFormat("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, (int)TEX0.TBP0, psm_str(TEX0.PSM)));
t->Save(s_dump_root + StringUtil::StdStringFromFormat("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, (int)TEX0.TBP0, psm_str(TEX0.PSM)));
}
}
#endif
@ -299,8 +299,8 @@ GSTexture* GSRendererHW::GetFeedbackOutput()
GSTexture* t = rt->m_texture;
#ifdef ENABLE_OGL_DEBUG
if (s_dump && s_savef && s_n >= s_saven)
t->Save(m_dump_root + StringUtil::StdStringFromFormat("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), 3, (int)TEX0.TBP0, psm_str(TEX0.PSM)));
if (GSConfig.DumpGSData && GSConfig.SaveFrame && s_n >= GSConfig.SaveN)
t->Save(s_dump_root + StringUtil::StdStringFromFormat("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), 3, (int)TEX0.TBP0, psm_str(TEX0.PSM)));
#endif
return t;
@ -1278,19 +1278,19 @@ void GSRendererHW::RoundSpriteOffset()
void GSRendererHW::Draw()
{
if (s_dump && (s_n >= s_saven))
if (GSConfig.DumpGSData && (s_n >= GSConfig.SaveN))
{
std::string s;
// Dump Register state
s = StringUtil::StdStringFromFormat("%05d_context.txt", s_n);
m_env.Dump(m_dump_root + s);
m_context->Dump(m_dump_root + s);
m_env.Dump(s_dump_root + s);
m_context->Dump(s_dump_root + s);
// Dump vertices
s = StringUtil::StdStringFromFormat("%05d_vertex.txt", s_n);
DumpVertices(m_dump_root + s);
DumpVertices(s_dump_root + s);
}
if (IsBadFrame())
@ -1778,13 +1778,13 @@ void GSRendererHW::Draw()
m_src->m_texture = *m_src->m_from_target;
}
if (s_dump)
if (GSConfig.DumpGSData)
{
const u64 frame = g_perfmon.GetFrame();
std::string s;
if (s_savet && s_n >= s_saven && m_src)
if (GSConfig.SaveTexture && s_n >= GSConfig.SaveN && m_src)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_itex_%05x_%s_%d%d_%02x_%02x_%02x_%02x.dds",
s_n, frame, (int)context->TEX0.TBP0, psm_str(context->TEX0.PSM),
@ -1792,30 +1792,30 @@ void GSRendererHW::Draw()
(int)context->CLAMP.MINU, (int)context->CLAMP.MAXU,
(int)context->CLAMP.MINV, (int)context->CLAMP.MAXV);
m_src->m_texture->Save(m_dump_root + s);
m_src->m_texture->Save(s_dump_root + s);
if (m_src->m_palette)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_itpx_%05x_%s.dds", s_n, frame, context->TEX0.CBP, psm_str(context->TEX0.CPSM));
m_src->m_palette->Save(m_dump_root + s);
m_src->m_palette->Save(s_dump_root + s);
}
}
if (rt && s_save && s_n >= s_saven)
if (rt && GSConfig.SaveRT && s_n >= GSConfig.SaveN)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_rt0_%05x_%s.bmp", s_n, frame, context->FRAME.Block(), psm_str(context->FRAME.PSM));
if (rt->m_texture)
rt->m_texture->Save(m_dump_root + s);
rt->m_texture->Save(s_dump_root + s);
}
if (ds && s_savez && s_n >= s_saven)
if (ds && GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_rz0_%05x_%s.bmp", s_n, frame, context->ZBUF.Block(), psm_str(context->ZBUF.PSM));
if (ds->m_texture)
ds->m_texture->Save(m_dump_root + s);
ds->m_texture->Save(s_dump_root + s);
}
}
@ -1939,31 +1939,31 @@ void GSRendererHW::Draw()
(this->*m_hacks.m_oo)();
}
if (s_dump)
if (GSConfig.DumpGSData)
{
const u64 frame = g_perfmon.GetFrame();
std::string s;
if (s_save && s_n >= s_saven)
if (GSConfig.SaveRT && s_n >= GSConfig.SaveN)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_rt1_%05x_%s.bmp", s_n, frame, context->FRAME.Block(), psm_str(context->FRAME.PSM));
if (rt)
rt->m_texture->Save(m_dump_root + s);
rt->m_texture->Save(s_dump_root + s);
}
if (s_savez && s_n >= s_saven)
if (GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_rz1_%05x_%s.bmp", s_n, frame, context->ZBUF.Block(), psm_str(context->ZBUF.PSM));
if (ds)
rt->m_texture->Save(m_dump_root + s);
rt->m_texture->Save(s_dump_root + s);
}
if (s_savel > 0 && (s_n - s_saven) > s_savel)
if (GSConfig.SaveL > 0 && (s_n - GSConfig.SaveN) > GSConfig.SaveL)
{
s_dump = 0;
GSConfig.DumpGSData = 0;
}
}

View File

@ -235,7 +235,7 @@ bool PNGLoader(const std::string& filename, GSTextureReplacements::ReplacementTe
bool GSTextureReplacements::SavePNGImage(const std::string& filename, u32 width, u32 height, const u8* buffer, u32 pitch)
{
const int compression = theApp.GetConfigI("png_compression_level");
const int compression = GSConfig.PNGCompressionLevel;
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
if (!png_ptr)

View File

@ -212,9 +212,6 @@ public:
using PSSelector = GSHWDrawConfig::PSSelector;
// MARK: Configuration
int m_mipmap;
// MARK: Permanent resources
std::shared_ptr<std::pair<std::mutex, GSDeviceMTL*>> m_backref;
GSMTLDevice m_dev;

View File

@ -89,7 +89,6 @@ GSDeviceMTL::GSDeviceMTL()
, m_dev(nil)
{
m_backref->second = this;
m_mipmap = theApp.GetConfigI("mipmap");
}
GSDeviceMTL::~GSDeviceMTL()
@ -783,7 +782,6 @@ bool GSDeviceMTL::Create()
// Init samplers
MTLSamplerDescriptor* sdesc = [[MTLSamplerDescriptor new] autorelease];
const int anisotropy = theApp.GetConfigI("MaxAnisotropy");
for (size_t i = 0; i < std::size(m_sampler_hw); i++)
{
GSHWDrawConfig::SamplerSelector sel;
@ -826,7 +824,7 @@ bool GSDeviceMTL::Create()
sdesc.tAddressMode = sel.tav ? MTLSamplerAddressModeRepeat : MTLSamplerAddressModeClampToEdge;
sdesc.rAddressMode = MTLSamplerAddressModeClampToEdge;
sdesc.maxAnisotropy = anisotropy && sel.aniso ? anisotropy : 1;
sdesc.maxAnisotropy = GSConfig.MaxAnisotropy && sel.aniso ? GSConfig.MaxAnisotropy : 1;
sdesc.lodMaxClamp = sel.lodclamp ? 0.25f : FLT_MAX;
[sdesc setLabel:[NSString stringWithFormat:@"%s%s %s%s", taudesc, tavdesc, magname, minname]];

View File

@ -97,7 +97,7 @@ bool GSDeviceOGL::Create()
if (!GLLoader::check_gl_requirements())
return false;
if (!theApp.GetConfigB("disable_shader_cache"))
if (!GSConfig.DisableShaderCache)
{
if (!m_shader_cache.Open(false, EmuFolders::Cache, SHADER_CACHE_VERSION))
Console.Warning("Shader cache failed to open.");

View File

@ -410,8 +410,7 @@ bool GSTextureOGL::Save(const std::string& fn)
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
}
int compression = theApp.GetConfigI("png_compression_level");
return GSPng::Save(fmt, fn, image.get(), m_size.x, m_size.y, pitch, compression);
return GSPng::Save(fmt, fn, image.get(), m_size.x, m_size.y, pitch, GSConfig.PNGCompressionLevel);
}
void GSTextureOGL::Swap(GSTexture* tex)

View File

@ -38,7 +38,7 @@ static int compute_best_thread_height(int threads)
// - but not too small to keep the threading overhead low
// - ideal value between 3 and 5, or log2(64 / number of threads)
int th = theApp.GetConfigI("extrathreads_height");
int th = GSConfig.SWExtraThreadsHeight;
if (th > 0 && th < 9)
return th;

View File

@ -44,7 +44,7 @@ GSRendererSW::GSRendererSW(int threads)
std::fill(std::begin(m_fzb_pages), std::end(m_fzb_pages), 0);
std::fill(std::begin(m_tex_pages), std::end(m_tex_pages), 0);
m_dump_root = root_sw;
s_dump_root = root_sw;
}
GSRendererSW::~GSRendererSW()
@ -201,11 +201,11 @@ GSTexture* GSRendererSW::GetOutput(int i, int& y_offset)
m_texture[i]->Update(out_r, m_output, pitch);
if (s_dump)
if (GSConfig.DumpGSData)
{
if (s_savef && s_n >= s_saven)
if (GSConfig.SaveFrame && s_n >= GSConfig.SaveN)
{
m_texture[i]->Save(m_dump_root + StringUtil::StdStringFromFormat("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, (int)DISPFB.Block(), psm_str(DISPFB.PSM)));
m_texture[i]->Save(s_dump_root + StringUtil::StdStringFromFormat("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, (int)DISPFB.Block(), psm_str(DISPFB.PSM)));
}
}
}
@ -333,21 +333,21 @@ void GSRendererSW::Draw()
{
const GSDrawingContext* context = m_context;
if (s_dump)
if (GSConfig.DumpGSData)
{
std::string s;
if (s_n >= s_saven)
if (s_n >= GSConfig.SaveN)
{
// Dump Register state
s = StringUtil::StdStringFromFormat("%05d_context.txt", s_n);
m_env.Dump(m_dump_root + s);
m_context->Dump(m_dump_root + s);
m_env.Dump(s_dump_root + s);
m_context->Dump(s_dump_root + s);
// Dump vertices
s = StringUtil::StdStringFromFormat("%05d_vertex.txt", s_n);
DumpVertices(m_dump_root + s);
DumpVertices(s_dump_root + s);
}
}
@ -454,7 +454,7 @@ void GSRendererSW::Draw()
//
if (s_dump)
if (GSConfig.DumpGSData)
{
Sync(2);
@ -465,67 +465,67 @@ void GSRendererSW::Draw()
// It will breaks the few games that really uses 16 bits RT
bool texture_shuffle = ((context->FRAME.PSM & 0x2) && ((context->TEX0.PSM & 3) == 2) && (m_vt.m_primclass == GS_SPRITE_CLASS));
if (s_savet && s_n >= s_saven && PRIM->TME)
if (GSConfig.SaveTexture && s_n >= GSConfig.SaveN && PRIM->TME)
{
if (texture_shuffle)
{
// Dump the RT in 32 bits format. It helps to debug texture shuffle effect
s = StringUtil::StdStringFromFormat("%05d_f%lld_itexraw_%05x_32bits.bmp", s_n, frame, (int)m_context->TEX0.TBP0);
m_mem.SaveBMP(m_dump_root + s, m_context->TEX0.TBP0, m_context->TEX0.TBW, 0, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);
m_mem.SaveBMP(s_dump_root + s, m_context->TEX0.TBP0, m_context->TEX0.TBW, 0, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);
}
s = StringUtil::StdStringFromFormat("%05d_f%lld_itexraw_%05x_%s.bmp", s_n, frame, (int)m_context->TEX0.TBP0, psm_str(m_context->TEX0.PSM));
m_mem.SaveBMP(m_dump_root + s, m_context->TEX0.TBP0, m_context->TEX0.TBW, m_context->TEX0.PSM, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);
m_mem.SaveBMP(s_dump_root + s, m_context->TEX0.TBP0, m_context->TEX0.TBW, m_context->TEX0.PSM, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);
}
if (s_save && s_n >= s_saven)
if (GSConfig.SaveRT && s_n >= GSConfig.SaveN)
{
if (texture_shuffle)
{
// Dump the RT in 32 bits format. It helps to debug texture shuffle effect
s = StringUtil::StdStringFromFormat("%05d_f%lld_rt0_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block());
m_mem.SaveBMP(m_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, GetFrameRect().width(), 512);
}
s = StringUtil::StdStringFromFormat("%05d_f%lld_rt0_%05x_%s.bmp", s_n, frame, m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
m_mem.SaveBMP(m_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512);
}
if (s_savez && s_n >= s_saven)
if (GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_rz0_%05x_%s.bmp", s_n, frame, m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
m_mem.SaveBMP(m_dump_root + s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512);
}
Queue(data);
Sync(3);
if (s_save && s_n >= s_saven)
if (GSConfig.SaveRT && s_n >= GSConfig.SaveN)
{
if (texture_shuffle)
{
// Dump the RT in 32 bits format. It helps to debug texture shuffle effect
s = StringUtil::StdStringFromFormat("%05d_f%lld_rt1_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block());
m_mem.SaveBMP(m_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, GetFrameRect().width(), 512);
}
s = StringUtil::StdStringFromFormat("%05d_f%lld_rt1_%05x_%s.bmp", s_n, frame, m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
m_mem.SaveBMP(m_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512);
}
if (s_savez && s_n >= s_saven)
if (GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_rz1_%05x_%s.bmp", s_n, frame, m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
m_mem.SaveBMP(m_dump_root + s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512);
}
if (s_savel > 0 && (s_n - s_saven) > s_savel)
if (GSConfig.SaveL > 0 && (s_n - GSConfig.SaveN) > GSConfig.SaveL)
{
s_dump = 0;
GSConfig.DumpGSData = 0;
}
}
else
@ -604,18 +604,18 @@ void GSRendererSW::Sync(int reason)
{
std::string s;
if (s_save)
if (GSConfig.SaveRT)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_rt1_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
m_mem.SaveBMP(m_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512);
}
if (s_savez)
if (GSConfig.SaveDepth)
{
s = StringUtil::StdStringFromFormat("%05d_f%lld_zb1_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
m_mem.SaveBMP(m_dump_root + s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512);
m_mem.SaveBMP(s_dump_root + s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512);
}
}
@ -1571,13 +1571,13 @@ void GSRendererSW::SharedData::UpdateSource()
// TODO
if (g_gs_renderer->s_dump)
if (GSConfig.DumpGSData)
{
u64 frame = g_perfmon.GetFrame();
std::string s;
if (g_gs_renderer->s_savet && g_gs_renderer->s_n >= g_gs_renderer->s_saven)
if (GSConfig.SaveTexture && g_gs_renderer->s_n >= GSConfig.SaveN)
{
for (size_t i = 0; m_tex[i].t != NULL; i++)
{

View File

@ -91,7 +91,7 @@ bool GSTextureSW::Save(const std::string& fn)
#else
GSPng::Format fmt = GSPng::RGB_PNG;
#endif
int compression = theApp.GetConfigI("png_compression_level");
int compression = GSConfig.PNGCompressionLevel;
return GSPng::Save(fmt, fn, static_cast<u8*>(m_data), m_size.x, m_size.y, m_pitch, compression);
}

View File

@ -489,6 +489,7 @@ bool Pcsx2Config::GSOptions::OptionsAreEqual(const GSOptions& right) const
OpEqu(ShadeBoost_Brightness) &&
OpEqu(ShadeBoost_Contrast) &&
OpEqu(ShadeBoost_Saturation) &&
OpEqu(PNGCompressionLevel) &&
OpEqu(SaveN) &&
OpEqu(SaveL) &&
@ -693,6 +694,7 @@ void Pcsx2Config::GSOptions::ReloadIniSettings()
GSSettingInt(ShadeBoost_Brightness);
GSSettingInt(ShadeBoost_Contrast);
GSSettingInt(ShadeBoost_Saturation);
GSSettingIntEx(PNGCompressionLevel, "png_compression_level");
GSSettingIntEx(SaveN, "saven");
GSSettingIntEx(SaveL, "savel");

View File

@ -310,7 +310,6 @@
<ClCompile Include="GS\Renderers\HW\GSRendererHWMultiISA.cpp" />
<ClCompile Include="GS\Renderers\Null\GSRendererNull.cpp" />
<ClCompile Include="GS\Renderers\SW\GSRendererSW.cpp" />
<ClCompile Include="GS\Window\GSSetting.cpp" />
<ClCompile Include="GS\Renderers\SW\GSSetupPrimCodeGenerator.cpp" />
<ClCompile Include="GS\Renderers\SW\GSSetupPrimCodeGenerator.all.cpp" />
<ClCompile Include="GS\GSState.cpp" />
@ -653,7 +652,6 @@
<ClInclude Include="GS\Renderers\Null\GSRendererNull.h" />
<ClInclude Include="GS\Renderers\SW\GSRendererSW.h" />
<ClInclude Include="GS\Renderers\SW\GSScanlineEnvironment.h" />
<ClInclude Include="GS\Window\GSSetting.h" />
<ClInclude Include="GS\Renderers\SW\GSSetupPrimCodeGenerator.h" />
<ClInclude Include="GS\Renderers\SW\GSSetupPrimCodeGenerator.all.h" />
<ClInclude Include="GS\GSState.h" />
@ -893,4 +891,4 @@
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>
</Project>

View File

@ -1175,9 +1175,6 @@
<ClCompile Include="GS\GSCapture.cpp">
<Filter>System\Ps2\GS\Window</Filter>
</ClCompile>
<ClCompile Include="GS\Window\GSSetting.cpp">
<Filter>System\Ps2\GS\Window</Filter>
</ClCompile>
<ClCompile Include="GS\Renderers\DX11\D3D.cpp">
<Filter>System\Ps2\GS\Renderers\Direct3D11</Filter>
</ClCompile>
@ -2123,9 +2120,6 @@
<ClInclude Include="GS\GSCapture.h">
<Filter>System\Ps2\GS\Window</Filter>
</ClInclude>
<ClInclude Include="GS\Window\GSSetting.h">
<Filter>System\Ps2\GS\Window</Filter>
</ClInclude>
<ClInclude Include="GS\resource.h">
<Filter>System\Ps2\GS</Filter>
</ClInclude>