This commit is contained in:
Joao Saffran 2025-08-19 10:45:49 -07:00
parent f6f2e61d5d
commit 6539364fa7
4 changed files with 38 additions and 41 deletions

View File

@ -11,6 +11,7 @@
#include "llvm/BinaryFormat/DXContainer.h" #include "llvm/BinaryFormat/DXContainer.h"
#include "llvm/Support/Compiler.h" #include "llvm/Support/Compiler.h"
#include <cstdint>
#include <limits> #include <limits>
namespace llvm { namespace llvm {

View File

@ -57,7 +57,7 @@ extractShaderVisibility(MDNode *Node, unsigned int OpId) {
if (!dxbc::isValidShaderVisibility(*Val)) if (!dxbc::isValidShaderVisibility(*Val))
return make_error<RootSignatureValidationError<uint32_t>>( return make_error<RootSignatureValidationError<uint32_t>>(
"ShaderVisibility", *Val); "ShaderVisibility", *Val);
return static_cast<dxbc::ShaderVisibility>(*Val); return dxbc::ShaderVisibility(*Val);
} }
return make_error<InvalidRSMetadataValue>("ShaderVisibility"); return make_error<InvalidRSMetadataValue>("ShaderVisibility");
} }
@ -258,8 +258,6 @@ Error MetadataParser::parseRootConstants(mcdxbc::RootSignatureDesc &RSD,
else else
return make_error<InvalidRSMetadataValue>("Num32BitValues"); return make_error<InvalidRSMetadataValue>("Num32BitValues");
// The parameter offset doesn't matter here - we recalculate it during
// serialization Header.ParameterOffset = 0;
RSD.ParametersContainer.addParameter(dxbc::RootParameterType::Constants32Bit, RSD.ParametersContainer.addParameter(dxbc::RootParameterType::Constants32Bit,
*VisibilityOrErr, Constants); *VisibilityOrErr, Constants);

View File

@ -164,12 +164,11 @@ static void validateRootSignature(Module &M,
for (const mcdxbc::RootParameterInfo &ParamInfo : RSD.ParametersContainer) { for (const mcdxbc::RootParameterInfo &ParamInfo : RSD.ParametersContainer) {
dxbc::ShaderVisibility ParamVisibility = dxbc::ShaderVisibility ParamVisibility =
static_cast<dxbc::ShaderVisibility>(ParamInfo.Visibility); dxbc::ShaderVisibility(ParamInfo.Visibility);
if (ParamVisibility != dxbc::ShaderVisibility::All && if (ParamVisibility != dxbc::ShaderVisibility::All &&
ParamVisibility != Visibility) ParamVisibility != Visibility)
continue; continue;
dxbc::RootParameterType ParamType = dxbc::RootParameterType ParamType = dxbc::RootParameterType(ParamInfo.Type);
static_cast<dxbc::RootParameterType>(ParamInfo.Type);
switch (ParamType) { switch (ParamType) {
case dxbc::RootParameterType::Constants32Bit: { case dxbc::RootParameterType::Constants32Bit: {
dxbc::RTS0::v1::RootConstants Const = dxbc::RTS0::v1::RootConstants Const =
@ -185,10 +184,9 @@ static void validateRootSignature(Module &M,
case dxbc::RootParameterType::CBV: { case dxbc::RootParameterType::CBV: {
dxbc::RTS0::v2::RootDescriptor Desc = dxbc::RTS0::v2::RootDescriptor Desc =
RSD.ParametersContainer.getRootDescriptor(ParamInfo.Location); RSD.ParametersContainer.getRootDescriptor(ParamInfo.Location);
Builder.trackBinding( Builder.trackBinding(toResourceClass(ParamInfo.Type), Desc.RegisterSpace,
toResourceClass(static_cast<dxbc::RootParameterType>(ParamInfo.Type)), Desc.ShaderRegister, Desc.ShaderRegister,
Desc.RegisterSpace, Desc.ShaderRegister, Desc.ShaderRegister, &ParamInfo);
&ParamInfo);
break; break;
} }

View File

@ -21,34 +21,34 @@ attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }
!9 = !{ !"UAV", i32 5, i32 1, i32 10, i32 5, i32 2 } !9 = !{ !"UAV", i32 5, i32 1, i32 10, i32 5, i32 2 }
;CHECK-LABEL: Definition for 'main': ;CHECK-LABEL: Definition for 'main':
;CHECK-NEXT: Flags: 0x000001 ;CHECK-NEXT: Flags: 0x000001
;CHECK-NEXT: Version: 2 ;CHECK-NEXT: Version: 2
;CHECK-NEXT: RootParametersOffset: 24 ;CHECK-NEXT: RootParametersOffset: 24
;CHECK-NEXT: NumParameters: 3 ;CHECK-NEXT: NumParameters: 3
;CHECK-NEXT: - Parameter Type: Constants32Bit ;CHECK-NEXT: - Parameter Type: Constants32Bit
;CHECK-NEXT: Shader Visibility: All ;CHECK-NEXT: Shader Visibility: All
;CHECK-NEXT: Register Space: 2 ;CHECK-NEXT: Register Space: 2
;CHECK-NEXT: Shader Register: 1 ;CHECK-NEXT: Shader Register: 1
;CHECK-NEXT: Num 32 Bit Values: 3 ;CHECK-NEXT: Num 32 Bit Values: 3
;CHECK-NEXT: - Parameter Type: SRV ;CHECK-NEXT: - Parameter Type: SRV
;CHECK-NEXT: Shader Visibility: Vertex ;CHECK-NEXT: Shader Visibility: Vertex
;CHECK-NEXT: Register Space: 5 ;CHECK-NEXT: Register Space: 5
;CHECK-NEXT: Shader Register: 4 ;CHECK-NEXT: Shader Register: 4
;CHECK-NEXT: Flags: 4 ;CHECK-NEXT: Flags: 4
;CHECK-NEXT: - Parameter Type: DescriptorTable ;CHECK-NEXT: - Parameter Type: DescriptorTable
;CHECK-NEXT: Shader Visibility: All ;CHECK-NEXT: Shader Visibility: All
;CHECK-NEXT: NumRanges: 2 ;CHECK-NEXT: NumRanges: 2
;CHECK-NEXT: - Range Type: 0 ;CHECK-NEXT: - Range Type: 0
;CHECK-NEXT: Register Space: 0 ;CHECK-NEXT: Register Space: 0
;CHECK-NEXT: Base Shader Register: 1 ;CHECK-NEXT: Base Shader Register: 1
;CHECK-NEXT: Num Descriptors: 1 ;CHECK-NEXT: Num Descriptors: 1
;CHECK-NEXT: Offset In Descriptors From Table Start: 4294967295 ;CHECK-NEXT: Offset In Descriptors From Table Start: 4294967295
;CHECK-NEXT: Flags: 4 ;CHECK-NEXT: Flags: 4
;CHECK-NEXT: - Range Type: 1 ;CHECK-NEXT: - Range Type: 1
;CHECK-NEXT: Register Space: 10 ;CHECK-NEXT: Register Space: 10
;CHECK-NEXT: Base Shader Register: 1 ;CHECK-NEXT: Base Shader Register: 1
;CHECK-NEXT: Num Descriptors: 5 ;CHECK-NEXT: Num Descriptors: 5
;CHECK-NEXT: Offset In Descriptors From Table Start: 5 ;CHECK-NEXT: Offset In Descriptors From Table Start: 5
;CHECK-NEXT: Flags: 2 ;CHECK-NEXT: Flags: 2
;CHECK-NEXT: NumStaticSamplers: 0 ;CHECK-NEXT: NumStaticSamplers: 0
;CHECK-NEXT: StaticSamplersOffset: 0 ;CHECK-NEXT: StaticSamplersOffset: 0