GLWpfControl icon indicating copy to clipboard operation
GLWpfControl copied to clipboard

System.ArgumentException: Value does not fall within the expected range on NVIDIA RTX A2000

Open simfero opened this issue 1 year ago • 10 comments

I am getting the following with 4.3.2 using NVIDIA RTX A2000. The example app also crashes when switching to non-empty tabs. No such issues with v4.2.3.

An Unhandled domain exception has occurred. IsTerminating = True System.ArgumentException: Value does not fall within the expected range. at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode) at OpenTK.Wpf.Interop.DXInterop.CheckHResult(Int32 hresult) in C:\Projects\Test\GLWpfControl\src\GLWpfControl\Interop\DXInterop.cs:line 42 at OpenTK.Wpf.Interop.DXInterop.IDirect3DDevice9Ex.CreateDepthStencilSurface(Int32 width, Int32 height, Format format, MultisampleType multisample, Int32 multisampleQuality, Boolean discard, IDirect3DSurface9& surfaceHandle, IntPtr& sharedHandle) in C:\Projects\Test\GLWpfControl\src\GLWpfControl\Interop\DXInterop.cs:line 313 at OpenTK.Wpf.GLWpfControlRenderer.ReallocateFramebufferIfNeeded(Double width, Double height, Double dpiScaleX, Double dpiScaleY, Format format, MultisampleType msaaType) in C:\Projects\Test\GLWpfControl\src\GLWpfControl\GLWpfControlRenderer.cs:line 123 at OpenTK.Wpf.GLWpfControl.OnRender(DrawingContext drawingContext) in C:\Projects\Test\GLWpfControl\src\GLWpfControl\GLWpfControl.cs:line 251 at System.Windows.UIElement.Arrange(Rect finalRect) at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Border.ArrangeOverride(Size finalSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Border.ArrangeOverride(Size finalSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Decorator.ArrangeOverride(Size arrangeSize) at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Controls.Border.ArrangeOverride(Size finalSize) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.Window.ArrangeOverride(Size arrangeBounds) at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect) at System.Windows.UIElement.Arrange(Rect finalRect) at System.Windows.ContextLayoutManager.UpdateLayout() at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg) at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) at System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(Object resizedCompositionTarget) 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.DispatcherOperation.InvokeImpl() at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(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.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) at System.Windows.Threading.Dispatcher.Run() at System.Windows.Application.RunDispatcher(Object ignore) at System.Windows.Application.RunInternal(Window window) at System.Windows.Application.Run() at Procept.Aquabeam.Windows.App.Main() >>>

simfero avatar Sep 03 '24 21:09 simfero

Same here

axel578 avatar Sep 08 '24 15:09 axel578

same issue.

wen2so avatar Oct 08 '24 09:10 wen2so

What are the glwpfcontrol settings being used and what GPUs are you all running?

NogginBops avatar Oct 08 '24 10:10 NogginBops

NVIDIA RTX A2000. Again, the example app crashes, so you can refer to the settings in that app. V4.3.2

simfero avatar Oct 08 '24 18:10 simfero

NVIDIA Geforce RTX 2050, the example app crashes, so you can refer to the settings in that app. V4.3.2

wen2so avatar Oct 16 '24 01:10 wen2so

Does it crash immediately when starting it or does it crash on the second tab?

NogginBops avatar Oct 16 '24 09:10 NogginBops

Second tab.

simfero avatar Oct 16 '24 15:10 simfero

Yeah, so second tab is related to the use of MSAA backbuffer sharing with DirectX. This feature works on some hardware+driver combos and not others. The unfortunate part is that there really isn't a good way to detect when it's going to crash or not (this is a future improvement we want to fix, it's better to get a framebuffer even if it doesn't have MSAA than crashing).

I'll try get some time to work on detecting support soon, but I don't know how long it would take before I get to it. A workaround for now would be to not use the MSAA setting in the GLWpfControl, and instead use a framebuffer with MSAA (if you need MSAA).

NogginBops avatar Oct 16 '24 16:10 NogginBops

How do I disable MSSA? GLWpfControlSettings.Sample=0? Isn't that what the Example app is using and it is still crashing.

simfero avatar Oct 16 '24 23:10 simfero

The second tab is setting MSAA=8. https://github.com/opentk/GLWpfControl/blob/ae67d34c7d3e35b5d354ede520441bdc458f6c68/src/Example/TabbedMainWindowTest.xaml.cs#L30

You should set it to either 0 or 1, both result in no MSAA, default is 0.

NogginBops avatar Oct 17 '24 07:10 NogginBops