Browse Source

[TEST] Hunting down recursive mutex 4

tiled-gpu
CamilleLaVey 2 weeks ago
parent
commit
84490a7d6f
  1. 2
      src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
  2. 2
      src/android/app/src/main/jni/android_settings.h
  3. 2
      src/video_core/buffer_cache/buffer_cache_base.h
  4. 2
      src/video_core/renderer_opengl/gl_rasterizer.cpp
  5. 8
      src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
  6. 2
      src/video_core/renderer_vulkan/vk_rasterizer.cpp

2
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt

@ -594,7 +594,7 @@ abstract class SettingsItem(
IntSetting.ANDROID_PIPELINE_WORKERS, IntSetting.ANDROID_PIPELINE_WORKERS,
titleId = R.string.pipeline_worker_cores, titleId = R.string.pipeline_worker_cores,
descriptionId = R.string.pipeline_worker_cores_description, descriptionId = R.string.pipeline_worker_cores_description,
min = 4,
min = 1,
max = 8, max = 8,
units = "cores" units = "cores"
) )

2
src/android/app/src/main/jni/android_settings.h

@ -147,7 +147,7 @@ namespace AndroidSettings {
&show_performance_overlay}; &show_performance_overlay};
Settings::Setting<s32> pipeline_worker_count{linkage, 4, "pipeline_worker_count",
Settings::Setting<s32> pipeline_worker_count{linkage, 0, "pipeline_worker_count",
Settings::Category::Android, Settings::Category::Android,
Settings::Specialization::Default, Settings::Specialization::Default,
true, true,

2
src/video_core/buffer_cache/buffer_cache_base.h

@ -321,7 +321,7 @@ public:
} while (channel_state->has_deleted_buffers); } while (channel_state->has_deleted_buffers);
} }
std::mutex mutex;
std::recursive_mutex mutex;
Runtime& runtime; Runtime& runtime;
bool any_buffer_uploaded = false; bool any_buffer_uploaded = false;

2
src/video_core/renderer_opengl/gl_rasterizer.cpp

@ -716,7 +716,7 @@ void RasterizerOpenGL::AccelerateInlineToMemory(GPUVAddr address, size_t copy_si
} }
gpu_memory->WriteBlockUnsafe(address, memory.data(), copy_size); gpu_memory->WriteBlockUnsafe(address, memory.data(), copy_size);
{ {
std::scoped_lock lock{buffer_cache.mutex};
std::unique_lock<std::recursive_mutex> lock{buffer_cache.mutex};
if (!buffer_cache.InlineMemory(*cpu_addr, copy_size, memory)) { if (!buffer_cache.InlineMemory(*cpu_addr, copy_size, memory)) {
buffer_cache.WriteMemory(*cpu_addr, copy_size); buffer_cache.WriteMemory(*cpu_addr, copy_size);
} }

8
src/video_core/renderer_vulkan/vk_pipeline_cache.cpp

@ -305,12 +305,10 @@ size_t GetTotalPipelineWorkers() {
std::max<size_t>(static_cast<size_t>(std::thread::hardware_concurrency()), 2ULL) - 1ULL; std::max<size_t>(static_cast<size_t>(std::thread::hardware_concurrency()), 2ULL) - 1ULL;
#ifdef __ANDROID__ #ifdef __ANDROID__
const int configured = AndroidSettings::values.pipeline_worker_count.GetValue(); const int configured = AndroidSettings::values.pipeline_worker_count.GetValue();
const int clamped = std::clamp(configured, 4, 8);
const size_t desired = static_cast<size_t>(clamped);
if (desired == 0) {
return 1ULL;
if (configured <= 0) {
return max_core_threads;
} }
return std::min(max_core_threads, desired);
return std::min<size_t>(max_core_threads, static_cast<size_t>(configured));
#else #else
return max_core_threads; return max_core_threads;
#endif #endif

2
src/video_core/renderer_vulkan/vk_rasterizer.cpp

@ -925,7 +925,7 @@ void RasterizerVulkan::AccelerateInlineToMemory(GPUVAddr address, size_t copy_si
} }
gpu_memory->WriteBlockUnsafe(address, memory.data(), copy_size); gpu_memory->WriteBlockUnsafe(address, memory.data(), copy_size);
{ {
std::scoped_lock lock{buffer_cache.mutex};
std::unique_lock<std::recursive_mutex> lock{buffer_cache.mutex};
if (!buffer_cache.InlineMemory(*cpu_addr, copy_size, memory)) { if (!buffer_cache.InlineMemory(*cpu_addr, copy_size, memory)) {
buffer_cache.WriteMemory(*cpu_addr, copy_size); buffer_cache.WriteMemory(*cpu_addr, copy_size);
} }

Loading…
Cancel
Save