summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/ShaderCache.cpp
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2018-05-28 09:52:07 +0200
committerGitHub <noreply@github.com>2018-05-28 09:52:07 +0200
commitcddc2d52c22b42773bbb65a9255cceb90982f531 (patch)
treef8ae69202fcf8fe3d77f571ad2f98115392b0a3a /Source/Core/VideoCommon/ShaderCache.cpp
parent9e102e15843e6c28f27771fcaadb0ec5dcb7f65d (diff)
parent57976c947b26d59551ff53fcb1c264af14a0548a (diff)
Merge pull request #6965 from stenzek/d3d-feature-level-10
D3D: Don't emit uint outputs when logic op is unsupported
Diffstat (limited to 'Source/Core/VideoCommon/ShaderCache.cpp')
-rw-r--r--Source/Core/VideoCommon/ShaderCache.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/Source/Core/VideoCommon/ShaderCache.cpp b/Source/Core/VideoCommon/ShaderCache.cpp
index 6ab6f17fa5..13b1bfc0fc 100644
--- a/Source/Core/VideoCommon/ShaderCache.cpp
+++ b/Source/Core/VideoCommon/ShaderCache.cpp
@@ -456,12 +456,15 @@ std::optional<AbstractPipelineConfig> ShaderCache::GetGXPipelineConfig(const GXP
else
vs = InsertVertexShader(config.vs_uid, CompileVertexShader(config.vs_uid));
+ PixelShaderUid ps_uid = config.ps_uid;
+ ClearUnusedPixelShaderUidBits(m_api_type, m_host_config, &ps_uid);
+
const AbstractShader* ps;
- auto ps_iter = m_ps_cache.shader_map.find(config.ps_uid);
+ auto ps_iter = m_ps_cache.shader_map.find(ps_uid);
if (ps_iter != m_ps_cache.shader_map.end() && !ps_iter->second.pending)
ps = ps_iter->second.shader.get();
else
- ps = InsertPixelShader(config.ps_uid, CompilePixelShader(config.ps_uid));
+ ps = InsertPixelShader(ps_uid, CompilePixelShader(ps_uid));
if (!vs || !ps)
return {};
@@ -492,12 +495,15 @@ ShaderCache::GetGXUberPipelineConfig(const GXUberPipelineUid& config)
else
vs = InsertVertexUberShader(config.vs_uid, CompileVertexUberShader(config.vs_uid));
+ UberShader::PixelShaderUid ps_uid = config.ps_uid;
+ UberShader::ClearUnusedPixelShaderUidBits(m_api_type, m_host_config, &ps_uid);
+
const AbstractShader* ps;
- auto ps_iter = m_uber_ps_cache.shader_map.find(config.ps_uid);
+ auto ps_iter = m_uber_ps_cache.shader_map.find(ps_uid);
if (ps_iter != m_uber_ps_cache.shader_map.end() && !ps_iter->second.pending)
ps = ps_iter->second.shader.get();
else
- ps = InsertPixelUberShader(config.ps_uid, CompilePixelUberShader(config.ps_uid));
+ ps = InsertPixelUberShader(ps_uid, CompilePixelUberShader(ps_uid));
if (!vs || !ps)
return {};
@@ -802,10 +808,13 @@ void ShaderCache::QueuePipelineCompile(const GXPipelineUid& uid, u32 priority)
if (vs_it == shader_cache->m_vs_cache.shader_map.end())
shader_cache->QueueVertexShaderCompile(uid.vs_uid, priority);
- auto ps_it = shader_cache->m_ps_cache.shader_map.find(uid.ps_uid);
+ PixelShaderUid ps_uid = uid.ps_uid;
+ ClearUnusedPixelShaderUidBits(shader_cache->m_api_type, shader_cache->m_host_config, &ps_uid);
+
+ auto ps_it = shader_cache->m_ps_cache.shader_map.find(ps_uid);
stages_ready &= ps_it != shader_cache->m_ps_cache.shader_map.end() && !ps_it->second.pending;
if (ps_it == shader_cache->m_ps_cache.shader_map.end())
- shader_cache->QueuePixelShaderCompile(uid.ps_uid, priority);
+ shader_cache->QueuePixelShaderCompile(ps_uid, priority);
return stages_ready;
}
@@ -870,11 +879,15 @@ void ShaderCache::QueueUberPipelineCompile(const GXUberPipelineUid& uid, u32 pri
if (vs_it == shader_cache->m_uber_vs_cache.shader_map.end())
shader_cache->QueueVertexUberShaderCompile(uid.vs_uid, priority);
- auto ps_it = shader_cache->m_uber_ps_cache.shader_map.find(uid.ps_uid);
+ UberShader::PixelShaderUid ps_uid = uid.ps_uid;
+ UberShader::ClearUnusedPixelShaderUidBits(shader_cache->m_api_type,
+ shader_cache->m_host_config, &ps_uid);
+
+ auto ps_it = shader_cache->m_uber_ps_cache.shader_map.find(ps_uid);
stages_ready &=
ps_it != shader_cache->m_uber_ps_cache.shader_map.end() && !ps_it->second.pending;
if (ps_it == shader_cache->m_uber_ps_cache.shader_map.end())
- shader_cache->QueuePixelUberShaderCompile(uid.ps_uid, priority);
+ shader_cache->QueuePixelUberShaderCompile(ps_uid, priority);
return stages_ready;
}