Affected c575283
While using DevTools to debug an application, when I navigate the spec tree, the following exceptions are randomly thrown in the render loop.
If I don't use devtools and there is only one window the problem doesn't occur.
I ran simulations with ControlCatalog.NetCore
OS Windows 10 build 2004 64 bit
These are the stack traces:
Exception in render loop: 'Avalonia.OpenGL.OpenGlException: eglCreatePbufferFromClientBuffer failed with error EGL_BAD_PARAMETER (0x300C)
at Avalonia.OpenGL.Egl.EglPlatformOpenGlInterface.CreatePBufferFromClientBuffer(Int32 bufferType, IntPtr handle, Int32[] attribs) in C:\GitHub\Avalonia\src\Avalonia.OpenGL\Egl\EglPlatformOpenGlInterface.cs:line 67
at Avalonia.OpenGL.Angle.AngleWin32EglDisplay.WrapDirect3D11Texture(EglPlatformOpenGlInterface egl, IntPtr handle, Int32 offsetX, Int32 offsetY, Int32 width, Int32 height) in C:\GitHub\Avalonia\src\Avalonia.OpenGL\Angle\AngleWin32EglDisplay.cs:line 92
at Avalonia.Win32.CompositionEglGlPlatformSurface.CompositionRenderTarget.BeginDraw() in C:\GitHub\Avalonia\src\Windows\Avalonia.Win32\Composition\CompositionEglGlPlatformSurface.cs:line 88
at Avalonia.Skia.GlRenderTarget.BeginRenderingSession() in C:\GitHub\Avalonia\src\Skia\Avalonia.Skia\Gpu\OpenGl\GlRenderTarget.cs:line 63
at Avalonia.Skia.SkiaGpuRenderTarget.CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer) in C:\GitHub\Avalonia\src\Skia\Avalonia.Skia\Gpu\SkiaGpuRenderTarget.cs:line 27
at Avalonia.Rendering.DeferredRenderer.EnsureDrawingContext(IDrawingContextImpl& context) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 553
at Avalonia.Rendering.DeferredRenderer.UpdateRenderLayersAndConsumeSceneIfNeeded(IDrawingContextImpl& context, Boolean recursiveCall) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 310
at Avalonia.Rendering.DeferredRenderer.Render(Boolean forceComposite) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 266
at Avalonia.Rendering.DeferredRenderer.Avalonia.Rendering.IRenderLoopTask.Render() in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 220
at Avalonia.Rendering.RenderLoop.TimerTick(TimeSpan time) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\RenderLoop.cs:line 147' (RenderLoop #66629781)
System.AccessViolationException
HResult=0x80004003
Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
md5-61277a9b4972ddfd63ebd48250e53a62
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)
at ABI.Windows.UI.Composition.Interop.ICompositionDrawingSurfaceInterop.BeginDraw(IntPtr updateRect, Guid& iid, IntPtr& updateObject, POINT& point) in C:\GitHub\Avalonia\src\Windows\Avalonia.Win32\Composition\ICompositionDrawingSurfaceInterop.cs:line 123
at Avalonia.Win32.CompositionEglGlPlatformSurface.CompositionRenderTarget.BeginDraw() in C:\GitHub\Avalonia\src\Windows\Avalonia.Win32\Composition\CompositionEglGlPlatformSurface.cs:line 83
at Avalonia.Skia.GlRenderTarget.BeginRenderingSession() in C:\GitHub\Avalonia\src\Skia\Avalonia.Skia\Gpu\OpenGl\GlRenderTarget.cs:line 63
at Avalonia.Skia.SkiaGpuRenderTarget.CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer) in C:\GitHub\Avalonia\src\Skia\Avalonia.Skia\Gpu\SkiaGpuRenderTarget.cs:line 27
at Avalonia.Rendering.DeferredRenderer.EnsureDrawingContext(IDrawingContextImpl& context) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 553
at Avalonia.Rendering.DeferredRenderer.UpdateRenderLayersAndConsumeSceneIfNeeded(IDrawingContextImpl& context, Boolean recursiveCall) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 310
at Avalonia.Rendering.DeferredRenderer.Render(Boolean forceComposite) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 266
at Avalonia.Rendering.DeferredRenderer.Avalonia.Rendering.IRenderLoopTask.Render() in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 220
at Avalonia.Rendering.RenderLoop.TimerTick(TimeSpan time) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\RenderLoop.cs:line 147' (RenderLoop #66629781)
@danwalmsley I think we should disable winuicomp for now
@workgroupengineering can you test https://github.com/AvaloniaUI/Avalonia/pull/4939
and see if it helps the issue?
I tried but problem is the same ad adding new one.
System.Runtime.InteropServices.COMException
HResult=0x887A0005
Message=GPU device instance suspended. Use GetDeviceRemovedReason for appropriate action.
Source=System.Private.CoreLib
StackTrace:
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)
at ABI.Windows.UI.Composition.Interop.ICompositionDrawingSurfaceInterop.Resize(POINT sizePixels) in C:\GitHub\Avalonia\src\Windows\Avalonia.Win32\Composition\ICompositionDrawingSurfaceInterop.cs:line 133
at Avalonia.Win32.CompositionEglGlPlatformSurface.CompositionRenderTarget.BeginDraw() in C:\GitHub\Avalonia\src\Windows\Avalonia.Win32\Composition\CompositionEglGlPlatformSurface.cs:line 80
at Avalonia.Skia.GlRenderTarget.BeginRenderingSession() in C:\GitHub\Avalonia\src\Skia\Avalonia.Skia\Gpu\OpenGl\GlRenderTarget.cs:line 63
at Avalonia.Skia.SkiaGpuRenderTarget.CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer) in C:\GitHub\Avalonia\src\Skia\Avalonia.Skia\Gpu\SkiaGpuRenderTarget.cs:line 27
at Avalonia.Rendering.DeferredRenderer.EnsureDrawingContext(IDrawingContextImpl& context) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 553
at Avalonia.Rendering.DeferredRenderer.UpdateRenderLayersAndConsumeSceneIfNeeded(IDrawingContextImpl& context, Boolean recursiveCall) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 310
at Avalonia.Rendering.DeferredRenderer.Render(Boolean forceComposite) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 266
at Avalonia.Rendering.DeferredRenderer.Paint(Rect rect) in C:\GitHub\Avalonia\src\Avalonia.Visuals\Rendering\DeferredRenderer.cs:line 187
at Avalonia.Controls.TopLevel.HandlePaint(Rect rect) in C:\GitHub\Avalonia\src\Avalonia.Controls\TopLevel.cs:line 329
at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in C:\GitHub\Avalonia\src\Windows\Avalonia.Win32\WindowImpl.AppWndProc.cs:line 370
at Avalonia.Win32.WindowImpl.WndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in C:\GitHub\Avalonia\src\Windows\Avalonia.Win32\WindowImpl.WndProc.cs:line 30




The problem occurs when you open multiple windows and quickly resize one.
To simulate the problem, run ControlCatalog.NetCore, open DevTools and quickly resize the main window.
If there is a window, the problem is not generated.
@danwalmsley does each window have its own IDrawingContextImpl or is it shared?
each has its own!
we made some progress on this... more to come early in the week.
Hi,
if it disabled AllowEglInitialization I have no problem
Just for case, with AllowEglInitialization disabled, application will use software renderer.
For some applications it can cause worse rendering performance.
Another update, everything works fine by setting AllowEglInitialization = True and IRenderTimer to UiThreadRenderTimer. Probably ANGLE allows access to memory only to the Thread that created the context.