Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
163843 stories
·
33 followers

Publish Visual Studio Marketplace extensions securely with Trusted Publishing

1 Share

We are excited to announce Trusted Publishing for Visual Studio Marketplace —a simpler and safer way to publish Visual Studio Code and Visual Studio extensions from GitHub Actions or Azure Pipelines without storing a long-lived Azure DevOps personal access token (PAT).

Trusted Publishing uses federated identity to verify your release workflow and grant access for the publish—no publishing secret to store or rotate.

Why Trusted Publishing?

Automated Marketplace publishing has traditionally required storing a PAT as a CI/CD secret. Trusted Publishing offers a safer alternative:

  • No long-lived secrets—there is no publishing credential to store or rotate in your CI/CD system.
  • Short-lived access—for GitHub Actions, Marketplace issues a temporary credential that expires after 15 minutes.
  • Federated identity—Marketplace trusts a configured GitHub workflow or Azure Pipelines workload identity.

Existing PAT-based publishing continues to work, so you can adopt Trusted Publishing when you are ready.

How it works

  1. The CI/CD system presents its federated identity to Visual Studio Marketplace.
  2. Marketplace verifies the GitHub Trusted Publishing policy or the Azure Pipelines workload identity.
  3. The publishing tool uses the verified identity to publish the extension without a PAT.

The process is automatic when you publish with OIDC—there is no PAT to retrieve or manage.

Supported CI/CD providers

Provider Status Authentication and setup
GitHub Actions Supported Create a policy on the publisher’s Trusted Publishing page and publish with GitHub OIDC.
Azure Pipelines Supported Configure a Microsoft Entra-backed WIF service connection and add its identity as a publisher contributor. No Marketplace policy is required.

For Azure Pipelines, see configure a Microsoft Entra-backed WIF service connection and add its identity as a publisher contributor.

Get started with GitHub Actions

Create a Marketplace policy that identifies the GitHub repository and workflow allowed to publish.

The Trusted Publishing tab for configuring GitHub Actions policies in Visual Studio Marketplace

1. Create a Trusted Publishing policy

  1. Sign in to Visual Studio Marketplace.
  2. Open the publisher that owns your extension.
  3. Select Trusted Publishing.
  4. Expand Create, then fill in the fields described below.
    Field Value
    Policy name A descriptive name such as Release workflow.
    Repository owner The exact GitHub organization or user login that owns the repository, such as contoso.
    Repository The repository name without the owner, such as sample-extension.
    Workflow The workflow filename under .github/workflows, such as publish.yml.
    Environment (optional) If the workflow uses a GitHub environment, enter its exact name, such as production.
  5. Select Create.Creating a Trusted Publishing policy with fictional test account data

For a private repository, run the configured workflow within 48 hours of creating the policy. The first successful token exchange permanently activates the policy.

2. Publish a Visual Studio Code extension

To configure your GitHub Actions workflow and publish without a PAT, follow the Secure automated publishing to Visual Studio Marketplace guide in the Visual Studio Code documentation.

3. Publish a Visual Studio extension

To publish your Visual Studio extension from the command line, follow the Publish a Visual Studio extension via command line guide in the Visual Studio documentation.

Publishing from Azure Pipelines

Azure Pipelines uses an Azure DevOps service connection with Workload Identity Federation (WIF) instead of a GitHub Trusted Publishing policy.

Do not create a policy on the Marketplace Trusted Publishing page for Azure Pipelines.

Before publishing:

  1. Configure an Azure Pipelines service connection that uses Workload Identity Federation. Back the connection with either a Microsoft Entra app registration and service principal or a managed identity.
  2. Add that identity to your Visual Studio Marketplace publisher and grant it the Contributor role.
  3. Configure the publishing step to use the WIF service connection.

The pipeline can then publish Visual Studio Code or Visual Studio extensions without storing a Marketplace PAT.

GitHub policy lifecycle

GitHub policy activation differs based on repository visibility. For a private repository, a new policy is temporarily active for 48 hours. The first successful token exchange makes the policy permanently active. If the policy is not used during that period, it expires and can be reopened for another 48 hours.

You can view the status and last use of each policy from the Trusted Publishing page.

Migrating from a PAT

If your GitHub Actions workflow already publishes with vsce, migration is straightforward:

  1. Create a Trusted Publishing policy for the repository and workflow.
  2. Add id-token: write to the publishing job.
  3. Update the publishing command to use OIDC.
  4. Run the workflow and verify that the OIDC publish succeeds.
  5. After the OIDC publish succeeds, remove the Marketplace PAT from the workflow and repository secrets.

We recommend keeping the PAT until you have verified the first Trusted Publishing run. After the migration succeeds, remove the unused secret so it cannot be used accidentally by another workflow step.

For Azure Pipelines, configure the WIF service connection and publisher identity first, update the publishing step to use that connection, and remove the PAT only after the federated publish succeeds. No Marketplace Trusted Publishing policy is needed.

Try Trusted Publishing Today

Trusted Publishing makes automated extension releases easier to maintain and safer by default—without requiring a long-lived publishing secret.

To get started:

  1. Open your publisher in Visual Studio Marketplace publisher management.
  2. Create a policy under Trusted Publishing.
  3. Update your GitHub Actions workflow to use OIDC.
  4. Publish your extension without a PAT.

Using Azure Pipelines instead? Follow the Azure Pipelines setup guide to publish with Workload Identity Federation (WIF), without a PAT.

For complete setup instructions and troubleshooting guidance, visit the Trusted Publishing documentation.

Thank you

Thank you to our extension publishers for investing in more secure releases. As you adopt Trusted Publishing, we would love to hear what works well and where we can improve—from configuring your first policy to publishing without a PAT.

Share your feedback in the Visual Studio Marketplace GitHub discussions.

The post Publish Visual Studio Marketplace extensions securely with Trusted Publishing appeared first on Microsoft for Developers.

Read the whole story
alvinashcraft
16 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Announcing Agility SDK 1.620 Retail and 1.722 Preview: DirectX Dump Files, Partial Graphics Programs, and So Much More!

1 Share

Today, we are pleased to announce the release of Agility SDK 1.620 retail and Agility SDK 1.722-preview!

Agility SDK 1.620 brings DirectX Dump Files to retail, along with Fence Barriers Tier 1, the Batched Asynchronous Command List APIs, and Partial Graphics Programs.

Meanwhile, Agility SDK 1.722-preview introduces major updates to DirectX Raytracing capabilities for highly detailed, dynamic scenes.

Here’s the list of everything in Agility SDK 1.620:

  • GPU diagnostics: DirectX Dump Files; D3D12 Driver Reported Messages; Extended PIX Markers
  • Advanced Shader Delivery: Partial Graphics Programs; Explicitly Specified PSDBs; SODB Enumeration and Transaction API; serialized root-signature support
  • Command submission: Fence Barriers Tier 1; Batched Asynchronous Command List APIs
  • Feature queries: CheckFeatureSupport1; Castable Format Query
  • Resource management: GUID Texture Layout – basic and VPBLT support
  • ML: DirectX Compute Graph Compiler runtime interfaces for MLIR programs
  • Video: VPblit 3DLUT; Video Encode CPU Metadata Resolution

And here’s what’s new in Agility SDK 1.722-preview:

  • Raytracing: Clustered geometry; partitioned top-level acceleration structures; indirect acceleration-structure builds
  • Descriptor heaps: GPU Timeline CopyDescriptors

Quick note: Shader Model 6.10 remains in preview for this release, but it won’t stay there for long! Keep an eye out for it in the Agility SDK 1.621 retail release, coming in early December.

For more detail, including drivers, download links, and feature support, read on down below.

Downloads

These releases are available on Agility SDK Downloads today! As usual, the features in this release come with day one PIX support. Be sure to check out the PIX release blog post for more information.

Drivers

IHV Driver link
AMD AMD Software: Agility SDK Retail Edition 26.20.12.02 (1.620 retail)

AMD Software: Agility SDK Developer Preview Edition 26.20.12.01 (1.722 preview)

AMD Software: DirectX Compute Graph Compiler (DxCGC) Developer Preview Edition 26.10.07.11

Intel Intel Graphics Beta Preview Feature Driver
NVIDIA Download the official NVIDIA drivers or use the NVIDIA App for automatic driver updates.
Qualcomm Qualcomm® Adreno™ Windows Graphics Drivers

See the Feature Support table at the end of this post for more detail on hardware support by feature.

Agility SDK 1.620 retail features

D3D12 features

Advanced Shader Delivery updates

Advanced Shader Delivery (ASD) delivers precompiled shaders so games can avoid doing that compilation on the player’s PC. Agility SDK 1.620 expands how developers prepare and use that shader data.

Partial Graphics Programs allow reuse of compiled program parts across pipeline variants, which can decrease download size and compile time. See the blog post about this topic for more details.

Explicitly Specified PSDBs enables a game to use more than one PSDB, chunking up downloads based on DLC or other criteria. Note that support for multiple SODBs/PSDBs per title from Xbox is not available at this time.

The SODB Enumeration and Transaction API lets developers inspect and update the state-object databases used for ASD. The D3D12StateObjectCompiler.exe tool has been rewritten to sit on top of this API, proving that it’s sufficient for any use case we’ve seen for this database.

Serialized root-signature support lets ASD’s offline compilation tools and the D3D12 runtime work from the same root-signature descriptions. After PSO/SO creation succeeds, you can retrieve the root signature object for use on the command list.

CheckFeatureSupport1

An application programmed to check for specific capability tiers may not recognize capability tiers introduced by a newer runtime. We’ve added an additional way to perform capability checks with CheckFeatureSupport1. This lets the application specify an SDK version and clamps reported tier values to those defined at or before that version, avoiding unexpectedly newer values.

Spec: CheckFeatureSupport1

Resource Management

Batched Asynchronous Command List APIs

Older copy and clear commands impose ordering even when operations touch independent memory. That can serialize work the GPU could otherwise overlap.

The batched APIs let an application express independent work while using Enhanced Barriers for dependencies. For example, CopyBufferRegions can batch independent copies so they may execute concurrently; the application inserts an Enhanced Barrier before a subsequent operation that depends on their results.

ClearTextureSubresources also clears by resource and format rather than requiring view descriptors, while FillBuffers provides batched buffer fills. ClearBoundRenderTargetViews and ClearBoundDepthStencilView allow you to do clears even within render passes.

We’re also providing the option of enabling a fallback layer to bring emulated support for the new commands to older hardware, check out more detail in our in-depth blog.

Spec: Batched Asynchronous Commands

Castable Format Query

Middleware that receives a resource does not necessarily have the format-cast list supplied when the resource was created. Without a query, it is nigh impossible for the middleware to track this information.

ID3D12Resource3::GetCastableFormatsCount and GetCastableFormats expose the recorded list. A component can retrieve the declared view formats from the resource itself. This retrieves the explicit creation-time cast list; it does not grant new casting permissions.

Spec: Castable Format Query

GUID Texture Layout

GUID Texture Layout lets the application specify D3D-defined texture layouts or query driver-managed layouts. One supported scenario is CPU-accessible NV12 resources.

Spec: GUID Texture Layout

Synchronization and Submission

Fence Barriers Tier 1

In February, we released a preview of Fence Barriers, a new D3D12 capability that lets you wait for and/or signal D3D12 fences within a command list. This Agility SDK moves Tier 1 support to the retail release, letting you use it in retail games.

Tier 2 support, which adds support for cross-queue waits, is still restricted to preview Agility SDKs for now, but it will be available in a future retail Agility SDK.

Spec: Enhanced Barriers

ML/AI

DirectX Compute Graph Compiler runtime interfaces

Compiling each operation of an ML model as an independent shader can hide the graph structure needed to optimize across operations. MLIR programs preserve that higher-level information, including opportunities to fuse work and avoid intermediate memory traffic.

The runtime interfaces support compiling MLIR programs into executable programs within D3D12 state objects. DXCGC produces optimized graph representations, and the driver performs final hardware code generation. Engines can integrate that compiled graph work with D3D12 execution.

Spec: MLIR Programs and DXCGC

Video

D3D12 VPblit 3DLUT

Tone mapping and color transformations do not always need to occupy the 3D engine. VPblit 3DLUT exposes color-space conversion, one-dimensional lookup tables, and a three-dimensional lookup table through dedicated video-processing hardware.

Where supported, applications can perform those transformations as part of their video-processing pipeline instead of implementing the same work in shaders.

Spec: Video Processing 1D/3D LUT

Video Encode CPU Metadata Resolution

For certain codecs, the application needs completed-frame resolved metadata to finish the bitstream headers. A separate GPU resolve can delay that step even after encoding has finished, particularly when a virtual GPU’s compute work must wait for another scheduling slice.

ID3D12VideoEncoder1::ResolveEncoderOutputMetadataCPU performs the resolve synchronously on the CPU using the encoder instance that produced the metadata. The application waits for encode completion, supplies CPU-readable input metadata, and receives results in application-owned memory.

Query D3D12_FEATURE_VIDEO_ENCODER_CPU_RESOLVE for the codec and configuration. This path is not available with protected resource sessions.

Spec: Video Encode CPU Resolve

PIX and GPU diagnostics

Agility SDK 1.620-retail also brings support for DirectX Dump Files, Driver Reported Messages, and Extended PIX Markers in retail. Check out the latest PIX release blog for more details!

Driver Reported Messages

Driver Reported Messages gives drivers a standard channel to send diagnostic messages to applications through ID3D12InfoQueue. Drivers can use this channel to report issues found by their own validation checks, such as shader binding table errors or acceleration structure problems. When available, messages include context that helps developers trace an issue back to the associated draw or dispatch.

Enable the debug layer and call ID3D12Debug7::SetEnableDriverReportedMessages(TRUE) before creating the device. Driver support determines whether messages are available.


Agility SDK 1.722 preview features

GPU Timeline CopyDescriptors

GPU Timeline CopyDescriptors adds a command-list operation for ranged copies between shader-visible descriptor heaps.

Descriptor heap barriers order updates against shader reads or further copies. This feature requires Resource Binding Tier 4.

DXR Updates

Dynamic geometry and changing scene instances can make acceleration-structure maintenance cost prohibitive for highly detailed scenes. Agility SDK 1.722 preview adds Clustered Geometry, Partitioned Top-Level Acceleration Structures, and Indirect Acceleration-Structure builds. These capabilities let engines reuse geometry clusters, retain unchanged scene partitions, and supply build inputs from GPU memory rather than rebuilding CPU-side descriptions.

Our dedicated Raytracing Updates blog has more details.

Spec: DirectX Raytracing


Appendix

Feature Support

Release Feature AMD Intel NVIDIA Qualcomm
1.620 retail Partial Graphics Programs AMD Radeon™ RX 7000 and 9000 series Planned in a future driver Planned in a future driver Planned in a future driver
1.620 retail Batched Asynchronous Command List APIs AMD Radeon™ RX 7000 and 9000 series Intel® Arc™ B-Series Graphics Intel® Core™ Ultra processor family (200V series, Series 3) Intel® Core™ processor family All RTX GPUs Planned in a future driver
1.620 retail GUID Texture Layout AMD Radeon™ RX 7000 and 9000 series Intel® Arc™ B-Series Graphics Intel® Core™ Ultra processor family (200V series, Series 3) Intel® Core™ processors (Series 3) All RTX GPUs —
1.620 retail Fence Barriers Tier 1 AMD Radeon™ RX 7000 and 9000 series Intel® Arc™ B-Series Graphics Intel® Core™ Ultra processor family (200V series, Series 3) Intel® Core™ processor family GeForce RTX™ 30 series (Ampere) and newer GPUs —
1.620 retail DXCGC runtime interfaces for MLIR programs AMD Radeon™ RX 9000 series — Turing and newer GPUs Planned in a future driver
1.620 retail VPblit 3DLUT AMD Radeon™ RX 9000 series Intel® Core™ Ultra processor family (200V series, Series 3) — —
1.620 retail Video Encode CPU Metadata Resolution AMD Radeon™ RX 7000 and 9000 series Intel® Arc™ B-Series Graphics Intel® Core™ Ultra processor family (Series 1, 200V series, 200S and 200H series, Series 3) Intel® Core™ processor family Turing and newer GPUs with NVENC —
1.620 retail DirectX Dump Files AMD Radeon™ RX 7000 and 9000 series Planned in a future driver All RTX GPUs Planned in a future driver
1.620 retail Extended PIX Markers AMD Radeon™ RX 7000 and 9000 series Planned in a future driver All RTX GPUs Planned in a future driver
1.620 retail Driver Reported Messages Planned in a future driver Planned in a future driver Planned in a future driver Planned in a future driver
1.722 preview GPU Timeline CopyDescriptors AMD Radeon™ RX 7000 and 9000 series Planned in a future driver Planned in a future driver Planned in a future driver
1.722 preview Clustered Geometry, Partitioned Top-Level Acceleration Structures, and indirect acceleration-structure builds AMD Radeon™ RX 9000 series Intel® Arc™ B-Series Graphics Intel® Core™ Ultra processor family (200V series, Series 3) All RTX GPUs Planned in a future driver

— indicates no announced support at this time.

The post Announcing Agility SDK 1.620 Retail and 1.722 Preview: DirectX Dump Files, Partial Graphics Programs, and So Much More! appeared first on DirectX Developer Blog.

Read the whole story
alvinashcraft
24 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

DirectX Dump Files are now ready for your retail games

1 Share

At GDC 2026, we shared our vision for bringing console-level GPU developer tools to Windows, and in June we released the DirectX Dump Files public preview. Thank you to everyone who tried the preview and sent us feedback.

Today, DirectX Dump Files are ready for your retail games. Starting with Agility SDK 1.620 and PIX 2610.28, you can capture GPU crashes on your players’ PCs and on your own machines, then investigate them in PIX using one consistent workflow across hardware vendors.

We couldn’t have done this alone. DirectX Dump Files bring together data from Windows, Direct3D, and each hardware vendor’s driver, and we built them in close collaboration with AMD, Intel, NVIDIA, and Qualcomm. Thank you to all of our hardware partners. Because each vendor provides its own data, what you’ll see varies by hardware vendor and driver version.

Step-by-step guides are on Microsoft Learn, and the full details are in the specification, D3D12: DirectX Dump Files. For everything else in this release, see the Agility SDK 1.620 announcement and the PIX 2610.28 release post.

Four PIX screenshots of DirectX Dump Files: AMD, NVIDIA, and Qualcomm dump files open in PIX, and an Intel tile that says support is coming soon.
A screenshot of all four vendors support of PIX DXDMP files

What’s new since the preview

What’s new Details
Ready for retail Use DirectX Dump Files in your shipping game with Agility SDK 1.620. Developer Mode isn’t required. Learn more
Final file format Dump files now use the .dxdmp extension (the preview used .dxdmp_preview). Learn more
Retail-friendly defaults The NO_OVERHEAD dump file driver option is on by default, with no impact on players. Dump files aren’t kept on players’ PCs unless your game retains or uploads them. Learn more
Broader hardware support Driver-backed dump files are rolling out across our hardware partners. See Hardware support.
PIX markers in retail dump files Retail PIX Markers put your PIX markers in dump files. Learn more
PIX 2610.28 Hang bucketing in the Summary view; shaders and resources that help you find the root cause of a crash; and the PIX API, now generally available. Learn more
Guides on Microsoft Learn New guides cover generating and retrieving and analyzing dump files.

From crash to analysis

Diagram of the DirectX Dump Files workflow in three stages. 1, Generate, on the PC that crashes: a GPU crash happens; DirectX captures a dump file (.dxdmp), then Windows resets the GPU. 2, Retrieve, locally or through your pipeline: on development and QA machines, keep dump files on disk with the RetainDumpFile API or D3DConfig; on players' PCs, your crash pipeline uploads them using the dump file end callback. 3, Analyze, on any PC: open the dump file in PIX and use the PIX UI, the PIX API, or AI agents. You don't need the GPU that crashed.

How a DirectX Dump File gets from a GPU crash to PIX.

  1. Generate. When your GPU work stops making progress, DirectX captures a dump file before Windows resets the GPU, so the dump file reflects the GPU’s state at the time of the crash. It includes Direct3D runtime state, hardware and driver data from drivers that support DirectX Dump Files, and up to 2 MB of your own data.
  2. Retrieve. On your development and QA machines, keep dump files on disk. On players’ PCs, dump files aren’t kept by default, so the dump file end callback tells your game where each one is, and your crash pipeline uploads it. Today, retrieving dump files from players’ PCs is up to your pipeline; we’re working on making it easier.
  3. Analyze. Open the dump file in PIX on any PC. You don’t need the GPU or driver that crashed, because PIX decodes each vendor’s data with plugins from our hardware partners. PIX also analyzes the dump file for you: it identifies what kind of hang occurred and points you to the shaders and resources involved, so you can fix it faster.

Three scenarios

How much detail you get depends on where your game is running. Higher overhead options capture more data at a higher runtime cost, so you can choose the right balance for each scenario.

Development and QA

When it makes sense: A crash happens on your own machine, or your QA team hits crashes while testing across a range of PC hardware. You don’t need to reproduce it: you get a dump file when a crash happens. Detail matters more than runtime cost here.

What to do: Call the RetainDumpFile API to keep dump files on disk, ready to open in PIX or attach to a bug report. If the driver doesn’t support NO_OVERHEAD, or a NO_OVERHEAD dump file doesn’t have enough data to find the root cause, select MEDIUM_OVERHEAD or HIGH_OVERHEAD with ConfigureDumpFile in your development and QA builds, or with D3DConfig on your own machine without changing code. Learn more

Everyday retail play

When it makes sense: Your game has shipped. You don’t want to affect your players’ experience, but if the GPU crashes, you want data you can act on.

What to do: The NO_OVERHEAD dump file driver option is on by default, with no code changes and no impact on players. Drivers that don’t support it ignore it, and you still get a dump file with Direct3D runtime context and your application’s data. To make each dump file useful, add context such as your build ID or current level with AddBlobToDumpFile, and use the dump file end callback to upload the dump file through your crash pipeline. Learn more

Chasing a rare retail crash

When it makes sense: A crash keeps showing up on players’ PCs, you can’t reproduce it, and the default dump files don’t tell you enough to fix it.

What to do: On a few players’ PCs, turn on MEDIUM_OVERHEAD or HIGH_OVERHEAD with ConfigureDumpFile, for example with a command-line argument or a setting your game checks at startup. Higher overhead can lower frame rates or use more memory, so keep it to a session or two, upload the dump files through your crash pipeline, and then turn it back off. Learn more

Get started

Here’s what you need and what to do at each stage. The Learn more links go to the step-by-step guides.

Stage What you need What to do
1. Generate
On the PC that crashes
Windows 11, version 24H2 or 25H2, build 26100.8524 or 26200.8524 or later (KB5089573)
Agility SDK 1.620 or later
Any GPU driver. Supported drivers add hardware state and driver data; see Hardware support.
Developer Mode isn’t required.
DirectX generates a dump file when a crash happens, even if you skip these optional steps. They let you check support, choose how much data to capture, and add your own data.
1. Check support with CheckFeatureSupport (D3D12_FEATURE_DUMP_FILE).
2. Choose an overhead option with ConfigureDumpFile.
3. Register begin and end callbacks with SetDumpFileCallbacks, and add your own data with AddBlobToDumpFile.
On your development machine, D3DConfig can override these settings without code changes.
Learn more: D3D12: DirectX Dump Files spec · Learn guide
2. Retrieve
Locally or through your pipeline
Development and QA: no extra setup
Players’ PCs: a crash pipeline that can upload files
Development and QA: call the RetainDumpFile API, or use D3DConfig, to keep dump files in %LOCALAPPDATA%\CrashDumps.
Players’ PCs: in the dump file end callback, get the dump file’s path and upload it with your other crash data.
Learn more: Learn guide
3. Analyze
On any PC
PIX 2610.28 or later. You don’t need the GPU or driver that crashed. 1. Set your shader object and PDB search paths in PIX.
2. Open the .dxdmp file and start with the Summary view, and inspect information populated in other views.
3. Go further with the PIX API or AI agents.
Learn more: Learn guide · PIX API samples

Hardware support

IHV Supported GPUs Overhead options PIX plugin PIX markers in dump files
AMD Radeon RX 9000 Series and Radeon RX 7000 Series MEDIUM_OVERHEAD, HIGH_OVERHEAD Included in PIX 2610.28 Yes
Intel Coming soon Coming soon Coming soon Coming soon
NVIDIA NVIDIA Turing and newer, with R620 or later drivers NO_OVERHEAD, MEDIUM_OVERHEAD, HIGH_OVERHEAD Included in PIX 2610.28 Yes
Qualcomm Snapdragon X2 platform Coming soon Coming soon Coming soon

Dump files from any GPU include Direct3D runtime context and your application’s data. NO_OVERHEAD is suitable for regular gameplay, with no impact on players; MEDIUM_OVERHEAD and HIGH_OVERHEAD capture more data at a higher runtime cost. Each hardware vendor shares which of its drivers support DirectX Dump Files. For more information, contact your hardware vendor’s developer relations representative.

What you’ll see in PIX

PIX uses the same views for dump files from every hardware vendor, but what each view can show depends on the data that vendor’s driver and PIX plugin provide. Views marked with an asterisk (*) depend on hardware vendor support. For screenshots and details of each view, see the PIX 2610.28 release post.

View What it shows
Summary Hang buckets, possible causes of the crash, and related information
Events * Driver events and PIX markers, with execution status, from the plugin; otherwise DRED breadcrumbs and PIX markers
Page Faults * Faulting GPU addresses and the resources that covered them from the plugin; otherwise the faulting address and allocations from DRED, if page fault reporting is on
Resources * Resource details from the D3D12 runtime, plus extra properties and lifetime events from the plugin when available
Shader Waves * Executing shader waves, with lanes, stage, exceptions, and the current instruction
Shaders * DXIL, HLSL, and ISA support for executing shaders
Shader Autos * Shader registers for a selected wave and lane
D3D12 API Objects Command queues, command allocators, and other runtime objects
Application Blobs The data your app added with AddBlobToDumpFile
File Details Driver, adapter, device, OS, and application details

* Depends on hardware vendor support.

Go further

  • Put your PIX markers in dump files. By default, PIX markers don’t reach the GPU driver, so they aren’t in dump files. Turn on Retail PIX Markers and they show up in your dump files, so you can see where the GPU was in your frame when it crashed. See D3D12: PIX Markers.
  • Automate analysis with the PIX API. The PIX API is now generally available and installs with PIX 2610.28, so you can analyze dump files at scale. See the PIX API documentation and samples.
  • Analyze with AI agents. PIX 2610.28 includes the DxDmp command-line tools and an MCP server for AI-assisted analysis. Learn more

Known issues

  • Data varies by hardware vendor. If the data in a dump file does not help you root cause the crash, let us know and ask your hardware vendor’s developer relations contact to add it.
  • Software device removals, as opposed to TDRs, don’t generate a dump file yet. Support is planned for a future release.

What’s next

  • More data from our hardware partners, added to their dump files and shown through their PIX plugins over time.
  • Easier uploads of dump files from your players’ PCs.
  • More hardware support as drivers and PIX plugins roll out. We’ll update this post as support lands.
  • DebugBreak(), which lets a shader trigger a dump file on purpose, coming with Shader Model 6.10 in a retail Agility SDK soon.

Tell us what you think

Tell us what’s working, what isn’t, and what you’d like to see next in the #dxdmp channel on the DirectX Discord, with Help > Send Feedback in PIX, or at dxdmpsupport@microsoft.com.

Resources

The post DirectX Dump Files are now ready for your retail games appeared first on DirectX Developer Blog.

Read the whole story
alvinashcraft
29 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Goldfish in Claude

1 Share

Here my - much stolen from Google - setup for reviewing a plan as a skill.

Read the whole story
alvinashcraft
54 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Async Commands Fallback Layer

1 Share

We’re pleased to announce that Agility SDK 1.620.1 includes a fallback layer for Batched Async Commands, letting developers use the new commands on hardware that doesn’t support them natively. You can find the NuGet package here.

Background

Batched Async Commands were introduced in the Agility SDK 1.720 Preview as a new set of copy, fill, clear, and resolve commands. The legacy versions of these operations are implicitly serialized, since the original resource barrier model has no way to say that two copies don’t depend on each other. The batched versions drop that implicit serialization and take many operations in a single call, so the driver and GPU are free to overlap independent work and you only add enhanced barriers where there’s an actual dependency. They also fill in some long-standing gaps in the API. ClearTextureSubresources can clear a texture without an RTV, UAV, or descriptor heap (including block-compressed formats), FillBuffers can write formatted or raw patterns into buffers without any UAV clear setup, and ClearBoundRenderTargetViews and ClearBoundDepthStencilView clear whatever is currently bound, even in the middle of a render pass.

The downside is that the feature is only supported on newer GPUs. At the 1.720 Preview launch, that meant AMD Radeon RX 7000 and 9000 series, Intel Arc B-Series, and NVIDIA RTX GPUs. There’s a lot of hardware still in use that isn’t on that list, and if you want to ship on all of it, you’d have to keep your existing copy and clear code around alongside the new path. That’s where the fallback layer comes in.

Batched Async Commands Fallback

The goal of the fallback layer is to let you move to the new commands now, without having to maintain two separate systems while the hardware ecosystem catches up. When the fallback is enabled on a device that doesn’t support Batched Async Commands, the runtime implements the commands itself using operations that every driver already supports. On devices with native support, the calls go straight to the driver as usual, so the same code takes the fast path wherever it’s available.

The fallback is opt-in, for a couple of reasons. First, it isn’t a perfect match for native behavior, and there are some cases it can’t handle at all (covered below). Second, it has a cost even if you never call one of the new commands. To implement fallback support for commands like FillBuffers and the bound clears, the runtime needs to know the barrier state of the resources involved and has to put back your pipeline state, root signature, bindings, and render targets when it’s done. That means tracking all of that on every direct, compute, and bundle command list while the fallback is enabled.

The Performance section below covers what that costs. None of it is huge on its own, but it adds up over a frame, and apps that don’t use Batched Async Commands shouldn’t have to pay for it.

The fallback itself requires Enhanced Barriers support, so on a device without Enhanced Barriers or native support, the batched commands aren’t available.

Example Usage

// Opt in to the fallback on a device factory, before creating the device
ComPtr<ID3D12DeviceFactory> pFactory;
D3D12GetInterface(CLSID_D3D12DeviceFactory, IID_PPV_ARGS(&pFactory));

ComPtr<ID3D12AsyncCommandsFallback> pFallback;
if (SUCCEEDED(pFactory->GetConfigurationInterface(CLSID_D3D12AsyncCommandsFallback, IID_PPV_ARGS(&pFallback))))
{
    pFallback->SetFallbackLayerEnabled(TRUE);
}

ComPtr<ID3D12Device> pDevice;
pFactory->CreateDevice(pAdapter, D3D_FEATURE_LEVEL_12_0, IID_PPV_ARGS(&pDevice));

// Check whether you got native support, the fallback, or neither
D3D12_FEATURE_DATA_ASYNC_COMMANDS asyncCommands = {};
pDevice->CheckFeatureSupport(D3D12_FEATURE_ASYNC_COMMANDS, &asyncCommands, sizeof(asyncCommands));

if (asyncCommands.Impl == D3D12_ASYNC_COMMANDS_IMPL_NOT_SUPPORTED)
{
    // Batched Async Commands unavailable, keep using the legacy path
    return;
}

The setting applies to devices that factory creates, and you can read it back as D3D12_DEVICE_FLAG_ASYNC_COMMANDS_FALLBACK_ENABLED in ID3D12DeviceConfiguration::GetDesc. If you create your device with D3D12CreateDevice instead, you can get the same interface from D3D12GetInterface(CLSID_D3D12AsyncCommandsFallback, ...). That sets the option globally, for devices created with D3D12CreateDevice. Like other global settings, set it before creating any devices. It doesn’t carry over to device factories unless you call InitializeFromGlobalState on them.

If you tried Batched Async Commands in the preview SDK, note that D3D12_FEATURE_DATA_ASYNC_COMMANDS has changed. The BOOL Supported field is now D3D12_ASYNC_COMMANDS_IMPL Impl, which tells you whether you got the native implementation, the fallback, or neither. Since D3D12_ASYNC_COMMANDS_IMPL_NATIVE is 2, code that compares the old field against TRUE will treat native support as unsupported, so check against D3D12_ASYNC_COMMANDS_IMPL_NOT_SUPPORTED instead.

Where the Fallback Differs from Native

Most of the batched commands map pretty directly onto existing operations. Batched copies, tile copies, and resolves run as a loop over their legacy equivalents, so you get the same results as native, just without the overlap. Fills and clears are where the fallback has to do real work, and where there are a few differences to be aware of.

When the fallback can’t handle a call, it fails rather than silently skipping the work. The command list is removed and Close returns an error, usually E_FAIL. With the debug layer enabled, the rejected call also produces a debug-layer error that names the API the fallback couldn’t record, so if Close starts failing after you’ve switched to one of the new commands, check the debug output first. The fallback also validates its inputs more strictly than the runtime does when passing calls to a native driver, so a call that works natively can still be rejected on a fallback device.

ClearTextureSubresources

Multisampled textures can only be cleared on direct command lists; on compute command lists the call fails, though single-sample clears work fine there. The fallback is fastest when it knows a texture’s current layout, which it learns from the barriers you record earlier in the same command list. A barrier that only covers some of a texture’s subresources makes the layout unknown until the next whole-resource barrier, and until then clears take a slower copy-based path. There are also a few combinations the fallback can’t handle, and these fail outright:

  • Partial clears of depth/stencil textures (single-sample or multisampled) and of multisampled color textures, on devices without programmable sample positions, when the texture can’t be cleared in place. For example, this happens on compute command lists, or when the texture’s layout isn’t known.
  • Multisampled clears in protected sessions or on protected textures.
  • Multisampled clears with a format and sample count the device can’t render to.

ClearBoundRenderTargetViews and ClearBoundDepthStencilView

Bound clears are mostly implemented with internal draws. Afterwards, the runtime restores the state those draws changed: your pipeline (a pipeline state object, a state object set with SetPipelineState1, or a generic program set with SetProgram), root signature and root arguments, viewports, scissors, and other related state.

In a few cases the fallback can’t reconstruct that state, for example if a bundle changed state in a way the fallback can’t track, or if ExecuteIndirect used an argument type the fallback doesn’t track. What happens next depends on whether the call is inside a render pass:

  • Outside a render pass, the fallback uses legacy clears instead of draws.
  • Inside a render pass, the clear fails, since ending the pass for a legacy clear would defeat the purpose of clearing inside it.

Native drivers can record bound clears in bundles, but the fallback doesn’t support that yet, so a bound clear in a bundle fails on a fallback device. A few other differences to keep in mind:

  • The internal draws count toward occlusion and pipeline statistics queries that are open at the time, so query results won’t match native.
  • If the bound outputs are different sizes and a clear region extends past the smallest one, or if they have different sample counts, the clear fails inside a render pass. Outside of a render pass, the call is lowered to legacy clears instead.
  • Depth clear values are normalized. NaN, negative values, negative zero, and denormals become 0, and anything above 1 (including +infinity) becomes 1.
  • View information is captured when you call OMSetRenderTargets or BeginRenderPass. The resource needs to stay alive until the clear is recorded, and the runtime doesn’t check this.

Inexact Clear Values

A few paths go through a legacy view clear, which takes its clear value as floats. When a legacy view clear can’t produce your exact value, the fallback uses the closest value it can instead of failing. This applies to ClearTextureSubresources on multisampled textures, and to bound clears that fall back to legacy clears outside of a render pass, as described above. In those cases:

  • UINT and SINT values are converted to float, so values with a magnitude above 2^24 can round.
  • Float subnormals are flushed to zero, keeping the sign.
  • NaN values are passed through, but the stored NaN payload isn’t guaranteed.
  • Depth is clamped to [0, 1].

The debug layer doesn’t warn when this happens. Single-sample ClearTextureSubresources calls never approximate: if a view clear can’t produce the exact value, the fallback uses its copy-based path instead.

For the full list of differences, see the Async Commands fallback spec.

Testing the Fallback on Hardware with Native Support

If all of your development machines support Batched Async Commands natively, you’ll never actually exercise the fallback. To help with that, you can use d3dconfig to force the fallback on, even on hardware with native support. Like other d3dconfig device settings, this applies to the apps in d3dconfig’s app list, so add your app first:

d3dconfig apps --add MyGame.exe
d3dconfig device force-async-commands-fallback=true

This is also an easy way to compare native and fallback performance for your own workload on a single machine.

Performance

To get a sense of how the fallback compares with native support and with doing this work yourself, we measured each command on a GPU with native support at batch sizes of 1, 16, and 256 operations per call, with the fallback forced on for the fallback runs. For ResolveQueryDataAsync, batch size is the number of queries resolved, and for the bound clears it’s the number of clear rectangles. The legacy versions loop over the equivalent legacy calls and batch their barriers. FillBuffers uses a compute shader fill, ClearTextureSubresources transitions the textures and uses view clears, and the bound clears use ClearRenderTargetView and ClearDepthStencilView with clear rects, recorded outside a render pass. For most commands, the fallback performs about the same as native and the legacy version on the GPU, with some extra CPU overhead for tracking state and restoring the pipeline state and bindings it changes. The main exception is ClearTextureSubresources. When the fallback can’t clear a texture in place, it copies the clear value from a staging buffer, which costs more on both the GPU and the CPU. The bound clears also cost noticeably more CPU time to record.

Keep in mind that these are microbenchmarks. Each one times a batch of commands on its own, so they show the cost of the work itself, not the benefit of running it asynchronously. With native support, the GPU can overlap batched commands with each other and with surrounding work that doesn’t depend on them. The fallback runs them as legacy operations, so it can’t. In a real frame, the difference between the fallback and native may be larger than these numbers suggest, depending on how much independent work there is to overlap. We recommend leveraging the d3dconfig setting to force on the fallback layer to see how performance is impacted for your use case.

Async Commands cpu time by batch image AsyncCommands gpu time by batch image

Enabling the fallback also adds CPU overhead to recording, even on command lists that never use the new commands. Here’s how much longer common calls took to record with the fallback enabled in our testing. State-setting calls go up by a bigger proportion, but they’re very cheap to begin with:

Call Relative Change Extra time per call
Draws, dispatches, copies, and legacy clears about the same —
ExecuteIndirect +20-25% 6-8 ns
Barriers on direct and compute command lists +5-20% (up to +75% in our worst cases) 5-20 ns per barrier (up to 90-100 ns)
Barriers on copy command lists about the same —
Setting root arguments +20-180% 1-11 ns (up to 35 ns for root constants in bundles)
Setting a pipeline state 1.5-4x as long 3-9 ns
Changing the root signature 5-16x as long 25-30 ns
Binding render targets +15-70% 13-15 ns
An empty render pass about +33% about 20 ns
Executing a bundle about 2.8x as long about 100 ns
Resetting or closing a bundle 1.4-2.9x as long 20-35 ns

Try It Out

Check out the Batched Async Commands samples, and try them with the fallback forced on and off. We’d love to hear how it works for you.

The post Async Commands Fallback Layer appeared first on DirectX Developer Blog.

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Visual Studio Code 1.145 (Insiders)

1 Share

Learn what is new in Visual Studio Code 1.145 (Insiders).

Read the full article

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories