
Semantic parameters aren't passed as actual parameters, instead they are populated from intrinsics which are generally lowered to reads from dedicated hardware registers. This change modifies clang CodeGen to emit the intrinsic calls and populate the parameter's LValue with the result of the intrinsic call for SV_GroupIndex. The result of this is to make the actual passed argument ignored, which will make it easy to clean up later in an IR pass. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D131203
23 lines
845 B
HLSL
23 lines
845 B
HLSL
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -emit-llvm -disable-llvm-passes -o - -hlsl-entry main %s
|
|
|
|
[numthreads(1,1,1)]
|
|
void main(unsigned GI : SV_GroupIndex) {
|
|
main(GI - 1);
|
|
}
|
|
|
|
// For HLSL entry functions, we are generating a C-export function that wraps
|
|
// the C++-mangled entry function. The wrapper function can be used to populate
|
|
// semantic parameters and provides the expected void(void) signature that
|
|
// drivers expect for entry points.
|
|
|
|
//CHECK: define void @main() #[[ENTRY_ATTR:#]]{
|
|
//CHECK-NEXT: entry:
|
|
//CHECK-NEXT: %0 = call i32 @llvm.dx.flattened.thread.id.in.group()
|
|
//CHECK-NEXT: call void @"?main@@YAXI@Z"(i32 %0)
|
|
//CHECK-NEXT: ret void
|
|
//CHECK-NEXT: }
|
|
|
|
// Verify that the entry had the expected dx.shader attribute
|
|
|
|
//CHECK: attributes #[[ENTRY_ATTR]] = { {{.*}}"dx.shader"="compute"{{.*}} }
|