The-Wineskin-Project / WineskinServer

Wineskin
GNU Lesser General Public License v2.1
2.47k stars 170 forks source link

Initial Apple Silicon support (updated) #65

Closed Gcenx closed 3 years ago

Gcenx commented 3 years ago

Wineskin-2.9.0.7-rc4

This new wrapper will function under Rosetta2, included the custom MoltenVK needed for DXVK support.

Please Note

The new master wrapper requires the copy of Wineskin Winery from the Pre-release section, ensure that Wineskin Winery is not have the quarantine flag you can remove it using the following command via terminal

xattr -drs com.apple.quarantine ~/Downloads/Wineskin.Winery.txz

Don't extract using Keka as this will just add the quarantine flag again and this will cause issues.\ When requested give Wineskin Winery any permissions it's requesting.

Wrappers will request permissions as needed, not granting these will cause issues.

Old information

As I keep receiving private messages across different platforms I’ll add this as a public announcement.

At present I don’t own a Apple Silicon system so attempting to support this would be out of scope.

I checked the projects funds and it’s **$0 USD** short of being able to purchase a base model M1 Mac mini. When the funds are available the above will be purchased and used to implement Wineskin support.\
Anything additional from here will ether go towards purchasing a larger SSD if received before the purchase is made.

### What Engine can be supported;
WineCX20.0.2 engines will be the first ones to support Apple Silicon devices, the plan is to also attempt to back port the Rosetta2 related changes to get WineCX19 to also function.\
Also if considering applying the Rosetta2 patches onto upstream wine so wine64 will function on Apple Silicon devices.

For the moment I only have [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/gcenx?locale.x=en_US) setup, looking into other options as I’ve been informed of issues some users have with using PayPal.

## Additional information;
Once M1 support is functional the mac Mini will be used as a buildbot for Wineskin Engines meaning my main system will be free for other development tasks as currently once a compile is started the system is no longer useable for a couple of hours.

Special thanks to;\ @emendelson @Alex1844 And all others who helped make this possible

emendelson commented 3 years ago

Hi,

I’ll gladly throw in another $50. Could you remind me of the e-mail address to use? I can’t find it here, but I probably haven’t looked hard enough.

Best,

Edward

On Dec 1, 2020, at 1:14 PM, Gcenx notifications@github.com wrote:

As I keep receiving private messages across different platforms I’ll add this as a public announcement.

At precent I don’t own a Apple Silicon system so attempting to support this would be out of scope.

I checked the projects funds and it’s $200 USD short of being able to purchase a base model M1 Mac mini. When the funds are available the above will be purchased and used to implement Wineskin support.

What Engine can be supported;

WineCX20.0.2 engines will be the first ones to support Apple Silicon devices, the plan is to also attempt to back port the Rosetta2 related changes to get WineCX19 to also function. Also if considering applying the Rosetta2 patches onto upstream wine so wine64 will function on Apple Silicon devices.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/Gcenx/WineskinServer/issues/65, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABHXTONB2RCZHUABYGC3JHTSSUXAHANCNFSM4UJLNULA.

Gcenx commented 3 years ago

@emendelson I edited the first comment to include the link instead of directly posting the email (trying to avoid bots harvesting my email), if you do this I’ll email you something once I’m in front of my Mac you might find interesting.

emendelson commented 3 years ago

@Gcenx - Done!

kimnzl commented 3 years ago

I have just donated. Great to be able to support you. Thanks for all the hard work over the years.

Regards, Kim

tomparonett commented 3 years ago

Hi there! Just wondering if you have an update on the timeframe for apple silicone support? Seems quite a few have donated. I actually would like to donate next week if you are still lacking some funds

Gcenx commented 3 years ago

Currently I’d still need $0 USD before I can purchase an M1 Mac mini (I try to keep the first post current), once the order is placed I’ll post an update on the expected delivery date.

Rastafabisch commented 3 years ago

I would love to donate but I just can't as the COVID implications hit be quiet hard… However I wanted to chime in to suggest a Patreon account, which could help supporting the development in the long term, rather than just momentarily.

Alex1844 commented 3 years ago

$100 incoming

Thank you for your hard work

Gcenx commented 3 years ago

@Rastafabisch I can relate, I’m looking into adding Patreon as your not the only one to mention this but wondering if I should setup a dedicated account for the funds to go into separate from my personal account.

@Alex1844 thanks a lot! I really mean that, time to check on when it’s possible to get an M1 system delivered (getting one in person doesn’t seem possible due to demand)

Gcenx commented 3 years ago

Here’s a current status for anyone interested

Technically wine64 “could” work but would require reusing the Metal GPU detection patch from CrossOver-20 but this also seemed to break wine on OSX10.9 VM, possibly this won’t function below macOS High Sierra but this still needs to be confirmed.

arutkowski00 commented 3 years ago

Technically wine64 “could” work but would require reusing the Metal GPU detection patch from CrossOver-20

I'm trying to compile latest Wine 6.0 RC3 on MBA M1 and it compiles flawlessly, but when I'm trying to run any exe, the "No GPUs detected" is coming from "macdrv". Patching the GPU detection would help.

@Gcenx Do you possibly know where I can find this patch or what should be changed in the source code?

Gcenx commented 3 years ago

Here's a compile I made earlier with the patch applied WineDevel64Bit6.0-rc3

Gcenx commented 3 years ago

Current progress getting upstream wine64 functional on Apple Silicon.

Basic 64Bit applications launch but currently been unable to get dxvm_macos working yet (custom winetricks verb). But an improvement from the above attached compile this no longer has wine64-preloader spamming about being unable to allocate memory locations.

BD83A6E1-3517-43C2-A7B7-0324A34A0E9F

Wineskin specific stuff

Still need to fix up prefixcreate function as that’s failing only on Apple Silicon for some reason sigh...., but if the wineprefix is created the wrapper will function including primary launches!

An annoyance is I’ve not found any samples of how to detect processes running within Rosetta2, this means Wineskin.app currently cannot detect if wineserver is still running or not meaning Wineskin.app won’t lock the function buttons.

Gcenx commented 3 years ago

Made a modification to WineskinLauncher that has gotten WSS-wineprefixcreate working on Apple Silicon but seems Winery also needs some modifications.

Winery will create a wrapper but fails to run WSS-wineprefixcreate

Edit;\ Gotten this to somewhat functional now but still needs to be reliable, not sure if the issue is Rosetta2 of just changes within Big Sur final release.

ghost commented 3 years ago

Just curious: Do you run macOS 11.1 or 11.2, as that version should have further improvements, especially regarding Rosetta2.

Gcenx commented 3 years ago

Just curious: Do you run macOS 11.1 or 11.2, as that version should have further improvements, especially regarding Rosetta2.

macOS Big Sur 11.1, did you find a change log showing Rosetta2 improvements somewhere as I didn’t find one showing this.

If that’s the case then I properly should upgrade to 11.2 as currently there’s so very strange Rosetta2 behavior.

Edit;\ Installed 11.2 it didn't prompt to install Rosetta2 so looks like theres currently no changes to it.

Edit2;\ Seems I might have things stable on Apple Silicon finally, but it’s required multiple internal changes.

Gcenx commented 3 years ago

Quickly did a desktop recording to show the current progress youtube video

Edit;\ With these changes that gets Winery/Wineskin/WinskinLauncher to the same comparability as when macOS Catalina.

WineCX19 based engine are functional on Apple Silicon.

Known limitations (Apple Silicon)

To work around these issues cnc-ddraw and DxWnd can be used to launch titles that uses these. This may be resolved in a later crossover-wine version if thats happens I’ll lock Rosetta2 support to that version or greater.

Michelinu commented 3 years ago

Are you going to include WineCX20 engines in the next release?

Gcenx commented 3 years ago

@Michelinu yes I'll be providing at least WineCX20.0.0 preferably WineCX20.0.2 once I can can confirm it will function below macOS 10.13 on an actual install since the Metal GPU patches break the Virtual Machine GPU detection making it harder for me to test things on lower macOS/OSX versions.

The alternative is just dropping support for anything below macOS 10.13 or greater.

Rastafabisch commented 3 years ago

Do macOS versions below 10.13 even offer enough metal capabilities to support CodeWeavers patched version of DXVK. This is arguably the most desired feature for many, so if it would not be available, wouldn’t it be sufficient to continue supporting those versions with the regular wine/wine-staging engines, anyway?

While I admire you taking the challenge to support as many macOS versions as possible I wonder, wether it is worth the hassle.

Gcenx commented 3 years ago

WineCX20 != DXVK\ WineCX20 doesn’t mean DXVK support

DXVK, can be used on other 64Bit Engines that I’ve compiled with the minimum wine version matching DXVK-1.5 since that’s what it’s based upon.

I’ll clarify when I say I might drop versions below macOS 10.13, I mean completely stop supporting any version below not specific to WineCX20.

Currently I’ve been maintaining additional patches that are applied on top of some dependencies to keep supporting below macOS 10.12.

The-SamminAter commented 3 years ago

If you'd like, I have multiple macOS Sierra/10.12.6 computers that I can test WineCX20.X on

Gcenx commented 3 years ago

@The-SamminAter I’ve added WineCX20.0.0 engines for download when using Winery from the pre-release section, this was updated yesterday to use a different master wrapper then the current stable version.

Gcenx commented 3 years ago

WineCX20.0.2 will be pushed once I’ve figure out out what patch/setting is causing it to run like crap under Rosetta2 compared to CrossOver-20.0.2

The-SamminAter commented 3 years ago

Will CX20.X be added to your homebrew Wine tap when you figure it out?

Gcenx commented 3 years ago

Once I have it running decent under Rosetta2 and can confirm it works on older macOS version then I would make sense, until then I doesn’t make much sense to replace WineCX19.0.2 with something that would be worse

VittorioBase commented 3 years ago

Excuse but I'm having some problems. Some games and exe files crash while other simply say dll intilization failed, but I can't seem to open even a single file and play one game. Could you please help me? Thank you, nice work!

Gcenx commented 3 years ago

@VittorioBase please open a new issue providing as much information as possible and attached LastRun.log for for each issue launch.

There are multiple known issues for Apple Silicon, direct draw and Direct3D won’t function at all, the same as on Intel systems 16Bit applications/games will outright fail when using wine32on64.

And even when something does launch don’t expect decent performance as it seems wine needs to be compiled with specific compiler options that I’m currently not aware of to improve performance under Rosetta2.

I’ve open tickets for all of these items with CodeWeavers but currently haven’t received a single update on any one of them.

Moterrac commented 3 years ago

Hi, thanks for all the hard work you have been doing towards getting this running on M1 machines. I was wondering if you’ve included the recent Apple Silicon specific MoltenVK commits in the M1 compatible engines? I’m curious if the recent commits to moltenvk fix the graphical issues with Skyrim. Thanks.

Gcenx commented 3 years ago

@Moterrac the included copy of MoltenVK is the current release plus the required changes to make DXVK work, I’m waiting seeing how many more commits Chip makes before rebuilding the custom MoltenVK but I’ll rebase the repository and include a version from head and list the commit when I push the next wrapper update aka rc4.

For the moment I’m mostly waiting on CodeWeavers to respond to some of my support tickets.

Along with constantly build wine-git to hopefully ensure Wine-6.0 isn’t completely broken on macOS for once lol. I’m hoping to avoid needing to submit anything but basic patches to wine-git.

Edit;\ rc3 ended up becoming a bug fix for gnutls that was broken under Rosetta2 and also macOS High Sierra due to the addition of compiler.thread_local_storage yes within the Portfile.\ Also fixed Winehq Engine Launch it will now correctly map the wrappers dylibs found under /Frameworks.

Edit2;\ rc4 should actually resolve the above issue it wasn’t gnutls but gmp that was somehow broken?, resolved both with a minimal build from an older release

Moterrac commented 3 years ago

Apologies for the slow reply, I have been away from my laptop for a week or so. Did you end up adding the recent M1 specific commits to moltenvk to the new rc4 release? I’ll give it a go at installing in a moment and give things a test if so. I believe the new big sur 11.2 beta update has some Rosetta 2 fixes but nothing has been listed on the changelog so far.

Gcenx commented 3 years ago

@Moterrac unfortunately no I haven’t rebuilt MoltenVK just yet the two recent wrapper updates were to address other problems that seem to now be resolved.

Hopefully I can get around to rebasing MoltenVK with the current HEAD but I’m still awaiting some additional feedback.

Alex1844 commented 3 years ago

No pressure, just do you have an ETA for the final wrapper and what will be the difference from RC4?

Gcenx commented 3 years ago

@Alex1844 I’m not too sure on a time table for a final release due to multiple things.

Waiting on CX20.0.4 sources (email said the beta is 20.0.4-rc2....), that contains some required fixes related to M1.

Need to rebuilt the runtime to the new officially support version of macOS being aimed at macOS High Sierra 10.13.

Waiting on confirmation of a fix for MoltenVK v1.1.1 on Apple Silicon as I’ve gotten conflicting reports. Or I’ll be forced to ship v1.1.0 to avoid crashes.

Need to add a new hack to my local portfiles to handle libgmp, it needs to be forced to build for ether core2 or it won’t function correctly on anything other then my own system (this includes running under Rosetta2)

Waiting on an Objective_C extensions update that addresses the -1MB GPU detection on Apple Silicon devices and T(1/2) based systems so that “Auto GPU detection” can be enabled again.

I think most of the annoying crashes were resolved by the “Teat Run” crash that I haven’t investigated still.

Still need to decide if I’m moving the wineprefix location is worth it.

Alex1844 commented 3 years ago

Thanks

Gcenx commented 3 years ago

I’ve added CX20.0.2 Engines these are Rosetta2 optimized.

CX20.0.4 Engines are affected by #80

Alex1844 commented 3 years ago

Awesome, thank you for great work.

thesmuniz commented 3 years ago

Just a quick question for you guys. I have installed the newest version of Winery and am using CX20.0.2 64bit on a M1 Macbook Air. I installed Guild Wars 1 and everything works great, but the fps are anywhere from 7-15.....

How do I look to see if I am using Rosetta 2 with Winery? Wondering if that is the problem.

When I used this on my Macbook Pro from 2019 it worked like a dream. Just no idea where the fps issues are coming from.

Gcenx commented 3 years ago

All of Wineskins binaries are compiled for x86_64 architecture only so if you launched these on my M1 they will be running under Rosetta2.

Engines are compiled for x86 based systems with some optimization cflags to get things running decently under Rosetta2, no binary I’ve provided is compiled for aarch64 as that would be useless for running x86 Windows binaries.

Unfortunately somethings will run much worse under Rosetta2, during the CX20 beta most testers were more concerned with the new DXVK support then retesting older games. What rendering backend is used in Guild Wars?, this would be useful information when going in CX21 beta when that happens.

thesmuniz commented 3 years ago

I am looking everywhere... :( Where would I find the rendering backend?

thesmuniz commented 3 years ago

So it looks like it runs DirectX 9 with Direct3D.... I wonder if installing cnc-ddraw would help.

Gcenx commented 3 years ago

cnc-ddraw is mostly for DirectDraw, if you happen to have access to Fallout NV try running that and let me know if that runs correctly or not.

If it doesn’t that would mean I screwed up the upload of CX20.0.2 engines.

thesmuniz commented 3 years ago

Sadly I don't have the game, but I did just get a response from Crossover that this is a know bug for Guild Wars 1, they are working to get it into the next release. So sounds like they know what is going on as well.

Gcenx commented 3 years ago

Yeah there’s a lot of M1 specific issues (mostly GPU differences), I’m hoping they also add in the sdl2 support into dinput as I’ve been requesting to the point of showing Controllers working on my M1 system if I disabled HID and fored SDL2 detection.

nunordm commented 3 years ago

Hey, so I am having a problem. I am on Enigine WS11WineCX64Bit20.0.2 Wrapper Version 2.9.0.7-rc4 and everything seems to go well, it gets to the part where the Wrapper should be created, I get the path to it and the promp to "go to finder" but either way when I try to find the wrapper it appears it fails to actually create it!

Gcenx commented 3 years ago

@nunordm please open a new issue and fill out the template providing as much information as possible.

thesmuniz commented 3 years ago

So I tried the new version of crossover and I still get 8-10 fps in Guild Wars 1. Looks like they haven't found a way to fix the low fps issues yet on the M1.