From fa600b88b180bc3de4009c1ee771f2cc1a481730 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Mon, 30 Jun 2025 12:57:21 +0000 Subject: revert 91a662431cfe419bd46b6ca4ed298a4ba70d7820 (#240) revert [Texture_cache] Better memory handling for devices with lower memory allocations (#233) Means games like Minecraft Dungeons, Sea of Stars, Luigi Mansion 2, Astroneer, Alan Wake, etc are now playable. It also cleans up the recent abi.cpp and bindless texture commits a bit. Everything is in #ifdef ANDROID - The biggest change is CACHING_PAGEBITS = 12. Without that the way the buffercache grows and joins buffers can cause Android to run out of memory (as you end up with just one big buffer that needs to be copied every time it grows) Also patches up ffmpeg issues. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/233 Co-authored-by: JPikachu Co-committed-by: JPikachu Had showed some regressions on devices with higher specifications, will be refined to return as a toggle in a later commit. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/240 --- src/video_core/host1x/ffmpeg/ffmpeg.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'src/video_core/host1x/ffmpeg/ffmpeg.cpp') diff --git a/src/video_core/host1x/ffmpeg/ffmpeg.cpp b/src/video_core/host1x/ffmpeg/ffmpeg.cpp index 4bca9ab7b1..ffde231aee 100644 --- a/src/video_core/host1x/ffmpeg/ffmpeg.cpp +++ b/src/video_core/host1x/ffmpeg/ffmpeg.cpp @@ -237,23 +237,16 @@ std::shared_ptr DecoderContext::ReceiveFrame() { if (m_codec_context->hw_device_ctx) { // If we have a hardware context, make a separate frame here to receive the // hardware result before sending it to the output. - std::shared_ptr intermediate_frame = std::make_shared(); + Frame intermediate_frame; - if (!receive(intermediate_frame->GetFrame())) { + if (!receive(intermediate_frame.GetFrame())) { return {}; } - const auto fmt = intermediate_frame->GetPixelFormat(); - const auto desc = av_pix_fmt_desc_get(fmt); - if (desc && (desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { - m_temp_frame->SetFormat(PreferredGpuFormat); - if (int ret = av_hwframe_transfer_data(m_temp_frame->GetFrame(), intermediate_frame->GetFrame(), 0); ret < 0) { - LOG_ERROR(HW_GPU, "av_hwframe_transfer_data error: {}", AVError(ret)); - return {}; - } - } - else { - m_temp_frame = std::move(intermediate_frame); + m_temp_frame->SetFormat(PreferredGpuFormat); + if (int ret = av_hwframe_transfer_data(m_temp_frame->GetFrame(), intermediate_frame.GetFrame(), 0); ret < 0) { + LOG_ERROR(HW_GPU, "av_hwframe_transfer_data error: {}", AVError(ret)); + return {}; } } else { // Otherwise, decode the frame as normal. -- cgit v1.2.3