Utilities

gpa-injector

Usage:
    gpa-injector [--target-application,-t] <target app> [--layer <layer name>][--working-directory,-w <working directory>] [-- <target argument>...]

  -a --attach             Wait workload to start and attach
  -C --attach-condition <string>
                          External cmd that returns 0 to attach, or search continues on positive (and cancells on negative) exit code. See attach-nth|regex-cmd for example. Usage: -C "attach-nth 3" OR -C "regex-cmd ^.*$" Quotes around are mandatory.
  -F --attach-flavors <string>
                          Set of modificators for attach: "busy" - makes sure system is loaded to slow down new process starts, "snapshot" - use slower but more precise process listing, "strict" - don't attach when process went beyond 1st thread creation. Usage: -F busy+strict
     --device-override <int>
                          Force use of a specific graphics device. Use "gpa-help --layer device-override"
			  to list available devices. This option loads the device-override gpa layer.
     --disable-ac-detector
                          If provided, disables anti-cheat detector module (enabled by default).
     --disable-io-redirect
                          If provided, disables standard input output redirection (enabled by default).
     --disable-key-events If provided, disables publishing of keyboard events (enabled by default).
  -K --enable-keyframes   Enable keyframes (disabled by default). This feature is deprecated and will be removed in the 2023.1 release. Use deferred capture and gpa-subcapture-recorder.exe instead.
     --event-bridge       Enable event bridge shim-injector communication
  -e --exit-after-frame <int>
                          Exit process after reaching target frame index.
  -h --help               Print this help information
     --hook-api <string>  Comma separated list of apis to hook; valid gfx APIs: all, vulkan, opengl, opencl, d3dall, d3d10, d3d11, d3d12 (default: all)
     --hook-d3d11on12     Intercept D3D12 calls from D3D11on12 (disabled by default). To profile Steam games with D3D11on12, make sure that steam overlay is disabled in the game settings.
     --injection-mode <int>
                          0 - SetThreadContext, 1 - CreateRemoteThread (default: SetThreadContext)
  -L --layer <string>     Name of layer to insert; layers are inserted in order appearing on
			  command line (possible layers: api-debug, capture, logging,
			  hud-layer, screenshot, validation). Default: no layers.
			  Optional key value pairs can be provided to the layer
			  --layer name[:key=value,...]. Maximum length of args to any single
			  layer is 512 characters. Example: gpa-injector --layer capture:directory=\my-streams,name=my-stream
  -l --log-file <string>  Direct logging output to the specified file instead 
			  of console (default: console-only). 
			  "#PROC" replaced by attached process name 
			  "#PID" replaced by attached process PID number
  -v --log-level <string> Set log output severity level; valid values are: trace, debug,

			  info, warn, error, fatal (default: info)
  -m --log-mask <string>  Comma separated list of modules to filter in: generic, page-tracker
  -p --page-tracker-mode <int>
                          0 - default, 1 - disabled, 2 - Use shadow buffer approach for 
			  managed buffers, 3 - Force shadow buffer approach for all, 4 - Whole size (Vulkan only, beta) 
     --skiplist-file <string>
                          A path to the skip-list txt file that 
			  stores process names to skip during the injection. 
  -t --target-application <string>
                          The workload to capture. In attach mode can be wildcard.
  -V --version            Print version and build info to the console, then exit
     --waitfordebugger <string>
                          Waits for user input after injecting to a process of specified name.
			  Use "all" to wait on every new process. Provide process name without extension.
  -w --working-directory <string>
                          Path to the working directory for the target application.

To use custom layers, set GPA_LAYER_PATH in your environment 
to point to the location where the layers are installed.
This must be a properly formatted absolute path

Possible return codes:
    0: Execution completed successfully and without error
    1: Execution failed with unspecified error
    2: Execution failed with 'File Not Found'
    3: One or more command-line args are missing or invalid

gpa-player

Usage: gpa-player [options] <stream filename> 
Options:
  -d --delimiters <string>
                          Set the list of range delimiter(s) in the format 'api:class::function'. The list of tokens are delimited by commas.  Example: Metal:MTLCommandBuffer::presentDrawable,Vulkan:vkQueuePresentKHR (default: null)
     --device-override <int>
                          Force use of a specific graphics device. Use "gpa-help --layer device-override" to list available devices. This option loads the device-override gpa layer.
     --disable-ddi-hook   Disabled D3D12 DDI hook responsible for collecting RTX stateObject exports.
     --disable-pso-filtering
                          Create all pipeline state objects captured in stream. Pipeline state objects filtering is enabled by default.
     --disable-sync-resolving
                          Disable command queue deadlocks resolving during playback.
     --enable-cross-gpu   Run player in cross GPU compatibility mode, this option requires additional time for pre-processing and not 100% guaranteed valid playback on another hardware.
  -e --exit-after-frame <int>
                          Exit process after reaching target frame index.
  -f --first-frame <int>  Play only this frame, the number of times specified in repeat-count. The last valid value in the range is one less than number of frames in the stream.
     --fps-file <string>  Set the FPS file to store the playback performance data.
  -h --help               Print this help information
  -F --last-frame <int>   Ignored if 'first-frame' option is not present; if set and valid, this option defines the last 'frame' in a multi-frame range to be played (and potentially repeated if 'repeat-count' is set). 'last-frame' must be strictly greater than 'first-frame'. The last valid value in the range is one less than number of frames in the stream.
  -l --log-file <string>  Direct logging output to the specified file instead of console (default: console-only)
  -v --log-level <string> Set log output severity level; valid values are: trace, debug, info, warn, error, fatal (default: info)
  -o --offscreen          Playback without visible window
     --old-rtx-patching   Forces old raytracing patching code path.
  -p --parallel <int>     Switches the default Sequential mode into parallel producer->consumer with 100k API_Calls in the ring buffer. 1 for one bg thread, 2 for two
  -c --parallel_count <int>
                          Defines how many API_Calls to keep in the ring buffers. 100k if not set.
  -s --play-from <int>    Start at this percentage into the stream
     --post-layer <string>
                          Name of layer to insert; post-layers are inserted after the implicit playback layer.
			  Default: no layers. See gpa-injector --layer argument description (--help) for more detail.
     --pre-layer <string> Name of layer to insert; pre-layers are inserted before the implicit playback layer.
			  Default: no layers. See gpa-injector --layer argument description (--help) for more detail.
  -r --repeat-count <int> Repeat playback of the selected frame this many times; only valid if 'frame' is specified
  -V --version            Print version and build info to the console, then exit
     --waitfordebugger    Waits for user input before start of playback
     --window <string>    Window handler type; valid values are: gvk, win32, win32dpi (default: gvk)

To use custom layers, set GPA_LAYER_PATH in your environment 
to point to the location where the layers are installed.
This must be a properly formatted absolute path

Possible return codes:
    0: Execution completed successfully and without error
    1: Execution failed with unspecified error
    2: Execution failed with 'File Not Found'
    3: One or more command-line args are missing or invalid

gpa-subcapture-recorder

Usage: subcapture-recorder [options] <stream filename> 
Options:
     --call-index <int>
  -c --compression-mode <string>
                          Sets the compression mode for the resources in the subcapture, if no mode is selected, subcapture will have same format 
			  the parent stream is using, values are: none, LZ4.
  -d --delimiters <string>
                          Set the list of range delimiter(s) in the format 'api:class::function'. The list of tokens are delimited by commas.  Example: Metal:MTLCommandBuffer::presentDrawable,Vulkan:vkQueuePresentKHR (default: null)
     --device-override <int>
                          Force use of a specific graphics device. Use "gpa-help --layer device-override" to list available devices. This option loads the device-override gpa layer.
     --directory <string> Specifies the path to the directory where subcapture stream files should be written to.
     --disable-ddi-hook   Disabled D3D12 DDI hook responsible for collecting RTX stateObject exports.
     --disable-filtering  Records restoration data for all the objects live at subcapture range start. Only objects actively used in the subcapture range are recorded by default
     --dxr-rtas-restore-mode <int>
                          Determine how RT acceleration structures are captured: (0) CopyBlob, (1) RebuildFromBlob, (2) RebuildFromHistory.
		Default: (1) RebuildFromBlob
     --enable-cross-gpu   Run player in cross GPU compatibility mode, this option requires additional time for pre-processing and not 100% guaranteed valid playback on another hardware.
  -h --help               Print this help information
     --insert-virtual-present
                          Inserts artificial 'Present' call to mark state restoration as frame 0 in deferred and subcaptured stream. Default: false.
			  NOTE: This option offsets counting by 1 frame during playback. For example, frame 2 during capture will be referenced as frame 3.
  -l --log-file <string>  Direct logging output to the specified file instead of console (default: console-only)
  -v --log-level <string> Set log output severity level; valid values are: trace, debug, info, warn, error, fatal (default: info)
     --name <string>      Specifies the name of the generated subcapture stream.
  -f --object-filtering   [obsolete - enabled by default] Records restoration data for only for objects used in the subcapture range
  -o --offscreen          Playback without visible window
     --old-rtx-patching   Forces old raytracing patching code path. Option works only with disabled object filtering. Disabled by default for object filtering.
     --post-layer <string>
                          Name of layer to insert; post-layers are inserted after the implicit playback layer.
			  Default: no layers. See gpa-injector --layer argument description (--help) for more detail.
     --pre-layer <string> Name of layer to insert; pre-layers are inserted before the implicit playback layer.
			  Default: no layers. See gpa-injector --layer argument description (--help) for more detail.
     --sub-cmd-list-key <int>
                          Key of the command list execute in call-index to subcapture from
     --sub-cmd-list-range <string>
                          Range of calls to subcapture from the command list
  -s --subcapture-range <string>
                          Subcapture ranges. Format: [start..end] or (start..end) or a mix of parentheses types, where [ is inclusive and ( is exclusive.Multiple ranges can be specified by separating them with a semicolon. 
		For example: (start..end);(start..end)The last valid value in the range is one less than number of frames in the stream.
  -V --version            Print version and build info to the console, then exit
     --waitfordebugger    Waits for user input before start of playback

To use custom layers, set GPA_LAYER_PATH in your environment 
to point to the location where the layers are installed.
This must be a properly formatted absolute path

Possible return codes:
    0: Execution completed successfully and without error
    1: Execution failed with unspecified error
    2: Execution failed with 'File Not Found'
    3: One or more command-line args are missing or invalid

gpa-stream-info

Usage: gpa-stream-info.exe [options] <stream> 

Displays stream information.

Options:
     --csv                Display only the header data in comma-separated tabular format
  -h --help               Print this help information
  -k --key <string>       Display only the value corresponding to the provided header key
  -V --version            Print version and build info to the console, then exit

Possible return codes:
    0: Execution completed successfully and without error
    1: Execution failed with unspecified error
    2: Execution failed with 'File Not Found'
    3: One or more command-line args are missing or invalid
    4: Data was found, but is corrupted or otherwise unreadable

gpa-stream-analyzer

Usage: gpa-stream-analyzer.exe [options] <stream> 

Displays capture-time performance metrics (i.e. cpu_frame_ms) as a labeled csv data table

Options:
  -d --duration <int>     Stop after the specified number of frames (disabled by default: 0)
  -f --frame <int>        Start with the specified frame (default: 1)
  -h --help               Print this help information
  -V --version            Print version and build info to the console, then exit

Possible return codes:
    0: Execution completed successfully and without error
    1: Execution failed with unspecified error
    2: Execution failed with 'File Not Found'
    3: One or more command-line args are missing or invalid
    4: Data was found, but is corrupted or otherwise unreadable

gpa-cpp-generator

Usage: gpa-cpp-generator.exe <stream> [options] 

Generates C++ source/project files for Stream playback using explicit API calls.

Options:
     --directory <string> Generate output files into the specified directory (default: <stream>)
     --disable-argument-literals
                          Setup call arguments using state buffers instead of literal values
  -d --duration <int>     Limit the generated C++ API calls to a specified number of frames (defaults to remaining frames: 0)
  -f --frame <int>        Generate explicit C++ API calls, starting with the specified frame ordinal (defaults to the first frame: 1)
  -h --help               Print this help information, then exit
  -l --log-level <string> Set log output severity level; valid values are: trace, debug, info, warn, error, fatal (default: info)
  -m --max-callables-per-file <int>
                          Split frames that contain more than the specified number of callables into separate source files. (default: 1000)
     --offscreen          Disable generation of source to needed to display visible window of final frame(s)
  -V --version            Print version and build info to the console, then exit

Possible return codes:
    0: Execution completed successfully and without error
    1: Execution failed with unspecified error
    2: Execution failed with 'File Not Found'
    3: One or more command-line arguments are missing or invalid
    4: Data was found, but is corrupted or otherwise unreadable

gpa-help

Usage: gpaframework\bin\Release\gpa-help [options]

Display help information related to the GPA Framework.

Options:
  -H --help               Print this help information, then exit
     --layer <string>     Display help for the named layer (see --layers)
     --layers             Display a list of layer names, then exit
     --markdown           Display layer help in markdown format
  -V --version            Print version and build info to the console, then exit

Possible return codes:
    0: Execution completed successfully and without error
    1: Execution failed with unspecified error
    3: One or more command-line args are missing or invalid

gpa-metrics-collector

Usage: gpa-metrics-collector <stream path> --frame-index <index of frame in stream> [options]

Tool used to collect performance metrics from graphics calls in a frame of interest of a
previously captured stream. By default, it determines the minimal set of collection ranges that
span as many graphics calls in the frame as possible, and then collects and prints out the
available metrics for all of those ranges.

Note: The required parameters <stream path> and --frame-index can be placed in any order relative
to any options that are specified.
            
-f|--frame-index      <int>    Frame index to collect metrics from. The first frame (index
                               zero) is not supported. Must be in the range
                               [1, number of frames in stream).
Options:

-a|--api-debug-layer           Enables the API debug layer during metrics collection.

-b|--bottleneck-format         Format collected metrics output in a manner useful for performing
                               bottleneck and hotspot analysis. Intended to be used with CSV output
                               file generation. Examples of changes include there only being a single
                               column header row, with no duplicate metrics included, and some renamed
                               header labels, as well as the data being transposed (like the
                               --transpose option).

-c|--csv              <string> Output collected metrics to a CSV file rather than to the console
                               that is saved to the directory where the tool is located.
                               <string> can be one of the following:
                                 -  Path and file name of the CSV file to create/overwrite.
                                 -  A period character (".") to indicate that a default file name
                                    should be generated for the CSV file based on the name of the
                                    stream with a date and timestamp appended to it.
                                 -  A dash character ("-") to indicate that instead of a file, the
                                    normal CSV output should be written to STDOUT.
                                Also generates a metadata file with the same basename as the CSV file
                                and a suffix/extension of .meta.txt, unless suppressed by the
                                --no-metadata option or the CSV output is written to STDOUT.

-e|--per-event                 Delimit graphics call collection ranges, that are used to measure
                               metrics, at GPU event boundaries (such as draw, dispatch, copy, resolve,
                               clear, ...). This option takes precedence over --per-pass.

-g|--gpu-index        <int>    Index of GPU to use for metrics collection. Note that the GPU
                               indices below may be different than those used by the device-override
                               layer. Has lower priority than specifying the GPU vendor ID and/or GPU
                               device ID.
                                 GPU 0: Intel(R) Iris(R) Pro Graphics 580 (LUID high 0x0 low 0x1D900)

--gpu-device-id       <string> Device ID of GPU to use for metrics collection, specified using
                               hexadecimal notation with a leading "0x" prefix. Has priority over
                               specifying the GPU vendor ID and/or GPU index.
                                 GPU 0: Intel(R) Iris(R) Pro Graphics 580 (DeviceID 0x193B)

--gpu-vendor-id       <string> Vendor ID of GPU to use for metrics collection, specified using
                               hexadecimal notation with a leading "0x" prefix. Has priority over
                               specifying the GPU index, but not over the GPU device ID.
                                 GPU 0: Intel(R) Iris(R) Pro Graphics 580 (VendorID 0x8086)

   --gpu-warming-passes-count <int>    
                               Used to change the number of passes spent warming the GPU, by performing
                               offscreen rendering of the requested frame(s), before the first metric
                               group collection pass is made. Must be in the range [0, UINT32_MAX].
                               Default value: "1".

-h|--help                      Show only help info and exit app.

-m|--metrics-list     <string> Explicit listing of metrics groups and/or individual metrics to
                               collect. If this option is not provided, the default is for all
                               standard metrics to be collected (although no prototype metrics are
                               instantiated when available). The supported syntax is:

                               <string>                <collection>(;<collection>)*
                               <collection>            <group-name-metrics>|
                                                       <group-symbol-metrics>|
                                                       <group-names>|<group-symbols>|
                                                       <metric-names>|<metric-symbols>|
                                                       <prototype-name-metrics>|
                                                       <prototype-symbol-metrics>

                               <group-name-metrics>    group:"<group-name>"((#(<metric-names>|<metric-symbols>))|(#!))+
                               <group-symbol-metrics>  groupSymbol:"<group-symbol>"((#(<metric-names>|<metric-symbols>))|(#!))+

                               <group-names>           group:"<group-name>"(,"<group-name>")*
                               <group-name>            An individual metric group name from the
                                                       current list of those available.

                               <group-symbols>         groupSymbol:"<group-symbol>"(,"<group-symbol>")*
                               <group-symbol>          An individual metric group symbol from the
                                                       current list of those available.

                               <metric-names>          name:"<metric-name>"(,"<metric-name>")*
                               <metric-name>           An individual metric name from the current
                                                       list of those available.

                               <metric-symbols>        symbol:"<metric-symbol>"(,"<metric-symbol>")*
                               <metric-symbol>         An individual metric symbol from the
                                                       current list of those available.

                               <prototype-name-metrics>    prototypeName:<prototype-name-metric>(,<prototype-name-metric>)*
                               <prototype-name-metric>     "<prototype-name>"(#<prototype-options>)*
                               <prototype-name>            An individual prototype metric name from the
                                                           current list of those available (if any)
                                                           that will be instantiated.

                               <prototype-symbol-metrics>  prototypeSymbol:<prototype-symbol-metric>(,<prototype-symbol-metric>)*
                               <prototype-symbol-metric>   "<prototype-symbol>"(#<prototype-options>)*
                               <prototype-symbol>          An individual prototype metric symbol from
                                                           the current list of those available (if any)
                                                           that will be instantiated.

                               <prototype-options>         <prototype-option>(&<prototype-option>)*
                               <prototype-option>          "<prototype-option-symbol>"=<prototype-option-value>
                               <prototype-option-symbol>   An individual prototype metric option symbol
                                                           from the list of those available (if any)
                                                           that will be used when configuring the
                                                           prototype metric during instantiation.
                               <prototype-option-value>    One decimal or hexadecimal value from the
                                                           list of those supported by the associated
                                                           prototype metric option that will be used
                                                           when configuring the prototype metric during
                                                           instantiation.

                               Notes:

                               - The --show-metrics option can be used to determine all of the
                                 available metric groups (symbols and names) and their associated
                                 metrics (symbols and names) that can be can be specified, for a
                                 specific GPU, graphics API and the current graphics driver
                                 version. All of them are case sensitive.

                               - For <group-names> and <group-symbols>, all of the individual
                                 metrics contained in all of the metric groups listed will be
                                 collected. If only a sub-grouping of metrics is desired, use
                                 the <group-name-metrics> or <group-symbol-metrics> syntax.

                               - For <metric-names> and <metric-symbols>, all of the individual
                                 metrics listed will be collected in all of the metric groups
                                 that contain them. If only a single instance of a metric is
                                 desired, use the <group-name-metrics> or <group-symbol-metrics>
                                 syntax.

                               - For <group-name-metrics> and <group-symbol-metrics>, specifying
                                 a pound/hash sign then an exclamation mark ("#!") will exclude
                                 all of the metrics names and/or metric symbols listed from those
                                 collected in the specified metric group. Otherwise, only those
                                 listed are collected.

                               - It is possible for any <group-name>, <group-symbol>,
                                 <metric-name>, <metric-symbol>, <prototype-name>,
                                 <prototype-symbol> or <prototype-option-symbol> to contain space
                                 characters, hence the syntax having enclosing quotes. If there are no
                                 spaces, the enclosing quotes do not need to be provided. There
                                 is no known <group-symbol>, <metric-symbol>, <prototype-symbol> or
                                 <prototype-option-symbol> with spaces.

                               - Only the first metrics list option (-m|--metrics-list) is
                                 recognized when multiple are specified on the command line.

                               Examples:

                               -m name:"GPU Core Clocks"
                               -m name:"GPU Core Clocks","GPU Time Elapsed"
                               -m symbol:GpuTime
                               -m symbol:GpuCoreClocks,GpuTime;name:"EU Stall"
                               -m group:"Render Metrics Basic set"
                               -m group:"Render Metrics Basic set","Compute Metrics Basic set"
                               -m group:"Compute Metrics Basic set";symbol:PixelsRendered;group:"Render Metrics Basic set"
                               -m group:"Compute Metrics Basic set"#symbol:GpuBusy,GpuCoreClocks#name:"GPU Time Elapsed"
                                    Note: In the example above, only listed metrics are included.
                               -m group:"Compute Metrics Basic set"#!#symbol:GpuBusy,GpuCoreClocks#name:"GPU Time Elapsed"
                                    Note: In the example above, all listed metrics are excluded.
                               -m groupSymbol:RenderBasic
                               -m groupSymbol:RenderBasic,ComputeBasic
                               -m groupSymbol:ComputeBasic;symbol:PixelsRendered;groupSymbol:RenderBasic
                               -m groupSymbol:Sampler#symbol:GpuTime,AvgGpuCoreFrequencyMHz#name:"GPU Core Clocks"
                                    Note: In the example above, only listed metrics are included.
                               -m groupSymbol:Sampler#symbol:GpuTime,AvgGpuCoreFrequencyMHz#name:"GPU Core Clocks"#!
                                    Note: In the example above, all listed metrics are excluded.
                               -m groupSymbol:Sampler#symbol:SamplesWritten,SamplesBlended;symbol:PixelsRendered
                                    Note: In the example above, all instances of the
                                    PixelsRendered metric are included (although only one exists)
                                    and only listed metrics in the Sampler group are included.

-n|--frame-count      <int>    Number of frames to collect metrics from, beginning with the frame
                               identified by the --frame-index option. Must be in the range [1, number
                               of frames in stream - index of frame in stream). Default value: "1".

   --no-metadata               Suppresses output of the metadata file, that is normally generated
                               alongside the CSV file.

-p|--per-pass                  Delimit graphics call collection ranges, that are used to measure
                               metrics at pass boundaries.

   --query-quality-passes-count <int>    
                               Used to change the maximum number of metrics collection passes that are
                               performed per metric group when metric value quality issues are detected
                               for the queries requested. Must be in the range [1, UINT32_MAX]. Default
                               value: "5".

-r|--range-aggregation-for-frame-results          
                               Aggregates the metric values for all of the ranges queried and
                               reports a single "frame" result value for each metric collected.

-s|--show-metrics              Show only a list of the available metrics to collect, for a given
                               input stream on a specific GPU. Primarly for usage with metrics
                               filtering (-m|--metrics-list). If the logging level is info, debug
                               or trace, the metric description and units are also included.

                               Note: If an Intel(R) GPU is used that supports the instantiation of
                               metric prototypes for collection, they will be also be included in
                               the list along with any options that they support. If the logging
                               level is info, debug or trace, the prototype description, its
                               general grouping/classification, type and units are also included.

-t|--transpose                 Transpose the output results such that graphics call collection
                               ranges (or frame indices when performing aggregation) are shown one per
                               row, and the metrics collected are shown one per column.

-u|--include-units             Include column with the type of units for each metric row. The
                               default is for no units column.

-v|--log-level        <string> Set logging output severity level. Valid values from most severe to
                               least (and most verbose) are: "fatal", "error", "warn", "info",
                               "debug", "trace". Trace level is only available on debug builds.
                               Default value: "warn".

-w|--wait-for-debugger         When process starts, pause and prompt the user to attach a
                               debugger before continuing.

   --gpu-freq-percent <int>    
                               Used to change the maximum GPU frequency to percent of maximum available
                               GPU frequency. Must be in the range [0, 100]. Default
                               value: "0" means that no GPU frequency override is applied.

gpa-system-info

This utility simply prints out information about the system it is run on, there are no command line options.