Add compression option for texture dumps.

Enable through command line options:
-C Graphics.Settings.TexturePNGCompressionLevel=[0-9]

Or from GFX.ini:
[Settings]
TexturePNGCompressionLevel=[0-9]

@see #10792
This commit is contained in:
joon 2023-02-09 09:49:25 -05:00
parent 6743ca8e09
commit db712772b7
5 changed files with 7 additions and 4 deletions

View File

@ -44,6 +44,8 @@ const Info<bool> GFX_OVERLAY_SCISSOR_STATS{{System::GFX, "Settings", "OverlaySci
const Info<bool> GFX_DUMP_TEXTURES{{System::GFX, "Settings", "DumpTextures"}, false};
const Info<bool> GFX_DUMP_MIP_TEXTURES{{System::GFX, "Settings", "DumpMipTextures"}, true};
const Info<bool> GFX_DUMP_BASE_TEXTURES{{System::GFX, "Settings", "DumpBaseTextures"}, true};
const Info<int> GFX_TEXTURE_PNG_COMPRESSION_LEVEL{
{System::GFX, "Settings", "TexturePNGCompressionLevel"}, 6};
const Info<bool> GFX_HIRES_TEXTURES{{System::GFX, "Settings", "HiresTextures"}, false};
const Info<bool> GFX_CACHE_HIRES_TEXTURES{{System::GFX, "Settings", "CacheHiresTextures"}, false};
const Info<bool> GFX_DUMP_EFB_TARGET{{System::GFX, "Settings", "DumpEFBTarget"}, false};

View File

@ -46,6 +46,7 @@ extern const Info<bool> GFX_OVERLAY_SCISSOR_STATS;
extern const Info<bool> GFX_DUMP_TEXTURES;
extern const Info<bool> GFX_DUMP_MIP_TEXTURES;
extern const Info<bool> GFX_DUMP_BASE_TEXTURES;
extern const Info<int> GFX_TEXTURE_PNG_COMPRESSION_LEVEL;
extern const Info<bool> GFX_HIRES_TEXTURES;
extern const Info<bool> GFX_CACHE_HIRES_TEXTURES;
extern const Info<bool> GFX_DUMP_EFB_TARGET;

View File

@ -19,7 +19,7 @@ void AbstractTexture::FinishedRendering()
{
}
bool AbstractTexture::Save(const std::string& filename, unsigned int level)
bool AbstractTexture::Save(const std::string& filename, unsigned int level, int compression)
{
// We can't dump compressed textures currently (it would mean drawing them to a RGBA8
// framebuffer, and saving that). TextureCache does not call Save for custom textures
@ -51,7 +51,7 @@ bool AbstractTexture::Save(const std::string& filename, unsigned int level)
return Common::SavePNG(filename,
reinterpret_cast<const u8*>(readback_texture->GetMappedPointer()),
Common::ImageByteFormat::RGBA, level_width, level_height,
static_cast<int>(readback_texture->GetMappedStride()));
static_cast<int>(readback_texture->GetMappedStride()), compression);
}
bool AbstractTexture::IsCompressedFormat(AbstractTextureFormat format)

View File

@ -38,7 +38,7 @@ public:
MathUtil::Rectangle<int> GetRect() const { return m_config.GetRect(); }
MathUtil::Rectangle<int> GetMipRect(u32 level) const { return m_config.GetMipRect(level); }
bool IsMultisampled() const { return m_config.IsMultisampled(); }
bool Save(const std::string& filename, unsigned int level);
bool Save(const std::string& filename, unsigned int level, int compression = 6);
static bool IsCompressedFormat(AbstractTextureFormat format);
static bool IsDepthFormat(AbstractTextureFormat format);

View File

@ -1023,7 +1023,7 @@ void TextureCacheBase::DumpTexture(RcTcacheEntry& entry, std::string basename, u
if (File::Exists(filename))
return;
entry->texture->Save(filename, level);
entry->texture->Save(filename, level, Config::Get(Config::GFX_TEXTURE_PNG_COMPRESSION_LEVEL));
}
// Helper for checking if a BPMemory TexMode0 register is set to Point