38 Commits

Author SHA1 Message Date
joaosaffran
7d2f6fd177
[DirectX] Updating DXContainer Yaml to represent Root Signature 1.2 (#159659)
This PR updates the YAML representation of DXContainer to support Root
Signature 1.2, this also requires updating the write logic to support
testing.
2025-09-26 12:04:19 -04:00
joaosaffran
5fd3aad54c
[DirectX] Updating Root Signature YAML representation to use Enums instead of uint (#154827)
This PR is updating Root Signature YAML to use enums, this is a required
change to remove the use of to_underlying from DirectXContainer binary
file.

Closes: [#150676](https://github.com/llvm/llvm-project/issues/150676)
2025-09-12 14:31:27 -04:00
joaosaffran
d88c89f860
[DirectX] Removing dxbc StaticSampler from mcbxdc (#154631)
MC Static Samplers Representation currently depends on Object
structures. This PR removes that dependency and in order to facilitate
removing to_underlying usage in follow-up PRs.
2025-09-11 18:47:09 -04:00
joaosaffran
9e778f6cd1
[DirectX] Removing dxbc DescriptorRange from mcbxdc (#154629)
MC Descriptor Range Representation currently depend on Object
structures. This PR removes that dependency and in order to facilitate
removing to_underlying usage in follow-up PRs.
2025-09-10 14:49:01 -04:00
joaosaffran
dfc376a9bf
[DirectX] Removing dxbc RootSignature and RootDescriptor from mcbxdc (#154585) 2025-08-29 12:42:34 -07:00
Finn Plummer
6f0253b435
[DirectX][ObectYAML] Make RootParameterOffset and StaticSamplersOffset behaviour consistent (#155521)
This pr fixes some inconsistencies in behaviour of how we handle
`StaticSamplersOffset` with respect to DXC and `RootParameterOffset`.
Namely:

1. Make codegen of `RTS0` always compute the `StaticSamplersOffset`
regardless if there are any `StaticSampler`s. This is to be consistent
and produce an identical `DXContainer` as DXC.
2. Make the `StaticSamplersOffset` and `RootParametersOffset` optional
parameters in the yaml description. This means it will be used when it
is specified (which was not necassarily the case before).
3. Enforce that the provided `StaticSamplersOffset` and
`RootParametersOffset` in a yaml description match the computed value.

For more context see:
https://github.com/llvm/llvm-project/issues/155299.

Description of existing test updates updates:
- `CodeGen/DirectX/ContainerData`: Updated to codegen computed values
(previously unspecified)
- `llvm-objcopy/DXContainer`: Updated to `yaml2obj` computed values
(previously unspecified)
- `ObjectYAML/DXContainer`: Updated to `yaml2obj` computed values
(previously incorrect)
- `ObjectYAML/DXContainerYAMLTest`: Updated to `yaml2obj` computed
values (previously incorrect)

See newly added tests for testing of optional parameter functionality
and `StaticSamplersOffset` computation.

Resolves: https://github.com/llvm/llvm-project/issues/155299
2025-08-27 11:53:37 -07:00
joaosaffran
c6dfbc5cc7
[DirectX] Refactor RootSignature Backend to remove to_underlying from Root Parameter Header (#154249)
This patch is refactoring Root Parameter Header in DX Container backend
to remove the usage of `to_underlying`. This requires some changes:
first, MC Root Signature should not depend on Object/DXContainer.h;
Second, we need to assume data to be valid in scenarios where it was
originally not expected, this made some tests be removed.
2025-08-25 16:28:07 -04:00
joaosaffran
c7cbaef1e9
[DirectX] Adding support for static samplers in yaml2obj/obj2yaml (#139963)
- Adds support for static samplers ins dxcontainer binary format.
- Adds writing logic to mcdxbc
- adds reading logic to Object
- adds tests
Closes: [126636](https://github.com/llvm/llvm-project/issues/126636)

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-05-29 14:02:15 -07:00
joaosaffran
8e19573682
[DirectX] adding support to read/write descriptor table data using obj2yaml/yaml2obj (#138315)
Closes:
https://github.com/orgs/llvm/projects/4/views/22?sliceBy%5Bvalue%5D=joaosaffran&pane=issue&itemId=97332852&issue=llvm%7Cllvm-project%7C126635

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-05-29 12:21:20 -07:00
joaosaffran
654c4bc286
[NFC] Updating RTS0 namespace to contain all elements related to it's representation (#141173)
As requested in a previous PR, this change moves all structs related to
RTS0 to RTS0 namespace.

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-05-27 16:46:01 -07:00
joaosaffran
8c65a9da8b
[NFC] Refactoring DXContainerYaml Root Parameter representation (#138318)
This PR removes the union usage from `DXContainerYaml` Root Parameters
representation, it uses variant instead.
closes: [#139585](https://github.com/llvm/llvm-project/issues/139585)

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-05-27 16:19:22 -07:00
joaosaffran
8d63afbe5c
[NFC] Refactoring MCDXBC to support out of order storage of root parameters (#137284)
This PR refactors mcdxbc data structure for root signatures to support
out of order storage of in memory root signature data.
closes: #139585

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-05-15 18:33:15 -07:00
joaosaffran
03d3e6dbe9
[DirectX] Adding support for Root Descriptors in obj2yaml/yaml2obj (#137259)
closes: [126634](https://github.com/llvm/llvm-project/issues/126634)

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-05-08 23:18:26 -07:00
joaosaffran
53eae22e22
[DirectX] adding support in obj2yaml and yaml2obj to root constants (#127840)
Adding support for Root Constant in MC, Object and obj2yaml and
yaml2obj, this PR adds:
  - new structures to dxbc definition.
  - serialize and desirialize logic from dxcontainer to yaml
  - tests validating against dxc
  - adding support to multiple parts.

Closes: https://github.com/llvm/llvm-project/issues/126633

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-04-16 18:38:53 -07:00
joaosaffran
1ff5f328d9
[DXIL] Add support for root signature flag element in DXContainer (#123147)
Adding support for Root Signature Flags Element extraction and writing
to DXContainer.
- Adding an analysis to deal with RootSignature metadata definition
- Adding validation for Flag
- writing RootSignature blob into DXIL

Closes: [126632](https://github.com/llvm/llvm-project/issues/126632)

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-02-13 14:16:01 -08:00
joaosaffran
76985fd7ca
[DXIL] Adding support to RootSignatureFlags in obj2yaml (#122396)
This PR adds:
- `RootSignatureFlags` extraction from DXContainer using `obj2yaml`


This PR is part of: #121493

---------

Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-02-07 14:19:19 -08:00
Xiang Li
f42117c851
[DirectX] Replace bitfield version in ProgramHeader. (#91797)
Avoid using bitfield in dxbc::ProgramHeader.
It could potentially be read incorrectly on any host depending on the
compiler.

From [C++17's
[class.bit]](https://timsong-cpp.github.io/cppwp/n4659/class.bit#1)
> Bit-fields are packed into some addressable allocation unit. [ Note:
Bit-fields straddle allocation units on some machines and not on others.
Bit-fields are assigned right-to-left on some machines, left-to-right on
others.  — end note ]

For #91793
2024-05-11 21:16:22 -04:00
Cooper Partin
c62c74639a
Add support for PSV EntryFunctionName (#86296)
This change introduces a version 3 of the PSV data that includes support
for the name of the entry function as an offset into StringTable data to
a null-terminated utf-8 string.

Additional tests were added to ensure that the new value was properly
serialized/deserialized from object data.

Fixes #80175

---------

Co-authored-by: Cooper Partin <coopp@ntdev.microsoft.com>
2024-03-25 10:18:53 -07:00
Cooper Partin
1538b82fd3
Revert "Add support for PSV EntryFunctionName (#84409)" (#86211)
This reverts commit cde54df39cab3a1d60a3e1862ab341609bee3cc3.

Co-authored-by: Cooper Partin <coopp@ntdev.microsoft.com>
2024-03-21 15:40:29 -07:00
Cooper Partin
cde54df39c
Add support for PSV EntryFunctionName (#84409)
This change introduces a version 3 of the PSV data that includes support
for the name of the entry function as an offset into StringTable data to
a null-terminated utf-8 string.

Additional tests were added to ensure that the new value was properly
serialized/deserialized from object data.

Fixes #80175

---------

Co-authored-by: Cooper Partin <coopp@ntdev.microsoft.com>
2024-03-21 14:43:15 -07:00
Chris B
9f87522b12
[DX] Add support for program signatures (#67346)
For DirectX, program signatures are encoded into three different binary
sections depending on if the signature is for inputs, outputs, or
patches. All three signature types use the same data structure encoding
so they can share a lot of logic.

This patch adds support for reading and writing program signature data
as both yaml and binary data.

Fixes #57743 and #57744
2023-10-05 10:33:15 -05:00
Chris B
b799e9dafa
[DX] Support pipeline state masks (#66425)
The DXContainer pipeline state information encodes a bunch of mask
vectors that are used to track things about the inputs and outputs from
each shader.

This adds support for reading and writing them throught he YAML test
interfaces. The writing logic in MC is extremely primitive and we'll
want to revisit the API for that, but since I'm not sure how we'll want
to generate the mask bits from DXIL during code generation I didn't want
to spend too much time on the API.

Fixes #59479
2023-09-15 10:02:54 -05:00
Chris Bieneman
0c3f51c042 Re-land [DX] Add support for PSV signature elements
The pipeline state data captured in the PSV0 section of the DXContainer
file encodes signature elements which are read by the runtime to map
inputs and outputs from the GPU program.

This change adds support for generating and parsing signature elements
with testing driven through the ObjectYAML tooling.

Reviewed By: bogner

Differential Revision: https://reviews.llvm.org/D157671

Initially landed as 8c567e64f808f7a818965c6bc123fedf7db7336f, and
reverted in 4d800633b2683304a5431d002d8ffc40a1815520.

../llvm/include/llvm/BinaryFormat/DXContainerConstants.def
../llvm/test/ObjectYAML/DXContainer/PSVv1-amplification.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv1-compute.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv1-domain.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv1-geometry.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv1-vertex.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv2-amplification.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv2-compute.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv2-domain.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv2-geometry.yaml
../llvm/test/ObjectYAML/DXContainer/PSVv2-vertex.yaml
2023-08-16 14:26:13 -05:00
Chris Bieneman
4d800633b2 Revert "[DX] Add support for PSV signature elements"
This reverts commit 8c567e64f808f7a818965c6bc123fedf7db7336f.
2023-08-16 13:52:26 -05:00
Chris Bieneman
8c567e64f8 [DX] Add support for PSV signature elements
The pipeline state data captured in the PSV0 section of the DXContainer
file encodes signature elements which are read by the runtime to map
inputs and outputs from the GPU program.

This change adds support for generating and parsing signature elements
with testing driven through the ObjectYAML tooling.

Reviewed By: bogner

Differential Revision: https://reviews.llvm.org/D157671
2023-08-16 13:38:20 -05:00
Chris Bieneman
dd3f7b0225 [DX] Add support for PSV resource bindings
This patch continues implementing DirectX pipeline state validation
information by adding support for resource binding metadata.

Reviewed By: python3kgae

Differential Revision: https://reviews.llvm.org/D143130
2023-02-02 16:50:34 -06:00
Chris Bieneman
ad93908e3b [DX] Begin adding support for pipeline state
DirectX shader pipeline state validation information is a fairly
complicated to serialize data structure. This patch adds the first bit
of support for reading and writing the runtime info structure which
comes first in the encoded data.

Subsequent patches will flesh out the remaining fields of the data
structure.

There is no official documentation for the format, but the format is
roughly documented in the code comment here:
https://github.com/microsoft/DirectXShaderCompiler/blob/main/include/dxc
/DxilContainer/DxilPipelineStateValidation.h#L731

Reviewed By: python3kgae

Differential Revision: https://reviews.llvm.org/D141649
2023-02-01 19:00:23 -06:00
Fangrui Song
67ba5c507a std::optional::value => operator*/operator->
value() has undesired exception checking semantics and calls
__throw_bad_optional_access in libc++. Moreover, the API is unavailable without
_LIBCPP_NO_EXCEPTIONS on older Mach-O platforms (see
_LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS).

This fixes check-llvm.
2022-12-17 01:42:39 +00:00
Chris Bieneman
2556ba4a52 [ObjectYAML] Add support for DXContainer HASH
DXContainer files contain a part that has an MD5 of the generated
shader. This adds support to the ObjectYAML tooling to expand the hash
part data and hash iteself in preparation for adding hashing support to
DirectX code generation.

Reviewed By: python3kgae

Differential Revision: https://reviews.llvm.org/D136632
2022-10-27 12:28:45 -05:00
Chris Bieneman
49dc58f551 [DX] [ObjectYAML] Support DX shader feature flags
DXContainers contain a feature flag part, which stores a bitfield used
to denote what underlying hardware features the shader requires. This
change adds feature flags to the DXContainer YAML tooling to enable
testing generating feature flags during HLSL code generation.

Depends on D133980

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D134315
2022-09-29 12:37:11 -05:00
Kazu Hirata
611ffcf4e4 [llvm] Use value instead of getValue (NFC) 2022-07-13 23:11:56 -07:00
Kazu Hirata
3b7c3a654c Revert "Don't use Optional::hasValue (NFC)"
This reverts commit aa8feeefd3ac6c78ee8f67bf033976fc7d68bc6d.
2022-06-25 11:56:50 -07:00
Kazu Hirata
aa8feeefd3 Don't use Optional::hasValue (NFC) 2022-06-25 11:55:57 -07:00
Benjamin Kramer
1fd0beaa4e [DX][ObjYAML] Zero out unused fields that get written to the output file
Found by msan
2022-06-07 16:29:28 +02:00
Chris Bieneman
eb68cbb405 Fix big endian build bots
Another case of reading a value from a struct that has been byte
swapped to write out. This should address the failure on the ppcbe bot.
2022-06-06 19:27:23 -05:00
Chris Bieneman
21c9452305 [DX][ObjYAML] Support for parsing DXIL part
This patch adds support for parsing the DXIL part data into the
ObjectYAML tooling.

The DXIL part has additional headers describing the shader and bitcode
data and stores serialized bitcode after the headers.

Depends on D124945

Reviewed By: kuhar

Differential Revision: https://reviews.llvm.org/D126795
2022-06-06 18:46:19 -05:00
Chris Bieneman
6784adc63d Fix DXContainer test on ppcbe
Silly mistake, the code here was byteswapping in-place which corrupts
the data structure that is used later to write the correct file.
2022-06-01 20:19:59 -05:00
Chris Bieneman
129c056d62 [ObjectYAML][DX] Support yaml2dxcontainer
This patch adds a the first bits of support for a yaml representation
of dxcontainer files.

Since the YAML representation's primary purpose is testing
infrastructure, the yaml representation supports both verbose and a
more friendly format by making computable sizes and offsets optional.
If provided they are validated to be correct, otherwise they are
computed on the fly during emission.

As I expand the format I'll be able to make more size fields optional,
and I will continue to make the format easier to work with.

Depends on D124804

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D124944
2022-06-01 15:34:00 -05:00