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
95 lines
3.3 KiB
YAML
95 lines
3.3 KiB
YAML
# 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: 200
|
|
RootSignature:
|
|
Version: 2
|
|
NumRootParameters: 3
|
|
RootParametersOffset: 24
|
|
NumStaticSamplers: 0
|
|
StaticSamplersOffset: 140
|
|
Parameters:
|
|
- ParameterType: 1 # Constants32Bit
|
|
ShaderVisibility: 2 # Hull
|
|
Constants:
|
|
Num32BitValues: 16
|
|
ShaderRegister: 15
|
|
RegisterSpace: 14
|
|
- ParameterType: 1 # Constants32Bit
|
|
ShaderVisibility: 4 # Geometry
|
|
Constants:
|
|
Num32BitValues: 21
|
|
ShaderRegister: 22
|
|
RegisterSpace: 23
|
|
- ParameterType: 2 # SRV
|
|
ShaderVisibility: 3 # Domain
|
|
Descriptor:
|
|
ShaderRegister: 31
|
|
RegisterSpace: 32
|
|
DATA_STATIC_WHILE_SET_AT_EXECUTE: true
|
|
- ParameterType: 0 # SRV
|
|
ShaderVisibility: 3 # Domain
|
|
Table:
|
|
NumRanges: 1
|
|
Ranges:
|
|
- RangeType: 0
|
|
NumDescriptors: -1
|
|
BaseShaderRegister: 42
|
|
RegisterSpace: 43
|
|
OffsetInDescriptorsFromTableStart: 41
|
|
DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS: true
|
|
AllowInputAssemblerInputLayout: true
|
|
DenyGeometryShaderRootAccess: true
|
|
|
|
# CHECK: - Name: RTS0
|
|
# CHECK-NEXT: Size: 200
|
|
# CHECK-NEXT: RootSignature:
|
|
# CHECK-NEXT: Version: 2
|
|
# CHECK-NEXT: NumRootParameters: 4
|
|
# CHECK-NEXT: RootParametersOffset: 24
|
|
# CHECK-NEXT: NumStaticSamplers: 0
|
|
# CHECK-NEXT: StaticSamplersOffset: 140
|
|
# CHECK-NEXT: Parameters:
|
|
# CHECK-NEXT: - ParameterType: 1
|
|
# CHECK-NEXT: ShaderVisibility: 2
|
|
# CHECK-NEXT: Constants:
|
|
# CHECK-NEXT: Num32BitValues: 16
|
|
# CHECK-NEXT: RegisterSpace: 14
|
|
# CHECK-NEXT: ShaderRegister: 15
|
|
# CHECK-NEXT: - ParameterType: 1
|
|
# CHECK-NEXT: ShaderVisibility: 4
|
|
# CHECK-NEXT: Constants:
|
|
# CHECK-NEXT: Num32BitValues: 21
|
|
# CHECK-NEXT: RegisterSpace: 23
|
|
# CHECK-NEXT: ShaderRegister: 22
|
|
# CHECK-NEXT: - ParameterType: 2
|
|
# CHECK-NEXT: ShaderVisibility: 3
|
|
# CHECK-NEXT: Descriptor:
|
|
# CHECK-NEXT: RegisterSpace: 32
|
|
# CHECK-NEXT: ShaderRegister: 31
|
|
# CHECK-NEXT: DATA_STATIC_WHILE_SET_AT_EXECUTE: true
|
|
# CHECK-NEXT: - ParameterType: 0
|
|
# CHECK-NEXT: ShaderVisibility: 3
|
|
# CHECK-NEXT: Table:
|
|
# CHECK-NEXT: NumRanges: 1
|
|
# CHECK-NEXT: RangesOffset: 116
|
|
# CHECK-NEXT: Ranges:
|
|
# CHECK-NEXT: - RangeType: 0
|
|
# CHECK-NEXT: NumDescriptors: -1
|
|
# CHECK-NEXT: BaseShaderRegister: 42
|
|
# CHECK-NEXT: RegisterSpace: 43
|
|
# CHECK-NEXT: OffsetInDescriptorsFromTableStart: 41
|
|
# CHECK-NEXT: DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS: true
|
|
# CHECK-NEXT: AllowInputAssemblerInputLayout: true
|
|
# CHECK-NEXT: DenyGeometryShaderRootAccess: true
|