summaryrefslogtreecommitdiffstats
path: root/tests/spirv/subgroup-size-2.slang
blob: f7376f5840320aefea597a2de257e205b477cca0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Test that using workgroup size from more than one entrypoint result in
// correct lowering into global variable.

//TEST:SIMPLE(filecheck=CHECK_EXPERIMENTAL): -target spirv -emit-spirv-directly -fvk-use-entrypoint-name -O0 -enable-experimental-passes
//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -fvk-use-entrypoint-name -O0



RWStructuredBuffer<int> outputBuffer;

uint3 f() { return WorkgroupSize(); }

[shader("compute")]
[numthreads(1u, 2u, 3)]
void compute1()
{
    // CHECK_EXPERIMENTAL-DAG: %[[VAR:[A-Za-z0-9_]+]] = OpTypePointer Function %v3int
    // CHECK_EXPERIMENTAL: Op{{.*}}AccessChain %[[VAR]]
    //
    // CHECK_EXPERIMENTAL-DAG: %[[CALL_RS:[A-Za-z0-9_]+]] = OpFunctionCall %v3uint %f
    // CHECK_EXPERIMENTAL: OpCompositeExtract %uint %[[CALL_RS]] 0
    //
    // CHECK_EXPERIMENTAL-DAG: %[[PTR:[A-Za-z0-9_]+]] = Op{{.*}}AccessChain %_ptr_StorageBuffer_int %outputBuffer %int_0 %int_1
    // CHECK_EXPERIMENTAL: OpStore %[[PTR]] %int_2

    // CHECK-DAG: %[[VAR:[A-Za-z0-9_]+]] = OpVariable %_ptr_Private_v3int Private
    // CHECK: OpStore %[[VAR]]
    //
    // CHECK-DAG: %[[CALL_RS:[A-Za-z0-9_]+]] = OpFunctionCall %v3uint %f
    // CHECK: OpCompositeExtract %uint %[[CALL_RS]] 0
    //
    // CHECK-DAG: %[[PTR:[A-Za-z0-9_]+]] = Op{{.*}}AccessChain %_ptr_StorageBuffer_int %outputBuffer %int_0 %int_1
    // CHECK: OpStore %[[PTR]] %int_2

    const int x = f().x;
    outputBuffer[0] = x;
    outputBuffer[1] = WorkgroupSize().y;
}

[shader("compute")]
[numthreads(4, 5, 6)]
void compute2()
{
    const int x = f().x;
    outputBuffer[0] = x;
}