diff options
author | bunnei <bunneidev@gmail.com> | 2016-03-16 18:18:51 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2016-03-16 18:18:51 +0100 |
commit | 96cafbe4cc4a1d5cae668a6ba174bead35e2a810 (patch) | |
tree | 6d6c47cec0883c62c5cc38651e5a0491170d9a9a /src/video_core/shader/shader.cpp | |
parent | Merge pull request #1479 from JayFoxRox/mad-encoding (diff) | |
parent | shader_jit_x64: Clear cache after code space fills up. (diff) | |
download | yuzu-96cafbe4cc4a1d5cae668a6ba174bead35e2a810.tar yuzu-96cafbe4cc4a1d5cae668a6ba174bead35e2a810.tar.gz yuzu-96cafbe4cc4a1d5cae668a6ba174bead35e2a810.tar.bz2 yuzu-96cafbe4cc4a1d5cae668a6ba174bead35e2a810.tar.lz yuzu-96cafbe4cc4a1d5cae668a6ba174bead35e2a810.tar.xz yuzu-96cafbe4cc4a1d5cae668a6ba174bead35e2a810.tar.zst yuzu-96cafbe4cc4a1d5cae668a6ba174bead35e2a810.zip |
Diffstat (limited to 'src/video_core/shader/shader.cpp')
-rw-r--r-- | src/video_core/shader/shader.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index 5e8930476..509558fc0 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -32,6 +32,12 @@ namespace Shader { static std::unordered_map<u64, CompiledShader*> shader_map; static JitCompiler jit; static CompiledShader* jit_shader; + +static void ClearCache() { + shader_map.clear(); + jit.Clear(); + LOG_INFO(HW_GPU, "Shader JIT cache cleared"); +} #endif // ARCHITECTURE_x86_64 void Setup(UnitState<false>& state) { @@ -45,6 +51,12 @@ void Setup(UnitState<false>& state) { if (iter != shader_map.end()) { jit_shader = iter->second; } else { + // Check if remaining JIT code space is enough for at least one more (massive) shader + if (jit.GetSpaceLeft() < jit_shader_size) { + // If not, clear the cache of all previously compiled shaders + ClearCache(); + } + jit_shader = jit.Compile(); shader_map.emplace(cache_key, jit_shader); } @@ -54,7 +66,7 @@ void Setup(UnitState<false>& state) { void Shutdown() { #ifdef ARCHITECTURE_x86_64 - shader_map.clear(); + ClearCache(); #endif // ARCHITECTURE_x86_64 } @@ -135,7 +147,7 @@ OutputVertex Run(UnitState<false>& state, const InputVertex& input, int num_attr std::fmin(std::fabs(ret.color[i].ToFloat32()), 1.0f)); } - LOG_TRACE(Render_Software, "Output vertex: pos(%.2f, %.2f, %.2f, %.2f), quat(%.2f, %.2f, %.2f, %.2f), " + LOG_TRACE(HW_GPU, "Output vertex: pos(%.2f, %.2f, %.2f, %.2f), quat(%.2f, %.2f, %.2f, %.2f), " "col(%.2f, %.2f, %.2f, %.2f), tc0(%.2f, %.2f), view(%.2f, %.2f, %.2f)", ret.pos.x.ToFloat32(), ret.pos.y.ToFloat32(), ret.pos.z.ToFloat32(), ret.pos.w.ToFloat32(), ret.quat.x.ToFloat32(), ret.quat.y.ToFloat32(), ret.quat.z.ToFloat32(), ret.quat.w.ToFloat32(), |