BizHawk icon indicating copy to clipboard operation
BizHawk copied to clipboard

Crash when any of cropping parameters are set to very high negative value (ex. -1000000)

Open getCursorsExe opened this issue 1 year ago • 1 comments

BizHawk instantly crashes when any of cropping dimensions are set to a very high negative value. This happens because there is no limit on how lower it can go below 0. And just like before, the crash log depends on current renderer used. Unlike #3321 however, it is impossible to render your config unusable, since the crash happens as soon as you close the Display window. Repro: Simply set one of cropping parameters to -1000000.

I have Polish version of them, sorry. This is the output with DirectX:

SlimDX.Direct3D9.Direct3D9Exception: D3DERR_INVALIDCALL: Invalid call (-2005530516)
   w SlimDX.Result.Throw[T](Object dataKey, Object dataValue)
   w SlimDX.Result.Record[T](Int32 hr, Boolean failed, Object dataKey, Object dataValue)
   w SlimDX.Direct3D9.Texture..ctor(Device device, Int32 width, Int32 height, Int32 levelCount, Usage usage, Format format, Pool pool)
   w BizHawk.Bizware.DirectX.IGL_SlimDX9.CreateRenderTarget(Int32 w, Int32 h) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Bizware.DirectX\IGL_SlimDX9.cs:wiersz 851
   w BizHawk.Client.Common.RenderTargetFrugalizer.Get(Int32 width, Int32 height) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\RenderTargetFrugalizer.cs:wiersz 57
   w BizHawk.Client.Common.DisplayManagerBase.RunFilterChainSteps(Int32& rtCounter, RenderTarget& rtCurr, Boolean& inFinalTarget) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\DisplayManagerBase.cs:wiersz 981
   w BizHawk.Client.EmuHawk.DisplayManager.UpdateSourceDrawingWork(JobInfo job)
   w BizHawk.Client.Common.DisplayManagerBase.UpdateSourceInternal(JobInfo job) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\DisplayManagerBase.cs:wiersz 925
   w BizHawk.Client.EmuHawk.MainForm.Render()
   w BizHawk.Client.EmuHawk.MainForm.ProgramRunLoop()
   w BizHawk.Client.EmuHawk.Program.SubMain(String[] args)

However, with OpenGL, you get this:

System.InvalidOperationException: Error creating framebuffer (at CheckFramebufferStatus)
   w BizHawk.Bizware.OpenTK3.IGL_TK.CreateRenderTarget(Int32 w, Int32 h) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Bizware.OpenTK3\IGL_TK.cs:wiersz 533
   w BizHawk.Client.Common.RenderTargetFrugalizer.Get(Int32 width, Int32 height) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\RenderTargetFrugalizer.cs:wiersz 57
   w BizHawk.Client.Common.DisplayManagerBase.RunFilterChainSteps(Int32& rtCounter, RenderTarget& rtCurr, Boolean& inFinalTarget) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\DisplayManagerBase.cs:wiersz 981
   w BizHawk.Client.EmuHawk.DisplayManager.UpdateSourceDrawingWork(JobInfo job)
   w BizHawk.Client.Common.DisplayManagerBase.UpdateSourceInternal(JobInfo job) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\DisplayManagerBase.cs:wiersz 925
   w BizHawk.Client.EmuHawk.MainForm.Render()
   w BizHawk.Client.EmuHawk.MainForm.ProgramRunLoop()
   w BizHawk.Client.EmuHawk.Program.SubMain(String[] args)

And even more interesting, with GDI+ as renderer BizHawk might not crash if you are debugging with Visual Studio, but eventually, this will appear:

System.ArgumentException: Parametr jest nieprawidłowy.
   w System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
   w BizHawk.Bizware.BizwareGL.IGL_GdiPlus.CreateRenderTarget(Int32 w, Int32 h) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Bizware.BizwareGL\IGL_GdiPlus.cs:wiersz 284
   w BizHawk.Client.Common.RenderTargetFrugalizer.Get(Int32 width, Int32 height) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\RenderTargetFrugalizer.cs:wiersz 57
   w BizHawk.Client.Common.DisplayManagerBase.RunFilterChainSteps(Int32& rtCounter, RenderTarget& rtCurr, Boolean& inFinalTarget) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\DisplayManagerBase.cs:wiersz 981
   w BizHawk.Client.EmuHawk.DisplayManager.UpdateSourceDrawingWork(JobInfo job)
   w BizHawk.Client.Common.DisplayManagerBase.UpdateSourceInternal(JobInfo job) w C:\Users\mikol\source\repos\BizHawk_dev\src\BizHawk.Client.Common\DisplayManager\DisplayManagerBase.cs:wiersz 925
   w BizHawk.Client.EmuHawk.MainForm.Render()
   w BizHawk.Client.EmuHawk.MainForm.ProgramRunLoop()
   w BizHawk.Client.EmuHawk.Program.SubMain(String[] args)

It seems that this crash is located at the same location as #3321 (dev build 3b181ba), because these are the exact same error messages. Version used: BizHawk 2.8 & latest dev build

getCursorsExe avatar Jul 26 '22 12:07 getCursorsExe

The limit on negative values should be 2x of the current console output resolution, maybe.

getCursorsExe avatar Jul 26 '22 12:07 getCursorsExe