diff --git a/scriptmodules/emulators/mupen64plus.sh b/scriptmodules/emulators/mupen64plus.sh index 641a618628..8a81a26a6d 100644 --- a/scriptmodules/emulators/mupen64plus.sh +++ b/scriptmodules/emulators/mupen64plus.sh @@ -52,7 +52,10 @@ function sources_mupen64plus() { gitPullOrClone "$dir" https://github.com/${repo[0]}/mupen64plus-${repo[1]} ${repo[2]} done gitPullOrClone "$md_build/GLideN64" https://github.com/gonetz/GLideN64.git - + + # temporary workaround for https://github.com/gonetz/GLideN64/issues/1665 + isPlatform "rpi" && applyPatch "$md_data/rpi-yuv.diff" + local config_version=$(grep -oP '(?<=CONFIG_VERSION_CURRENT ).+?(?=U)' GLideN64/src/Config.h) echo "$config_version" > "$md_build/GLideN64_config_version.ini" } diff --git a/scriptmodules/emulators/mupen64plus/mupen64plus.sh b/scriptmodules/emulators/mupen64plus/mupen64plus.sh index a9f33fe690..ab7697da98 100755 --- a/scriptmodules/emulators/mupen64plus/mupen64plus.sh +++ b/scriptmodules/emulators/mupen64plus/mupen64plus.sh @@ -254,6 +254,10 @@ function testCompatibility() { iniSet "EnableFBEmulation" "True" # Set native resolution factor of 1 iniSet "UseNativeResolutionFactor" "1" + # Force 3-point bilinear filtering & disable shader/key cache on Pi + # See: https://github.com/gonetz/GLideN64/issues/1665 + iniSet "bilinearMode" "False" + iniSet "EnableShadersStorage" "False" for game in "${GLideN64NativeResolution_blacklist[@]}"; do if [[ "${ROM,,}" == *"$game"* ]]; then iniSet "UseNativeResolutionFactor" "0" diff --git a/scriptmodules/emulators/mupen64plus/rpi-yuv.diff b/scriptmodules/emulators/mupen64plus/rpi-yuv.diff new file mode 100644 index 0000000000..19430f00e1 --- /dev/null +++ b/scriptmodules/emulators/mupen64plus/rpi-yuv.diff @@ -0,0 +1,26 @@ +diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp +index ae8c2e7..9f61a39 100644 +--- a/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp ++++ b/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp +@@ -1167,10 +1167,7 @@ public: + m_part = + " nCurrentTile = 0; \n" + " lowp vec4 readtex0; \n" +- " if (uBiLerp[0] != 0) \n" + " readtex0 = readTex(uTex0, vTexCoord0, uFbMonochrome[0], uFbFixedAlpha[0]); \n" +- " else \n" +- " readtex0 = YUV_Convert(uTex0, vTexCoord0, uTextureConvert[0], uTextureFormat[0], readtex0); \n" + ; + } else { + if (config.video.multisampling > 0) { +@@ -1205,10 +1202,7 @@ public: + m_part = + " nCurrentTile = 1; \n" + " lowp vec4 readtex1; \n" +- " if (uBiLerp[1] != 0) \n" + " readtex1 = readTex(uTex1, vTexCoord1, uFbMonochrome[1], uFbFixedAlpha[1]); \n" +- " else \n" +- " readtex1 = YUV_Convert(uTex1, vTexCoord1, uTextureConvert[1], uTextureFormat[1], readtex0); \n" + ; + } else { + if (config.video.multisampling > 0) {