I have an application in which I do raytracing in OptiX (8.0) and rasterization in Vulkan (1.3).
When I start the application in NVIDIA Nsight Graphics, the Vulkan calls are traced correctly, but there is no tracing of anything OptiX. If I do pure Vulkan (i.e. including raytracing), then everything works as expected.
According to the release notes of 2021.3 this use case is supported, but I can’t find an option to enable tracing OptiX as well and the documentation doesn’t mention OptiX at all and neither does the Advanced Learning section.
Thanks for using Nsight Graphics and I am sorry that you meet this issue.
Does your app crash when using OptiX and launched by Nsight Graphics? What do you mean “there is no tracing of anything OptiX”? When OptiX works, you should also see some counters/metrics of GPU by checking (for example) “Unit Throughputs” under the main view of GPUTrace of Nsight Graphics.
No, it doesn’t crash, the app works fine. I just don’t get the OptiX metrics.
I start my app via Visual Studio Nsight Extension, choose Frame Debugger. I don’t set any options (i.e. every setting is in its default state).
Once the app runs, I can see a “Linked Programs” pane, which shows me a Graphics Pipeline with Vertex and Fragment shader - this will is my Vulkan rasterizer part.
I then choose “Capture for Live Analysis” and the metrics, infos and buffers I get are all from Vulkan.
What I would like to see are the buffers I send to OptiX for Raytracing.
I have now also opened the GPU Trace that you suggested, but most of the metrics seem to be API independent. I can see RTCORE Throughput being utilized, so I assume it tracks the OptiX calls, but as said earlier, I would like to look into the buffers for debugging purposes.
I am not an expert of OptiX, but the buffer/image you send to OptiX should also be a Vulkan buffer/image, right? Maybe you can check the menu by Frame Debugger → All Resources, it will show you all resources within the Vulkan app.
No. While I can (and in some cases do) share resources between OptiX and Vulkan, most of what goes into the Raytracing call, i.e. most of the Launch Parmaters, are not shared. Some things, like the acceleration structure cannot be shared as far as I know, so they need to be pure OptiX resources. With Vulkan I can examine the acceleration structures in NSight Graphics, but with OptiX I cannot (or at least I don’t know how).
Please allow me to make something clear, the release note of Nsight Graphics 2021.3 about the support of OptiX is target GPUTrace (It has a sub title “GPU Trace OptiX™ Support”).
As you can see, OptiX’s support of Nsight Graphics is only about GPUTrace, what you want to see is about Frame Debugger, and that looks like a new feature request to me. Can you describe your request more detailly with simple repro sample and detail descriptions?
In short, I want to be able to debug (/view) resources of OptiX in NSight Frame Debugger.
In particular, I want to be able to see buffer contents and the acceleration structure(s) similar to how this is possible in Vulkan.
One use case is:
Create an OptiX app (which in my case uses Vulkan to display the image in a window)
The launch parameters contain different values and buffers (i.e. arrays of data)
→ I want to inspect the values and the buffers in NSight as they are available on the device
Another use case is:
Create an OptiX app as above
Create a geometry acceleration structure and an instance acceleration structure
→ I want to view the instance acceleration structure in NSight similar to how I can view a top level acceleration structure in Vulkan.
Finally, one use case is:
Createn an OptiX app as above
When calling optixLaunch, I would like to get metrics in the Frame Debugger the same way I get them for a Vulkan vkCmdTraaceRaysKHR and vkQueueSubmit combination.
NSight Graphics should be able to show these things regardless of other APIs in use (i.e. no matter if I store the OptiX result in an image on file or render to a Vulkan / DX image). Metrics ideally are displayed alongside the other APIs metrics, if any, something like this:
Thanks for the detail explanation. OptiX use CUDA and the OptiX’s support is in CUDA tools, after some internal discuss, what you request might already been supported in Nsight Compute.
Concerning the first two use cases, the users should be able to check the acceleration structure viewer of Nsight Compute which is similar to Nsight Graphics’. The document for the AS viewer of Nsight Compute can be found here: Nsight Compute :: Nsight Compute Documentation (nvidia.com)
Regarding the last use case, most RT related metrics are only available in internal builds right now, but our engineer team is working on something to make it better in public builds.
Nsight Compute is CUDA tool, hence it only supports OptiX and any DX/Vulkan/OGL APIs won’t be visible in it.
Alright, thanks for the response. I shall try using NSight Compute soon-ish. Might I suggest pointing users to NSight Compute from the NSight Graphics documentation? Since I’m doing raytracing, I wouldn’t have thought to look at NSight Compute, regardless of the API.