Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
787c776
adding yaml representation and updating write logic
joaosaffran Sep 18, 2025
57fd710
fix test
joaosaffran Sep 18, 2025
d72adfe
adding missing test
joaosaffran Sep 19, 2025
23803b7
Merge branch 'main' into obj2yaml/root-signature-1.2
joaosaffran Sep 19, 2025
fefd58c
fix test
joaosaffran Sep 19, 2025
13d945d
Merge branch 'main' into obj2yaml/static-sampler-view
joaosaffran Sep 19, 2025
1d0cbd3
adding samplers_iterator
joaosaffran Sep 22, 2025
e530bcc
this was easier than I thought
joaosaffran Sep 22, 2025
79ea587
adding new test
joaosaffran Sep 22, 2025
367ac8c
Merge branch 'main' into obj2yaml/root-signature-1.2
joaosaffran Sep 22, 2025
a08c05e
Merge branch 'obj2yaml/root-signature-1.2' of github.com:joaosaffran/…
joaosaffran Sep 22, 2025
159388d
Merge branch 'obj2yaml/root-signature-1.2' into obj2yaml/static-sampl…
joaosaffran Sep 22, 2025
905d5d3
clean up
joaosaffran Sep 22, 2025
b73bf24
clean up
joaosaffran Sep 22, 2025
ddf9945
changing size and remove untested parameters
joaosaffran Sep 24, 2025
284901c
adding suggested comment
joaosaffran Sep 24, 2025
73e6bb5
addressing inbelic comments
joaosaffran Sep 24, 2025
159cd57
addressing inbelic comments
joaosaffran Sep 24, 2025
b7f07aa
format
joaosaffran Sep 24, 2025
b5ecf7f
Merge branch 'obj2yaml/root-signature-1.2' into obj2yaml/static-sampl…
joaosaffran Sep 25, 2025
efcd873
remove test
joaosaffran Sep 26, 2025
9c2c1d3
Merge branch 'obj2yaml/root-signature-1.2' into obj2yaml/static-sampl…
joaosaffran Sep 26, 2025
74a5956
Merge branch 'main' into obj2yaml/static-sampler-view
joaosaffran Sep 26, 2025
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
4 changes: 2 additions & 2 deletions llvm/include/llvm/Object/DXContainer.h
Original file line number Diff line number Diff line change
Expand Up @@ -228,11 +228,11 @@ class RootSignature {
uint32_t Flags;
ViewArray<dxbc::RTS0::v1::RootParameterHeader> ParametersHeaders;
StringRef PartData;
ViewArray<dxbc::RTS0::v1::StaticSampler> StaticSamplers;
ViewArray<dxbc::RTS0::v3::StaticSampler> StaticSamplers;

using param_header_iterator =
ViewArray<dxbc::RTS0::v1::RootParameterHeader>::iterator;
using samplers_iterator = ViewArray<dxbc::RTS0::v1::StaticSampler>::iterator;
using samplers_iterator = ViewArray<dxbc::RTS0::v3::StaticSampler>::iterator;

public:
RootSignature(StringRef PD) : PartData(PD) {}
Expand Down
11 changes: 7 additions & 4 deletions llvm/lib/Object/DXContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,10 +276,13 @@ Error DirectX::RootSignature::parse() {
RootParametersOffset,
NumParameters * sizeof(dxbc::RTS0::v1::RootParameterHeader));

StaticSamplers.Stride = sizeof(dxbc::RTS0::v1::StaticSampler);
StaticSamplers.Data = PartData.substr(
StaticSamplersOffset,
NumStaticSamplers * sizeof(dxbc::RTS0::v1::StaticSampler));
StaticSamplers.Stride = (Version <= 2)
? sizeof(dxbc::RTS0::v1::StaticSampler)
: sizeof(dxbc::RTS0::v3::StaticSampler);

StaticSamplers.Data = PartData.substr(StaticSamplersOffset,
static_cast<size_t>(NumStaticSamplers) *
StaticSamplers.Stride);

return Error::success();
}
Expand Down
5 changes: 5 additions & 0 deletions llvm/lib/ObjectYAML/DXContainerYAML.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,11 @@ DXContainerYAML::RootSignatureYamlDesc::create(
NewS.RegisterSpace = S.RegisterSpace;
NewS.ShaderVisibility = dxbc::ShaderVisibility(S.ShaderVisibility);

if (Version > 2) {
#define STATIC_SAMPLER_FLAG(Num, Enum, Flag) \
NewS.Enum = (S.Flags & llvm::to_underlying(dxbc::StaticSamplerFlags::Enum));
#include "llvm/BinaryFormat/DXContainerConstants.def"
}
RootSigDesc.StaticSamplers.push_back(NewS);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# RUN: yaml2obj %s | obj2yaml | FileCheck %s

--- !dxcontainer
Header:
Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
Version:
Major: 1
Minor: 0
PartCount: 1
PartOffsets: [ 60 ]
Parts:
- Name: RTS0
Size: 80
RootSignature:
Version: 3
NumRootParameters: 0
RootParametersOffset: 24
NumStaticSamplers: 1
StaticSamplersOffset: 24
Parameters: []
Samplers:
- Filter: MinLinearMagMipPoint
AddressU: Wrap
AddressV: Mirror
AddressW: MirrorOnce
MipLODBias: 1.23
MaxAnisotropy: 20
ComparisonFunc: LessEqual
BorderColor: TransparentBlack
MinLOD: 4.56
MaxLOD: 8.90
ShaderRegister: 31
RegisterSpace: 32
ShaderVisibility: Mesh
SAMPLER_FLAG_UINT_BORDER_COLOR: true
AllowInputAssemblerInputLayout: true
DenyGeometryShaderRootAccess: true

#CHECK: - Name: RTS0
#CHECK-NEXT: Size: 80
#CHECK-NEXT: RootSignature:
#CHECK-NEXT: Version: 3
#CHECK-NEXT: NumRootParameters: 0
#CHECK-NEXT: RootParametersOffset: 24
#CHECK-NEXT: NumStaticSamplers: 1
#CHECK-NEXT: StaticSamplersOffset: 24
#CHECK-NEXT: Parameters: []
#CHECK-NEXT: Samplers:
#CHECK-NEXT: - Filter: MinLinearMagMipPoint
#CHECK-NEXT: AddressU: Wrap
#CHECK-NEXT: AddressV: Mirror
#CHECK-NEXT: AddressW: MirrorOnce
#CHECK-NEXT: MipLODBias: 1.23
#CHECK-NEXT: MaxAnisotropy: 20
#CHECK-NEXT: ComparisonFunc: LessEqual
#CHECK-NEXT: BorderColor: TransparentBlack
#CHECK-NEXT: MinLOD: 4.56
#CHECK-NEXT: MaxLOD: 8.9
#CHECK-NEXT: ShaderRegister: 31
#CHECK-NEXT: RegisterSpace: 32
#CHECK-NEXT: ShaderVisibility: Mesh
#CHECK-NEXT: SAMPLER_FLAG_UINT_BORDER_COLOR: true
#CHECK-NEXT: AllowInputAssemblerInputLayout: true
#CHECK-NEXT: DenyGeometryShaderRootAccess: true
48 changes: 48 additions & 0 deletions llvm/unittests/Object/DXContainerTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1200,4 +1200,52 @@ TEST(RootSignature, ParseStaticSamplers) {
ASSERT_EQ(Sampler.RegisterSpace, 32u);
ASSERT_EQ(Sampler.ShaderVisibility, 7u);
}
{
// this is testing static sampler parsing for root signature version 1.2,
// it changes: the version number, the size of root signature being emitted
// and the values for flag fields.
uint8_t Buffer[] = {
0x44, 0x58, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x54, 0x53, 0x30, 0x4c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0xa4, 0x70, 0x9d, 0x3f, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x85, 0xeb, 0x91, 0x40, 0x66, 0x66, 0x0e, 0x41,
0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00};
DXContainer C =
llvm::cantFail(DXContainer::create(getMemoryBuffer<148>(Buffer)));

auto MaybeRS = C.getRootSignature();
ASSERT_TRUE(MaybeRS.has_value());
const auto &RS = MaybeRS.value();
ASSERT_EQ(RS.getVersion(), 3U);
ASSERT_EQ(RS.getNumParameters(), 0U);
ASSERT_EQ(RS.getRootParametersOffset(), 0U);
ASSERT_EQ(RS.getNumStaticSamplers(), 1U);
ASSERT_EQ(RS.getStaticSamplersOffset(), 24U);
ASSERT_EQ(RS.getFlags(), 17U);

auto Sampler = *RS.samplers().begin();

ASSERT_EQ(Sampler.Filter, 10U);
ASSERT_EQ(Sampler.AddressU, 1U);
ASSERT_EQ(Sampler.AddressV, 2U);
ASSERT_EQ(Sampler.AddressW, 5U);
ASSERT_FLOAT_EQ(Sampler.MipLODBias, 1.23F);
ASSERT_EQ(Sampler.MaxAnisotropy, 20U);
ASSERT_EQ(Sampler.ComparisonFunc, 4U);
ASSERT_EQ(Sampler.BorderColor, 0U);
ASSERT_FLOAT_EQ(Sampler.MinLOD, 4.56F);
ASSERT_FLOAT_EQ(Sampler.MaxLOD, 8.9F);
ASSERT_EQ(Sampler.ShaderRegister, 31U);
ASSERT_EQ(Sampler.RegisterSpace, 32U);
ASSERT_EQ(Sampler.ShaderVisibility, 7U);
ASSERT_EQ(Sampler.Flags, 1U);
}
}