EvergineTeam / Feedback

Feedback, feature requests, and bug reports for Evergine.
https://evergine.com
14 stars 1 forks source link

Does Evergine run on Windows ARM? #128

Open adamthole opened 2 years ago

adamthole commented 2 years ago

Does Evergine run on Windows ARM? I've been trying to get the AutomoticeDemo to run on Windows 11 ARM, but I haven't had luck. I'm not sure if I'm doing something wrong, or if it just isn't supported.

This is the error I am getting:

Unhandled exception. System.InvalidOperationException: Multiple options in 'C:\publish-arm-sc\Evergine.BulletSharpPInvoke.dll.config' file. [dll: 'libbulletc.dll', os: 'windows', wordsize: '64', cpu: 'armv8'] at Evergine.Platform.DllRegister.MapLibraryName(String assemblyLocation, String originalLibName, String& mappedLibName) at Evergine.Platform.DllRegister.MapAndLoad(String libraryName, Assembly assembly, Nullable`1 dllImportSearchPath) at System.Runtime.InteropServices.NativeLibrary.LoadLibraryCallbackStub(String libraryName, Assembly assembly, Boolean hasDllImportSearchPathFlags, UInt32 dllImportSearchPathFlags) at BulletSharp.CollisionObject.btCollisionObject_new() at BulletSharp.CollisionObject..ctor() at Evergine.Bullet.BulletPhysicManager3D.Initialize() at Evergine.Bullet.BulletPhysicManager3D.OnAttached() at Evergine.Framework.AttachableObject.Attach() at Evergine.Framework.Managers.SceneManagers.AttachManagers() at Evergine.Framework.Scene.Initialize() at Evergine.Framework.Services.ScreenContextManager.InitializeScreenContext(ScreenContext context) at Evergine.Framework.Services.ScreenContextManager.ToExecute(ScreenContext nextContext, ScreenTransition transition, Boolean doDispose) at Evergine.Framework.ScreenContextCommands.ToContextCommand.Execute() at Evergine.Framework.Services.ScreenContextManager.Update(TimeSpan gameTime) at Evergine.Framework.Application.UpdateFrame(TimeSpan gameTime) at AutomotiveDemo.WPF.App.<>c__DisplayClass4_0.b__1()

emepetres commented 2 years ago

@adamthole thank you for your report, we are looking into it.

emepetres commented 2 years ago

@adamthole, for now we only support ARM on UWP / Hololens platform. However, your error is on bullet and this library is working on ARM, so as a work around you could try one of the following:

I've added this as a feature request in our roadmap.

adamthole commented 2 years ago

Thank you for the information. I tried publishing my actual project as ARM (which does not use the bullet library) and when I ran it I didn't get an error, but the main WPF window never showed and it just kept using more and more memory in the background. I let it run for a while, but it never ended up showing up. I'm not sure if that is helpful, but unfortunately I'm not sure how to find out what is actually going on.

I edited the Evergine.HLSLEverywhere.dll.config file, as it didn't have an ARM64 entry. I may have edited it wrong, I'm not sure if that would cause this issue or not. Here is the line I added:

<dllmap os="windows" cpu="arm64" dll="ShaderConductorWrapper.dll" target="runtimes/win-arm64/native/ShaderConductorWrapper.dll"/>

emepetres commented 2 years ago

@adamthole could you provide a sample so we can reproduce the issue?

adamthole commented 2 years ago

@emepetres Yes, I can provide a sample. I redid everything using the UIWindowsSystems demo (and the latest version of Evergine). I removed the Evergine.Bullet reference and I added the publish profile I am using to publish my win-arm64 test version. The behavior is different than above, but still not working. You can find my fork here: https://github.com/adamthole/UIWindowSystemsDemo.

Steps to reproduce:

  1. Open UIWIndowsSystemsDemo.WPF.sln
  2. Publish FolderProfile
  3. Copy folder to ARM PC
  4. Running the exe just crashes without giving feedback, running dotnet UIWindowSystemsDemo.Wpf.dll from the command prompt gives the following error message:

C:\win-arm64>dotnet UIWindowSystemsDemo.Wpf.dll Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object. at Evergine.DirectX11.DX11ComputePipelineState..ctor(DX11GraphicsContext context, ComputePipelineDescription& description) at Evergine.DirectX11.DX11ResourceFactory.CreateComputePipelineInternal(ComputePipelineDescription& description) at Evergine.Common.Graphics.ResourceFactory.CreateComputePipeline(ComputePipelineDescription& description) at Evergine.Framework.Graphics.ComputeTask.PrepareComputeTask(String passName) at Evergine.Framework.Graphics.ComputeTask.Run(CommandBuffer computeCommandBuffer, UInt32 groupCountX, UInt32 groupCountY, UInt32 groupCountZ, String pass) at Evergine.Framework.Graphics.ComputeTask.Run(UInt32 groupCountX, UInt32 groupCountY, UInt32 groupCountZ, String pass) at Evergine.Framework.Graphics.ComputeTaskDecorator.Run(UInt32 groupCountX, UInt32 groupCountY, UInt32 groupCountZ, String pass) at Evergine.Components.Environment.AtmosphereController.ComputeAtmosphereTextureUpdater.Update() at Evergine.Components.Environment.AtmosphereController.OnAttached() at Evergine.Framework.AttachableObject.Attach() at Evergine.Framework.Entity.OnAttached() at Evergine.Framework.AttachableObject.Attach() at Evergine.Framework.Managers.EntityManager.InternalActivateEntity(Entity entity) at Evergine.Framework.Managers.EntityManager.OnActivated() at Evergine.Framework.AttachableObject.Activate() at Evergine.Framework.Managers.SceneManagers.ActivateManagers() at Evergine.Framework.Scene.Initialize() at Evergine.Framework.Services.ScreenContextManager.InitializeScreenContext(ScreenContext context) at Evergine.Framework.Services.ScreenContextManager.ToExecute(ScreenContext nextContext, ScreenTransition transition, Boolean doDispose) at Evergine.Framework.ScreenContextCommands.ToContextCommand.Execute() at Evergine.Framework.Services.ScreenContextManager.Update(TimeSpan gameTime) at Evergine.Framework.Application.UpdateFrame(TimeSpan gameTime) at UIWindowSystemsDemo.WPF.App.<>c__DisplayClass4_0.<OnStartup>b__1() in C:\repos\UIWindowSystemsDemo\UIWindowSystemsDemo.WPF\App.xaml.cs:line 44 at Evergine.WPF.WPFWindowsSystem.CompositionTarget_Rendering(Object sender, EventArgs e) at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget) at System.Windows.Media.MediaContext.Resize(ICompositionTarget resizedCompositionTarget) at System.Windows.Interop.HwndTarget.OnResize() at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam) at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.HwndSubclass.DefWndProcWrapper(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)

Note that I get this error with or without the extra line (https://github.com/EvergineTeam/Feedback/issues/128#issuecomment-1107512280) added to Evergine.HLSLEverywhere.dll.config.

emepetres commented 2 years ago

Thank you @adamthole for sending us this sample, we are looking into it and we'll give you an answer when possible.