I’m not sure whether this is the place to report bugs / regressions, feel free to point me to a better suited place.
We have an old application which still uses D3D9 (basically a video game like renderer). Our customer can create his own models and terrains. One of such terrains from time to time makes the driver hang. We don’t know why, most likely there’s some issue with illegal geometry but since we can’t access his models and his work stations for debugging, we have to live with that. For that scenario our programmers implemented a workaround – every time IDirect3DDevice9::Present() returns D3DERR_DEVICEHUNG we reset the device, the scene is frozen for a few seconds and everything’s good. Customer happy, we happy.
This was working with R418 U5 (425.51). Then our customer was forced to update the driver due to other issues (which have been fixed in the newer versions) and a strange thing started to happen. Instead of D3DERR_DEVICEHUNG, the driver would return D3DERR_DEVICELOST. This itself is very suspicious but we could live with that, as long as the driver would follow the documentation:
If an application detects a lost device, it should pause and periodically call IDirect3DDevice9::TestCooperativeLevel until it receives a return value of D3DERR_DEVICENOTRESET.
And this is not happening, all we get from TestCooperativeLevel() is D3D_OK. We can call it even right after Present() (which returned device lost) and it would say D3D_OK (not even D3DERR_DEVICENOTRESET). So this is clearly wrong because we not only can’t detect that something went wrong but what is worse, we can’t recover from this situation (as it is always OK). The only workaround possible is to make either D3DERR_DEVICEHUNG and D3DERR_DEVICELOST equal (very dangerous as we can get ‘device lost’ for various other reasons) or via specific code path like when we get device lost and OK as a follow-up, we know that the driver is wrong and do the reset but this is also very fragile solution.
The aforementioned behavior can be observed on R450 U3 (452.06) and R470 U3 (471.68).
Is there any way to get this fixed / reverted to the original behavior?