GPU Dump
GPU Dump captures a rendered frame for inspection in a browser. It brings together render passes, resource previews, GPU timings, recorded commands, decoded constants, console variables, and engine logs. Use it to trace a rendering problem through its inputs and outputs, or to find the passes that account for the largest measured GPU cost.
Capture and open a dump
GPU Dump requires a development build and an active rendered view.
- Open the scene or document you want to inspect and position its rendered view at the problem.
- Choose GPU Dump from the editor's Tools menu, or press Ctrl+Alt+G.
- Wait for measurement, capture, and writing to finish. By default, the engine measures 32 timing-only frames before capturing resource data, and pauses the global and world clocks during measurement and capture.
- The editor reports the saved path and opens the output folder by default. Dumps are stored under
:appdata/GpuDumps; the engine log also reports the resolved capture path. - Run OpenGpuDump.bat in the capture folder. With Python available, it serves the folder locally and opens the viewer in your browser. Keep the launcher window open while inspecting the dump; close it to stop the server.
The launcher falls back to opening index.html directly if Python is unavailable or the server cannot start. Direct file mode supports browsing the report, but exact raw resource values require served mode. Texture previews are display transforms, so their displayed colors should not be treated as exact stored values.
You can also enter GpuDump in the console, or set Rendering.GpuDump.Trigger to true. The trigger resets automatically. Configure the Rendering.GpuDump.* CVars before requesting a capture.
Passes
The Passes tab lists passes grouped by view. Use Filter passes or markers to narrow the list, then select a pass to see its queue, GPU median, GPU capture time, CPU recording time, and draw/dispatch counts.
The selected pass exposes several inspection tabs:
| Tab | What to inspect |
|---|---|
| Inputs | Resources read by the pass, including previews, formats, versions, states, subresource ranges, and links to their writers. |
| Outputs | Resources written by the pass. Follow these when looking for the first incorrect result. |
| Commands | The captured command stream for the pass, when command recording is enabled. |
| Constants | Captured constant data associated with the pass. |
| Barriers | Resource barriers associated with the pass. |
| Structure | The pass's recorded structural information. |
Findings appear above these tabs. Follow Inspect to examine the referenced resource. For example, the screenshot flags two entirely zero subresources; whether that is a problem depends on what the pass is expected to produce.
Resources
The Resources tab provides a gallery of captured resources. Filter by name or format to locate a texture, then select it to investigate its captured data. Cards show the resource identifier, name, format, dimensions, version count, and imported/output markers where applicable.
Use resource versions to follow changes across writes in the frame. A resource listed in the report does not necessarily have captured pixel data: metadata-only captures, size limits, and unsupported readbacks can leave resources without previews or raw contents.
Timeline and GPU cost
The Timeline tab contains two different views of GPU timing.
Pass cost flamegraph
Bar width represents each pass's median GPU cost across the timing window. Select a graph to expand it or a pass to inspect it. Graphics, compute, and transfer passes have distinct colors, and the largest-pass table gives their measured costs and shares.
The bars are packed consecutively. Their total is the sum of measured pass medians, not elapsed frame time; this flamegraph does not show scheduling gaps or overlap.
Measured frame timeline
Each pass has a labeled lane, and all bars share a time axis showing actual GPU placement, including gaps. Use the frame selector to inspect a timing-only frame or the capture frame.
Resource readback perturbs the capture frame. Prefer the timing-window medians when comparing pass costs, and distinguish GPU median, GPU capture, and CPU record in the pass details. GPU Dump uses serial recording and runs async compute inline during measurement/capture, so these measurements do not represent normal asynchronous scheduling.
Digest
The Digest tab combines linked findings with a text summary of the capture. Use Copy digest to copy the summary into an investigation or bug report.
The summary includes the application, frame, renderer, adapter, timing-window context, and pass statistics. Findings such as fallback bindings, zero contents, or unusual timing are investigation starting points; inspect the linked pass and resource before deciding that a finding indicates a defect.
Constants
The Constants tab lists captured constant buffers and their decoded fields. Use Find buffer or field to locate relevant data, then select a buffer to see its size, hash, and field values. Expand array or matrix elements to inspect their contents.
This is useful when the correct resources reach a pass but its parameters appear wrong, such as an unexpected viewport size or camera matrix. These are captured values, not live editable settings.
CVars
The CVars tab records console variable values alongside their defaults. Enable Only changed from default to focus on configuration differences that may explain the captured result.
The values in the screenshots belong to this example capture; they are not recommended settings. Change live configuration through the engine's CVar tools, then take another capture to inspect the result.
Log
The Log tab includes recent engine history followed by measurement and capture messages. Search by text, filter by level, or use Download log to save the captured log.
Timestamps are seconds since renderer initialization. Recent history is bounded to 2,048 messages or 2 MiB, and the total captured log is limited to 4 MiB. Use the regular engine log if you need history outside that window.
Capture settings
All settings below use the prefix Rendering.GpuDump.. For example, the full name of TimingFrames is Rendering.GpuDump.TimingFrames.
| Setting | Default | Purpose |
|---|---|---|
Directory | :appdata/GpuDumps | Output root for captures. |
View | Empty | Capture views whose names contain this text; empty includes all views. |
Root | Empty | Restrict capture to a pass or marker prefix. |
TimingFrames | 32 | Number of timing-only frames before capture, from 0 to 256. |
Resources | 2 | 0: metadata only; 1: outputs; 2: outputs and imported inputs. |
StagingBudgetMB | 2048 | Staging budget; capture flushes and drains when full. |
MaxResourceMB | 256 | Maximum size of an individual captured resource. |
Previews | true | Write PNG previews. |
Commands | true | Record the command stream. |
Constants | true | Decode CPU constant data. |
FreezeTime | true | Pause clocks during measurement and capture. |
Profile | false | Write a profiling window. |
Compress | false | Write optional zstd copies of raw resources. |
DigestTokens | 40000 | Conservative token budget for the text digest. |
ReportMaxMB | 24 | Size cap for the single-file HTML report. |
OpenViewer | true | Open the output folder after an editor capture. |
For a smaller capture, narrow View or Root, or use metadata-only resource capture when you only need pass information. If resource data is missing, check the findings and MaxResourceMB before increasing capture limits.
Sharing and troubleshooting
Share the entire capture folder when another developer needs full inspection, including raw resource data. report.html is a single-file report; if its interactive data exceeds ReportMaxMB, it contains the digest and directs the reader to index.html in the full dump folder.
- Capture rejected: another dump may still be active, or capture settings may be invalid. Wait for the current capture to finish and check the log.
- No rendered view: open a rendered document view before capturing from the editor.
- Editor timeout: the engine may still be writing. Check the log and output folder before starting another capture.
- Raw values unavailable: launch
OpenGpuDump.batwith Python available and verify that the viewer reports served mode. - Unexpectedly expensive capture frame: resource readback adds overhead. Inspect timing-only frames and GPU medians for comparison.






