Skip to content

[DirectX][docs] Expand DXILArchitecture documentation #84077

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Mar 8, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions llvm/docs/DirectX/DXILArchitecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,52 @@ leverage LLVM's current bitcode libraries to do a lot of the work, but
it's possible that at some point in the future it will need to be
completely separate as modern LLVM bitcode evolves.

DirectX Backend Flow
--------------------

The code generation flow for DXIL is broken into a series of passes. The passes
are grouped into two flows:

#. Generating DXIL IR.
#. Generating DXIL Binary.

The passes to generate DXIL IR follow the flow:

DXILOpLowering -> DXILPrepare -> DXILTranslateMetadata

Each of these passes has a defined responsibility:

#. DXILOpLowering translates LLVM intrinsic calls to dx.op calls.
#. DXILPrepare transforms the DXIL IR to be compatible with LLVM 3.7, and
inserts bitcasts to allow typed pointers to be inserted.
#. DXILTranslateMetadata emits the DXIL Metadata structures.

The passes to encode DXIL to binary in the DX Container follow the flow:

DXILEmbedder -> DXContainerGlobals -> AsmPrinter

Each of these passes have the following defined responsibilities:

#. DXILEmbedder runs the DXIL bitcode writer to generate a bitcode stream and
embeds the binary data inside a global in the original module.
#. DXContainerGlobals generates binary data globals for the other DX Container
parts based on computed analysis passes.
#. AsmPrinter is the standard LLVM infrastructure for emitting object files.

When emitting DXIL into a DX Container file the MC layer is used in a similar
way to how the Clang ``-fembed-bitcode`` option operates. The DX Container
object writer knows how to construct the headers and structural fields of the
container, and reads global variables from the module to fill in the remaining
part data.

DirectX Container
-----------------

The DirectX container format is treated in LLVM as an object file format.
Reading is implemented between the BinaryFormat and Object libraries, and
writing is implemented in the MC layer. Additional testing and inspection
support are implemented in the ObjectYAML library and tools.

Testing
=======

Expand Down