From c9d10de644078a29e2310791ee221f3bc916e923 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sun, 20 Mar 2016 00:37:05 -0400 Subject: shader_jit_x64: Allocate each program independently and persist for emu session. --- src/video_core/shader/shader.cpp | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) (limited to 'src/video_core/shader/shader.cpp') diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index 78d295c76..e17368a4a 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -28,15 +28,8 @@ namespace Pica { namespace Shader { #ifdef ARCHITECTURE_x86_64 -static std::unordered_map 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"); -} +static std::unordered_map> shader_map; +static const JitCompiler* jit_shader; #endif // ARCHITECTURE_x86_64 void Setup(UnitState& state) { @@ -48,16 +41,12 @@ void Setup(UnitState& state) { auto iter = shader_map.find(cache_key); if (iter != shader_map.end()) { - jit_shader = iter->second; + jit_shader = iter->second.get(); } 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); + auto shader = std::make_unique(); + shader->Compile(); + jit_shader = shader.get(); + shader_map[cache_key] = std::move(shader); } } #endif // ARCHITECTURE_x86_64 @@ -65,7 +54,7 @@ void Setup(UnitState& state) { void Shutdown() { #ifdef ARCHITECTURE_x86_64 - ClearCache(); + shader_map.clear(); #endif // ARCHITECTURE_x86_64 } @@ -109,7 +98,7 @@ OutputVertex Run(UnitState& state, const InputVertex& input, int num_attr #ifdef ARCHITECTURE_x86_64 if (VideoCore::g_shader_jit_enabled) - jit_shader(&state.registers); + jit_shader->Run(&state.registers); else RunInterpreter(state); #else -- cgit v1.2.3 From a5a74eb121e0586706c3196d450c088280f996a5 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sat, 26 Mar 2016 21:02:15 -0400 Subject: shader_jit_x64: Specify shader main offset at runtime. --- src/video_core/shader/shader.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/video_core/shader/shader.cpp') diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index e17368a4a..b35413488 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -36,8 +36,7 @@ void Setup(UnitState& state) { #ifdef ARCHITECTURE_x86_64 if (VideoCore::g_shader_jit_enabled) { u64 cache_key = (Common::ComputeHash64(&g_state.vs.program_code, sizeof(g_state.vs.program_code)) ^ - Common::ComputeHash64(&g_state.vs.swizzle_data, sizeof(g_state.vs.swizzle_data)) ^ - g_state.regs.vs.main_offset); + Common::ComputeHash64(&g_state.vs.swizzle_data, sizeof(g_state.vs.swizzle_data))); auto iter = shader_map.find(cache_key); if (iter != shader_map.end()) { @@ -98,7 +97,7 @@ OutputVertex Run(UnitState& state, const InputVertex& input, int num_attr #ifdef ARCHITECTURE_x86_64 if (VideoCore::g_shader_jit_enabled) - jit_shader->Run(&state.registers); + jit_shader->Run(&state.registers, g_state.regs.vs.main_offset); else RunInterpreter(state); #else -- cgit v1.2.3 From ffcf7ecee9f0b2843783e3678edaffbe1dda8ca2 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 1 Apr 2016 23:33:03 -0400 Subject: shader: Remove unused 'state' argument from 'Setup' function. --- src/video_core/shader/shader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/video_core/shader/shader.cpp') diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index b35413488..5214864ec 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -32,7 +32,7 @@ static std::unordered_map> shader_map; static const JitCompiler* jit_shader; #endif // ARCHITECTURE_x86_64 -void Setup(UnitState& state) { +void Setup() { #ifdef ARCHITECTURE_x86_64 if (VideoCore::g_shader_jit_enabled) { u64 cache_key = (Common::ComputeHash64(&g_state.vs.program_code, sizeof(g_state.vs.program_code)) ^ -- cgit v1.2.3 From 3f623b2561eb829b5c9c3855cb24a612b12f7d6f Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 12 Apr 2016 23:34:03 -0400 Subject: shader_jit_x64.cpp: Rename JitCompiler to JitShader. --- src/video_core/shader/shader.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/video_core/shader/shader.cpp') diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index 5214864ec..75301accd 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -28,8 +28,8 @@ namespace Pica { namespace Shader { #ifdef ARCHITECTURE_x86_64 -static std::unordered_map> shader_map; -static const JitCompiler* jit_shader; +static std::unordered_map> shader_map; +static const JitShader* jit_shader; #endif // ARCHITECTURE_x86_64 void Setup() { @@ -42,7 +42,7 @@ void Setup() { if (iter != shader_map.end()) { jit_shader = iter->second.get(); } else { - auto shader = std::make_unique(); + auto shader = std::make_unique(); shader->Compile(); jit_shader = shader.get(); shader_map[cache_key] = std::move(shader); -- cgit v1.2.3