Profile Construct on Windows
Find where a slow start, a slow frame or a stutter comes from, with PIX, PresentMon and Construct's timing lines
Construct renders with Direct3D 12 on Windows. This page shows how to find where a slow start, a slow frame or a stutter comes from, using the tools that Windows and the GPU vendors provide. Construct writes what those tools read. It has no profiler of its own.
You need a build of Construct from 2026-10-01 or later.
Read the timing lines first
Construct writes timing lines to its log. Start it from a terminal and
search the output for [TIMING]:
construct.exe gui > construct.log 2>&1
| Line | What it measures |
|---|---|
[TIMING] milestone first-presented-frame <ms> |
From process start to the first frame the viewport shows. On a first start, this frame is the placeholder that shows while your scene's shaders build. |
[TIMING] milestone first-scene-frame <ms> |
From process start to the first frame of your scene. This is the wait you see. |
[TIMING] pipeline create sdf-<pass> <ms> |
The time to create one GPU pipeline. The first time the driver sees a shader this takes seconds. After that it takes about a millisecond. |
If the first start is slow and later starts are fast, the driver is compiling shaders for the first time. This happens once after a driver update, or after the driver's shader cache is cleared. Construct prepares the pipelines it is about to need on a helper thread, so the editor stays responsive while the driver compiles. The compile itself still takes however long the driver needs.
Name the passes in a GPU capture
Start Construct with --gpu-markers:
construct.exe gui --gpu-markers
Each viewport pass then appears by name in PIX on Windows and in Radeon GPU Profiler:
| Name | What the GPU does |
|---|---|
geometry-passes |
Writes the depth and surface buffers of the scene |
main-pass |
Shades the scene |
post |
Runs the post effects: bloom, tone mapping, anti-aliasing |
present |
Draws the finished frame into the editor window |
pick |
Finds what is under the mouse pointer |
pathtrace-geometry, pathtrace-accumulate |
Path tracing: the primary hit, then one sample added to the image |
Without the switch, a frame shows up as one unnamed block. The switch costs nothing measurable while no capture is running.
To take a capture with PIX from the command line:
pixtool launch "C:\path\to\construct.exe" --command-line=--gpu-markers --captureFromStart take-capture --frames=300 save-capture construct.wpix
You need Windows Developer Mode to open or analyse a capture (Settings ā System ā For developers).
Compare with Vulkan
Construct also runs on Vulkan on Windows, which makes Vulkan a reference
to compare against on the same machine. Start it with
--rhi-backend vulkan:
construct.exe gui --rhi-backend vulkan
If a scene is slow on both, the cause is the scene or the GPU. If it is slow on only one, the cause is that API's path, and a capture of each shows where they differ. Vulkan on Windows hands frames to the window through memory rather than sharing them on the GPU (see Understand viewport transport and performance), so compare GPU time, not only frame rate.
Find out why the GPU refused something
When a pipeline fails to build, the log names the pipeline, but Direct3D 12
reports the reason only to its debug layer. Run Construct with
--rhi-debug under a debugger that shows debug output, for example:
cdb -g -G construct.exe gui --rhi-debug
Lines that start with D3D12 ERROR: name the cause. The debug layer is
part of the Windows Graphics Tools optional feature.
Measure frame pacing
PresentMon records every frame Construct presents, and the time from a click to the frame that shows it:
presentmon --process_name construct.exe --output_file frames.csv --timed 10 --terminate_after_timed
Drag the camera while it records. In the CSV, MsBetweenPresents is the
time between frames, and a long interval is a stutter.
Watch the whole machine
The Monitor activity shows CPU use per core, memory, each GPU's load and video memory, and every running process, on Windows as on Linux. See Monitor system resources.
Related
- Understand viewport transport and performance
- Monitor system resources