From fbc7ad6788d772c76613692a6eba390739a6a83d Mon Sep 17 00:00:00 2001 From: Megamouse Date: Tue, 21 Jan 2025 05:34:16 +0100 Subject: [PATCH] cellGem: move some locks around wait loops --- rpcs3/Emu/Cell/Modules/cellGem.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/cellGem.cpp b/rpcs3/Emu/Cell/Modules/cellGem.cpp index 28c5c3450b..8475b57b04 100644 --- a/rpcs3/Emu/Cell/Modules/cellGem.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGem.cpp @@ -2440,7 +2440,7 @@ error_code cellGemEnd(ppu_thread& ppu) auto& gem = g_fxo->get(); - std::scoped_lock lock(gem.mtx); + std::unique_lock lock(gem.mtx); if (gem.state.compare_and_swap_test(1, 0)) { @@ -2452,6 +2452,8 @@ error_code cellGemEnd(ppu_thread& ppu) return CELL_OK; } + lock.unlock(); + auto& tracker = g_fxo->get>(); if (!tracker.wait_for_tracker_result(ppu)) { @@ -2488,7 +2490,7 @@ error_code cellGemFilterState(u32 gem_num, u32 enable) error_code cellGemForceRGB(u32 gem_num, f32 r, f32 g, f32 b) { - cellGem.todo("cellGemForceRGB(gem_num=%d, r=%f, g=%f, b=%f)", gem_num, r, g, b); + cellGem.warning("cellGemForceRGB(gem_num=%d, r=%f, g=%f, b=%f)", gem_num, r, g, b); auto& gem = g_fxo->get(); @@ -3557,8 +3559,6 @@ error_code cellGemUpdateFinish(ppu_thread& ppu) return CELL_GEM_ERROR_UNINITIALIZED; } - std::scoped_lock lock(gem.mtx); - if (!gem.updating) { return CELL_GEM_ERROR_UPDATE_NOT_STARTED; @@ -3570,6 +3570,8 @@ error_code cellGemUpdateFinish(ppu_thread& ppu) return {}; } + std::scoped_lock lock(gem.mtx); + gem.updating = false; if (!gem.camera_frame)