This pr implements support for a root signature as a target, as specified [here](https://github.com/llvm/wg-hlsl/blob/main/proposals/0029-root-signature-driver-options.md#target-root-signature-version). This is implemented in the following steps: 1. Add `rootsignature` as a shader model environment type and define `rootsig` as a `target_profile`. Only valid as versions 1.0 and 1.1 2. Updates `HLSLFrontendAction` to invoke a special handling of constructing the `ASTContext` if we are considering an `hlsl` file and with a `rootsignature` target 3. Defines the special handling to minimally instantiate the `Parser` and `Sema` to insert the `RootSignatureDecl` 4. Updates `CGHLSLRuntime` to emit the constructed root signature decl as part of `dx.rootsignatures` with a `null` entry function 5. Updates `DXILRootSignature` to handle emitting a root signature without an entry function 6. Updates `ToolChains/HLSL` to invoke `only-section=RTS0` to strip any other generated information Resolves: https://github.com/llvm/llvm-project/issues/150286. ##### Implementation Considerations Ideally we could invoke this as part of `clang-dxc` without the need of a source file. However, the initialization of the `Parser` and `Lexer` becomes quite complicated to handle this. Technically, we could avoid generating any of the extra information that is removed in step 6. However, it seems better to re-use the logic in `llvm-objcopy` without any need for additional custom logic in `DXILRootSignature`.
24 lines
921 B
LLVM
24 lines
921 B
LLVM
; RUN: opt %s -dxil-embed -dxil-globals -S -o - | FileCheck %s
|
|
; RUN: llc %s --filetype=obj -o - | obj2yaml | FileCheck %s --check-prefix=DXC
|
|
|
|
target triple = "dxil-unknown-shadermodel1.1-rootsignature"
|
|
|
|
; CHECK: @dx.rts0 = private constant [24 x i8] c"{{.*}}", section "RTS0", align 4
|
|
|
|
!dx.rootsignatures = !{!2} ; list of function/root signature pairs
|
|
!2 = !{ null, !3, i32 2 } ; function, root signature, version
|
|
!3 = !{ !4 } ; list of root signature elements
|
|
!4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout
|
|
|
|
; DXC: - Name: RTS0
|
|
; DXC-NEXT: Size: 24
|
|
; DXC-NEXT: RootSignature:
|
|
; DXC-NEXT: Version: 2
|
|
; DXC-NEXT: NumRootParameters: 0
|
|
; DXC-NEXT: RootParametersOffset: 24
|
|
; DXC-NEXT: NumStaticSamplers: 0
|
|
; DXC-NEXT: StaticSamplersOffset: 24
|
|
; DXC-NEXT: Parameters: []
|
|
; DXC-NEXT: AllowInputAssemblerInputLayout: true
|
|
|