yesterday was the first time since XNA when I was doing 3D programming again. I have a small particle system with renderer that uses a single DynamicVertexBuffer to render the particles. When I use a buffer for more than 4000 particles (=8000 vertexes) my application hangs and I see a lot of SharpDXException’s in the output.
I also get errors like: HRESULT: [0x887A0005], Module: [SharpDX.DXGI], ApiCode: [DXGI_ERROR_DEVICE_REMOVED/DeviceRemoved], Message: The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.
Is there a debugging tool to find out more about the issue?
There is nothing special.This is how I create my buffers: https://gist.github.com/SebastianStehle/13bc6a23809267dc62287b3971ad2e56
The indices are created once and the vertices are updated for each render call.
Any threading involved? It’ll depend on the which calls are emitting the message but an attempt to draw with a buffer that is being disposed/SetData at the same time will do this (ran into that nasty one myself).
Otherwise, it sounds like you’re timing out the driver.
Yes, I also think so that I timed out the driver, but I don’t know why.
I only have a Intel UHD Graphics, because I do not have my desktop machine available right now (moving to another city), but I think 8000 vertexes should not be a problem even for that machine.
My shader is also not very special: https://gist.github.com/SebastianStehle/e79ff4e37ded9f797ced0da71488409b
Edit: I just remember that I have used Intel VTune to check the performance and it mentioned that there is a fill rate bottleneck. I emit all pixels very close together. It could just be a fillrate limitation and not the amount of particles. Therefore each pixel has to calculated thousand of times, especially because the depth buffer is turned off for my particle effect.