On Sat, 5 Aug 2023 12:28:16 GMT, Thorsten Fischer <[email protected]> wrote:
> Hi,
>
> I did open the bug report. Some notes to this PR:
>
> My colleagues and I are able to reproduce this bug regularly, even though it
> takes sometimes up to 3 or 4 weeks until the D3DERR_DEVICEHUNG error shows
> up. We are currently evaluating two versions of fixes, but until now we do
> not have any results. I will post them as soon as I got them.
>
> Version 1 (this version): Based on the observation, that the
> TestCooperativeLevel/CheckDeviceState method returns D3D_OK again after about
> 20 - 60 seconds, the reinitialize is called after the first time the state is
> returning D3D_OK. The 'isHung' flag stores the information until then.
>
> Version 2: calls reinitialize directly after D3DERR_DEVICEHUNG has been
> returned. Basically
> if (hr == D3DERR_DEVICEREMOVED || hr == D3DERR_DEVICEHUNG ) { .. }
>
> I did not modify the validatePresent method, as for our workaround (see
> ticket) it was not necessary. At least the native call swapchain->present
> dows not return that error code
> (https://learn.microsoft.com/en-us/windows/win32/api/d3d9/nf-d3d9-idirect3dswapchain9-present).
> I did not look decisively into all the native calls behind
> D3DRTTexture#readPixels.
>
> As I said I will post the results (prism.verbose output) for the 2 versions
> later as a base for discussions.
I have an update from Version 2 with timestamps. It seems as if the error
actually happened (again) on 3 different occasions. I append the log with
"Error Time" timestamps included.
[version2_device_hung_error_log.txt](https://github.com/openjdk/jfx/files/12536632/version2_device_hung_error_log.txt)
Another update. This time for the version with a 15-minute timer (and
periodically checking the D3D error status every second). The reinitialization
happened after the 15 minutes went by. So it seems that the Version 2
(immediately calling reinitialze) is the most promising solution. But we will
run those tests again, at least one time each.
[15_min_timer_with_timestamp.txt](https://github.com/openjdk/jfx/files/12665424/15_min_timer_with_timestamp.txt)
Another time Version 2 hung and recovered immediately. At the moment this
version seems promising to us.
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1199#issuecomment-1708132760
PR Comment: https://git.openjdk.org/jfx/pull/1199#issuecomment-1726301400
PR Comment: https://git.openjdk.org/jfx/pull/1199#issuecomment-1727782600