GS: Unify shader cache versions across renderers

It's not often that we make a change unique to one API. This way, you
only have to bump the version in one location, instead of four.
This commit is contained in:
Connor McLaughlin 2022-10-15 14:12:13 +10:00 committed by refractionpcsx2
parent 44c8974aba
commit 44bad588b4
12 changed files with 34 additions and 16 deletions

View File

@ -241,6 +241,7 @@ set(pcsx2Headers
R5900.h R5900.h
R5900OpcodeTables.h R5900OpcodeTables.h
SaveState.h SaveState.h
ShaderCacheVersion.h
Sifcmd.h Sifcmd.h
Sif.h Sif.h
SingleRegisterTypes.h SingleRegisterTypes.h

View File

@ -1,6 +1,7 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "VulkanHostDisplay.h" #include "VulkanHostDisplay.h"
#include "ShaderCacheVersion.h"
#include "common/Align.h" #include "common/Align.h"
#include "common/Assertions.h" #include "common/Assertions.h"
#include "common/Console.h" #include "common/Console.h"
@ -15,8 +16,6 @@
#include "imgui_impl_vulkan.h" #include "imgui_impl_vulkan.h"
#include <array> #include <array>
static constexpr u32 SHADER_CACHE_VERSION = 4;
class VulkanHostDisplayTexture : public HostDisplayTexture class VulkanHostDisplayTexture : public HostDisplayTexture
{ {
public: public:

View File

@ -22,6 +22,7 @@
#include "GS/GSUtil.h" #include "GS/GSUtil.h"
#include "Host.h" #include "Host.h"
#include "HostDisplay.h" #include "HostDisplay.h"
#include "ShaderCacheVersion.h"
#include "common/StringUtil.h" #include "common/StringUtil.h"
#include <fstream> #include <fstream>
#include <sstream> #include <sstream>
@ -91,14 +92,14 @@ bool GSDevice11::Create()
if (!GSConfig.DisableShaderCache) if (!GSConfig.DisableShaderCache)
{ {
if (!m_shader_cache.Open(EmuFolders::Cache, m_dev->GetFeatureLevel(), SHADER_VERSION, GSConfig.UseDebugDevice)) if (!m_shader_cache.Open(EmuFolders::Cache, m_dev->GetFeatureLevel(), SHADER_CACHE_VERSION, GSConfig.UseDebugDevice))
{ {
Console.Warning("Shader cache failed to open."); Console.Warning("Shader cache failed to open.");
} }
} }
else else
{ {
m_shader_cache.Open({}, m_dev->GetFeatureLevel(), SHADER_VERSION, GSConfig.UseDebugDevice); m_shader_cache.Open({}, m_dev->GetFeatureLevel(), SHADER_CACHE_VERSION, GSConfig.UseDebugDevice);
Console.WriteLn("Not using shader cache."); Console.WriteLn("Not using shader cache.");
} }

View File

@ -108,9 +108,6 @@ public:
}; };
private: private:
// Increment this constant whenever shaders change, to invalidate user's shader cache.
static constexpr u32 SHADER_VERSION = 1;
static constexpr u32 MAX_TEXTURES = 4; static constexpr u32 MAX_TEXTURES = 4;
static constexpr u32 MAX_SAMPLERS = 2; static constexpr u32 MAX_SAMPLERS = 2;

View File

@ -29,6 +29,7 @@
#include "GS/GSUtil.h" #include "GS/GSUtil.h"
#include "Host.h" #include "Host.h"
#include "HostDisplay.h" #include "HostDisplay.h"
#include "ShaderCacheVersion.h"
#include <sstream> #include <sstream>
#include <limits> #include <limits>
@ -113,14 +114,14 @@ bool GSDevice12::Create()
if (!GSConfig.DisableShaderCache) if (!GSConfig.DisableShaderCache)
{ {
if (!m_shader_cache.Open(EmuFolders::Cache, g_d3d12_context->GetFeatureLevel(), SHADER_VERSION, GSConfig.UseDebugDevice)) if (!m_shader_cache.Open(EmuFolders::Cache, g_d3d12_context->GetFeatureLevel(), SHADER_CACHE_VERSION, GSConfig.UseDebugDevice))
{ {
Console.Warning("Shader cache failed to open."); Console.Warning("Shader cache failed to open.");
} }
} }
else else
{ {
m_shader_cache.Open({}, g_d3d12_context->GetFeatureLevel(), SHADER_VERSION, GSConfig.UseDebugDevice); m_shader_cache.Open({}, g_d3d12_context->GetFeatureLevel(), SHADER_CACHE_VERSION, GSConfig.UseDebugDevice);
Console.WriteLn("Not using shader cache."); Console.WriteLn("Not using shader cache.");
} }

View File

@ -133,8 +133,6 @@ public:
}; };
private: private:
static constexpr u32 SHADER_VERSION = 1;
ComPtr<ID3D12RootSignature> m_tfx_root_signature; ComPtr<ID3D12RootSignature> m_tfx_root_signature;
ComPtr<ID3D12RootSignature> m_utility_root_signature; ComPtr<ID3D12RootSignature> m_utility_root_signature;

View File

@ -22,6 +22,7 @@
#include "GS/GSUtil.h" #include "GS/GSUtil.h"
#include "Host.h" #include "Host.h"
#include "HostDisplay.h" #include "HostDisplay.h"
#include "ShaderCacheVersion.h"
#include <cinttypes> #include <cinttypes>
#include <fstream> #include <fstream>
#include <sstream> #include <sstream>
@ -206,7 +207,7 @@ bool GSDeviceOGL::Create()
if (!theApp.GetConfigB("disable_shader_cache")) if (!theApp.GetConfigB("disable_shader_cache"))
{ {
if (!m_shader_cache.Open(false, EmuFolders::Cache, SHADER_VERSION)) if (!m_shader_cache.Open(false, EmuFolders::Cache, SHADER_CACHE_VERSION))
Console.Warning("Shader cache failed to open."); Console.Warning("Shader cache failed to open.");
} }
else else

View File

@ -211,9 +211,6 @@ public:
static int m_shader_reg; static int m_shader_reg;
private: private:
// Increment this constant whenever shaders change, to invalidate user's program binary cache.
static constexpr u32 SHADER_VERSION = 3;
static FILE* m_debug_gl_file; static FILE* m_debug_gl_file;
bool m_disable_hw_gl_draw; bool m_disable_hw_gl_draw;

View File

@ -0,0 +1,18 @@
/* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2022 PCSX2 Dev Team
*
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with PCSX2.
* If not, see <http://www.gnu.org/licenses/>.
*/
/// Version number for GS and other shaders. Increment whenever any of the contents of the
/// shaders change, to invalidate the cache.
static constexpr u32 SHADER_CACHE_VERSION = 10;

View File

@ -869,6 +869,7 @@
<ClInclude Include="PAD\Windows\WndProcEater.h" /> <ClInclude Include="PAD\Windows\WndProcEater.h" />
<ClInclude Include="PAD\Windows\XInputEnum.h" /> <ClInclude Include="PAD\Windows\XInputEnum.h" />
<ClInclude Include="PerformanceMetrics.h" /> <ClInclude Include="PerformanceMetrics.h" />
<ClInclude Include="ShaderCacheVersion.h" />
<ClInclude Include="SPU2\Config.h" /> <ClInclude Include="SPU2\Config.h" />
<ClInclude Include="SPU2\Global.h" /> <ClInclude Include="SPU2\Global.h" />
<ClInclude Include="SPU2\interpolate_table.h" /> <ClInclude Include="SPU2\interpolate_table.h" />

View File

@ -2996,6 +2996,9 @@
<ClInclude Include="Frontend\ImGuiOverlays.h"> <ClInclude Include="Frontend\ImGuiOverlays.h">
<Filter>Host</Filter> <Filter>Host</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="ShaderCacheVersion.h">
<Filter>System\Include</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="windows\wxResources.rc"> <ResourceCompile Include="windows\wxResources.rc">

View File

@ -566,6 +566,7 @@
<ClInclude Include="Recording\InputRecordingFile.h" /> <ClInclude Include="Recording\InputRecordingFile.h" />
<ClInclude Include="Recording\PadData.h" /> <ClInclude Include="Recording\PadData.h" />
<ClInclude Include="Recording\Utilities\InputRecordingLogger.h" /> <ClInclude Include="Recording\Utilities\InputRecordingLogger.h" />
<ClInclude Include="ShaderCacheVersion.h" />
<ClInclude Include="SPU2\Config.h" /> <ClInclude Include="SPU2\Config.h" />
<ClInclude Include="SPU2\Global.h" /> <ClInclude Include="SPU2\Global.h" />
<ClInclude Include="SPU2\Host\Config.h" /> <ClInclude Include="SPU2\Host\Config.h" />