we have a Windows/DirectX11 2D Renderer that paints textured triangles to the screen from back to front. There is no face-culling or depth test activated.

Now on AMD GPUs it happens randomly that an already painted triangle disappears. That means it looks like something cleares the specific triangle out of the backbuffer after it has already been painted resulting in flickering graphics. It happens regardless how the triangle is painted (single Triangle, TriangleList, TriangleStrip).

When debugging with RenderDoc we found that it is complete random, which drawcall triggers this clearing. You can jump back and forth between any two drawcalls that come after the triangle has been painted and there is a chance that it will clear the triangle. The drawcalls that trigger the discarding are drawing on completely other areas on the screen/backbuffer. So they are not even overlapping the area that the affected triangle occupies.

We have already checked for any NaNs or other uninitialized data being sent to the GPU, but couldn't find anything.

These artefacts do not appear on NVidia or Intel GPUs. Thanks for any ideas what we could look for to debug and fix this issue further.

  • $\begingroup$ Does the deletion appear even if there is no other triangle behind the deleted triangle? You said that you do not use the depth test. Maybe the render order of the triangles is different on AMD GPUs. So it could be that the front triangle is overwritten by the triangle behind it. I would try to create a scenario where some parts of the screen are covered by only one triangle and check if this triangle is discarded. You can also activate additive blending to see if the flickering is still present. $\endgroup$
    – Thomas
    Aug 30, 2023 at 7:18
  • $\begingroup$ when activating additive blending, with a low alpha channel value for each triangle, the flickering will stop if no triangles are deleted. With alpha blending you can easily check if the triangle was really deleted or just overwritten by others $\endgroup$
    – Thomas
    Aug 30, 2023 at 7:22
  • $\begingroup$ Thanks @Thomas, the render order is always the same (back to front) at least from our application side. From the visual artefact it doesnt look like another triangle is overriding it, since the shape of the missing piece is exactly the triangle that is discarded. I'll play around with the additive blending and come back to you. $\endgroup$
    – user20154
    Aug 30, 2023 at 8:10


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.