mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-06-15 01:47:58 -05:00
shader_jit_x64: Clear cache after code space fills up.
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user