summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2018-03-28 01:45:59 +1000
committerStenzek <stenzek@gmail.com>2018-04-02 01:02:20 +1000
commit36ea2f7a263ac64f60d9caabc56d7cd319a29fea (patch)
tree9a06a84e3c66cdfe27241e5f53b8367eb380ec5e /Source/Core
parentaaf9f4759f169f6afbf70628916276ed4a955ad2 (diff)
ShaderCache: Fix issue where shader cache wasn't recreated when invalid
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoCommon/ShaderCache.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/Source/Core/VideoCommon/ShaderCache.cpp b/Source/Core/VideoCommon/ShaderCache.cpp
index cc2ca81b7c..12166d2d4c 100644
--- a/Source/Core/VideoCommon/ShaderCache.cpp
+++ b/Source/Core/VideoCommon/ShaderCache.cpp
@@ -552,6 +552,7 @@ void ShaderCache::LoadPipelineUIDCache()
// If an existing case exists, validate the version before reading entries.
u32 existing_magic;
u32 existing_version;
+ bool uid_file_valid = false;
if (m_gx_pipeline_uid_cache_file.ReadBytes(&existing_magic, sizeof(existing_magic)) &&
m_gx_pipeline_uid_cache_file.ReadBytes(&existing_version, sizeof(existing_version)) &&
existing_magic == CACHE_FILE_MAGIC && existing_version == GX_PIPELINE_UID_VERSION)
@@ -563,7 +564,7 @@ void ShaderCache::LoadPipelineUIDCache()
const size_t uid_count =
static_cast<size_t>(file_size - CACHE_HEADER_SIZE) / sizeof(SerializedGXPipelineUid);
const size_t expected_size = uid_count * sizeof(SerializedGXPipelineUid) + CACHE_HEADER_SIZE;
- bool uid_file_valid = file_size == expected_size;
+ uid_file_valid = file_size == expected_size;
if (uid_file_valid)
{
for (size_t i = 0; i < uid_count; i++)
@@ -583,12 +584,13 @@ void ShaderCache::LoadPipelineUIDCache()
}
// We open the file for reading and writing, so we must seek to the end before writing.
- if (!uid_file_valid || !m_gx_pipeline_uid_cache_file.Seek(expected_size, SEEK_SET))
- {
- // Close the file. We re-open and truncate it below.
- m_gx_pipeline_uid_cache_file.Close();
- }
+ if (uid_file_valid)
+ uid_file_valid = m_gx_pipeline_uid_cache_file.Seek(expected_size, SEEK_SET);
}
+
+ // If the file is invalid, close it. We re-open and truncate it below.
+ if (!uid_file_valid)
+ m_gx_pipeline_uid_cache_file.Close();
}
// If the file is not open, it means it was either corrupted or didn't exist.