The-Wineskin-Project / WineskinServer

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

Using D3DMetal with Wineskin Engine(s) #420

Closed Gcenx closed 6 months ago

Gcenx commented 1 year ago

Minimum Requirements


License & restrictions

Due to the very restrictive License D3DMetal can’t be used in commercial products.


Older details ## for D3DMetal-1.0 - An Apple Silicon Mac with 16GB of ram - macOS Sonoma beta (or macOS Ventura 13.3) - WineCX22.1.1-5 - `Game_porting_toolkit_beta.dmg` - Login into https://developer.apple.com/download/ - Now click https://download.developer.apple.com/Developer_Tools/Game_porting_toolkit_beta/Game_porting_toolkit_beta.dmg - Remove the quarantine flag from the download. - Mount `Game_porting_toolkit_beta.dmg` - Now create a new blank wrapper using the default name
Now install D3DMetal into place by using the below command in Terminal ``` ditto /Volumes/Game\ Porting\ Toolkit-1.0/lib/ ~/Applications/Wineskin/MyCoolWrapper.app/Contents/SharedSupport/wine/lib ``` ### Requirements for D3DMetal-1.0.2 - WineCX22.1.1-6
Launch Wineskin.app and select "Rebuild Wrapper", after that's done congratulations now you'll have Apples D3DMetal for 64Bit DirectX 11 & DirectX 12 titles.
## Can I make my own D3DMetal engine? Yes, once you’ve done the above steps modify the engines `version` file adding `- D3DMetal` and saving. Now rename `wine` to `wswine.bundle` then compress as a tar.7z (or tar.xz and rename after your done) following the usual Engine naming for example ``` WS11WineCX64Bit22.1.1-5-D3DMetal.tar.7z ``` Place this newly packaged Engine into `~/Library/Application Support/Wineskin/Engines` from now on you can directly generate D3DMetal wrappers.

## Can I still use DXVK? Technically yes though as D3DMetal is considered `builtin` by wine you'd simply be using the `native` dlls provided by DXVK

# License & restrictions Due to the very restrictive [License](https://github.com/Gcenx/WineskinServer/files/11780432/License.pdf) I can't provide D3DMetal directly within a Wineskin Engine nor can these be shared to other users.
MarshallBelles commented 1 year ago

B6F04D52-EEFB-443A-B74A-1688BEA92D4A

excellent work!

palmerj commented 1 year ago

Thank you so much!

now you'll have Apples D3DMetal for 64Bit DirectX 11 & DirectX 12 titles.

so 32bit DX11 games won't work?

Gcenx commented 1 year ago

so 32bit DX11 games won't work?

They’ll continue to work.

On macOS WineD3D defaults to Vulkan for DirectX 10 & 11, as we’re not touching the i386-windows or x86_64on64-unix files this won’t be affected.

palmerj commented 1 year ago

I tried to get God of war ( going on MacOS 13.4, but it didn't load. I assume the issue is I need to upgrade to 14. I tried both -dx11 and -dx12 options. I can get it working with wineskin/DXVK with DX11 ok. The only error messages I see which looks interesting are:

01d0:err:virtual:try_map_free_area mmap() error Cannot allocate memory, range 0x7ffffe440000-0x7ffffee40000, unix_prot 0.
01d0:err:virtual:try_map_free_area mmap() error Cannot allocate memory, range 0x7ffeffdf0000-0x7fffffff0000, unix_prot 0.

I guess I will need considering upgrading/side installing MacOS 14beta

Gcenx commented 1 year ago

I’ve not done any testing of D3DMetal on macOS Ventura as the official requirements per Apple is macOS Sonoma, only mentioned macOS Ventura 13.3+ as we know that Diablo4 runs might be the only thing they does….

I wouldn’t recommend upgrading your main rig to macOS Sonoma Beta as who know what will happen, I wasn’t planning to even support this yet but other projects forced my hand.


I’m hopeful that WineCX22.1.1-4 resolved most of the annoyances encountered with wine-gpt.

Gcenx commented 1 year ago

WineCX22.1.1-4 was built using the wrong builder causing it to no longer find D3DMetal.framework this should now be resolved in WineCX22.1.1-5

palmerj commented 1 year ago

Note I found I had to login to Apple with my ID then go to https://developer.apple.com/download/all/?q=game%20porting%20toolkit. After that I could click https://download.developer.apple.com/Developer_Tools/Game_porting_toolkit_beta/Game_porting_toolkit_beta.dmg

palmerj commented 1 year ago

Tried WineCX22.1.1-5, still no luck on MacOS 13.3. Oh well I guess I need to wait until 14 is released.

Gcenx commented 1 year ago

Tried WineCX22.1.1-5, still no luck on MacOS 13.3. Oh well I guess I need to wait until 14 is released.

This rebuild was only to resolve

Assertion failed: (GFXTHandle && "Failed to dlopen D3DMetal")

macOS Ventura 13.3+ will have limited success playing anything using D3DMetel.

javinladish commented 1 year ago

Update: I got it to work using Whisky with ESync turned on in the config. It didn't work without ESync.


I followed the instructions above on MacOS 13.4.1 and tried to get Diablo II: Resurrected to play.

I was able to launch the game from the Battle.net app (which I wasn't able to do before because it used to say I don't have graphics that support it)

So the game launches, but it only gives me a black screen (no graphics, no music).

Let me know if any of ya'll are able to get it to run on 13.4.1. Maybe there needs to be some winetricks installed? Currently I am just using the vanilla WineCX22.1.1-5.

pilisir commented 1 year ago

Try to run Street Fighter 6 Demo on macOS 13.4.1 with Engine 22.1.1-5 and Apples D3DMetal. After game launched, it shows a dialog "Fatal D3D error (3)" and log message as below

01f8:trace:loaddll:build_module Loaded L"Z:\\Users\\pilisir\\Applications\\Wineskin\\Steam-wine.app\\Contents\\SharedSupport\\wine\\share\\wine\\mono\\wine-mono-7.4.0\\lib\\mono\\gac\\I18N\\4.0.0.0__0738eb9f132ed756\\I18N.dll" at 0000000005B90000: native
01f8:trace:loaddll:build_module Loaded L"Z:\\Users\\pilisir\\Applications\\Wineskin\\Steam-wine.app\\Contents\\SharedSupport\\wine\\share\\wine\\mono\\wine-mono-7.4.0\\lib\\mono\\gac\\I18N.CJK\\4.0.0.0__0738eb9f132ed756\\I18N.CJK.dll" at 0000000005BB0000: native

Unhandled Exception:
System.TypeLoadException: Could not load type of field 'InstallerMessage.Form1+<CodecCheck>d__11:<codecQuary>5__2' (3) due to: Could not load file or assembly 'Windows.Foundation.UniversalApiContract, Version=14.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
  at InstallerMessage.Form1..ctor () [0x00063] in <c4e9caff0ed649cba927482e19f8df97>:0 
  at (wrapper remoting-invoke-with-check) InstallerMessage.Form1..ctor()
  at InstallerMessage.Program.Main () [0x0000b] in <c4e9caff0ed649cba927482e19f8df97>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type of field 'InstallerMessage.Form1+<CodecCheck>d__11:<codecQuary>5__2' (3) due to: Could not load file or assembly 'Windows.Foundation.UniversalApiContract, Version=14.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
  at InstallerMessage.Form1..ctor () [0x00063] in <c4e9caff0ed649cba927482e19f8df97>:0 
  at (wrapper remoting-invoke-with-check) InstallerMessage.Form1..ctor()
03e8:trace:loaddll:build_module Loaded L"C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared\\_CommonRedist\\DirectX\\Jun2010\\DXSETUP.exe" at 0000000001000000: native
03e8:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\wow64.dll" at 000000006F000000: builtin
03e8:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\wow64cpu.dll" at 000000006F100000: builtin
03e8:trace:loaddll:build_module Loaded L"C:\\Program Files (x86)\\Steam\\steamapps\\common\\Steamworks Shared\\_CommonRedist\\DirectX\\Jun2010\\DXSETUP.exe" at 01000000: native
Gcenx commented 1 year ago

@pilisir that game seems to be using wine-mono & wants an unsupported feature Windows.Foundation.UniversalApiContract

I’m not sure if upstream wine supports that or not.

WineCX22.x is based on crossover-sources-22.x sources that’s based on wine-7.7

Gcenx commented 1 year ago

Note

WineCX22.1.1-6 includes all of the GPTK-10.0.2 changes so it’s possible this introduced regressions in some launchers, this isn’t build against gstreamer as Wineskin doesn’t ship gstreamer for legal reasons.

I’ll be investigating using the official gstreamer packages.

pilisir commented 1 year ago

WineCX22.1.1-6 doesn't need download GPTK manually and ditto likes WineCX22.1.1-5 required, right? Just change Engine Used and rebuild, then done? 👀

Gcenx commented 1 year ago

WineCX22.1.1-6 doesn't need download GPTK manually and ditto likes WineCX22.1.1-5 required, right? Just change Engine Used and rebuild, then done? 👀

Your still required to manually download/ditto in D3DMetal that requirement hasn’t changed, I’m just recommending WineCX22.1.1-6 for D3DMetal-1.0.2

palmerj commented 1 year ago

I’ll be investigating using the official gstreamer packages.

That would be really great. What are the current legal issues?

Gcenx commented 1 year ago

That would be really great. What are the current legal issues?

The problem has always been FFmpeg there a nightmare, to legally ship it I’d require a license to protect myself.

As this is free software I’m not doing that, instead you’ll be required to install a gstreamer pkg package.

palmerj commented 1 year ago

Ah cool understood. Having instructions to install the package is a good solution.

Gcenx commented 1 year ago

Ah cool understood. Having instructions to install the package is a good solution.

I’ll update #426 once it’s ready

That’s if the build I’m currently running completes without issue, it will simply require the installation of the latest gstreamer pkg from the official site

palmerj commented 1 year ago

Game porting toolkit beta 1.02.dmg is now out. @Gcenx is WineCX22.1.1-7 tested with that?

Gcenx commented 1 year ago

Game porting toolkit beta 1.02.dmg is now out. @Gcenx is WineCX22.1.1-7 tested with that?

@palmerj see the first post of updated to reflect D3DMetal-1.0.2 this was working with WineCX22.1.1-6 and also works with WineCX22.1.1-7.

palmerj commented 1 year ago

Thanks, sorry I didn't see that post update - cheers!

pilisir commented 1 year ago

Hi, if I want to keep D3DMetal supported, should I do Rebuild Wrapper every time after Change Engine Used to new one?

Gcenx commented 1 year ago

Hi, if I want to keep D3DMetal supported, should I do Rebuild Wrapper every time after Change Engine Used to new one?

You could goto the Engines directory and unpack say WineCX22.1.1-7 add in D3DMetal and recompress to tar.xz and rename to tar.7x to keep Winery/Wineskin happy then swap your current wrapper to this engine.

Gcenx commented 1 year ago

Due to the restrictive license of D3DMetal I can’t provide an Engine with this builtin sadly.

pilisir commented 1 year ago

Thank you a lot!

sofakng commented 1 year ago

Is it possible to show the performance overlay/hud while using D3DMetal?

Gcenx commented 1 year ago

@sofakng add the following to the unix field

export MTL_HUD_ENABLED=1
smjxpro commented 1 year ago

Anyone able to run The Elder Scrolls V: Skyrim? The installer crashes.

xellosiris commented 1 year ago

how do I know D3DMetal install success or not ?

Gcenx commented 1 year ago

Anyone able to run The Elder Scrolls V: Skyrim? The installer crashes.

@smjxpro standard Skyrim is 32Bit so wouldn’t be affected are you possibly referring to Special edition?

how do I know D3DMetal install success or not ?

@xellosiris see https://github.com/Gcenx/WineskinServer/issues/420#issuecomment-1646942797

smjxpro commented 1 year ago

Anyone able to run The Elder Scrolls V: Skyrim? The installer crashes.

@smjxpro standard Skyrim is 32Bit so wouldn’t be affected are you possibly referring to Special edition?

how do I know D3DMetal install success or not ?

@xellosiris see #420 (comment)

Special Edition. Able to run and play from Steam on my M1Pro by following this

Thanks.

smjxpro commented 1 year ago

Anyone able to run The Elder Scrolls V: Skyrim? The installer crashes.

@smjxpro standard Skyrim is 32Bit so wouldn’t be affected are you possibly referring to Special edition?

how do I know D3DMetal install success or not ?

@xellosiris see #420 (comment)

Special Edition. Able to run and play from Steam on my M1Pro by following this

Thanks.

However the wine OS version is Windows 7 on the wrapper and Steam complains I will not be able to run Steam on Windows 7 in 1xx days. And if I change the OS version from winecfg, everything stops working.

Gcenx commented 1 year ago

The currently provided Engines on wrapper creation default to Windows 10, if your wrapper is displaying as Windows 7 that means on winetricks verb isn't setting back the default of Windows 10. If your able to figure out what verb is causing this I can rectify this issue.

smjxpro commented 1 year ago

The currently provided Engines on wrapper creation default to Windows 10, if your wrapper is displaying as Windows 7 that means on winetricks verb isn't setting back the default of Windows 10. If your able to figure out what verb is causing this I can rectify this issue.

It's the dotnet48 trick.

Gcenx commented 1 year ago

It's the dotnet48 trick.

It might not specifically be dotnet48 but one of the other .Net verbs not restoring the default windows version correctly.

I’ll take a look at this during my days off.

waldemar-giss-argonauten commented 1 year ago

@Gcenx , do you have any informations about the problem?

Gcenx commented 1 year ago

@waldemar-giss-argonauten I don’t see any question from you so can’t answer any question.

This thread previously was how to add D3DMetal into supported Engines, as the license was made clearer I’ve now started to bundle it directly into supported Engines making this thread mostly null and void.

Gcenx commented 1 year ago

@smjxpro I’ve modified the affected dotnet verbs to now revert back to the users selected windows version.