Running Nsight Graphics 2019.5.1, I’ve noticed a few problems with the current render target preview when running with our OpenGL-based engine. These issues are not new in 2019.5.1, but have been problems since we started using Nsight Graphics late last year.
- First, CSAA render target preview isn’t supported, so I always have to disable this and drop down to 1x rasterization to get anything useful. It’d be helpful if Nsight Graphics supported CSAA preview.
What I see with CSAA render targets: Nsight Graphics reports: “Cannot display preview” in the Current [Render] Target View. Clicking on the “Color 0” or “Depth” render target attachment links reveals this in the Resource View’s Graphical view tab: “Failed texture creation: invalid data” with this text in the lower-left of the tab: “Pixel inspector is not available for unsupported textures.”
- Second, even when I drop down to single-sample render targets, successful preview of the 1X render target state in the “Current Target View” panel is hit-and-miss (more miss than hit).
If I drag the active “Event ID” pointer back and forth in a region issuing draw calls, the Current Target View is typically black, as if nothing has been drawn. However, while it is black, if I click on the “Color 0” render target attachment link in the Current Target View panel, then I can see in the Resources View image for the render target color texture that the current content is correct for for that specific mesh layer currently being rendered. If the “Current Target View” rendered the state of the FBO attachment texture in the same way as the Resource View does, that’d be an improvement.
However, while viewing the current “Color 0” and “Depth” contents using the Resources View sometimes yields the correct result, frequently the image contents are missing the background sky dome, as if the sky dome wasn’t rendered before this mesh layer I’m moving back and forth through (though it was). I can scroll back and forth within the mesh layer GL calls and the sky dome will appear and disappear behind the mesh layer at various revisions in the texture contents. When absent, the background content is black, though the mesh layer being rendered is correct for that point in rendering. I have no idea what’s going on to cause this preview bug.
Finally, whenever my current “Event ID” pointer lands on a draw call (e.g. glMultiDrawElementsIndirect() in this case), then the “Current Target View”'s status flips to “No targets bound for this event”, which is of course wrong. The current render target was bound long before that draw call, and there were no render target binds anywhere near this draw call. When Nsight Graphics sees that a render target is bound, and I walk down call-by-call with the current Event ID pointer to this draw call, it flips to “No targets bound for this event” when I get to this draw call. However, if I then back up one GL call to the previous, Nsight Graphics “still” reports “No targets bound for this event”. So it seems that there’s some kind of stale state involved in Nsight Graphics’ determination of whether a render target is bound for a specific event ID. Related: The “Render Target Ranges” bar shows no breaks in which render target is bound when the “Current Target View” gets confused and thinks there is no render target bound. So perhaps consider having the “Current Target View” look to how the “Render Target Ranges” bar is determining the currently-bound framebuffer for a fix.
Possibly-related question: Does Nsight Graphics require that framebuffers be re-bound every frame? Currently, there are no re-binds. The primary offscreen FBO stays bound active across frames, with the results blitted to the window using glBlitNamedFramebuffer().
If you need more details, just let me know. Thanks.
My setup here:
GPU: RTX 2080 (non-Ti)
NV Driver: 431.60
Nsight Graphics: v2019.5.1.0 (Build 27346247)
OS: Win 10 Pro