diff --git a/Source/Editor/Cooker/Steps/CookAssetsStep.cpp b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp index a85973964..62cc2017d 100644 --- a/Source/Editor/Cooker/Steps/CookAssetsStep.cpp +++ b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp @@ -233,6 +233,15 @@ void CookAssetsStep::CacheData::Load(CookingData& data) LOG(Info, "{0} option has been modified.", TEXT("ShadersGenerateDebugData")); 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 (data.Platform == BuildPlatform::Windows32 || data.Platform == BuildPlatform::Windows64) { diff --git a/Source/Editor/Cooker/Steps/CookAssetsStep.h b/Source/Editor/Cooker/Steps/CookAssetsStep.h index f896d9803..612b363dd 100644 --- a/Source/Editor/Cooker/Steps/CookAssetsStep.h +++ b/Source/Editor/Cooker/Steps/CookAssetsStep.h @@ -97,6 +97,7 @@ public: { bool ShadersNoOptimize; bool ShadersGenerateDebugData; + bool ShadersReverseZ; Guid StreamingSettingsAssetId; int32 ShadersVersion; int32 MaterialGraphVersion; diff --git a/Source/Engine/Graphics/Shaders/Cache/ShaderCacheManager.cpp b/Source/Engine/Graphics/Shaders/Cache/ShaderCacheManager.cpp index 8a10b81a9..7fcac839b 100644 --- a/Source/Engine/Graphics/Shaders/Cache/ShaderCacheManager.cpp +++ b/Source/Engine/Graphics/Shaders/Cache/ShaderCacheManager.cpp @@ -188,17 +188,41 @@ bool ShaderCacheManagerService::Init() int32 ShaderCacheVersion = -1; int32 MaterialGraphVersion = -1; int32 ParticleGraphVersion = -1; - bool ShaderDebug; - bool ShaderProfile; - }; - CacheVersion cacheVersion; - const String cacheVerFile = rootDir / TEXT("CacheVersion"); + union + { + struct + { + 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 - const bool shaderDebug = CommandLine::Options.ShaderDebug.IsTrue(); - const bool shaderProfile = CommandLine::Options.ShaderProfile.IsTrue(); -#else - const bool shaderDebug = false; + ShaderDebug = CommandLine::Options.ShaderDebug.IsTrue(); + ShaderProfile = CommandLine::Options.ShaderProfile.IsTrue(); #endif +#if REVERSE_Z + ReverseZ = true; +#endif + } + }; + CacheVersion cacheVersion, cacheVersionDefault; + cacheVersionDefault.InitDefault(); + const String cacheVerFile = rootDir / TEXT("CacheVersion"); if (FileSystem::FileExists(cacheVerFile)) { 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."); } } - if (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 (cacheVersion.EngineVersion != cacheVersionDefault.EngineVersion + || cacheVersion.ShaderCacheVersion != cacheVersionDefault.ShaderCacheVersion + || cacheVersion.MaterialGraphVersion != cacheVersionDefault.MaterialGraphVersion + || cacheVersion.ParticleGraphVersion != cacheVersionDefault.ParticleGraphVersion + || cacheVersion.Flags != cacheVersionDefault.Flags ) { LOG(Warning, "Shaders cache database is invalid. Performing reset."); - 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)) { - LOG(Error, "Failed to createe the shaders cache database directory."); + LOG(Error, "Failed to create shaders cache database directory."); } - - 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))) + if (File::WriteAllBytes(cacheVerFile, (byte*)&cacheVersionDefault, sizeof(cacheVersionDefault))) { - LOG(Error, "Failed to create the shaders cache database version file."); + LOG(Error, "Failed to create shaders cache database version file."); } }