summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorConnor McLaughlin <stenzek@gmail.com>2019-04-21 13:27:05 +1000
committerGitHub <noreply@github.com>2019-04-21 13:27:05 +1000
commit5b4ebccf6bf45a614cd2a5031607743b482ff776 (patch)
tree49de06f81815973680811a3ee9f853dde1b15bbd /Source
parent18589e50ab44957f4955596ac238d900f28959c3 (diff)
parentc6b45c5ca9ea80a4190db98858e186996d4827af (diff)
Merge pull request #8012 from stenzek/bounding-box-shaders
PixelShaderGen: Don't emit bounding box shader code for old UIDs when disabled
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/VideoCommon/PixelShaderGen.cpp4
-rw-r--r--Source/Core/VideoCommon/ShaderCache.cpp36
2 files changed, 24 insertions, 16 deletions
diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp
index 7064552e7d..c5d7086ef7 100644
--- a/Source/Core/VideoCommon/PixelShaderGen.cpp
+++ b/Source/Core/VideoCommon/PixelShaderGen.cpp
@@ -347,6 +347,10 @@ void ClearUnusedPixelShaderUidBits(APIType ApiType, const ShaderHostConfig& host
// uint output when logic op is not supported (i.e. driver/device does not support D3D11.1).
if (ApiType != APIType::D3D || !host_config.backend_logic_op)
uid_data->uint_output = 0;
+
+ // If bounding box is enabled when a UID cache is created, then later disabled, we shouldn't
+ // emit the bounding box portion of the shader.
+ uid_data->bounding_box &= host_config.bounding_box;
}
void WritePixelShaderCommonHeader(ShaderCode& out, APIType ApiType, u32 num_texgens,
diff --git a/Source/Core/VideoCommon/ShaderCache.cpp b/Source/Core/VideoCommon/ShaderCache.cpp
index e1712ec8f3..3e4ed24662 100644
--- a/Source/Core/VideoCommon/ShaderCache.cpp
+++ b/Source/Core/VideoCommon/ShaderCache.cpp
@@ -641,17 +641,19 @@ const AbstractPipeline* ShaderCache::InsertGXPipeline(const GXPipelineUid& confi
auto& entry = m_gx_pipeline_cache[config];
entry.second = false;
if (!entry.first && pipeline)
+ {
entry.first = std::move(pipeline);
- if (g_ActiveConfig.bShaderCache)
- {
- auto cache_data = entry.first->GetCacheData();
- if (!cache_data.empty())
+ if (g_ActiveConfig.bShaderCache)
{
- SerializedGXPipelineUid disk_uid;
- SerializePipelineUid(config, disk_uid);
- m_gx_pipeline_disk_cache.Append(disk_uid, cache_data.data(),
- static_cast<u32>(cache_data.size()));
+ auto cache_data = entry.first->GetCacheData();
+ if (!cache_data.empty())
+ {
+ SerializedGXPipelineUid disk_uid;
+ SerializePipelineUid(config, disk_uid);
+ m_gx_pipeline_disk_cache.Append(disk_uid, cache_data.data(),
+ static_cast<u32>(cache_data.size()));
+ }
}
}
@@ -665,17 +667,19 @@ ShaderCache::InsertGXUberPipeline(const GXUberPipelineUid& config,
auto& entry = m_gx_uber_pipeline_cache[config];
entry.second = false;
if (!entry.first && pipeline)
+ {
entry.first = std::move(pipeline);
- if (g_ActiveConfig.bShaderCache)
- {
- auto cache_data = entry.first->GetCacheData();
- if (!cache_data.empty())
+ if (g_ActiveConfig.bShaderCache)
{
- SerializedGXUberPipelineUid disk_uid;
- SerializePipelineUid(config, disk_uid);
- m_gx_uber_pipeline_disk_cache.Append(disk_uid, cache_data.data(),
- static_cast<u32>(cache_data.size()));
+ auto cache_data = entry.first->GetCacheData();
+ if (!cache_data.empty())
+ {
+ SerializedGXUberPipelineUid disk_uid;
+ SerializePipelineUid(config, disk_uid);
+ m_gx_uber_pipeline_disk_cache.Append(disk_uid, cache_data.data(),
+ static_cast<u32>(cache_data.size()));
+ }
}
}