Nsight Graphics

The user guide for NVIDIA Nsight Graphics.

The user guide for NVIDIA Nsight Graphics.

IMPORTANT: This documentation is for individuals or companies under NDA with NVIDIA and may not be shared or referenced with any other party.

For shareable documents, please see the documentation at this link.

Introduction to NVIDIA Nsight Graphics

Nsight Graphics Pro™ is a standalone application for the debugging, profiling, and analysis of graphics applications. Nsight Graphics Pro supports applications built with DirectCompute, Direct3D (11, 12), OpenGL, Vulkan, Oculus SDK, and OpenVR.

This documentation is separated up into different sections to help you understand how to get started using the software, understand activities, and offer a reference on the user interface.

  • Getting Started - Offers a brief introduction on how to use the tools.

  • Activities - Nsight Graphics Pro Supports multiple activities to target your workload to the need of your work at a particular point in time. This section documents each of these activities in detail.

  • User Interface Reference - Provides a deep view of all of the user interface elements and views that Nsight Graphics Pro offers.

  • Appendix - Contains a selection of topics on concerns not covered by any other section.

Getting Started

This section describes an approach to using the Nsight Graphics Pro tools.

Expected Workflow

When debugging or profiling, it is important to narrow your investigation to the path that provides the most impactful and actionable data for you to make conclusions and solve problems. Nsight Graphics Pro provides a number of tools to fit each of these workflow scenarios.

When debugging a rendering problem, Nsight Graphics Pro's Frame Debugger is the tool of choice. This tool enables the inspection of events, API state, resource values, and dependencies to understand where your application might have issues. For more information on the Frame Debugger, see Frame Debugger.

When profiling a graphical application, the first step is to determine if you are CPU or GPU bound. If you are CPU bound, you will not be able to issue enough work to the GPU to take full advantage of its full processing power. If you are GPU bound, the GPU is not able to process the work it is issued fast enough and your engine may stall. One way of making the determination of which aspect is limiting you is to use Nsight Systems™. Nsight Systems is a system-wide performance analysis tool designed to visualize an application’s algorithms, help you select the largest opportunities to optimize, and tune to scale efficiently across any quantity of CPUs and GPUs in your computer. NVIDIA also provides a system analysis and trace tool within Nsight Visual Studio Edition; for more information on that tool see this site.

If you have determined that you are CPU bound, you will want to use a CPU profiling tool to discover how you can eliminate inefficiencies to issue work faster to the GPU. You may also want to look into the overhead of the API constructs you are using and determine if there are more lighter weight constructs that can offer the same effect at less cost. The Frame Debugger tool is an excellent resource while you are making these adjustments to your engine.

When GPU bound, you will want to determine where and how you are limited by the GPU. Nsight Graphics Pro 's profiling tools can offer you this information. For a quick, high-level evaluation of your GPU performance, the real-time frame performance graphs that Nsight Graphics Pro provides can offer you a continuous look at your performance as you navigate your scene. For a detailed, per-range analysis of your GPU performance, you can use the Range Profiler to gather this information. This analysis can help you to determine whether you need to optimize your shaders, render target and texture usage, or memory configuration.

How to Launch and Connect to Your Application

To analyze an application, Nsight Graphics Pro requires the launching of applications through its launching facilities. The sections below describe creating a project, launching the application, and connecting to it so that you can perform your analysis.

Upon starting Nsight Graphics, you are presented with the option to create a project. If you are using Nsight Graphics Pro for the first time, skip project creation by selecting continue under Quick Launch.

Once selected, you will be presented with a target-specific dialog that allows you to configure the application to launch. Browse and select the activity you wish to run and then proceed to the target-specific instructions below to configure the application to analyze.

The target-specific sections below describe how to launch and connect on each specific platform. While the process may be different on different targets, there are many commonalities between all systems. In particular, once a process is launched, the Nsight host must attach to that process in order to analyze it. This logical separation of launch and attach facilities allows for complex use cases including remote targets, launching though command lines, reattaching to previous sessions, etc. The Nsight host does simplify many common cases, however, by supporting user-controlled automatic connection to processes that were just launched. The sections below cover these uses cases and more, in turn.

Process Launch and Connection on Windows Targets

Launching an Application with Automatic Attach

Nsight Graphics Pro supports automatic attach to processes of interest. It accomplishes this by identifying the processes in a process hierarchy that perform graphics work, signaling that these are of interest.

To launch your application, perform the following steps.

  1. Set the application executable to the path of your application. This path may be any executable or batch file.
  2. If your application requires a working directory that is different from your application's directory, adjust it now.
  3. Adjust the environment (if necessary).
  4. Leave Automatically Connect as Yes.
  5. Click Launch.

Once launched, you will be presented with a dialog that notes the launching and attaching of your application. After the launch completes, you are ready to begin your analysis.

Connecting to an Application with Manual Attach

There may be some cases where a manual attach to an application is desired. These situations include:

  • Using the command line launcher to launch applications (see Process Launch from a Command Line)
  • Automatic attach is attaching to an application other than the one you want
  • Connecting to an application that has previously been detached and reattach to the analysis session is desired

If the application is already launched, perform the following steps:

  1. Click the Connect button.
  2. Select the Attach tab.
  3. Select the application you wish to analyze in the attach tab and click Attach.

After the launch completes you are ready to begin your analysis.

In the example image above, VRFunhouse.exe is a child process of the UE4Game.exe launcher. Selecting VRFunhouse.exe and clicking Attach would allow you to analyze the primary application.

Remote Launching

Remote debugging is supported on Nsight Graphics Pro on Windows through use of the Nsight Remote Monitor. This is a process that runs on a target machine to allow connections to be started on that machine.

To run the remote monitor, install Nsight Graphics Pro on the target machine. Then, launch the remote monitor on that machine by Start > NVIDIA Corporation > Nsight Remote Monitor.

Once the monitor is launched on the remote machine, you need to add the remote monitor as a connection in Nsight Graphics Pro. By default, launches will be done on the localhost machine. To add another machine, click the + button.

This brings up a dialog in which you can add a machine name or IP address.

Enter the machine name in IP/Host Name. Click Add to add the connection. The machine you just added will be listed as the target connection at this time.

Any number of connections may be added; connections can be removed by clicking - on the selected connection. The connections may be switched between any of the added connections before launch or attach. Connections are globally persisted and may be applied to any project once they are added.

Process Launch and Connection on Embedded Linux Targets

Remote debugging on Embedded Linux is supported through SSH connections. Enter your SSH information when establishing the connection to connect to the target machine.

Process Launch from a Command Line

Nsight Graphics Pro offers a command line launcher to facilitate launching on applications for which the environment setup can be complex to transfer to the host application. This executable is located in the host application folder:


<install directory>/host/windows-desktop-nomad-x64/nv-nsight-launcher.exe


<install directory>/host/linux-desktop-nomad-x64/nv-nsight-launcher.bin

Command Line Tool Arguments Details

To understand how to launch, start by launching the command line tool with the --help argument. This will display what a options the command line tool has.

Several of these arguments are optional, while some are required. The full argument list is the following:

  • --help: Display all available arguments.

  • --activity: Select target activity to use. Note: "activity name" must be exact name in "Activity" section of connection dialog.

  • --platform: Select target platform to use. Note: "platform name" must be exact name in "Target Platform" section of connection dialog.

  • --hostname: Select which device to launch application. Default value is "localhost".

  • --exe: Set executable path on target device.

  • --dir: Set working directory of the application to be launched.

  • --env: Set additional environments of the application to be launched.

  • --args: Set arguments passed to the application to be launched.

To launch succesfully, --exe is always required, --hostname is required if trying to launch application in a machine with nv-nsight-remote-monitor running, --activity and --platform is recommended to be set, otherwise they'll use values on Nsight Graphics Pro UI.


nv-nsight-launcher.exe --activity="Frame Debugger" --platform="Windows" 
--hostname= --exe=D:\Bloom\bloom.exe

Automatic Cleanup of Launcher Processes

There are some processes that have the potential of interfering with the launch of an analysis session of your application. These processes are typically long-lived application launchers – they often perform a coordinated launch between child process and the parent launcher. In some cases, this coordinated launch can interfere the process by which Nsight Graphics Pro injects itself with the approach analysis settings.

To mitigate this problem, Nsight Graphics Pro attempts to detect processes that are known to interfere and to offer the user an opportunity (dialog shown below) to terminate the processes before launch, thereby allowing a launch without interference.

The buttons on the dialog perform the following actions:

  • Yes - terminate the processes and continue launching
  • No - do not terminate the processes, but continue to launch the application
  • Abort - cancel the launch entirely

To edit the list of processes that are detected, add an entry to the list in Tools > Options > Injection.

After a Process is Connected

After a process is connected, it is ready to be analyzed. For many activities, a default set of windows will come up that offer an impactful set of tools for analysis that pertains to the activity. You can also add additional windows to the application by selecting a view from the menu bar. See the User Interface Reference for a detailed discussion of each view and tool window.

For the Frame Debugger activity that was started above, there are both live analysis and capture utilities. After experimenting with the live analysis tools, proceed into capture by selecting Capture for Live Analysis from the main toolbar. In Nsight Graphics Pro, a number of views will open. On the target application, the HUD will appear with the toolbar and scrubber. This UI allows you to view an exhaustive amount of information on the state, resources, and synchronization of your application.

With such an expansive set of information available, debugging a rendering problem is made easier.

Configuring Your Application for Optimal Analysis

In order for your application to work well with the analysis tools provided by Nsight Graphics Pro, there are a number of details you should consider when configuring your application.

Using Performance Markers

Performance markers are integral to nearly all workflows. We recommend that your application always run with perf markers when running under tools analysis.

Performance markers are most commonly used to delineate sections of events and note where in your application they begin and end. They can also be nested to show sub-sections of events. Perf markers are generally used to measure the amount of time that an inner portion of algorithm will take.

There are multiple different types of perf markers that are supported in Nsight Graphics Pro:

  1. Vulkan applications may use either VK_EXT_debug_utils or VK_EXT_debug_marker.

  2. OpenGL applications use the KHR_debug group, glPushDebugGroup and glPopDebugGroup.

  3. The NVTX tools extension library provides API-agnostic perf markers and may be used with all applications.

Shader Compilation

Nsight Graphics Pro works best when you have the full shader source available for debugging. Follow the steps below to set up your application for optimal configuration.

Naming Objects and Threads

Many of Nsight Graphics Pro's views and analysis benefits from naming API objects and threads. Similar to perf markers, these names can help offer increased context for your analysis. The tables below list the supported methods for naming objects and threads.

Table 1. Naming Objects
API Method




vkDebugMarkerSetObjectNameEXT or vkSetDebugUtilsObjectNameEXT

Table 2. Naming Threads
Platform Method




Not yet supported


Nsight Graphics Pro Supports multiple activities to target your workload to the need of your work at a particular point in your development process.

  • Frame Debugger - allows you debug a frame by each draw call. You can view vertex shaders, pixel shaders, and pipeline states.

  • Frame Profiler - provides a deep analysis of the performance of your application. Several features are provided to analyze.

  • Generate C++ Capture - The C++ Capture activity allows you to export an application frame as C++ code to be compiled and run as a self-contained application for later analysis, debugging, profiling, regression testing, and edit-and-compile experimentation a frame by each draw call. You can view vertex shaders, pixel shaders, and pipeline states.

  • GPU Trace - supports the analysis of SM workloads.

Frame Debugger

The Frame Debugger activity allows for:

  • Real-time examination of rendering calls;

  • Interactive examination of GPU pipeline state, including visualization of bound textures, geometry and unordered access views;

  • Pixel History shows all operations that affect a given pixel;

  • Range Profiler identifies performance bottlenecks and GPU utilization;

  • C++ Capture exports for offline collaboration and analysis.

When to use the Frame Debugger Activity

The Frame Debugger activity offers a comprehensive set of tools for discovering problems with your application's rendering or general operation. This activity enables the inspection of events, API state, resource values, and dependencies to understand where your application might have issues. Use this activity when:

  • You have a render-accuracy issue

  • You expect that you may have a synchronization issue

The Frame Debugger activity supports all APIs that are generally supported by Nsight Graphics Pro.

Basic Workflow

To start this activity, select Frame Debugger from the connection dialog.

The basic workflow for the Frame Debugger activity is to capture an application and then navigate the events, data, and resources that your application is submitting/using to identify your issue.

Whether you are debugging on the CPU or GPU, the first step of any debugging process is to narrow in on the set of data that you need to analyze to understand your problem. Generally, this means that you will want to scrub to a particular event of interest in either the Scrubber or the Event Viewer. Because Nsight Graphics Pro™ will show you the rendering contribution of every draw call, looking at either the HUD or the Current Target View will give you an indication of where your rendering might be going wrong. Another alternative is to use the Pixel History experiment to automatically identify the draw calls that relate to a particular texture update.

From there, you will want to use your knowledge of the graphics pipeline to try to understand what might be causing a problem. Some questions to ask yourself:

  • Is this a geometry problem? If so, is it a pre-transform or post-transform problem?

  • Is this a blending problem?

  • Is this a synchronization problem?

In some cases, there may be a combination of problems that exacerbate a given problem. Isolating the symptoms can be challenging, but an effective use of the tools can offer increased confidence that you are heading in the right direction.

Frame Profiler

The Frame Profiler activity provides a powerful set of tools to assess the performance of your application from a multiplicity of angles. The Frame Profiler Activity allows for:

  • Optimizing the rendering of your application

  • Seeing detailed GPU utilization

  • Automatic determination of performance limiters

When to Use the Frame Profiling Activity

The profiling activity provides detailed performance information for all units of the GPU. Use this activity when:

  • You know that your application is GPU bound.

  • You want to determine whether you are SM bound.

  • You want to explore the performance of a functional unit of the GPU.

The profiling activity currently supports profiling D3D11, D3D12, and OpenGL applications.

Basic Workflow

To start this activity, select Frame Profiler from the connection dialog.

This activity allows for detailed frame profiling and analysis once captured.

Detailed Frame Analysis

Profiling is supported by a similar capture workflow as discussed in the Frame Debugger activity. Once you have captured your application, several views come up by default that are targeted at providing the information you need to understand your applications performance on the GPU. Several views interact to make this possible, including action timings in the Event Viewer, a graphical display of the timings in the Scrubber, and a detailed breakdown of each of your application's workflows in the Range Profiler.

Once you have opened the Range Profiler, you will notice the Range Selector at the top of the view. This widget displays individual actions and ranges scaled by GPU time, similar to the Scrubber.

You can use the Range Selector to see the timings of various sections or passes in the captured scene, and select one of them to drill in and collect the detailed performance metrics. For more information on how to configure the Range Selector, see the Range Selector section.

What to Profile?

The first step for improving performance in a GPU bound application is to determine where you are spending GPU time in the rendering of the scene. This can be accomplished a number of ways using the Frame Debugger. First, adjust the scaling of the Scrubber to be based on GPU time.

This will allow you to see at a glance where the time is being spent on the frame. These ranges will show up in the Scrubber, also scaled by the amount of time the work executed within them takes. Finally, if you haven’t added debug ranges, you can use various criteria to create them on the fly in your debugging session, including render target sets, shader programs in use, etc.

Look for ranges that seem larger than expected, given what you are trying to accomplish in that section of the frame. Also, larger ranges/draw calls likely have more headroom for improvement, so they can be good places to start deeper investigation.

You can also see how much GPU time is spent on various actions and ranges in the Event Viewer. By sorting by GPU Time, you can quickly find the most expensive parts of the frame and begin your analysis from there.

Once you find an area you are interested in profiling, use the right mouse button context menu to initiate the Range Profiler. This will open up the profiler focused on the range or call you determined to be interesting. (Alternatively, you can open the Range Profiler through Frame Debugger > Range Profiler.)

Range Profiler Cookbook

Is my program CPU or GPU bound?

Try hotkey experiments such as minimum geometry and null scissor, to determine if you are GPU bound.

What are the most expensive draw calls in my application?

Capture a frame, and then run the Range Profiler. Once the Range Profiler is done running experiments, the entire scene will be selected by default. This will allow you to see details about all of the draw calls and dispatches in the scene. If you select Action Details in the Range Info section, you will see details on each draw call, including the execution time. Sort the table to time to see the most expensive draw call.

How can I optimize a range of draw calls?

In the Pipeline section, select Range Details and you will see an image with a virtual GPU pipeline. The red bars indicate units in the GPU that are not being used as efficiently as they could, so look for the higher bars to indicate where you need to spend time optimizing. (See below for specific tips on optimizing your API inputs for a particular unit).

How do I see collections of draw calls which share common state (like pixel shaders and vertex shaders)?

The Range Profiler contains a powerful grouping capability that allows you make new ranges based on common state. These include ranges based on program/shaders being used, viewport, render targets, and even user ranges that can be declared on the fly.

How do I profile draw calls which are in a specific performance marker?

The scrubber at the top of the Range Profiler View shows all of the performance marker ranges defined by the application, along with the amount of time spent for each one. A good strategy would be to look for ranges with a large amount of time, then drill down to where you see a large amount of time being spent. Once you click on that range, you can look at the Pipeline section for details on how that selected range is utilizing the GPU.

Why does my application run at a different frame rate under Nsight Graphics Pro?

The Nsight Graphics Pro Frame Debugger disables VSYNC, so applications that have VSYNC enabled under normal circumstances may see a higher frame rate when the same application is run under the Frame Debugger. Nsight Graphics Pro also has a small performance overhead, which may reduce the frame rate slightly.

Generate C++ Capture

The C++ Capture activity allows you to export an application frame as C++ code to be compiled and run as a self-contained application for later analysis, debugging, profiling, regression testing, and edit-and-compile experimentation.

When to Use the Generate C++ Capture Activity

While C++ captures can be collected in while Frame Debugging, the C++ capture activity provides a focused activity to streamline the creation of captures. Non-necessary analysis subsystems are turned off in order to allow for the quickest and more robust application capture. This activity is an excellent way to save a snapshot of your application, frozen in time. Use this activity when:

  • You want to save a deterministic application for follow-up performance analysis.

  • You want to save a reference point for how your application is working.

  • You want to share a minimal reproducible with the developer tools or driver teams at NVIDIA to facilitate bug reporting.

The Generate C++ Capture activity supports all APIs that are generally supported by Nsight Graphics Pro.

Basic Workflow

To start this activity, select Generate C++ Capture from the connection dialog.

Once the application is running, the Generate C++ Capture button will be available on the main toolbar.

Once a capture is started, the target application will temporarily pause, and a progress dialog will be shown detailing the steps of the export to C++ process. When complete, the C++ project is written to the disk and the application will resume.

By default, the save directory is co-located beside the current project. If no project is currently loaded the default save directory is used (see Options > Environment > Default Documents Folder).

In addition to the C++ project, the code generation process also produces an nsight-gfxcppcap file with additional information and utilities. These nsight-gfxcppcap files are automatically associated with the current project and can be reopened later.

The additional features of an nsight-gfxcppcap file include:

  1. Screenshot of the capture taken from the original application.

  2. Information about the captured application and its original system.

  3. Statistics about the captured API stream.

  4. Utilities to build the C++ capture without opening the generated Visual Studio project.

  5. Utilities to launch the compiled application:

    1. The Execute button will launch the compiled executable.

    2. The Connect... button will populate a new connection dialog that allows you to run a specific activity on the generated capture.

  6. User comments that are persisted within this file.

Using a Saved Capture

  1. To use the saved capture, use Visual Studio's Open Folder capability on the directory that was generated. After doing this, Visual Studio will read the CMakeLists.txt and allow you to build and run the executable . Alternatively, if you are using a version of Visual Studio that is earlier than 2017, and it does not support native CMake loading, you can use a standalone CMake tool to generate the projects for your version of Visual Studio.

  2. These solution files contain a number of generated source files.

    1. Main.cpp — This is where all of the initialization code is called, resources are created, and each frame portion is called in a message loop.

    2. ResourcesNN.cpp — Depending on the number of resources to be created, there will be multiple ResourcesNN.cpp files, each with a CreateResourcesNN call in them, that will construct all of the resources (device(s), textures, shaders, etc.) that are used in the scene. These are called in Main.cpp before replaying the frame in the message loop.

    3. FrameSetup.cpp — This file contains all of the state setting calls to set the API state to the proper values for the beginning of the frame, including what buffers are bound, which shaders are enabled, etc.

    4. FrameNPartMM.cpp — In Direct3D and single-threaded OpenGL captures, these files contain the API functions, each named RunFrameNPartMM(), to replay the frame. It is split into multiple files so generated code is easier to work with. These functions are called sequentially in the message loop in Main.cpp.


      In this scenario, both N and MM are placeholders for numbers in the multiple files generated. FrameN will typically be Frame0 since only a single frame is captured, and PartMM will typically be in the 00-05 range, depending on how many API calls are in the frame.

    5. ThreadLLFrameNPartMM.cpp — In multi-threaded OpenGL captures, these files contain the API functions, each named ThreadLLRunFrameNPartMM(), to replay the frame. The functions correspond to the work done by each thread during the frame. These functions are called by their respective threads and synchronized to replay the saved events in the same order as captured.

    6. ReadOnlyDatabase.cpp — This is a helper class to access resource data that is stored in the data.bin file. It is accessed throughout the code via the GetResource() call.

    7. Helpers.cpp — These functions are used throughout the replayer for various conversions and access to the ReadOnlyDatabase.

    8. Threading.cpp — This file contains helper functions and classes to manage threads used in the project.

  3. Build and run the project.

Changing a Resource

If you want to change a resource (for example, to swap in a different texture), you can change the parameters for the construction by looking within the ResourcesNN.cpp files for the texture in question. Textures can be matched by size and/or format. Once you find the variable for the texture, look for that name in the FrameSetup.cpp file. This will contain source lines to lock the texture, call GetResource() to retrieve the data from the ReadOnlyDatabase, and then call memcpy(…) to link the data to the texture. You can substitute the call to the ReadOnlyDatabase with a call to read from a file of choice to load the alternate texture.

Changing a Draw Call

If you want to change the state for a given draw call, you can locate the draw call by replaying the capture within Nsight Graphics Pro and scrubbing to find the call you want to examine. Search in the FrameNPartMM.cpp files for Draw NN, where NN is the 0-based draw call index that Nsight Graphics Pro displayed on the scrubber. Doing this will bring you to the source line for that draw call, and from here, you can add any state changes before that call. Alternatively, you can also disable that specific call by commenting out the source call containing the draw call.


  • -repeat N — This setting enables Nsight Graphics Pro to use serialized captures in the normal arch workflow. The N setting indicates the number of times to repeat the entire capture; the default setting is -1, which keeps the capture running on an infinite loop.

  • -noreset — This setting controls whether context state and all resources are reset to their beginning of frame value. When this setting is specified, all frame restoration operations will be skipped, avoiding the performance cost associated with them. Note that this may introduce rendering errors if the rendered frame has a data dependency on the results of a previous frame.

User Interface Reference

This section provides a deep view of all of the user interface elements and views that Nsight Graphics Pro offers.

App Configuration and Activity Selection UI

Launch Tab

The Launch tab enables launching applications for analysis. This is where you will add the basic process information to launch and subsequently connect to the application you wish to analyze.

This tab has the following controls:

Application Executable - Specifies the root application to launch. Note that this may not be the final application that you wish to analyze; see this section on how to launch different types of applications.

Working Directory - The directory in which the application will be launched

Command Line Arguments - specify the arguments to pass the application executable.

Environment - the environment variables to set in the launched application

Automatically Connect - specifies whether the launched application should be automatically connected to. If the launched application is a launcher that creates the process that you ultimately wish to analyze, set this to 'No'.


Several fields have a selector to allow you to cycle through recently used entries. This is a useful capability for cycling through common configurations.

Attach Tab

To attach to an application, it must have previously been launched through the launch tab. This page will list the launched application as well as any children that the application has launched.


If the host disconnects for any reason, and the target happens to still be running, you can reattach to the previously launched or even captured application by using the attach facility. The process does not have to be newly relaunched.

Activities Options

Nsight Graphics Pro allows for adjusting the activity with a large set of options. Options are available in the Connect window under the Additional Options section. These options are saved per-project, and per-activity, because the options for one activity may not relate to the other. Note that you may need to apply them to multiple activities if your needs for each activity are the same.

Table 3. General Options
Option Description

Enable Target HUD

Enables the HUD on the target application, which enables:

  • Capturing via Ctrl+Z

  • Draw binning

Force Repaint

Enables a periodic trigger of window invalidation, which causes applications that lazily present to repaint, such as many professional visualization applications. This is useful for providing a consistent stream of frames with which Nsight Graphics Pro can perform its analysis.

Table 4. OpenGL Options
Option Description

Frame Delimiter

Select the API call used to delimit frame boundaries for OpenGL applications. This setting is useful for applications that do not necessarily present to a screen, such as offscreen rendering applications or benchmark applications.

Table 5. Vulkan Options
Option Description

Force Validation

Force the Vulkan validation layers to be enabled. This requires the LunarG Vulkan SDK to be installed.

Validation Layers

Layers used when force enabling validation. This option is only visible when 'Force Validation' is turned on.

Enable Coherent Buffer Collection

Controls the monitoring and collection of mapped coherent buffer updates during capture. This is potentially an expensive operation and many applications can replay a single frame without actively monitoring these changes. Use this option if your capture takes a long time but you do not straddle frames with coherent updates.

Enable Revision Zero Data Collection

Controls the collection of revision zero (e.g. pre-capture) data during capture. This is potentially an expensive operation and some applications can replay a single frame without explicitly storing these revisions.

Allow Unsafe pNext Values

Allows the inspection of Vulkan structures with potentially dangerous pNext values. By default structures with no known extensions are skipped.

Use Safe Object Lookup

Controls how objects are stored internally by the tool.

Safe lookup are slower but may improve stability when using an unsupported extension.

  • Auto - Fallback to safe mode when an unsupported extension is seen.

  • Enable - Always use safe object lookup.

  • Disable - Never use safe object lookup.

C++ Capture Object Set

This option controls which objects are exported as part of a Vulkan C++ capture.

By default we limit the object set to only objects used in the capture but in some cases a user might want to see all objects used in the application. This typically isn't necessary and can lead to a very large C++ project.

This might also help WAR a bug where the tool incorrectly prunes an object it shouldn't have.

  • Only Active - Only include objects actively used in capture

  • All Resources - All active capture objects plus all buffers, images, pipelines, and shaders

  • Full - The entire object set

Reserve Heap Space

Amount of physical device heap space (MB) to automatically reserve for the frame debugger.

Unweave Threads

For multi-threaded applications, attempts to remove excessive context switching by grouping thread events together. May improve C++ capture replay performance of heavily threaded applications.

Table 6. Ray Tracing Options
Option Description

Acceleration Structure Geometry Tracking

This option controls how geometry data is tracked for acceleration structures. There are tradeoffs between performance, accuracy, and robustness of any given approach. The default setting of 'Auto' is most often implemented in terms of 'Shallow Geometry Reference with Integrity Check', which tries to match the most common application behavior with the highest performance, while still providing some error checking, but it might not be sufficient for all applications. For example, after building an acceleration structure, it is legal for an application to update or destroy the geometry buffers that were used in construction. In this situation, without deep copies of the original data, the tool cannot guarantee full function of the acceleration structure viewer, or of C++ capture. If your application uses this pattern, please select the 'Deep Geometry Copy' option.

This option generally implies 'Shallow Geometry Reference with Integrity Check' except in cases where Nsight will override the behavior with known application profiles.
Shallow Geometry Reference with Integrity Check
Uses the original input buffers as specified by the application, but attempts to determine the validity of these input buffers. This option is a compromise between performance and error checking, but cannot detect every error case. It may only work correctly when the application doesn't destroy or modify the buffers after construction. If you suspect issues with this default option, try using the 'Deep Geometry Copy' option.
Shallow Geometry Reference
Uses the original input buffers as specified by the application. This option has the fastest performance, but only works correctly when the application doesn't destroy or modify the buffers after construction.
Deep Geometry Copy
deep-copies all builds and refits, collecting full data. This is an exhaustive collection, but it is has the most overhead and increases the memory burden of the tool, leading to risks for out-of-memory situations if the application is already tightly memory constrained.

Report Shallow Report Warnings

Controls whether warnings are issued for possible shallow reference validity issues. If an expert user knows that the original acceleration structure input data remains undisturbed they may silence warnings with this setting.

Collect Geometry In GPU Memory

By default acceleration structure deep copy data is collected in system memory, for stability reasons. Performance may be somewhat better doing the collection into GPU memory, but this puts pressure on the application's video memory budget.

Table 7. Troubleshooting Options
Option Description

Enable Driver Instrumentation

Controls the enablement of capabilities that require driver support. This effectively disables:

  • Hardware performance metrics

  • Native shaders collection

  • Other underlying mechanisms for timing

Disabling this option is the first and best option to try if you run into capture errors as it disambiguates problems quickly given the number of subsystems it turns off.

Collect Shader Source

Controls the collection of shader source code associated with shader objects. This option is useful if you suspect an error or incompatibility with any of the shader processing libraries you use (such as D3DCompiler.dll).

Collect Shader Disassembly

Controls the collection of shader disassembly associated with shader objects. This option is useful if you suspect an error or incompatibility with any of the shader processing libraries you use (such as D3DCompiler.dll).

Collect Shader Reflection

Controls the collection of shader reflection associated with shader objects. This option is useful if you suspect an error or incompatibility with any of the shader processing libraries you use (such as D3DCompiler.dll).

Collect Native Shaders

Enable fetch of hardware native shaders which can be used to collect shader performance stats.

Collect Hardware Performance Metrics

Enables the collection of performance metrics from the hardware.

Ignore Incompatibilities

Nsight Graphics Pro uses an incompatibility system to detect and report problems that are likely to interfere with the analysis of your application. By default, these incompatibilities are reported and the user is given the option of capturing despite them (with an associated warning of the possibility of issues). Some applications may have innocuous incompatibilities, however, and having to view this warning every time might be undesired.

When this option is enabled, the frame will attempt to capture despite any incompatibilities. Use this option only when you are certain that the incompatibility will not impact your analysis.

Block on First Incompatibility

Nsight Graphics Pro uses an incompatibility system to detect and report problems that are likely to interfere with the analysis of your application. In some cases, these incompatibilities may be the first sign of an impending failure. Accordingly, being able to block on such a reported failure may aid in triaging and understanding a crash when running under Nsight Graphics Pro . This option is disabled by default so as not to interfere with expected operation, but it may be useful to toggle if you encounter an application crash under Nsight Graphics Pro .

Enable Crash Reporting

Enables the collection and reporting of crash data to help identify issues with the frame debugger.

While a user is always prompted before a crash report is sent, this option is available to suppress these facilities entirely.

Enable C/C++ Serialization

Enables the ability to serialize a capture to C/C++.

By default, applications are available to create a C++ capture, but there are some cases where extra data is collected in support of this feature before it is invoked. This option allows that collection to be disabled entirely.

Force Single-Threaded Capture

Controls whether capture proceeds with concurrent threads or with serialized threads.

Use this option if you suspect your application's multi-threading may be interfering with the capture process.

Replay Thread Pause Strategy

Controls the strategy used in live analysis for pausing threads.

  • Auto - Use the default strategy, which may use an Aggressive strategy for some applications.

  • Aggressive - Pause all non-Nsight threads.

  • RenderOnly - Only pause rendering threads.

Frame Debugging/Profiling UI

The Frame Debugger and Frame Profiler activities are capture-based activities. There are two classes of views in these activities – pre-capture views and post-capture views. Pre-capture views generally report real-time information on the application as it is running. Post-capture views show information related to the captured frame and are only available after an application has been captured for live analysis. For an example of how to capture, follow the example walkthrough in How to Launch and Connect to Your Application.

Application HUD

The Application HUD is a heads-up display which overlays directly on your application. You can use the HUD to capture a frame and subsequently scrub through its constituent draw calls on either the HUD or an attached host.

All actions that occur either in the HUD or on the host — such as capturing a frame or scrubbing to a specific draw call — are automatically synchronized between the HUD and the host, and thus you can switch between using the HUD and host UI seamlessly as needed.

The HUD has three (3) modes:

  1. Running: Interact with your game or application normally, while the HUD shows an FPS counter. When you first start your application with Nsight Graphics Pro, the HUD is in Running mode. This mode is most useful for viewing coarse GPU frame time in real-time while you run your application.

  2. Activated: Once activated (using the activation hot-key toggle), the Nsight Graphics Pro HUD allows the pause and capture of a frame from the running application.

  3. Frame Debugger: Once you have captured a frame, you can debug the frame directly in the Nsight Graphics Pro HUD (as well as from the host). The HUD allows you to scrub through the constituent draw calls of a frame, to view render targets with panning and zooming, and to examine specific values in those render targets.

Running Mode

In this mode, your application can interact with the game or application normally, and the HUD shows frame-time overlaid on the scene. When you first start your application with Nsight Graphics Pro, the HUD is in Running mode.

To activate the HUD, make sure your graphics application has focus, and then enter the activation hot-key, CTRL+Z. The HUD is now in Activated mode.

Activated Mode

Once activated (using the activation hot-key toggle), the HUD allows you to capture your application. A toolbar containing common operations additionally becomes visible in this mode.

Frame Debugger Mode

Once you have captured a frame, you can debug the frame directly in the HUD. While you can also debug the frame on the host, the HUD allows you to scrub through the constituent draw calls of a frame, to view render targets with panning and zooming, and to examine specific values in those render targets.

Hot Keys Action

CTRL + Plus (+)

Zooms in

CTRL + Minus (-)

Zooms out

CTRL + Zero (0)

Makes the current texture go to a 1:1 ratio so that 1 texel fills 1 pixel.

Left-click + drag on the scrubber at the bottom

Views a particular draw call in your frame. You can hold SHIFT when scrubbing for more scrub precision, which is especially useful when looking at frames with a large number of draw calls. When the desired draw call is active, release the left mouse button. The geometry for the currently active draw call will be highlighted, as long as it is on screen.

Left-click + drag on a render target

Pans and zooms the currently displayed render target. Use the mouse wheel to zoom in to a particular portion of the render target.

CTRL + mouse over a render target

Shows the value for the currently displayed render target. A small display window will show you a high-zoom view of the pixels in the area, and the value of the current pixel that the mouse is hovering over.

To switch the display to another active render target:

  • Click the Select Render Target button on the HUD toolbar.

  • A drop-down menu will appear, showing all valid choices for the current draw call. Select the desired render target.

  • Note that if a selected render target is not still active for a different draw call, the display will automatically switch to an active render target.

When you start debugging your graphics application with Nsight Graphics Pro, the target computer will begin running the application. You will notice a HUD toolbar overlaid on top of your application. At this point, your application is considered to be in run mode.

There are two different methods to pause the application, which causes it to enter Frame Debugger mode.

  • Press CTRL+Z and the spacebar on the target machine; or

  • Go to the main toolbar and select Pause and Capture Frame.

After you enter Replay Mode, you will see several features overlaid on top of the application, such as timelines of draw call events and performance markers. Perhaps the most notable of these features is the HUD Toolbar, which allows you to work with your application on the target computer itself.


Hides the GUI so you can view more of your application.

Switches between a hardware and software cursor.

Displays the Help menu, showing all available commands.

Selects a view of event ranges.

Exits the frame debugger and resumes your application.

Saves a frame capture to a file. By default, files are saved to: Documents\Nsight Graphics Pro\Captures

Changes the current object wireframe rendering method.

Changes the current render target display from the color buffer to depth or stencil.

Toggle the normalization view of the texture display.

API Inspector

The API inspector is a common view to all supported APIs that offers an exhaustive look at all of the state that is relevant to a particular event to which the capture analysis is scrubbed.

To access this view, go to Frame Debugger > API Inspector.

While the view is common, the state within it is particular to each API. See the section below that relates to your API of interest.

OpenGL API Inspector

When using the Frame Debugger feature of Nsight Graphics Pro, you may wish to do a deep dive into the specific draw calls in order to analyze your application further. There are three different categories of API Inspector navigation.

Pipeline Stages

The first category is laid out like a "virtual GPU pipeline." This pipeline section of the API Inspector consists of the following:

  • Vtx Spec (Vertex Specification) — State information associated with your vertex attributes, vertex array object state, element array buffer, and draw indirect buffer.

  • VS (Vertex Shader) — Vertex shader state, including attributes, samplers, uniforms, etc.

  • TCS (Tessellation Control Shader) — Tessellation control shader state, including attributes, samplers, uniforms, control state, etc.

  • TES (Tessellation Evaluation Shader) — Tessellation evaluation shader state, including attributes, samplers, uniforms, evaluation state, etc.

  • GS (Geometry Shader) — Geometry shader state, including attributes, samplers, uniforms, geometry state, etc.

  • XFB (Transform Feedback) — Transform feedback state, including object state and bound buffers.

  • Raster (Rasterizer) — Rasterizer state, including point, line, and polygon state, culling state, multisampling state, etc.

  • FS (Fragment Shader) — Fragment shader state, including attributes, samplers, uniforms, etc.

  • Pix Ops (Pixel Operations) — State information for pixel operations, including blend settings, depth and stencil state, etc.

  • FB (Framebuffer) — State of the currently drawn framebuffer, including the default framebuffer, read buffer, draw buffer, etc.

Object and Pixel State Inspectors

The object and pixel state inspectors section of the API Inspector consists of the following:

  • Textures — Details about all of the currently bound textures and samplers, including texture and sampler parameters.

  • Images — Details about all of the images currently bound to the image units.

  • Buffers — Details about all of the bound buffer objects, including size, usage, etc.

  • Program — Information about the currently bound program object and/or pipeline program pipeline object, including shaders, active uniforms, etc.

  • Pixels — Current settings for pixel pack and unpack state.


The miscellaneous screen contains additional information such as shader limits, implementation dependent values, transform feedback limits, and various minimum/maximum values.

Vulkan API Inspector

The API Inspector view has an API-specific pipeline navigator that allows you to select a particular group of state within the GPU pipeline. From here, you can inspect the API state for each stage, including what textures and render targets are bound, or which shaders are in use in the related constants. Note that if a stage is not active (either there is nothing bound to that stage or it doesn’t apply for the current action) it will be greyed out, but you you can still click on it to inspect the state.

Pipeline Stages

The following table shows the stages that are available for inspection:

  • Pipeline — Shows information about the currently bound pipeline object.

  • Render Pass — Shows information about the current render pass object.

  • FBO  — Shows information related to the Frame Buffer Object that is associated with the current render pass.

  • IA — The Input Assembler shows the layout of your vertex buffers and index buffers.

  • Viewport — Shows the current viewport and scissor information.

  • VS — Shows all of the shader resource views and constant buffers bound to the Vertex Shader stage.

  • TCS — Shows all of the shader resources associated with the Tessellation Control Shader stage.

  • TES — Shows all of the shader resources associated with the Tessellation Evaluation Shader stage.

  • GS — Shows all of the shader resource views and constant buffers bound to the Geometry Shader stage.

  • SO — Shows the resources bound for Stream Output.

  • Raster — Shows the Rasterizer State parameters, including culling mode, scissor and viewport rectangles, etc.

  • FS — Shows all of the shader resources associated with the Fragment Shader stage.

  • Pix Ops — Shows the Pixel Operations parameters, including depth/stencil, multi-sample, and blending states.

  • Compute — This shows all of the shader resource and unordered access views and constant buffers bound to the Compute Shader stage.

  • Misc - Shows miscellaneous information associated with the instance, physical devices, and logical devices.


The Pipeline page shows information about the currently bound pipeline object including: create info, pipeline layout, and push constant ranges.

Render Pass

The Render Pass page shows information about the current render pass including: clear values, attachments operations, and sub-pass dependencies.

Frame Buffer Object (FBO)

The Frame Buffer Object page shows information about the current frame buffer object including: the creation flags, image view attachments, and the current state of the associated textures.

Input Assembler (IA)

The Input Assembler page shows the layout of your vertex buffers and index buffers, as well as the vertex bindings and attribute information.

Shaders (VS, TCS, TES, GS, FS, CS)

The various shader pages display all of the shader modules, including: creation information, human readable SPIR-V source, current push constants, current bound descriptor sets, associated buffers, associated images and samples, and associated texel buffer views for this stage.


The Raster page shows all rasterization information associated with pipeline object include: polygons modes, cull modes, depth bias, and line widths.

Pixel Operations (Pix Ops)

The Pixel Operations page displays information associated with the current pixel state including: depth/stencil state, multi-sample state, and blending state.

Miscellaneous Information (Misc)

The Miscellaneous Information page shows information related to the instance, physical device(s), logical device(s), and queue(s)

API Statistics View

The API Statistics View is a high-level view of important API calls, and includes information to help you see where GPU and CPU time is spent.

To access this view, go to Frame Debugger > API Statistics.

Current Target View

The Current Target view is used to show the currently bound output targets. This can be useful because it focuses in on the bound output resources, rather than having to search for them in the Resources view.

To access this view, go to Frame Debugger > Current Target.

Current Target will display thumbnails along the left pane for all currently bound color, depth, and stencil targets. This view will change as you scrub from event to event. All of the thumbnails on the left can be selected to show a larger image on the right. You can also click the link below each to open the target in the Resources View.

Event Viewer

The Events view shows all API calls in a captured frame. It also displays both CPU and GPU activity, as a measurement of how much each call "costs."

To access this view, go to Frame Debugger > Events.

To add context to each API call, the thread ID and object/context that made that call are offered. Nsight also supports application-generated object and thread names in these columns; see Naming Objects and Threads for guidance on the supported methods for setting these names.

Clicking a hyperlink in the Events column will bring you to the API Inspector page for that draw call.

Right-clicking on an event or a push/pop range in the Events column will allow you to profile that specific event or range with the Range Profiler.

You can select whether to view the events in a hierarchical or flat view. If multiple performance marker types are used, you can select the correct one, as well as varying levels of verbosity for the call display (variable + value, value, or none). You can also sort the events by clicking on any of the available column headers.

The visibility of columns can be toggled by right-clicking on the table's header. By default some columns will be hidden if they offer no unique data (e.g. single thread) for the captured frame.

Filtering Events

The events view can be filtered with both a quick filtering expression as well as a detailed configuration dialog.

The filter input box offers a quick, regex-based match against events to find events of interest. Once entered, the view is automatically updated to match against the specified filter.

The Configure button brings up a dialog for more advanced, as well as persistent, filtering of the events in the view.

Changes within this dialog will take immediate effect. There are three major classes of filters:

  • Event Type Filters - these filters allow filtering to happen on the classification of the event. For example, you may want to hide all non-action events to quickly filter to just draws, clears, and other actions.
  • Other Filters - these filters allow matching against events with a particular characteristics. Additionally, the Advanced Filters tab allows for javascript-based filtering on particular columns.
  • Method Filters - these filters hide methods that match against method names or object types. To add method filters, right click on an event that you wish to hide and select one of the hiding capabilities within the view.

Filter Persistence

Filters set by the filter configuration dialog will persist from session to session. Additionally, if multiple filter configurations are desired, you may save different named versions and recall them quickly by name.

Filters entered into the main filter-input box are not persisted, as these filters are meant for quick filtering of the event data.

Regex Syntax

For entries that support regex syntax, the syntax is implemented with a perl-compatible regular expression language. Here are some examples of common tasks and the expressions that achieve them:

Table 8. Example regex filtering expressions
Task Expression

Search for a draw call


or use the predefined filter)

Match OpenGL binding calls


JavaScript Syntax

The Advanced Filters configuration dialog supports JavaScript syntax. This enables complex evaluation of filtering expressions. The basic approach for JavaScript expressions is to match a particular column of data against an expression. Columns are "accessed" via a $('ColumnName') expression. For example, a column titled "Description" is accessed via $('Description'). From there, you can perform mathematical, logical, and text-matching expressions. See some examples below to demonstrate the power and usage of these expressions:

Table 9. Example JavaScript filtering expressions
Task Expression

Match against the description column for draw


Find events with non-zero GPU time

$('GPU ms') > 0

Find odd events

($('Event') % 2) == 1

Find non-draw events with non-zero GPU time

/::Draw/.test($('Description')) != 1 && $('GPU ms') > 0


While filtering, it is often desired to keep the context of certain items while you find others. To prevent an event from being filtered, right click the event and select Toggle Bookmark.

If you wish to see the filtered results on the scrubber, you can select the tag button to the right of the filter toolbar, and a new row will appear in the Scrubber that displays your filtered events, allowing you to navigate those events in isolation.

Perf Markers

On the Events page, you can use the hierarchical view to see a tree view of performance markers. The items listed in the drop-downs correspond with the nested child perf markers on the Scrubber.

If you use the flat view on the Events page, the perf marker won't be nested, but you can hover your mouse over the color-coded field in the far left column, which allows you to view the details about that perf marker.

When an application uses multiple kinds of perf markers, the Marker API allows selecting the API to use for the display. This situation may arise if the application uses a middleware, for example, or mixes components with different marker strategies.

Event Breadcrumbs

To assist in navigation for an application using perf markers, the Events page shows a breadcrumb trail of the current perf marker stack. Each of these sections, including the current event, are clickable and will navigate back to that location in the Event page.

Geometry View

The Geometry view takes the state of the Direct3D, OpenGL, or Vulkan machine, along with the parameters for the current draw call, and shows pre-transformed geometry.

To access this View, go to Frame Debugger > Geometry.

There are two views into this data: a graphical view and a memory view.

Graphical Tab

Attribute Options

  • Position — Specifies the vertex attribute to use for positional geometry data.

  • Color — Specifies how to color the geometry. If Diffuse Color is selected, the selected diffuse color swatch will be used for coloring. If a vertex attribute is selected, the selected attribute will be used for per-vertex coloring.

  • Normal — Specifies the per-vertex normal. This selection applies when using a shade mode that specifies Normal Attribute or when rendering normal vectors.

Rendering Options

Clicking Configure in the bottom right corner of the Geometry View will open up the rendering options menu.

  • Reset Camera — Resets the camera to its default orientation. By default, the viewer bounds all geometry with a bounding sphere for optimal orientation.

  • Render Mode — Determines how to render and raster geometry.

    • Solid: renders filled geometry.

    • Points: renders a vertex point cloud.

    • Wireframe: renders a wireframe of the geometry.

    • Wireframe + Solid: renders filled geometry with a wireframe on top of it.

  • Shade Mode — Specifies the lighting mode of the rendered image.

    • Selected Color Attribute: Shades with the specified color attribute

    • Flat Shading Using Generated Normals: Renders the geometry using flat shading with calculated normals

    • Flat Sharing Using Normal Attribute: Renders the geometry using flat shading with the specified Normal Attribute.

    • Smooth Shading Using Normal Attribute: Renders the geometry using smooth shading with the specified Normal Attribute.

  • Render Normal Vectors — Renders the specified normal attribute as a vector pointing from each vertex. The vector may be colored by the Normal Color selection and may be scaled by the Normal Scale selection.

Memory Tab

The Memory tab of the Geometry View shows the contents of the vertex buffer, as interpreted by the current vertex or input attribute specification. This view is useful for seeing the raw data of your draw call. An additional capability of this view is that it highlights invalid or corrupt vertices to streamline finding problematic data.

There are two modes of display for the geometry data:

  1. Index Buffer Order shows the vertices as indexed by the current index buffer and current draw call.

  2. Vertex Buffer Order shows the vertices as linearly laid out from the start of the vertex buffer and draw call specification.

Range Profiler

The Range Profiler is a powerful tool that can help you determine how various portions of your frame utilize the GPU, and give you direction to optimize the rendering of your application. Once you have captured a frame, the Range Profiler displays your frame broken down into a collection of ranges, or groups of contiguous actions. For each range, you can see the GPU execution time, as well as detailed GPU hardware statistics across all of the units in the GPU. The Range Profiler also includes unmatched data mining capabilities that allow you to group calls in the frame into ranges based on various criteria that you choose.

To access this view, go to Frame Debugger > Range Profiler.

Note that the legacy Range Profiler, that is not user configurable, is still available. From the same menu, simply select Range Profiler (Legacy). This will be removed in a future release.

The Range Profiler initially appears with the Range Selector at the top, followed by 5 default sections below that: Range Info, Pipeline Overview, SM Section, Memory, and User Metrics.


Under certain conditions, the Range Profiler pane may be disabled and display one of the following messages.

Hardware signals are not supported in this configuration

This message could be due to one of the following reasons:

  1. You are running Nsight Graphics Pro with a Kepler or lower GPU.

  2. You are using a defunct or non-NVIDIA GPU.

  3. You are attempting to profile an application with a debug or validation layer enabled.

No hardware signals found for this API/GPU combination

This message is likely to occur when you are running Nsight Graphics Pro on a non-MSHybrid laptop.

Range Selector

The Range Selector provides an overview of the various rendering activities or passes in the scene. You can see how long each portion of the frame takes, and compare the length or cost of the ranges on the timeline. When it first opens, the Range Selector will show ranges based on the performance markers you have instrumented your application with. The tool supports various APIs for instrumentation, including the NVIDIA NVTX library, Knronos' KHR_debug, or any other range definition API supported by your graphics API of choice. While performance markers are the best way to specify ranges and are utilized throughout the entire Nsight Graphics, UI, there are other facilities for creating ranges on the fly. The Range Selector Clicking the Add... button will open a dialog that allows you to select what type of range you want to add.

  • Program ranges — Actions that use the same shader program.

  • Viewport ranges — Actions that render to the same viewport rectangle.

  • User ranges — A range defined by you on the fly. Use SHIFT + left-click and drag the scrubber on the created "User" row to create a new range. This can be helpful to drill into a section of the scene, or to compare different frame sections that don’t already have ranges defined for it.

When you click on a range on the Scrubber portion, the other sections of the Range Profiler View will automatically update with that selected range's information. You can also click on a single action in the Scrubber to profile only that action.


The Range Profiler comes with 5 default sections: Range Info, Pipeline Overview, SM Section, Memory, and User Metrics Section. The section headers have a small triangle to the left of the name that allows you to collapse or open each one. The sections have a different look when collapsed vs open, mainly giving high level information when collapsed, and fuller data when opened. Some of these sections also have combo boxes on the right side of the section header that allows you to choose the different visualizations available for displaying the data. Finally, there are tooltips enabled on the metrics, which can give further details on what is being measured.

Range Info

The Range Info section gives you basic information about the selected range, split up with the draw calls on the left-hand side, and the compute dispatches on the right-hand side. For the draw calls, there is the number of calls in the range as well as the number of primitives and pixels rendered, both total and average per draw call. On the compute side, there is similarly the number of calls, as well as thread and instruction counts, both total and average.

When you open up the section, there is a table that has many of the metrics on the collapsed view, and adds some additional metrics for primitive counts, z-culling, etc.

Pipeline Overview

The Pipeline Overview section gives an overview of how the selected ranges utilized the GPU. It does this by calculating a througput or Speed of Light (or SOL) for each unit in the pipeline.

Speed of Light (SOL): This metric gives an idea of how close the workload came to the maximum throughput of one of the sub-units of the GPU unit in question. The idea is that, for the given amount of time the workload was in the GPU, there is a maximum amount of work that could be done in that unit. These values can include attributes fetched, fragments rasterized, pixels blended, etc. Any value less than 100% indicates that the unit did not process the maximum amount of work possible.

When you open the Pipeline Overview section, you are presented with a visual representation of the GPU pipeline, and color bars indicating the SOL or throughput for each unit represented. You can use the combo box on the right side of the header to display a table of metrics for every action in the currently selected range.

SM Section

When collapsed, the SM Section has 2 main columns of data. On the left is a list of metrics about how utilized the SM (shader) units are in the GPU. SM Active tells you how many cycles the SM active and working during the measurement timeframe. SM Active Min/Max Delta gives an idea of the variance of work across all of the shader units in the GPU. If this value is low, this indicates that the workload is running only on a few SMs, either because of screen locality for pixel work or possibly that a compute dispatch was so small that it only occupied a small portion of the shader unit. The SM Throughput for Active Cycles indicates the same value as the throughput or SOL value in the Pipeline Overview, but only measures it when the shader unit is active. Finally, the SM Occupancy value gives you a percentage of how full the shader unit was with warps. Occupancy is key to hide latency, and things like register count and local memory usage in shaders can limit the number of warps. When there is not a warp eligible to issue an instruction, the SM is not able to do any work.

Related to the occupancy value, the right hand side shows typical instruction stall reasons, including long scoreboard (when the shader was waiting on a texture access), barrier (when the shader was waiting for other warps to get to a given instruction), etc.

When you open the SM Section using the top left triangle, you will see a table that includes SM statistics on the left, including thread mix based on shader type, and all of the warp stall reasons on the right.


The Memory section displays information about the L2 cache and Frame Buffer or memory unit. Each interface has a maximum throughput for a given amount of time. The memory section shows the percentage of the subsystem interfaces utilized for the current range.

When you open the section using the upper left triangle, you will see a diagram of the memory subsystem and the percentage indicating the amount of bandwidth our throughput each unit/interconnect utilized in the sampling experiment.

User Metrics Section

The User Metrics Section gives the user the opportunity to explore all of the metrics that are available in the Range Profiler. It is initially collapsed, but when you click the upper left triangle, 2 tables will appear. The left hand table lists the metrics with their name and a short description, as well as a check box to enable that metric for measurement. You can search for metrics of interest by using the filter box above the metric list. This will filter the metrics to a subset that matches the text you specify, which can be a GPU unit name, part of a metric value, etc.

When you select a metric, you will see a new entry appear in the right hand side table. Initially, you will likely see "…" appear for the value, which indicates that the tool is running the necessary experiments to retrieve the value. Once that is complete, the value will fill in.

Above the metric value table is a Transpose button. You can use this to transpose the table from column to row major and back.

Configuring The Range Profiler

The Range Profiler is user configurable via editing .section text files or .py python scripts.

By default, Nsight Graphics Pro™ ships with 4 .section files and 1 .py file. The .section files are able to display metrics only. The .py files can do everything the .section files can do (albeit with different syntax), and can also define rules. More on that below.

Each section can have a collapsed or Header view, and an expanded or Body view. The default sections, in order of display, contain the following information:

Section Header Body


Table of draw & dispatch values

Table of more detailed values


Table of values for SOL, etc.

Pipeline Diagram


Table of shader details

Table of more detailed values


Table of high-level metrics and common stall reasons

Table with more SM details and all stall reasons


Table of cache hit rates, etc.

Memory Diagram



User Metrics tables

The view can be modified on the fly by clicking the wrench icon in the toolbar. This will bring up a dialog that allows you to enable/disable the available list of metrics on the top, as well as specify what directories to load section files from and enable/disable the paths on the bottom.

If you click Apply, the view will reload with your new choices, but the dialog will remain open for further editing. If you click OK, the view will similarly be updated, but the dialog will also be closed. Finally, Cancel will close the dialog and discard any changes that were not applied.

If you make edits to the .section or .py files and save them, the view will automatically detect the file change(s) and reload the view. When loading or reloading the sections, if there is an error detected, a new section will appear at the top of the view that contains any errors:

The section files have a simple syntax:

Identifier: "Name"
DisplayName: "Name"
Order: 100
Header {    
    Metrics {	
        Label: "L2 SOL"	
        Name: "lts__throughput.avg.pct_of_peak_sustained_elapsed"
Body {    
    Items {	
        Table {	    
            Label: ""	    
            Rows: 1	    
            Columns: 2	    
            Metrics {		
                Label: "SM Active"		
                Name: "sm__active_rate"	    
            Metrics {		
                Label: "SM Warp Can't Issue Allocation"		
                Name: "smsp__warps_cant_issue_allocation_stall_per_warp_active.pct"	    

The Identifier field is used as a global identifier for the section file. The DisplayName is what you will see displayed in the header for the UI. You can keep both of these the same, or use different names if desired. The next field is the Order. This is used to specify the display order of the sections in the view with lower numbers coming first and higher numbers coming last.

Next is the Header portion. This is what you will see displayed when the section is in "collapsed" mode. You can put any number of Metric entries in this portion, and it will display the values for the Metric specified by Name with a user-friendly Label.

Finally, there is the Body section. This is what will be displayed when the section is opened by clicking the triangle on the left-hand side of the section header. There are some default bodies, including "Table," "BarChart," "HistogramChart," and "LineChart." All of these take lists of metrics, very similar to the header section, and will display the metrics in various tables and charts. The SMSection.section is an example of a table that displays a list of metrics. There are 2 special body types, GfxPipelineDiagram, and GfxMemoryDiagram, that will display specialized diagrams of the GPU pipeline and require a mapping from the Label to the metric used for determining the value to display. If you wish to use them in your own section files, we suggest you copy them as is from their corresponding section files. Also, there is an additional special body type, GfxUserMetrics. This does not take a list of metrics, but instead displays two tables, one on the left that has all of the metric names and checkboxes to enable/disable displaying the values in the right-hand table.

The RangeInfo.py script is an example of specifying a section via Python. The syntax is a bit more complex, but the script allows you to also specify rules that will be evaluated that can be helpful for pointing out interesting metric values. At the top of the RangeInfo.py file, you will see classes for Metric, SectionTable, BodyTableItem, etc. — basically everything that is before the "class RangeInfo" portion. These are all helper classes used by the main class. In the RangeInfo, you will see a Header class, which is used to define what metrics will be displayed in the header portion of the UI, similar to the .section files. This takes a list of metric and label pairs.

Below the Header is the Body class. This is similar to the Body in the .section file and is used to put whatever type of body you would like to display. In the RangeInfo.py file, you will see a BodyItemTable that specifies the name of the table ("" or blank in this case), the number of columns (2), and a collection of metrics to display in the table.

Finally, you will see more control code to initialize the class in the script, including the header and body portions, and load the section. Below that portion is a number of accessory functions to retrieve elements like the name and identifier of the section (similar to the .section file), and the "apply" function. This portion is used to define a rule. The top portion is more boiler plate code to gain access to the data for the currently selected range. Then, the rule samples two values: drawCount and dispatchCount. From there, it defines two rules. First, if the draw count exceeds 500, it will display a MsgType_MSG_WARNING saying there are a large number of draw calls. Then, as another example, if the drawCount is greater than the dispatchCount, it will say more draw calls than dispatches, and vice versa if the dispatchCount exceeds the drawCount.

Known Issues

  1. After a few edits, the file watch functionality seems to disconnect. You can close and reopen the view to force a refresh of the sections.
  2. The sections can only display simple metrics as enumerated by the LOP library that supplies the data. We have implemented some specialized metrics to get values like the Tex Hit Rate. We are looking to expose this capability for "compound metrics" in a future version.
  3. The sizing of various portions of the dialog are either fixed or do not re-size cleanly. We will improve that in a future release.
  4. The current set of rules is very rudimentary. We are actively developing the rule set and will be adding to those in future releases.


The Nsight Graphics Pro Frame Debugger has two parts. One part appears as the Frame Debugger window on the host. The other part appears as a Heads-Up Display (HUD) on the target application.

To access this view, go to Frame Debugger > Scrubber.

The part of the Frame Debugger that appears as a HUD on the target machine is comprised of the following:

  • HUD Toolbar — controls the frame capture, along with a number of other options (help, etc.).

  • Frame Scrubber — indicates the current draw event. There is a scrubber view in the Frame Debugger on the host, as well as a frame scrubber on the HUD. The frame scrubber controls stay in synch with each other, meaning that when you move the controls on one, it affects the other. For example, if you move the frame scrubber on the HUD to highlight a new draw event, the scrubber on the Frame Debugger moves in synch to do likewise.

Understanding the Frame Scrubber

For the sake of discussion when it comes to graphics debugging, it helps to note some common terminology.

  • An event is a single call to the API. It could be a triangle draw call, or backbuffer clear, or a less obvious call, like configuring buffers. A snapshot is a sequence of events.

  • An action is a subset of the event types. It can be one of the following: (1) Draw Call, (2) Clear, or (3) Dispatch. Actions are interesting since they explicitly change data which may result in visual changes.


NOTE for Direct3D frame debugging: The Direct3D runtime documentation states that, "the return values of AddRef & Release may be unstable and should not be relied upon." The Nsight Graphics Pro Frame Debugger will also take additional references on objects so any code that relies on an exact reference count at a particular time may fail. In general, users should not expect an exact reference count to be returned from the Direct3D runtime. For more information, see Microsoft's Rules for Managing Reference Counts.

When you debug your graphics project, the Scrubber window shows the perf markers you implemented. When working with user-defined markers, the Scrubber window will use the color and label that you defined for the perf marker.

On the Scrubber, you can select one performance marker and it will automatically create a range of all of the draw calls that occurred within that time frame. Clicking on it again will cause the scrubber to automatically zoom to that range of events. You can zoom in on a nested/child marker the same way.

To zoom out, click the parent performance marker, or use CTRL + mouse wheel.

Performance markers are also displayed on the HUD, color-coded the same way that they are on the Scrubber. However, on the HUD, the information is condensed, and you must hover your mouse over the selected performance marker to get its details.

The default view will show the events in your application, in addition to any performance markers you have defined. Clicking the Add... button will open a dialog that allows you to select what type of range you want to add.

  • Program Ranges — Actions that use the same shader program.

  • Viewport — Actions that render to the same viewport rectangle.

  • Alpha Blending Enabled — Actions that have alpha blending enabled.

  • Alpha Test Enabled — Actions that have alpha test enabled.

  • Back Face Cull Enabled — Actions that have back face cull enabled.

  • User — A range defined by you on the fly. Use SHIFT + left-click and drag the scrubber on the created "User" row to create a new range.

Right-clicking on a specific action in the Scrubber will allow you to open the API Inspector for that action, change your view settings, or initiate a profile session with the Range Profiler.

Scrubber View Options

From the Mode drop-down menu, choose one of the following:

  • Event ID -- Unit Scale is the default view, which simply shows the actions and events on the timeline.

  • Sequence ID -- Unit Scale shows the sequence of events on the timeline.

  • Event ID -- GPU Time Scale displays the GPU activity and how much each event or action cost the GPU.

  • Event ID -- CPU Time Scale displays the CPU activity and how much each event or action cost the CPU.

  • Event ID -- X by CPU, Y by GPU displays the CPU time scale on a horizontal X-axis, and the GPU time scale on a vertical Y-axis.

Depending on which mode you select, you can also select whether you want to view the ruler relative to the capture, viewport, or cursor.

From the Hierarchy drop-down, Queue Centric sorts the events by queue, while Thread Centric sorts the events by the thread.

Using Hotkeys to Scrub Through a Frame

When the scrubber has focus, you can use the following hotkeys to move the scrubber cursor from one event to another.


CTRL + Home

Go to the first event.

CTRL + End

Go the last event.

CTRL + Left Arrow

Go to the previous event.

CTRL + Right Arrow

Go to the next event.

Up Arrow

Expand the current event group (HUD only).

Down Arrow

Collapse the current event group (HUD only).


Current event: show less information (HUD only).


Current event: show more information (HUD only).

Zooming and Panning

CTRL + Scroll mouse wheel up, or

CTRL + NumPadPlus

Zoom in X-axis

CTRL + Scroll mouse wheel down, or

CTRL + NumPadMinus

Zoom out X-axis

CTRL + 0

Reset zoom

CTRL + SHIFT + Scroll mouse wheel up

Increase row height (all rows)

CTRL + SHIFT + Scroll mouse wheel down

Decrease row height (all rows)

CTRL + Left mouse click and drag


ALT + mouse move

View zoom window

Cursor and Selection

Left mouse click on desired cursor location

Set cursor(Places cursor at closest point to the start of a range.)

Left mouse click on desired row

Select row (The selected row is highlighted in orange.)

SHIFT + Left mouse click and drag

Make range selection

Left mouse click on selection

Zoom to range

Left double-click on event action, or

Right-click menu, Open API Inspector

Open API Inspector

Right-click menu, Run Range Profiler

Run Range Profiler


Select all events

For the purpose of moving the scrubber cursor, the following are considered action events:

  • Draw methods

  • Clear methods

  • Dispatch methods

  • Present methods

For example, if you are looking for the next draw method that was called, you can press the CTRL + RIGHT ARROW on the keyboard to skip over events that are not typically of interest, and only stop on events that are considered action events.

Resources View

The Resources View allows you to see all of the available resources in the scene.

To access this view, go to Frame Debugger > Resources.

To open the Resources page, go to Frame Debugger > Resources. There are two tabs available here:

  1. Graphical

  2. Memory

At the top of the Resources view, you'll find a toolbar:

  • Clone — makes a copy of the current view, so that you can open another instance.

  • Lock — freezes the current view so that changing the current event does not update this view. This is helpful when trying to compare the state or a resource at two different actions.

  • Save — saves the captured resources to disk.

  • Red, Green, and Blue — toggles on and off specific colors.

  • Alpha — enables alpha visualization. In the neighboring drop-down, you can select one of the following two options:

    • Blend — blends the alpha with a checkerboard background.

    • Grayscale — alpha values are displayed as grayscale.

  • Flip Image — inverts the image of the resource displayed.

Below the toolbar is a set of buttons, described below, for high-level filtering of the resources based on type. Next to that, there is a drop-down menu that allows you to select how you wish to view the resources: thumbnails, small thumbnails, tiles, or details.

If you select the Details view, you can sort the resources by the available column headings (type, name, size, etc.).

Graphical Tab

The Graphical tab allows you to inspect the resource, pan using the left mouse button to click and drag, zoom using the mouse wheel, and inspect pixel values. Also, this is where you can save the resource to disk. If supported on your GPU and API, this is also where you can initiate a Pixel History session to get all of the contributing fragments for a given pixel.

When you have selected a buffer from the left pane, the Show Histogram button will be available on the right side of the Graphical tab, which allows for remapping the color channels for the resource being viewed.

To modify the histogram view, the following options are available:

  • You can set the minimum and maximum cutoff values via the sliders under the histograms, or by typing in values in the Minimum and Maximum boxes.

  • You can change the scale by using the Log button.

  • The Luminance button allows you to visualize luminance instead of color values.

  • The Normalize button can preset the minimum and maximum values to the extents of the data in the resource.

Memory Tab

The Memory tab shows a dump of the resource data.

You can use multiple options to configure how this memory is displayed:

  • The Axis drop-down changes between address (memory offset) and index (array element) views.

  • The Offset entry limits the view to an offset within the given resource.

  • The Extent entry limits the view to a maximum extent within the given resource.

  • The Precision spin box controls the number of decimal places to show for floating point entries.

  • The Hex Display toggles between decimal (base-10) and hex (base-8) display formats.

  • Hash shows a hash value representative of the given memory resource within the current offset and extent. This is useful for comparing memory objects or sub-regions.

  • The Transpose button swaps the rows and columns of the data representation.

  • The Configure button opens the Structured Memory Configuration dialog.


There are three ways to filter the available resources.

  1. For high-level filtering, there are color coded buttons to filter based on resource type. All resource types are visible by default, and you can filter the resource list by de-selecting the button for the type you don't want to see. For example, if you'd like to see only textures, you can click the other buttons to de-select them and remove them from the list of resources.

  2. You can manually type in a search string to filter the list of resources.

  3. You can choose from the drop-down of predefined filters to view only large resources, depth resources, unused resources, or resources that change in the frame. Selecting one of these will fill in the JavaScript string necessary for the requested filter, which is also useful as a basis to construct custom filters.

Pixel History

Pixel history enables the automatic detection of the draw, clear, and data-update events that contributed to the change in a pixel's value. In addition, pixel history can identify the fragments that failed to modify a particular texture target, allowing you to understand why a draw might be failing, such as whether you may have misconfigured API state in setting up your pipeline.

To run a pixel history test, click the button and select a pixel to run the experiment on. The Pixel History view will come up with a loading bar and present the results once they are complete.

Structured Memory Configuration

The Structured Memory Configuration dialog allows the user to specify a data layout to interpret the raw data backing the selected resource. For example, a texture may be represented by its colors channels or a uniform buffer may be represented by the various types packed within that buffer.

Typing in a valid structure definition will automatically update the viewer to respect the configuration.

New columns can be created using a simple C-like syntax.

int;      // creates a column with an anonymous int
int x;    // creates a second column with an int named x
float y;  // creates a third column with a float named y

Where additional user types can be defined like the following:

struct MyType{ int x; float y;};
struct MyOtherType{ MyType z; double u; };

Many common sized, unsized, and normalized types are permitted as valid types. Vector and matrix types are provided in a similar syntax to HLSL and GLSL. The full list of supported types can be browsed and searched by clicking on the expandable "Defined Types" sub-section of the configuration dialog.

As some additional notes on the parser:

  • Full C/C++ grammar is not supported.

  • Single line comments are accepted; c-style block comments (/* */) are not.

  • Macros are not currently supported.

  • Alignments are not considered; all types are considered packed.

  • To add explicit padding, use padN where N is a multiple of 8.

  • Members can be selectively hidden as well, which can be useful for narrowing your data.

When clicking on a texture resource, the configuration is automatically populated to interpret the channels of that format.

Similarly, buffers are defaulted to a generic byte configuration. A user can typically interpret this buffer data by examining the specific use case. For example, the layout of a vertex buffer can be seen in the Input Assembler section of the API Inspector view, or a uniform buffer can be interpreted by looking at the data layout specified within the shader source.

To persist a configuration, you can click on the Save... button to assign a name to this configuration.

Later, you can restore this configuration by clicking on the Load... button.

Linked Programs View

The Linked Programs View lists all of the shaders in your application.

To access this view, go to Frame Debugger > Linked Programs.

  • If the shader (or its parent program or pipeline object) hasn’t been used by the application yet, it will show up with the symbol in the Status column.

  • If the shader has been used, selected statistics will be presented for that shader.

For programs or pipeline objects, you can view the individual shaders by pressing the ► button to the left of the program/pipeline name. When expanded, you can select the link to open a text view of the shader source (when available).


This is the name of the shader. This name is either generated internally, or can be assigned by the user per API.


The type of the shader: Vertex, Pixel, Compute, etc.


This column displays the current status of the shader. The status includes Source or Binary, to denote whether or not source code is available for this shader. Also, if the µCode text is included, this means that we have driver level binary code that is necessary for gathering shader performance metrics.

The symbol means that we are waiting for the shader to be bound by the application.

The symbol means that shader performance metrics are currently being computed.


Indicates to which of the application's contexts this shader is owned. Shown on multi-context OpenGL applications, only.


This column gives the number of registers used by the program. Register count impacts occupancy/threads in flight. This may be not available for all shaders.

# Barrier

Indicates the number of barriers used by the shader. Shown on compute shaders only.


Shader µCode, and thus shader performance metrics are only supported for Direct3D 11, Direct3D 12, and OpenGL. Vulkan support will be added in a future release.

VR Inspector View

The VR Inspector view allows you to inspect how your application is using VR APIs. It will be available when an application is captured with a supported API. Supported APIs include Oculus (LibOVR) and OpenVR.

To access this view, go to Frame Debugger > VR Inspector.

Once opened, this view is context-specific to the VR API in use. See the sections below for a discussion on each API.

Oculus (LibOVR)

With the Oculus API, the sections of the VR Inspector view include the following:

  • Swap Chains — Lists all swap chains and their associated texture resources and description fields, with links to the Resources View for inspection.

  • Mirror Textures — Lists all mirror textures and description fields with Resources View links for the associated texture(s).

  • Render Desc Queries — Shows all of the calls to ovr_GetRenderDesc, along with the parameters, to confirm that the proper eyes, FOV values, etc. are correct.

  • HMD Description — Gives details on the actual HMD device connected to the machine and all of the limits for that device.


When using OpenVR, you will see the following in the VR Inspector view:

  • Show API Usage — Brings up the Events List view filtered by OpenVR calls.

  • OpenVR Version — In the top left, under Show API Usage, the minimally compatible version of OpenVR you are using will be displayed. This may be lower than the version your application has targeted, due to the fact that it may not be using any features of later API versions.

  • Mirror Textures — Lists all mirror textures and description fields with Resources View links for the associated texture(s).

The following sections return interface dependent information:

  • VRSystem — displays the render target size

  • VRSystem Tracked Devices — displays information for each tracked device currently connected

  • VRSettings — displays all of the VRSettings properties

  • VRChaperone — displays the play area information

  • VRCompositor — displays rendering and compositing statistics

Vulkan Specific Views

Vulkan Descriptor Sets View

The Descriptor Set view displays all of the descriptor sets currently allocated and bound by the application at the current event.

To access this view, go to Frame Debugger > Descriptor Sets.

The left pane displays a selectable list of descriptor sets along with their layout, pool, consumption counts, and dynamics offsets.

When a set is selected, the right pane will display the resources currently associated with this descriptor set, as well as information related to the pool from which this descriptor set was allocated. In addition, clicking on a resource within the descriptor set will display more detailed information about that specific resource.

Note that if you click the hyperlink in the Preview column, it will bring up the Resources view associated with this image or buffer.

Vulkan Device Memory View

The Device Memory view provides a list of all device memory allocated by the application, along with detailed information about the resources contained in each memory region.

To access this view, go to Frame Debugger > Device Memory.

The left-most pane contains information about all device memory objects currently allocated. Once a device memory object is selected, the contained resources will be listed in the middle pane, along with the resource layout map in the bottom left, and contained data on the right.

Vulkan Memory Pools

Vulkan Texture and Sampler Pools

The Texture and Sampler Pools View provides a visualization of these different pool types. This can be useful for determining if a particular set of resources are in the resource pools they are expected to be in. The left-hand side allows you to select the pool you're interested in, based on type. Included in the list are appropriate parameters about how the pool was created. On the right side is a list of the resource descriptors, some information about the resource itself, and a thumbnail preview. There is a link below the thumbnail that allows you to open that resource in the Resources View for deeper inspection.

To access this view, go to Frame Debugger > Texture and Sampler Pools.


Generate C++ Capture UI

Compiling and launching C++ captures

The additional features of an nsight-gfxcppcap file include:

  1. Screenshot of the capture taken from the original application

  2. Information about the captured application and its original system

  3. Statistics about the captured API stream

  4. Utilities to build the C++ capture without opening the generated Visual Studio project

  5. Utilities to launch the compiled application:
    1. The Execute button will launch the compiled executable.

    2. The Connect... button will populate a new connection dialog that allows you to run a specific activity on the generated capture.

  6. User comments that are persisted within this file.

Project Explorer

The Project Explorer offers a view of all data associated with the current project. It will contain data files, sorted by the time of generation. Note that you may also include arbitrary links to other files as a useful aid in correlating data.

In addition to navigating via the Project Explorer, you may wish to see the files that were recently generated. Load these through File > Recent Files, or File > Open File.


The Options dialog, accessed via the Tools > Options... menu, allows you to configure Nsight Graphics Pro in a number of different ways. Each section is detailed below. The options selected are persisted in user settings for the next time you run the tool.


On the Environment tab, select whether to use the light or dark theme, the default document folder for Nsight Graphics Pro to use, and your preferred startup behavior.

GPU Trace

On the GPU Trace tab, you can change the time units and the time precision that are displayed in a GPU Trace. You can change the grid density and the GPU bound threshold (which affects the GPU Bound calculation in the summary tab).

Embedded Linux

The Embedded Linux tab provides the path to the NVIDIA SDK for Vibrante Linux or JetPack L4T SDK you are using.


On the Injection tab, select whether to enable or disable debugging Steam overlay.

Frame Debugger (Host)

On the Frame Debugger tab, you can configure the time unit and precision settings for the host display, settings for C++ Capture, and set the timeout for a Pixel History.


On the Feedback tab, choose whether or not you wish to allow Nsight Graphics Pro to collect usage and platform data.

Common View Capabilities

Nsight Graphics Pro supports docking multiple windows within the main window. Any window may be moved, adjusted, tabbed, or pulled out from the docking system that it provides. Most default layouts have multiple documents already specified, but if you wish to adjust these documents you can do so at any time.

Beyond positioning, when frame debugging or profiling, there are buttons that are common across several frame debugger views.

  • The Clone button makes a copy of the current view, so that you can compare different parts of the API Inspector (or other cloned views) for the current action.
  • The Lock button freezes the current view so that changing the current event does not update this view. This is helpful when trying to compare the same state on two different actions.


User Named Layouts

Nsight Graphics Pro allows users to customize the size and position of the views to create a layout that is targeted to the task at hand. For example, if you are focused on debugging a problem with API usage, you can put the Events View and API Inspector next to each other as you work your way through the frame, inspecting the API state at different points in the frame. The view locations are automatically saved when you exit the frame replay and restored when capture a new frame.

However, different problem types may require unique layouts. To facilitate a smooth transition from one layout to another, you can save and restore activity-centric view arrangements via user named layouts.

You can access this save/load capability from the Window pull down in the main menu. The section pertaining to layouts includes entries to "Save Window Layout...", "Restore Window Layout", "Manage Window Layouts...", and restore the "Default Window Layout".

"Save Window Layout..." will bring up a dialog that allows you to specify a name for the current layout. The layouts are saved to a Layouts folder in the documents directory as named ".nvlayout" files and can be shared with colleagues.

Once you have saved a layout (or two), you can restore them by using the "Restore Window Layout" menu entry. When you mouse to it, a sub-menu will pop out with all of your saved layouts. Simply select the entry you want and the views will be restored to their original locations.

There may come a time when you want to clean up some unused layouts. When you select the "Manage Window Layouts" entry, a dialog will come up that allows you to delete or rename old layouts, etc.

Finally, the "Reset Window Layout" entry in this section allows you to restore the layout to the default one for the current activity.


Due to the complex nature of the underlying mechanisms that make arbitrary application analysis possible, there is the possibility of errors. Nsight Graphics Pro offers a significant number of ways where you can discover opportunities to correct issues that you may encounter.

See the sections below for general tools as well as listings of common problems and possible solutions for them.

General Tools

This section provides troubleshooting tips for Nsight Graphics Pro.

Output Messages

Throughout the operation of the tool, Nsight Graphics Pro provides messages that inform on the status of operations as well as if any issues are encountered. This could provide some assistance when trying to determine why your application may not run, connect, or capture correctly. Error messages are indicated by a red flag in the bottom right of the application window. This flag may be double-clicked to open the Output Messages window. Alternatively this window may be accessed via Tools > Output Messages.

Crash Reporting

When an application crashes, a crash report can be one of the most valuable pieces of information in helping to fix the issue. Accordingly, if you have the ability to send a crash report, it would be greatly appreciated.

Automatic Crash Reports

Nsight Graphics Pro's (host and target) are configured to automatically send crash reports when they encounter an error. Submitting via the dialog is a good approach, but saving the minidump for explicit communication can be useful too. If you encounter a crash and do not have the option of sending a crash report, please let us know so that we can investigate why the dialog is not being generated.

Manual Crash Reports

Manual crash reports can always be collected by attaching to the crashing process with a debugger and manually creating a dump in the case of a crash. In Visual Studio, this can be accomplished by:

  1. Start Visual Studio.

  2. Follow the instructions for Debugging Your Application with a Debugger.

  3. Start the application with Nsight Graphics Pro.

  4. Attach the Visual Studio debugger to it.

  5. When you encounter the crash, use the Visual Studio "Debug > Save Dump As" menu option.

Debugging Your Application with a Debugger

Although launching your application with Nsight Graphics Pro might appear to be an alternative to CPU debugging, the application that is launched is still very much a debuggable application. This can be useful to determine if a problem you are encountering is in your own code by tracing the paths taken by your application.

To do this, set an environment variable of NVIDIA_PROCESS_INJECTION_ATTACH_DIALOG=1 and attach a debugger when you see a message box. Click OK to resume your application once you have set breakpoints that will allow you to inspect if your application is following the expected paths.

Setting an environment variable

There are occasionally times where you might be asked to set an undocumented variable to help disambiguate problems.

Apply the environment variable in the connection dialog Environment setting when starting an application.

Common Problems

Problem: Application Fails to Launch

You've tried to launch your application, but it is failing to launch.

Possible Causes

  1. Incorrect command line arguments.

  2. Incorrect working directory.

  3. You're trying to launch on a remote machine that does not have the Nsight Monitor running.

Possible Solutions

Make sure that your command line arguments and working directory are as expected.

If you are trying to run on a remote machine, please ensure that the remote monitor is running and that the name of the machine is correct. See Remote Launching.

Disambiguate if the application is launching at all. Follow the instructions in Debugging Your Application with a Debugger. Check to see if your application is launched at all and if so, whether it is following its expected path. If the application doesn't launch at all, please send an email to devtools-support@nvidia.com .

Problem: Application Crashes at Runtime

You've found that your application appears to launch, but it crashes during runtime.

Possible Causes

  1. Lack of API support by Nsight

  2. Application not checking return codes from device/object creation, assuming it has succeeded

  3. Interception-library crash

  4. Internal-driver crash

  5. D3D-debug runtime interaction

Possible Solutions

Try disabling the following features:

For D3D apps, try running without the D3D debug runtime enabled, as the debug runtime occasionally differs in behavior when compared with the release runtime.

If none of the above works, please try to collect a crash dump if possible and send it to devtools-support@nvidia.com .

Problem: Application Hangs at Runtime

You've found that your application appears to launch, but it hangs during runtime.

Possible Causes

  1. Multi-threading issue

  2. HUD Issue

Possible Solutions

Try disabling the following features:

If none of the above works, please try to collect a crash dump if possible and send it to devtools-support@nvidia.com .

Problem: Application Crashes during Capture

You've found that you're able to run the application successfully, but upon trying to perform a live analysis, the application crashes.

Possible Causes

  1. Multi-threading issue

  2. Out of memory

  3. The application is tearing itself down due to a watchdog timeout

Possible Solutions

Try disabling the following features:

If you suspect a multi-threading issue (D3D's runtime sometimes indicates this), try disabling multi-threaded capture.

If Nsight Graphics Pro reports out of memory, trying reducing the requirements of the application or try running with a more capable GPU.

If the application exits without any clear sign of a crash, the application could be tearing itself down. Please contact devtools-support@nvidia.com with your concern and we will investigate if there is any opportunity for deactivating the thread.

Problem: Application Encounters an Incompatibility

This problem arises when the application you are running is using API methods or patterns that are not supported by Nsight

Possible Causes

  1. An unsupported API method was used
  2. An unsupported API pattern was used

Possible Solutions

When encountering this issue, Nsight will present a list of API methods or reasons that it has encountered as incompatible. This listing is listed alongside an explanation of the reasons why Nsight has prevented capture, which include application crashes, incorrect data, etc. Because Nsight is a replay based debugger, the absence of methods may lead to critical issues as replay is attempted. In some cases, however, the missing methods are innocuous and replay may proceed correctly without them. When capturing through the host, Nsight will offer the user an opportunity to capture despite these incompatibilities. From this point, it is up to the user to determine if the data is meaningful.

When encountering an incompatibility, we recommend that you communicate this incompatibility to devtools-support@nvidia.com so that the Nsight development team may track this issue and determine if it is something that will be supported in the future.

Note that if you wish to ignore all incompatibilities on every run, and wish to accept the possible errors that come with it, you may set the option of 'Troubleshooting > Ignore Incompatibilities' to accomplish that.

Problem: Application Captures Successfully, but Exits after a Time in Capture

This problem indicates that you have had some level of success, but even if the application generally inactive, the application crashes.

Possible Causes

  1. Serving a host query leads to a crash

  2. Memory leak

  3. Watchdog timer

Possible Solutions

When encountering this issue, take note of what you are doing when you encounter if. The first thing to try is doing nothing – does the application still crash when doing so? If there is nothing going on, this is either a memory leak or a watchdog timer.

  1. Look at the memory usage of the process – is it growing? It's a memory leak, either from the application or the tool.

  2. Set a stopwatch to count how long it takes to crash – is it a "round" number like 30 or 60 seconds? It's probably a watchdog.

  3. If this is a memory leak (uncommon but possible) please contact support to help identify the issue.

If this is a watchdog issue, disable the watchdog in your application.

Problem: Application Runs Extremely Slowly

You've observed that the application runs at a significantly lower rate than normal operation.

Possible Causes

  1. Too much work is being done

  2. The application may be exercising uncommon paths

Possible Solutions

Try disabling optional features, such as collecting shader sourcecollecting native shaders, or collecting hardware performance metrics.

Problem: I Can't Capture a Vulkan Application

If you find that the button to Capture for Live Analysis is disabled, or you do not see a message that your application has Nsight analysis enabled, the Nsight Vulkan layer may not be enabled. This symptom is often accompanied by an error in the Output Messages window, so look for errors in that window for an indication of the failure.

Possible Causes

  1. The Nsight Vulkan layer configuration has been removed from your system configuration

Possible Solutions

One workaround is to re-enable the Nsight Vulkan layer explicitly. To do this, run the following command for your system:


<install directory>/host/windows-desktop-nomad-x64/VK_LAYER_NV_nomad.bat


<install directory>/host/linux-desktop-nomad-x64/VK_LAYER_NV_nomad.sh

If, after repeating this installation, you find that your system still cannot capture, gather a log of the output of the vulkaninfo application from the Vulkan SDK and send it to devtools-support@nvidia.com.

Problem: I Can't Attach to the Application

The application launches, but you are unable to attach to it with the Nsight Graphics Pro host.

Possible Causes

  1. You launched a piece of the process hierarchy without Nsight Graphics Pro.
  2. You set the connection to automatically attach when the root application launches child processes that are the actual processes of interest.
  3. The application is interfering with the interception of Nsight Graphics Pro, preventing it from intercepting.
  4. The application is using a software renderer.

Possible Solutions

Nsight Graphics Pro is essentially an in-process debugger, so it cannot attach to an application that wasn’t originally launched through Nsight Graphics Pro. The attach feature is meant to be used to attach to applications that have been launched through other means (e.g., a command line launcher), as well as to allow for some recoverability in the case of a host issue, as it allows you attach at a later time.

Make sure to kill any processes related to the process hierarchy of an application and try to launch it again.

Problem: The Host UI Crashes

The host UI crashes while you are analyzing an application.

Possible Causes

  1. UI Bug

Possible Solutions

Try reducing the number of views that you have open when running to pinpoint which view causes the issue.

If at all possible, try to collect a crash dump of the UI application and send it to devtools-support@nvidia.com.

Try deleting the UI persistence data with Help > Reset Application Data .

Problem: The Target Window Blocks the Host Window

While running a live analysis, you find that the target window is blocking the host window and interfering with the analysis you wish to perform on the host. This is most often reported on machines that do not have access to multiple monitors.

Possible Causes

  1. The application has fullscreen settings
  2. The application has a topmost flag set to keep the application on top

Possible Solutions

We suggest running without fullscreen or topmost settings. If fullscreen-like behavior is desired, many applications support a borderless window mode.

If you must analyze an application with these characteristics, and you do not have access to a second monitor, the virtual desktop or workspaces support on most modern operating system shells presents an effective path forward. Creating one desktop for the target application and one for the host often avoids the target from interfering. For more information on using these features, see one of the articles below.

NOTE: If you wish to suppress the dialog that reports replay window interference, set an environment variable of NSIGHT_REPORT_REPLAY_WINDOW_INTERFERENCE=0 .

Windows: https://blogs.windows.com/windowsexperience/2015/04/16/virtual-desktops-in-windows-10-the-power-of-windowsmultiplied/

Linux/Gnome: https://help.gnome.org/users/gnome-help/stable/shell-workspaces.html.en

Problem: Acceleration Structure Integrity Check Failed

Applications that make use of ray tracing use acceleration structures to define their application geometry. This acceleration structure geometry must be tracked by the tool in order to inform capabilities like replay and geometry visualization. When tracking geometry, there are tradeoffs between performance, accuracy, and robustness of any given approach.

Nsight Graphics Pro™ , by default, defines a tracking option that uses a default value of Auto that is most often implemented in terms of Shallow Geometry Reference with Integrity Check. This implementation tries to match the most common application behavior with the highest performance, while still providing some error checking. This may not be sufficient for all applications, however. For example, after building an acceleration structure, it is legal for an application to update or destroy the geometry buffers that were used in construction. In this situation, without deep copies of the original data, the tool cannot guarantee full function of the acceleration structure viewer, or of C++ capture. To attempt to detect erroneous patterns, Nsight Graphics Pro™ will run an integrity check on the tracked data. If the data is suspicious, the tool will warn the developer to let them know about their opportunity to change it.

Possible Causes

  1. Geometry buffers were updated or destroyed after their construction

Possible Solutions

If you have application access, you may also try to adjust your code to avoid updating or destroying buffers, instead allowing them to match the lifetime of the acceleration structure you built. Another possible option is to make acceleration structure build periodic, and implement a code path to freeze the periodic build when a capture is desired.

If you do not have application access, you may use a Deep Geometry Copy option to avoid a shallow reference to the original data, instead copying it as needed. This additional copy will in fact increase the memory usage of the application, which can negatively impact tightly memory-constrained applications. Note that this will also lead to lower runtime performance when running the application before the capture, although this will not impact later profiling or debugging performance when the live analysis is being run.


Feature Support Matrix

Table 10. Nsight Graphics feature matrix
Feature D3D11 D3D12 OpenGL Vulkan

Frame Capture and Live Analysis





Range Profiling and Performance Counters





Real-time Performance Signals





Real-time Performance Experiments





C++ Capture





Shader Performance Analysis





Pixel History





Dynamic Shader Editing





GPU Trace




Ray Tracing Debugging





Supported OpenGL Functions

Nsight Graphics Pro's Frame Debugger supports the set of OpenGL operations, which are defined by the OpenGL 4.5 core profile. Note that it is not necessary to create a core profile context to make use of the frame debugger. An application that uses a compatibility profile context, but restricts itself to using the OpenGL 4.5 core subset, will also work. A few OpenGL 4.5 compatibility profile features, such as support for alpha testing and a default vertex array object, are also supported.

The Frame Debugger supports three classes of OpenGL extensions, described below.

1. OpenGL Core Context Support

The OpenGL extensions listed below are supported in as much as the extension has been adopted by the OpenGL 4.5 core profile. For example, EXT_subtexture is included as part of OpenGL 1.1. Calls to glTexSubImage2DEXT are supported and behave the same as calls to glTexSubImage2D. On the other hand, while EXT_vertex_array is also included as part of OpenGL 1.1, glColorPointerEXT is not supported by the Frame Debugger. The operation of glColorPointerEXT was modified when it was included as part of OpenGL 1.1. Additionally, glColorPointer is part of the compatibility subset, but not the core subset.

// GL 1.1
// GL 1.2
// GL 1.2.1
// GL 1.3
// GL 1.4
// GL 1.5
// GL 2.0
// GL 2.1
// GL 3.0
// GL 3.1
// GL 3.2
// GL 3.3
// GL 4.0
// GL 4.1
// GL 4.2
// GL 4.3
// GL 4.4
// GL 4.5

2. Other Supported OpenGL Extensions

The second class of OpenGL extensions is listed below. These extensions are not part of OpenGL 4.5 core or compatibility, but are fully supported by the frame debugger target. Context and object state, which is added by these extensions, may not be displayed by the host UI.


3. Partially Supported OpenGL Extensions

The third class of OpenGL extensions are ones for which there is partial support. These extensions are listed below.


4. OpenGL Immediate Mode

Beyond the core functionality and extensions, a selection of immediate-mode functions is supported.


Supported Vulkan Functions

Nsight Graphics Pro™ 2020.1 frame debugging supports all of Vulkan 1.1.97.

Additionally, the follow extensions are supported:


Unsupported Captures

Nsight Graphics Pro maintains a list of the unsupported functions or operations that are used by the application. If an unsupported operation is encountered, an unsupported capture will be reported. This unsupported capture guards against crashes or incorrect results coming from known limitations.

In some cases, however, these unsupported operations might not impact any analysis that follows. Accordingly, after warning about the risks of an unsupported capture, Nsight Graphics Pro will offer the opportunity to proceed despite this warning. If the user proceeds, Nsight Graphics Pro will continue into capture on a best-effort basis.

If you determine that this unsupported operation is innocuous, and you wish to turn it off completely, you may suppress this warning via the Ignore Incompatibilities option. Note that this will prevent you from being notified of future incompatibilities, however, so please use with caution.

Update Notification

Nsight Graphics Pro can check for a new version and notify the user of any updates. There are 2 options available for controlling this feature, found in the Environment tab of the Tools > Options view.

By default, Nsight Graphics Pro checks for updates every time the app is started. This can be changed by selecting “No” for the “Check for updates at startup” option. With this option disabled, Nsight Graphics Pro will still check for updates every 3 days.

Update notifications can be completely disabled by setting the “Show version update notifications” value to “No”.

If the automatic checking feature is disabled, the user can still check for updates by selecting the Help > Check for updates… menu option.

Viewing Shader Assembly (SASS) Code

Nsight Graphics Pro allows you to view Shader Assembly (SASS) from the Shader Editor Window.

Toggling Shader Assembly (SASS)

Shader Assembly (SASS) is available when SASS collection is enabled and has been collected for the shader in question. The Linked Programs View offers a view of all of the shaders in your program as well as whether native shaders have been collected. For these shaders, you can open the shader and right-click to view the SASS.