Fix shaders cache to be invalidated when changing ReverseZ option
#2684
This commit is contained in:
@@ -233,6 +233,15 @@ void CookAssetsStep::CacheData::Load(CookingData& data)
|
|||||||
LOG(Info, "{0} option has been modified.", TEXT("ShadersGenerateDebugData"));
|
LOG(Info, "{0} option has been modified.", TEXT("ShadersGenerateDebugData"));
|
||||||
invalidateShaders = true;
|
invalidateShaders = true;
|
||||||
}
|
}
|
||||||
|
bool reverseZ = false;
|
||||||
|
#if REVERSE_Z
|
||||||
|
reverseZ = true;
|
||||||
|
#endif
|
||||||
|
if (reverseZ != Settings.Global.ShadersReverseZ)
|
||||||
|
{
|
||||||
|
LOG(Info, "{0} option has been modified.", TEXT("ShadersReverseZ"));
|
||||||
|
invalidateShaders = true;
|
||||||
|
}
|
||||||
#if PLATFORM_TOOLS_WINDOWS
|
#if PLATFORM_TOOLS_WINDOWS
|
||||||
if (data.Platform == BuildPlatform::Windows32 || data.Platform == BuildPlatform::Windows64)
|
if (data.Platform == BuildPlatform::Windows32 || data.Platform == BuildPlatform::Windows64)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ public:
|
|||||||
{
|
{
|
||||||
bool ShadersNoOptimize;
|
bool ShadersNoOptimize;
|
||||||
bool ShadersGenerateDebugData;
|
bool ShadersGenerateDebugData;
|
||||||
|
bool ShadersReverseZ;
|
||||||
Guid StreamingSettingsAssetId;
|
Guid StreamingSettingsAssetId;
|
||||||
int32 ShadersVersion;
|
int32 ShadersVersion;
|
||||||
int32 MaterialGraphVersion;
|
int32 MaterialGraphVersion;
|
||||||
|
|||||||
@@ -188,17 +188,41 @@ bool ShaderCacheManagerService::Init()
|
|||||||
int32 ShaderCacheVersion = -1;
|
int32 ShaderCacheVersion = -1;
|
||||||
int32 MaterialGraphVersion = -1;
|
int32 MaterialGraphVersion = -1;
|
||||||
int32 ParticleGraphVersion = -1;
|
int32 ParticleGraphVersion = -1;
|
||||||
bool ShaderDebug;
|
union
|
||||||
bool ShaderProfile;
|
{
|
||||||
};
|
struct
|
||||||
CacheVersion cacheVersion;
|
{
|
||||||
const String cacheVerFile = rootDir / TEXT("CacheVersion");
|
uint32 ShaderDebug : 1;
|
||||||
|
uint32 ShaderProfile : 1;
|
||||||
|
uint32 ReverseZ : 1;
|
||||||
|
};
|
||||||
|
uint32 Flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
CacheVersion()
|
||||||
|
{
|
||||||
|
Platform::MemoryClear(this, sizeof(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitDefault()
|
||||||
|
{
|
||||||
|
EngineVersion = FLAXENGINE_VERSION_BUILD;
|
||||||
|
ShaderCacheVersion = GPU_SHADER_CACHE_VERSION;
|
||||||
|
MaterialGraphVersion = MATERIAL_GRAPH_VERSION;
|
||||||
|
ParticleGraphVersion = PARTICLE_GPU_GRAPH_VERSION;
|
||||||
|
Flags = 0;
|
||||||
#if USE_EDITOR
|
#if USE_EDITOR
|
||||||
const bool shaderDebug = CommandLine::Options.ShaderDebug.IsTrue();
|
ShaderDebug = CommandLine::Options.ShaderDebug.IsTrue();
|
||||||
const bool shaderProfile = CommandLine::Options.ShaderProfile.IsTrue();
|
ShaderProfile = CommandLine::Options.ShaderProfile.IsTrue();
|
||||||
#else
|
|
||||||
const bool shaderDebug = false;
|
|
||||||
#endif
|
#endif
|
||||||
|
#if REVERSE_Z
|
||||||
|
ReverseZ = true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CacheVersion cacheVersion, cacheVersionDefault;
|
||||||
|
cacheVersionDefault.InitDefault();
|
||||||
|
const String cacheVerFile = rootDir / TEXT("CacheVersion");
|
||||||
if (FileSystem::FileExists(cacheVerFile))
|
if (FileSystem::FileExists(cacheVerFile))
|
||||||
{
|
{
|
||||||
if (File::ReadAllBytes(cacheVerFile, (byte*)&cacheVersion, sizeof(cacheVersion)))
|
if (File::ReadAllBytes(cacheVerFile, (byte*)&cacheVersion, sizeof(cacheVersion)))
|
||||||
@@ -207,34 +231,25 @@ bool ShaderCacheManagerService::Init()
|
|||||||
LOG(Warning, "Failed to read the shaders cache database version file.");
|
LOG(Warning, "Failed to read the shaders cache database version file.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cacheVersion.EngineVersion != FLAXENGINE_VERSION_BUILD
|
if (cacheVersion.EngineVersion != cacheVersionDefault.EngineVersion
|
||||||
|| cacheVersion.ShaderCacheVersion != GPU_SHADER_CACHE_VERSION
|
|| cacheVersion.ShaderCacheVersion != cacheVersionDefault.ShaderCacheVersion
|
||||||
|| cacheVersion.MaterialGraphVersion != MATERIAL_GRAPH_VERSION
|
|| cacheVersion.MaterialGraphVersion != cacheVersionDefault.MaterialGraphVersion
|
||||||
|| cacheVersion.ParticleGraphVersion != PARTICLE_GPU_GRAPH_VERSION
|
|| cacheVersion.ParticleGraphVersion != cacheVersionDefault.ParticleGraphVersion
|
||||||
|| cacheVersion.ShaderDebug != shaderDebug
|
|| cacheVersion.Flags != cacheVersionDefault.Flags
|
||||||
|| cacheVersion.ShaderProfile != shaderProfile
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
LOG(Warning, "Shaders cache database is invalid. Performing reset.");
|
LOG(Warning, "Shaders cache database is invalid. Performing reset.");
|
||||||
|
|
||||||
if (FileSystem::DirectoryExists(rootDir) && FileSystem::DeleteDirectory(rootDir))
|
if (FileSystem::DirectoryExists(rootDir) && FileSystem::DeleteDirectory(rootDir))
|
||||||
{
|
{
|
||||||
LOG(Warning, "Failed to reset the shaders cache database.");
|
LOG(Warning, "Failed to reset shaders cache database.");
|
||||||
}
|
}
|
||||||
if (FileSystem::CreateDirectory(rootDir))
|
if (FileSystem::CreateDirectory(rootDir))
|
||||||
{
|
{
|
||||||
LOG(Error, "Failed to createe the shaders cache database directory.");
|
LOG(Error, "Failed to create shaders cache database directory.");
|
||||||
}
|
}
|
||||||
|
if (File::WriteAllBytes(cacheVerFile, (byte*)&cacheVersionDefault, sizeof(cacheVersionDefault)))
|
||||||
cacheVersion.EngineVersion = FLAXENGINE_VERSION_BUILD;
|
|
||||||
cacheVersion.ShaderCacheVersion = GPU_SHADER_CACHE_VERSION;
|
|
||||||
cacheVersion.MaterialGraphVersion = MATERIAL_GRAPH_VERSION;
|
|
||||||
cacheVersion.ParticleGraphVersion = PARTICLE_GPU_GRAPH_VERSION;
|
|
||||||
cacheVersion.ShaderDebug = shaderDebug;
|
|
||||||
cacheVersion.ShaderProfile = shaderProfile;
|
|
||||||
if (File::WriteAllBytes(cacheVerFile, (byte*)&cacheVersion, sizeof(cacheVersion)))
|
|
||||||
{
|
{
|
||||||
LOG(Error, "Failed to create the shaders cache database version file.");
|
LOG(Error, "Failed to create shaders cache database version file.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user