Repository navigation
feat(cli): Upload DXIL shader binaries as debug files - #1943
Merged
Merged
Conversation
`debug-files upload` recognises DXIL containers (the compiled shaders an Unreal Engine cook exports) and uploads them as `dxil` debug files, which Sentry uses to name the faulting shader of a GPU crash. The debug id is the compiler hash in the file name. When the Sentry Unreal plugin's `sentry-shader-manifest.tsv` sits next to the files, each shader's Aftermath hash and shader group are sent as the new `code_id` and `shader_group` assemble fields. Assemble requests are sent in batches of a thousand files for every debug file type: a shader set is around ten thousand files per build, and a single assemble request for all of them ran for minutes on the server.
Missing chunks were uploaded one request per chunk, so a debug file set of ten thousand small files took twenty minutes, and the processing deadline started before that upload. When the upload outlasted the deadline the command gave up without sending the assemble request that starts processing, reporting the files as not found or timed out although every chunk was on the server. Chunks are now packed into requests up to the server's chunksPerRequest and maxRequestSize limits, a chunk shared by several files is sent once, the assemble request is repeated right after the chunks are delivered, and the wait budget starts from that point.
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 8e6a441. Configure here.
`--id` could select a DXIL shader by its 32-hex file stem, but `--require-all` compared the same value against the hyphenated id and reported it missing. normalizeDebugId now hyphenates a bare 32-hex id, so filtering, --require-all and find agree, and the shader-specific stem match is gone.
BYK
approved these changes
Nov 4, 2026
BYK
enabled auto-merge (squash)
November 4, 2026 15:24
Member
|
Thanks a lot! |
7 tasks done
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Sentry can now name the shader that caused a GPU crash, but only if it has the game's compiled shaders. Unreal Engine builds export them as
.dxilfiles (one per shader, over ten thousand per game). This PR letssentry debug-files uploadupload them asdxildebug files and makes the upload path fast enough for sets of that size.This is the toolkit version of getsentry/sentry-cli#3489, which was implemented earlier to test with the Unreal SDK which has not migrated to the Sentry toolkit yet (getsentry/sentry-unreal#1680).
Changes
dxiljoins the--typelist;--idaccepts the bare file name or the hyphenated id. Shaders have none of the symbol/unwind/source features the other formats are filtered on, so those filters do not apply to them.sentry-shader-manifest.tsvnext to the shaders. The CLI reads that manifest once per directory and sends the hash and the shader group as the newcode_idandshader_groupassemble fields. Without a manifest the shader is uploaded without them.chunksPerRequestandmaxRequestSizelimits, with a chunk shared by several files sent once. They were sent one request per chunk, so ten thousand small files took a lot of time.The last three points apply to every debug file type. Files that are not shaders otherwise take exactly the old path.
debug-files findandcheckdo not learn about shaders here.Possible Follow-ups
Shader PDBs would add source file and line context to GPU crashes. They are left out for now because the server cannot use them yet, but the manifest already lists the PDB that belongs to each binary.
Related
dxildebug file format and the assemble fields