gonetz / GLideN64

A new generation, open-source graphics plugin for N64 emulators.
Other
771 stars 179 forks source link

Lower Rockchip Performance after October, supposedly with GCC12 #2726

Closed rishooty closed 1 year ago

rishooty commented 1 year ago

Hi again! I'm a contributor for JELOS (https://github.com/JustEnoughLinuxOS/distribution) with a focus on N64 cores.

I've been getting a number of complaints across RK3566 and RK3399 devices for significantly worse performance in standalone Mupen64Plus following any releases after October. Rice and GlidenMK2 run the same as they have, so I can confirm it isn't the application itself.

I can confirm this on my RG503 device, the exact same settings work fine in retroarch as they always have, but standalone is now quite a bit slower.

This all seems to have happened since the distribution updated to GCC12, according to another contributor.

Would you have any particular ideas why, or any compilation arguments I can try to alleviate this?

I checked all your commits since October and they all seem fine, so I doubt it's on your end per se.

Jj0YzL5nvJ commented 1 year ago

https://github.com/gonetz/GLideN64/issues/2388#issuecomment-731619751

Check:

2048

2381

rishooty commented 1 year ago

@Jj0YzL5nvJ I tried adding pthread, but I'm not sure if I'm doing it right.

The 2nd link doesn't seem relevant, and the third might be relevant. Here's my package build script so far:

PKG_NAME="mupen64plussa-video-gliden64"
PKG_VERSION="f4314664a0162b95cb397e1b5ca1bd8b4d5acfa4"
PKG_ARCH="aarch64"
PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/gonetz/GLideN64"
PKG_URL="${PKG_SITE}.git"
PKG_DEPENDS_TARGET="toolchain boost libpng SDL2 SDL2_net zlib freetype nasm:host mupen64plussa-core"
PKG_SHORTDESC="mupen64plus-video-gliden64"
PKG_LONGDESC="Mupen64Plus Standalone GLide64 Video Driver"
PKG_TOOLCHAIN="manual"

if [ ! "${OPENGL}" = "no" ]; then
  PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd"
fi

if [ "${OPENGLES_SUPPORT}" = yes ]; then
  PKG_DEPENDS_TARGET+=" ${OPENGLES}"
fi

make_target() {
  case ${ARCH} in
    arm|aarch64)
      export HOST_CPU=aarch64
      BINUTILS="$(get_build_dir binutils)/.aarch64-libreelec-linux-gnueabi"
      if [ "${DEVICE}" = "RG552" ]
      then
        PKG_MAKE_OPTS_TARGET+="-DNOHQ=On -DCRC_ARMV8=On -DNEON_OPT=On"
      else
        export USE_GLES=1
        PKG_MAKE_OPTS_TARGET+="-DNOHQ=On -DCRC_ARMV8=On -DEGL=0n -DNEON_OPT=On"
      fi
    ;;
  esac
  export APIDIR=$(get_build_dir mupen64plussa-core)/.install_pkg/usr/local/include/mupen64plus
  export SDL_CFLAGS="-I${SYSROOT_PREFIX}/usr/include/SDL2 -pthread"
  export SDL_LDLIBS="-lSDL2_net -lSDL2"
  export CROSS_COMPILE="${TARGET_PREFIX}"
  export V=1
  export VC=0
  export CXXFLAGS="${CXXFLAGS} -pthread"
  ./src/getRevision.sh
  cmake ${PKG_MAKE_OPTS_TARGET} -DMUPENPLUSAPI=On -DGLIDEN64_BUILD_TYPE=Release -S src -B projects/cmake
  make clean -C projects/cmake
  make -Wno-unused-variable -C projects/cmake
}
Jj0YzL5nvJ commented 1 year ago

I tried adding pthread, but I'm not sure if I'm doing it right.

To avoid conflicts better use:

-DCMAKE_C_COMPILER="${CC}"
-DCMAKE_CXX_COMPILER="${CXX}"
-DCMAKE_C_FLAGS="${CFLAGS}"
-DCMAKE_CXX_FLAGS="${CXXFLAGS}"

P.S: Try --set Video-GLideN64[EnableInaccurateTextureCoordinates]=True with mupen64plus.

rishooty commented 1 year ago

It worked!

This is what finally did it, thank you @Jj0YzL5nvJ !

cmake ${PKG_MAKE_OPTS_TARGET} -DMUPENPLUSAPI=On -DGLIDEN64_BUILD_TYPE=Release -DCMAKE_C_COMPILER="${CC}" -DCMAKE_CXX_COMPILER="${CXX}" -DCMAKE_C_FLAGS="${CFLAGS}" -DCMAKE_CXX_FLAGS="${CXXFLAGS} -pthread" -S src -B projects/cmake

Jj0YzL5nvJ commented 1 year ago

Use it as a workaround, while the patch is added to master. #2727