BlitterStudio / amiberry

Optimized Amiga emulator for Linux/macOS
https://amiberry.com
GNU General Public License v3.0
642 stars 86 forks source link

Implement libgo2 support #580

Closed midwan closed 4 years ago

midwan commented 4 years ago

To get optimal performance from the Odroid Go Advance, we'll need to implement support for libgo2 instead of SDL2.

Useful links: https://github.com/OtherCrashOverride/libgo2

Example: https://github.com/OtherCrashOverride/ppsspp-go2/commits/master

Basic documentation: https://forum.odroid.com/viewtopic.php?f=194&p=278701#p278701

shantigilbert commented 4 years ago

I have compiled this version with libgo2 support for the Odroid go advance, it works really good! but I have one small problem, not sure if this is a known issue but the menu does not render correctly, scaling maybe? here is a small (vey bad) video to show https://youtu.be/4rSlXbhdxSg Or I am not sure if there are some settings I could manually add to the .conf file to change the overall screen size.

midwan commented 4 years ago

@shantigilbert It's probably due to incorrect width/height values. How did you compile this version? Did you make your own changes? Which distro did you test it on?

I'm not fully done with it yet, so if you have something to share, pull requests are welcome! :)

shantigilbert commented 4 years ago

Thanks @midwan I know implementation of libgo2 is not fully done yet, but I wanted to share my findings with it.

In my case I maintain a distro called EmuELEC that is based on CoreELEC. I had to do 2 small modifications to the Makefile (one that is not related to libgo2)

AS     ?= as

I noticed you added the 64bit version that had the flags required, so I just copied them since I use a 32bit user space

      else ifneq (,$(findstring RK3326,$(PLATFORM)))
        CPUFLAGS += -mcpu=cortex-a35
        LDFLAGS += ${LIBGO2_LDFLAGS}

And it boots fine (as you can see), its just the image is cut off, I tried changing the H and W on the settings, but since its really hard to see, not sure they were being accepted.

another issue I noticed is that if I connect a mouse I can get the pointer working, but it still thinks its a vertical screen and the mouse buttons do not work, not sure if related.

I am far from knowledgeable enough on C++ to provide any helpful PR :(

EDIT: Ill try it with the new changes

shantigilbert commented 4 years ago

Ok I see my problem, it might have not used libgo2 after all!

I was not using the LIBGO2_FLAGS

now that I am trying to use them it won't compile, I get a lot of errors on src/audio.cpp

I changed the flags to point to the libgo2 source,

LIBGO2_FLAGS = -DUSE_LIBGO2 -I/mnt/EmuELEC/build.EmuELEC-RK3326.arm-3.4/libgo2-2ea5909bde4c0bec4da17611049e215ba0fcbbc3/src

not sure if I need to do anything else, or just wait until the implementation is finished?

midwan commented 4 years ago

@shantigilbert It won't compile currently because it's not finished. :) But the SDL2 version with the new feature of rotation angle should work, so if you can get that one running I would suggest we fix the problem there, instead of waiting for a libgo2 version (which is kind of an experiment at this stage).

Is there an environment that you can use to deploy new versions easily and test with? There are 3 distros that I know of at the moment (stock based on Ubuntu aarch64, TheRA based on Ubuntu aarch64, Batocera with buildroot arm32) but none of them are ideal:

shantigilbert commented 4 years ago

on EmuELEC I can easily test changes, just a matter of sending the binary over samba and running it from SSH, I have the environment set for this particular reason, I do not need to compile the whole distro

The one I tested must have been using SDL2 but I was using the rotation setting

midwan commented 4 years ago

@shantigilbert Ok, then I imagine you cross-compile it somewhere? What do you use for that? Docker container, VM, other?

shantigilbert commented 4 years ago

Its a buildroot system (or similar), I have a PC with Ubuntu which I use directly, but the other options also work (Docker, VM)

midwan commented 4 years ago

Hm, then it's similar to Batocera. Is there a way to just compile the emulator using the relevant toolchain/includes/libs without everything else? The documentation I saw at your repo indicates how to build the whole image only.

shantigilbert commented 4 years ago

You need to compile the whole thing once, then you can compile only whatever package you need/want

example: DISTRO=EmuELEC PROJECT=Rockchip ARCH=arm DEVICE=RK3326 UBOOT_SYSTEM=odroidgo2 ./scripts/build amiberry

EDIT: Maybe we can continue on discord, so we don't fill this issue with unrelated messages to libgo2?

midwan commented 4 years ago

Since it looks like they are working on implementing libgo2 support in SDL2 instead, I don't think this approach here makes sense. No need to implement and support something just for one platform, when we don't really have to.