Today we released PIX version 2501.30-preview, available for download here. This release has initial support for the exciting new D3D12 features that were released in a preview DirectX Agility SDK today. Please visit this blog postĀ for more information about the Agility SDK release.
2501.30-preview is a preview version of PIX. It is identical to 2501.30 (non-preview) except it also has support for the new preview D3D12 features. We only recommend using this version of PIX if you are trying out the new D3D12 features. We recommend that all other PIX users stick to the most recent regular version of PIX available on our download page.
Whatās New?
Application Specific Driver State
D3D12 drivers sometimes need to implement workarounds for bugs in specific applications, known as āapp detectā. This behavior causes problems for capture/replay tools like PIX on Windows. For example, if PIX is capturing an application that is subject to āapp detectā driver changes, then the application will work at capture time, but PIX may hit errors when it tries to replay the captured GPU workload in a separate PIX process.
Application Specific Driver State introduces new D3D12 functionality that improves capture/replay stability of tools like PIX on Windows by allowing the tool to capture any active application specific workarounds, store them in the capture file, and then tell the driver to set them at replay time.
By default, this feature is disabled in PIX. To enable this feature, please go to File -> Settings and check the following option.
For more information about Application Specific Driver State, please visit this blog post.
Recreate At GPUVA
Current D3D12 API limitations prevent creating D3D12 objects at their original GPU virtual addresses (GPUVAs). This poses significant challenges for PIX when dealing with APIs that take GPU buffers containing GPUVAs. PIX must replace (“fix-up”) capture-time values with replay-time values, a “fix-up” solution that has become less sustainable as GPU workloads grow more complex.
A classic example of a GPU buffer with GPUVAs is an ExecuteIndirect() argument buffer containing root descriptors. PIX cannot naively capture/replay this work because the buffer would contain capture-time GPUVAs, leading to invalid data. To avoid this, PIX intercepts the buffer before ExecuteIndirect(), storing GPUVAs as `(ID3D12Resource*, offset)` or `(ID3D12Heap*, offset)` pairs. During replay, PIX regenerates the buffer with replay-time GPUVAs to execute ExecuteIndirect() correctly.
This solution is complex to maintain and can disrupt the applicationās GPU work during capture. It also introduces non-determinism issues that pose significant problems for replay correctness.
With RecreateAtGpuva, PIX can now replace this “fix-up” solution with naive capture/replay work. Overall, this simplifies PIX capture/replay mechanism for GPU buffers with GPUVAs and improves replay correctness and non-determinism issues.
By default, this feature is disabled in PIX. To enable this feature, please go to File -> Settings and check the following option.
For more information about Recreate At GPUVA, please visit this blog post.
Support for the new D3D12 Tight Alignment feature
For more information about Tight Alignment, please visit this blog post.
Known Caveats
- Application Specific Driver State is not yet supported in D3D12 applications using a D3D runtime older than version 716 and with D3D12 Debug Layer enabled.
As usual, please send your suggestions and/or feedback to us via the feedback button in top right corner of PIX or via theĀ DirectX Discord!
0 comments
Be the first to start the discussion.