diff --git a/src/android/app/src/main/AndroidManifest.xml b/src/android/app/src/main/AndroidManifest.xml index 51a4705f52..7e7609e200 100644 --- a/src/android/app/src/main/AndroidManifest.xml +++ b/src/android/app/src/main/AndroidManifest.xml @@ -44,6 +44,7 @@ SPDX-License-Identifier: GPL-3.0-or-later <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> + <category android:name="android.intent.category.GAME" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> </intent-filter> </activity> diff --git a/src/android/app/src/main/res/values-ar/strings.xml b/src/android/app/src/main/res/values-ar/strings.xml index e8cbd73821..3b97f9959b 100644 --- a/src/android/app/src/main/res/values-ar/strings.xml +++ b/src/android/app/src/main/res/values-ar/strings.xml @@ -87,6 +87,7 @@ <string name="shader_backend">خلفية Shader</string> <string name="shader_backend_description">اختيار طريقة ترجمة Shaders</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- محاكاة NVDEC --> diff --git a/src/android/app/src/main/res/values-ckb/strings.xml b/src/android/app/src/main/res/values-ckb/strings.xml index b82b3f56b1..2cedecd768 100644 --- a/src/android/app/src/main/res/values-ckb/strings.xml +++ b/src/android/app/src/main/res/values-ckb/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">شادەر باکند</string> <string name="shader_backend_description">هەڵبژاردنی ڕێگای پێکهێنانی شادەر</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- ئیمولەیشنی NVDEC --> diff --git a/src/android/app/src/main/res/values-cs/strings.xml b/src/android/app/src/main/res/values-cs/strings.xml index 9cdbf53d32..1042ab107e 100644 --- a/src/android/app/src/main/res/values-cs/strings.xml +++ b/src/android/app/src/main/res/values-cs/strings.xml @@ -87,6 +87,7 @@ <string name="shader_backend">Backend shaderů</string> <string name="shader_backend_description">Způsob kompilace shaderů</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Emulace NVDEC --> diff --git a/src/android/app/src/main/res/values-de/strings.xml b/src/android/app/src/main/res/values-de/strings.xml index 872df8ad80..0947ed46ca 100644 --- a/src/android/app/src/main/res/values-de/strings.xml +++ b/src/android/app/src/main/res/values-de/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Shader-Backend</string> <string name="shader_backend_description">Methode zur Shader-Kompilierung</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC Emulation --> diff --git a/src/android/app/src/main/res/values-es/strings.xml b/src/android/app/src/main/res/values-es/strings.xml index 2305234df3..9c01fa1bd2 100644 --- a/src/android/app/src/main/res/values-es/strings.xml +++ b/src/android/app/src/main/res/values-es/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend de shaders</string> <string name="shader_backend_description">Elegir cómo se compilan shaders</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Emulación NVDEC --> diff --git a/src/android/app/src/main/res/values-fa/strings.xml b/src/android/app/src/main/res/values-fa/strings.xml index 6cf7b35bf5..6d0fc6bc36 100644 --- a/src/android/app/src/main/res/values-fa/strings.xml +++ b/src/android/app/src/main/res/values-fa/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">بکاند شیدر</string> <string name="shader_backend_description">انتخاب روش کامپایل و ترجمه شیدرها</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- شبیهسازی NVDEC --> diff --git a/src/android/app/src/main/res/values-fr/strings.xml b/src/android/app/src/main/res/values-fr/strings.xml index f13945e77a..fe6d2d006b 100644 --- a/src/android/app/src/main/res/values-fr/strings.xml +++ b/src/android/app/src/main/res/values-fr/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend shader</string> <string name="shader_backend_description">Méthode de compilation</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC --> diff --git a/src/android/app/src/main/res/values-he/strings.xml b/src/android/app/src/main/res/values-he/strings.xml index 3b6a09266d..fc4f684a1c 100644 --- a/src/android/app/src/main/res/values-he/strings.xml +++ b/src/android/app/src/main/res/values-he/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">מנוע שיידרים</string> <string name="shader_backend_description">בחר כיצד לקמפל שיידרים</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- אמולציית NVDEC --> diff --git a/src/android/app/src/main/res/values-hu/strings.xml b/src/android/app/src/main/res/values-hu/strings.xml index bab82f1fa5..05d7304072 100644 --- a/src/android/app/src/main/res/values-hu/strings.xml +++ b/src/android/app/src/main/res/values-hu/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Shader backend</string> <string name="shader_backend_description">Shaderek fordításának módja</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC Emuláció --> diff --git a/src/android/app/src/main/res/values-id/strings.xml b/src/android/app/src/main/res/values-id/strings.xml index b2442010c8..2f9d7b2fed 100644 --- a/src/android/app/src/main/res/values-id/strings.xml +++ b/src/android/app/src/main/res/values-id/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend Shader</string> <string name="shader_backend_description">Pilih cara shader dikompilasi dan diterjemahkan untuk GPU Anda.</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Emulasi NVDEC --> diff --git a/src/android/app/src/main/res/values-it/strings.xml b/src/android/app/src/main/res/values-it/strings.xml index bcd6c3ae4f..b41a3495ba 100644 --- a/src/android/app/src/main/res/values-it/strings.xml +++ b/src/android/app/src/main/res/values-it/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend shader</string> <string name="shader_backend_description">Scegli come compilare gli shader</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Emulazione NVDEC --> diff --git a/src/android/app/src/main/res/values-ja/strings.xml b/src/android/app/src/main/res/values-ja/strings.xml index 3ab0e79c10..c17e13c4da 100644 --- a/src/android/app/src/main/res/values-ja/strings.xml +++ b/src/android/app/src/main/res/values-ja/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">シェーダーバックエンド</string> <string name="shader_backend_description">シェーダーのコンパイル方法</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC Emulation --> diff --git a/src/android/app/src/main/res/values-ko/strings.xml b/src/android/app/src/main/res/values-ko/strings.xml index 54df91f2a7..b60949e24c 100644 --- a/src/android/app/src/main/res/values-ko/strings.xml +++ b/src/android/app/src/main/res/values-ko/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">셰이더 백엔드</string> <string name="shader_backend_description">셰이더 컴파일 방식 선택</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC Emulation --> diff --git a/src/android/app/src/main/res/values-nb/strings.xml b/src/android/app/src/main/res/values-nb/strings.xml index 1852e4c55c..b9cceeb384 100644 --- a/src/android/app/src/main/res/values-nb/strings.xml +++ b/src/android/app/src/main/res/values-nb/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Shader-backend</string> <string name="shader_backend_description">Velg hvordan shadere kompileres</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC-emulering --> diff --git a/src/android/app/src/main/res/values-pl/strings.xml b/src/android/app/src/main/res/values-pl/strings.xml index 679ca30114..d6b0ad5390 100644 --- a/src/android/app/src/main/res/values-pl/strings.xml +++ b/src/android/app/src/main/res/values-pl/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend shaderów</string> <string name="shader_backend_description">Wybierz metodę kompilacji shaderów.</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Emulacja NVDEC --> diff --git a/src/android/app/src/main/res/values-pt-rBR/strings.xml b/src/android/app/src/main/res/values-pt-rBR/strings.xml index bf24f1b367..0584f3cfed 100644 --- a/src/android/app/src/main/res/values-pt-rBR/strings.xml +++ b/src/android/app/src/main/res/values-pt-rBR/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend de shader</string> <string name="shader_backend_description">Define como shaders são compilados</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Emulação NVDEC --> diff --git a/src/android/app/src/main/res/values-pt-rPT/strings.xml b/src/android/app/src/main/res/values-pt-rPT/strings.xml index 3f3f840e0f..81f83d2a97 100644 --- a/src/android/app/src/main/res/values-pt-rPT/strings.xml +++ b/src/android/app/src/main/res/values-pt-rPT/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend de Shader</string> <string name="shader_backend_description">Método de compilação de shaders.</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Emulação NVDEC --> diff --git a/src/android/app/src/main/res/values-ru/strings.xml b/src/android/app/src/main/res/values-ru/strings.xml index f7e5487e8f..92616d495d 100644 --- a/src/android/app/src/main/res/values-ru/strings.xml +++ b/src/android/app/src/main/res/values-ru/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Шейдерный бэкенд</string> <string name="shader_backend_description">Метод компиляции шейдеров</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC Emulation --> diff --git a/src/android/app/src/main/res/values-uk/strings.xml b/src/android/app/src/main/res/values-uk/strings.xml index b536c81e29..06bbb951eb 100644 --- a/src/android/app/src/main/res/values-uk/strings.xml +++ b/src/android/app/src/main/res/values-uk/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Вершинний шейдер</string> <string name="shader_backend_description">Спосіб компіляції шейдерів</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC Emulation --> diff --git a/src/android/app/src/main/res/values-vi/strings.xml b/src/android/app/src/main/res/values-vi/strings.xml index a1d4318d79..dde8f656c1 100644 --- a/src/android/app/src/main/res/values-vi/strings.xml +++ b/src/android/app/src/main/res/values-vi/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">Backend Shader</string> <string name="shader_backend_description">Chọn cách biên dịch shader</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- Giả lập NVDEC --> diff --git a/src/android/app/src/main/res/values-zh-rCN/strings.xml b/src/android/app/src/main/res/values-zh-rCN/strings.xml index 0e69ca0c06..9a1386f19f 100644 --- a/src/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/src/android/app/src/main/res/values-zh-rCN/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">着色器后端</string> <string name="shader_backend_description">选择着色器编译方式</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC模拟 --> diff --git a/src/android/app/src/main/res/values-zh-rTW/strings.xml b/src/android/app/src/main/res/values-zh-rTW/strings.xml index 6449d2d554..115096fdcd 100644 --- a/src/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/src/android/app/src/main/res/values-zh-rTW/strings.xml @@ -88,6 +88,7 @@ <string name="shader_backend">著色器後端</string> <string name="shader_backend_description">選擇著色器的編譯與轉譯方式</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC模擬 --> diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index adaa67415d..0fd6867632 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -88,11 +88,13 @@ <string-array name="rendererShaderNames"> <item>@string/shader_backend_glsl</item> <item>@string/shader_backend_spirv</item> + <item>@string/shader_backend_glasm</item> </string-array> <integer-array name="rendererShaderValues"> <item>0</item> <item>1</item> + <item>2</item> </integer-array> <!-- VRAM USAGE MODE CHOICES --> diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 427b2890ad..043f89d3d2 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -65,6 +65,7 @@ <string name="shader_backend">Shader Backend</string> <string name="shader_backend_description">Choose how shaders are compiled and translated for your GPU.</string> <string name="shader_backend_glsl">GLSL</string> + <string name="shader_backend_glasm">GLASM</string> <string name="shader_backend_spirv">SPIR-V</string> <!-- NVDEC Emulation --> diff --git a/src/common/settings.h b/src/common/settings.h index 92e02d9887..52c0a199c2 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -196,11 +196,11 @@ struct Values { SwitchableSetting<MemoryLayout, true> memory_layout_mode{linkage, MemoryLayout::Memory_4Gb, MemoryLayout::Memory_4Gb, - MemoryLayout::Memory_8Gb, + MemoryLayout::Memory_12Gb, "memory_layout_mode", Category::Core, Specialization::Default, - false}; + true}; SwitchableSetting<bool> use_speed_limit{ linkage, true, "use_speed_limit", Category::Core, Specialization::Paired, true, true}; SwitchableSetting<u16, true> speed_limit{linkage, @@ -447,9 +447,9 @@ struct Values { SwitchableSetting<u8, true> dyna_state{linkage, #ifdef ANDROID - 0, + 2, #else - 1, + 2, #endif 0, 2, @@ -457,9 +457,9 @@ struct Values { Category::RendererExtensions, Specialization::Scalar}; - SwitchableSetting<bool> dyna_state3{linkage, false, "dyna_state3", Category::RendererExtensions}; - SwitchableSetting<bool> provoking_vertex{linkage, false, "provoking_vertex", Category::RendererExtensions}; - SwitchableSetting<bool> descriptor_indexing{linkage, false, "descriptor_indexing", Category::RendererExtensions}; + SwitchableSetting<bool> dyna_state3{linkage, true, "dyna_state3", Category::RendererExtensions}; + SwitchableSetting<bool> provoking_vertex{linkage, true, "provoking_vertex", Category::RendererExtensions}; + SwitchableSetting<bool> descriptor_indexing{linkage, true, "descriptor_indexing", Category::RendererExtensions}; Setting<bool> renderer_debug{linkage, false, "debug", Category::RendererDebug}; Setting<bool> renderer_shader_feedback{linkage, false, "shader_feedback", diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index 75189e60d7..43abe150f8 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -134,7 +134,7 @@ ENUM(CpuBackend, Dynarmic, Nce); ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid); -ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb); +ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb, Memory_10Gb, Memory_12Gb); ENUM(ConfirmStop, Ask_Always, Ask_Based_On_Game, Ask_Never); diff --git a/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp b/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp index 37fa39a734..f62f3e4767 100644 --- a/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp +++ b/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp @@ -48,6 +48,10 @@ u32 GetMemorySizeForInit() { return Smc::MemorySize_6GB; case Settings::MemoryLayout::Memory_8Gb: return Smc::MemorySize_8GB; + case Settings::MemoryLayout::Memory_10Gb: + return Smc::MemorySize_10GB; + case Settings::MemoryLayout::Memory_12Gb: + return Smc::MemorySize_12GB; } return Smc::MemorySize_4GB; } @@ -60,6 +64,10 @@ Smc::MemoryArrangement GetMemoryArrangeForInit() { return Smc::MemoryArrangement_6GB; case Settings::MemoryLayout::Memory_8Gb: return Smc::MemoryArrangement_8GB; + case Settings::MemoryLayout::Memory_10Gb: + return Smc::MemoryArrangement_10GB; + case Settings::MemoryLayout::Memory_12Gb: + return Smc::MemoryArrangement_12GB; } return Smc::MemoryArrangement_4GB; } @@ -79,6 +87,10 @@ size_t KSystemControl::Init::GetIntendedMemorySize() { return 6_GiB; case Smc::MemorySize_8GB: return 8_GiB; + case Smc::MemorySize_10GB: + return 10_GiB; + case Smc::MemorySize_12GB: + return 12_GiB; } } @@ -114,6 +126,10 @@ std::size_t KSystemControl::Init::GetApplicationPoolSize() { case Smc::MemoryArrangement_8GB: // Real kernel sets this to 4916_MiB. We are not debugging applets. return 6547_MiB; + case Smc::MemoryArrangement_10GB: + return 8178_MiB; + case Smc::MemoryArrangement_12GB: + return 9809_MiB; } }(); @@ -139,6 +155,10 @@ size_t KSystemControl::Init::GetAppletPoolSize() { case Smc::MemoryArrangement_8GB: //! Real kernel sets this to 2193_MiB. We are not debugging applets. return 562_MiB; + case Smc::MemoryArrangement_10GB: + return 562_MiB; + case Smc::MemoryArrangement_12GB: + return 562_MiB; } }(); diff --git a/src/core/hle/kernel/board/nintendo/nx/secure_monitor.h b/src/core/hle/kernel/board/nintendo/nx/secure_monitor.h index b0e4123f08..ffec06f2d5 100644 --- a/src/core/hle/kernel/board/nintendo/nx/secure_monitor.h +++ b/src/core/hle/kernel/board/nintendo/nx/secure_monitor.h @@ -9,6 +9,8 @@ enum MemorySize { MemorySize_4GB = 0, MemorySize_6GB = 1, MemorySize_8GB = 2, + MemorySize_10GB = 3, + MemorySize_12GB = 4, }; enum MemoryArrangement { @@ -18,6 +20,8 @@ enum MemoryArrangement { MemoryArrangement_6GB = 3, MemoryArrangement_6GBForAppletDev = 4, MemoryArrangement_8GB = 5, + MemoryArrangement_10GB = 6, + MemoryArrangement_12GB = 7, }; } // namespace Kernel::Board::Nintendo::Nx::Smc diff --git a/src/video_core/host1x/ffmpeg/ffmpeg.cpp b/src/video_core/host1x/ffmpeg/ffmpeg.cpp index 7e955223db..60e9f121e2 100644 --- a/src/video_core/host1x/ffmpeg/ffmpeg.cpp +++ b/src/video_core/host1x/ffmpeg/ffmpeg.cpp @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +// SPDX-FileCopyrightText: Copyright 2025 eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + #include "common/assert.h" #include "common/logging/log.h" #include "common/scope_exit.h" @@ -218,6 +224,166 @@ bool DecoderContext::OpenContext(const Decoder& decoder) { return true; } +// Nasty but allows linux builds to pass. +// Requires double checks when FFMPEG gets updated. +// Hopefully a future FFMPEG update will all and expose a solution in the public API. +namespace { + +typedef struct FFCodecDefault { + const char* key; + const char* value; +} FFCodecDefault; + +typedef struct FFCodec { + /** + * The public AVCodec. See codec.h for it. + */ + AVCodec p; + + /** + * Internal codec capabilities FF_CODEC_CAP_*. + */ + unsigned caps_internal : 29; + + /** + * This field determines the type of the codec (decoder/encoder) + * and also the exact callback cb implemented by the codec. + * cb_type uses enum FFCodecType values. + */ + unsigned cb_type : 3; + + int priv_data_size; + /** + * @name Frame-level threading support functions + * @{ + */ + /** + * Copy necessary context variables from a previous thread context to the current one. + * If not defined, the next thread will start automatically; otherwise, the codec + * must call ff_thread_finish_setup(). + * + * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. + */ + int (*update_thread_context)(struct AVCodecContext* dst, const struct AVCodecContext* src); + + /** + * Copy variables back to the user-facing context + */ + int (*update_thread_context_for_user)(struct AVCodecContext* dst, + const struct AVCodecContext* src); + /** @} */ + + /** + * Private codec-specific defaults. + */ + const FFCodecDefault* defaults; + + /** + * Initialize codec static data, called from av_codec_iterate(). + * + * This is not intended for time consuming operations as it is + * run for every codec regardless of that codec being used. + */ + void (*init_static_data)(struct FFCodec* codec); + + int (*init)(struct AVCodecContext*); + + union { + /** + * Decode to an AVFrame. + * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE. + * + * @param avctx codec context + * @param[out] frame AVFrame for output + * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that + * a non-empty frame was returned in frame. + * @param[in] avpkt AVPacket containing the data to be decoded + * @return amount of bytes read from the packet on success, + * negative error code on failure + */ + int (*decode)(struct AVCodecContext* avctx, struct AVFrame* frame, int* got_frame_ptr, + struct AVPacket* avpkt); + /** + * Decode subtitle data to an AVSubtitle. + * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE_SUB. + * + * Apart from that this is like the decode callback. + */ + int (*decode_sub)(struct AVCodecContext* avctx, struct AVSubtitle* sub, int* got_frame_ptr, + const struct AVPacket* avpkt); + /** + * Decode API with decoupled packet/frame dataflow. + * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_FRAME. + * + * This function is called to get one output frame. It should call + * ff_decode_get_packet() to obtain input data. + */ + int (*receive_frame)(struct AVCodecContext* avctx, struct AVFrame* frame); + /** + * Encode data to an AVPacket. + * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE + * + * @param avctx codec context + * @param[out] avpkt output AVPacket + * @param[in] frame AVFrame containing the input to be encoded + * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a + * non-empty packet was returned in avpkt. + * @return 0 on success, negative error code on failure + */ + int (*encode)(struct AVCodecContext* avctx, struct AVPacket* avpkt, + const struct AVFrame* frame, int* got_packet_ptr); + /** + * Encode subtitles to a raw buffer. + * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE_SUB. + */ + int (*encode_sub)(struct AVCodecContext* avctx, uint8_t* buf, int buf_size, + const struct AVSubtitle* sub); + /** + * Encode API with decoupled frame/packet dataflow. + * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_PACKET. + * + * This function is called to get one output packet. + * It should call ff_encode_get_frame() to obtain input data. + */ + int (*receive_packet)(struct AVCodecContext* avctx, struct AVPacket* avpkt); + } cb; + + int (*close)(struct AVCodecContext*); + + /** + * Flush buffers. + * Will be called when seeking + */ + void (*flush)(struct AVCodecContext*); + + /** + * Decoding only, a comma-separated list of bitstream filters to apply to + * packets before decoding. + */ + const char* bsfs; + + /** + * Array of pointers to hardware configurations supported by the codec, + * or NULL if no hardware supported. The array is terminated by a NULL + * pointer. + * + * The user can only access this field via avcodec_get_hw_config(). + */ + const struct AVCodecHWConfigInternal* const* hw_configs; + + /** + * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. + */ + const uint32_t* codec_tags; +} FFCodec; + +static av_always_inline const FFCodec* ffcodec(const AVCodec* codec) { + return (const FFCodec*)codec; +} + +} // namespace + + bool DecoderContext::SendPacket(const Packet& packet) { m_temp_frame = std::make_shared<Frame>(); m_got_frame = 0; @@ -227,8 +393,10 @@ bool DecoderContext::SendPacket(const Packet& packet) { #ifndef ANDROID if (!m_codec_context->hw_device_ctx && m_codec_context->codec_id == AV_CODEC_ID_H264) { m_decode_order = true; - const int ret = avcodec_send_frame(m_codec_context, m_temp_frame->GetFrame()); - if (ret < 0) { + auto* codec{ffcodec(m_decoder.GetCodec())}; + if (const int ret = codec->cb.decode(m_codec_context, m_temp_frame->GetFrame(), + &m_got_frame, packet.GetPacket()); + ret < 0) { LOG_DEBUG(Service_NVDRV, "avcodec_send_packet error {}", AVError(ret)); return false; } @@ -250,6 +418,7 @@ std::shared_ptr<Frame> DecoderContext::ReceiveFrame() { #ifndef ANDROID if (!m_codec_context->hw_device_ctx && m_codec_context->codec_id == AV_CODEC_ID_H264) { m_decode_order = true; + auto* codec{ffcodec(m_decoder.GetCodec())}; int ret{0}; if (m_got_frame == 0) { @@ -257,7 +426,7 @@ std::shared_ptr<Frame> DecoderContext::ReceiveFrame() { auto* pkt = packet.GetPacket(); pkt->data = nullptr; pkt->size = 0; - ret = avcodec_receive_packet(m_codec_context, pkt); + ret = codec->cb.decode(m_codec_context, m_temp_frame->GetFrame(), &m_got_frame, pkt); m_codec_context->has_b_frames = 0; } diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index a28296bdaf..44c06eddf3 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp @@ -176,7 +176,7 @@ public: PauseCounter(); } AbandonCurrentQuery(); - std::function<void()> func([this, counts = pending_flush_queries.size()] { + std::function<void()> func([this] { amend_value = 0; accumulation_value = 0; }); diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui index 68c5a67b24..9ebe75aa87 100644 --- a/src/yuzu/configuration/configure_debug.ui +++ b/src/yuzu/configuration/configure_debug.ui @@ -424,7 +424,7 @@ <item row="6" column="0"> <widget class="QCheckBox" name="use_auto_stub"> <property name="text"> - <string>Enable Auto-Stub**</string> + <string>Enable Auto-Stub</string> </property> </widget> </item> diff --git a/src/yuzu/configuration/configure_input_player.ui b/src/yuzu/configuration/configure_input_player.ui index 012379a477..b8e0465386 100644 --- a/src/yuzu/configuration/configure_input_player.ui +++ b/src/yuzu/configuration/configure_input_player.ui @@ -1363,55 +1363,6 @@ </layout> </widget> </item> - <item> - <widget class="QGroupBox" name="buttonMiscButtonsPlusGroup"> - <property name="title"> - <string>Plus</string> - </property> - <property name="alignment"> - <set>Qt::AlignmentFlag::AlignCenter</set> - </property> - <layout class="QVBoxLayout" name="buttonMiscPlusVerticalLayout"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>3</number> - </property> - <item> - <widget class="QPushButton" name="buttonPlus"> - <property name="minimumSize"> - <size> - <width>70</width> - <height>0</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>68</width> - <height>16777215</height> - </size> - </property> - <property name="styleSheet"> - <string notr="true">min-width: 68px;</string> - </property> - <property name="text"> - <string>Plus</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> <item> <widget class="QGroupBox" name="buttonMiscButtonsMinusGroup"> <property name="title"> @@ -1461,6 +1412,55 @@ </layout> </widget> </item> + <item> + <widget class="QGroupBox" name="buttonMiscButtonsPlusGroup"> + <property name="title"> + <string>Plus</string> + </property> + <property name="alignment"> + <set>Qt::AlignmentFlag::AlignCenter</set> + </property> + <layout class="QVBoxLayout" name="buttonMiscPlusVerticalLayout"> + <property name="spacing"> + <number>3</number> + </property> + <property name="leftMargin"> + <number>3</number> + </property> + <property name="topMargin"> + <number>3</number> + </property> + <property name="rightMargin"> + <number>3</number> + </property> + <property name="bottomMargin"> + <number>3</number> + </property> + <item> + <widget class="QPushButton" name="buttonPlus"> + <property name="minimumSize"> + <size> + <width>70</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>68</width> + <height>16777215</height> + </size> + </property> + <property name="styleSheet"> + <string notr="true">min-width: 68px;</string> + </property> + <property name="text"> + <string>Plus</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> <item> <widget class="QWidget" name="horizontalSpacerShoulderButtonsWidget3" native="true"> <layout class="QHBoxLayout" name="horizontalSpacerShoulderButtonsWidget3Layout"> diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 8cd20a452d..503891dc22 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1806,11 +1806,11 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa msg->setWindowTitle(tr("Game Updates Warning")); msg->setIcon(QMessageBox::Warning); msg->setText(tr("The game you are trying to launch is known to have performance or booting " - "issues when updates are applied. It's recommended to disable any updates " - "to this game before attempting to launch, or switch to an earlier update. " - "If you don't have any updates installed or enabled, you can safely ignore " - "this message.<br><br>Press \"OK\" to continue launching, or \"Cancel\" to " - "cancel the launch.")); + "issues when updates are applied. Please try increasing the memory layout to " + "6GB or 8GB if any issues occur.<br><br>Press \"OK\" to continue launching, or " + "\"Cancel\" to cancel the launch.")); + + // TODO: TMP: Recommends more memory for TotK. msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); diff --git a/src/yuzu/user_data_migration.cpp b/src/yuzu/user_data_migration.cpp index 1946254fb2..12d780e226 100644 --- a/src/yuzu/user_data_migration.cpp +++ b/src/yuzu/user_data_migration.cpp @@ -21,8 +21,7 @@ namespace fs = std::filesystem; -UserDataMigrator::UserDataMigrator( - QMainWindow *main_window) +UserDataMigrator::UserDataMigrator(QMainWindow *main_window) { // NOTE: Logging is not initialized yet, do not produce logs here. @@ -34,8 +33,7 @@ UserDataMigrator::UserDataMigrator( } } -void UserDataMigrator::ShowMigrationPrompt( - QMainWindow *main_window) +void UserDataMigrator::ShowMigrationPrompt(QMainWindow *main_window) { namespace fs = std::filesystem; @@ -96,9 +94,9 @@ void UserDataMigrator::ShowMigrationPrompt( #define EMU_MAP(name) \ const bool name##_found = fs::is_directory( \ Common::FS::GetLegacyPath(Common::FS::LegacyPath::name##Dir)); \ - legacyMap[main_window->tr(#name)] = LegacyEmu::name; \ - found[main_window->tr(#name)] = name##_found; \ - if (name##_found) \ + legacyMap[main_window->tr(#name)] = LegacyEmu::name; \ + found[main_window->tr(#name)] = name##_found; \ + if (name##_found) \ any_found = true; EMU_MAP(Citron) @@ -159,8 +157,7 @@ void UserDataMigrator::ShowMigrationPrompt( return; } -void UserDataMigrator::ShowMigrationCancelledMessage( - QMainWindow *main_window) +void UserDataMigrator::ShowMigrationCancelledMessage(QMainWindow *main_window) { QMessageBox::information(main_window, main_window->tr("Migration"), @@ -173,11 +170,10 @@ void UserDataMigrator::ShowMigrationCancelledMessage( QMessageBox::Ok); } -void UserDataMigrator::MigrateUserData( - QMainWindow *main_window, - const LegacyEmu selected_legacy_emu, - const bool clear_shader_cache, - const MigrationStrategy strategy) +void UserDataMigrator::MigrateUserData(QMainWindow *main_window, + const LegacyEmu selected_legacy_emu, + const bool clear_shader_cache, + const MigrationStrategy strategy) { namespace fs = std::filesystem; const auto copy_options = fs::copy_options::update_existing | fs::copy_options::recursive; @@ -189,12 +185,12 @@ void UserDataMigrator::MigrateUserData( std::string legacy_cache_dir; #define LEGACY_EMU(emu) \ -case LegacyEmu::emu: \ + case LegacyEmu::emu: \ legacy_user_dir = Common::FS::GetLegacyPath(Common::FS::LegacyPath::emu##Dir).string(); \ legacy_config_dir = Common::FS::GetLegacyPath(Common::FS::LegacyPath::emu##ConfigDir) \ - .string(); \ + .string(); \ legacy_cache_dir = Common::FS::GetLegacyPath(Common::FS::LegacyPath::emu##CacheDir) \ - .string(); \ + .string(); \ break; switch (selected_legacy_emu) { @@ -216,7 +212,20 @@ case LegacyEmu::emu: \ switch (strategy) { case MigrationStrategy::Link: // Create symlinks/directory junctions if requested - fs::create_directory_symlink(legacy_user_dir, eden_dir); + + // Windows 11 has random permission nonsense to deal with. + try { + fs::create_directory_symlink(legacy_user_dir, eden_dir); + } catch (const fs::filesystem_error &e) { + QMessageBox::critical( + main_window, + main_window->tr("Link Failed"), + main_window + ->tr("Linking the old directory failed. You may need to re-run with " + "administrative privileges on Windows.\nOS gave error: %1") + .arg(main_window->tr(e.what()))); + std::exit(127); + } // Windows doesn't need any more links, because cache and config // are already children of the root directory @@ -260,9 +269,11 @@ case LegacyEmu::emu: \ } success_text.append( - main_window->tr("\n\nIf you wish to clean up the files which were left in the old " - "data location, you can do so by deleting the following directory:\n" - "%1").arg(QString::fromStdString(legacy_user_dir))); + main_window + ->tr("\n\nIf you wish to clean up the files which were left in the old " + "data location, you can do so by deleting the following directory:\n" + "%1") + .arg(QString::fromStdString(legacy_user_dir))); break; }