summaryrefslogtreecommitdiffstats
path: root/tests/hlsl-intrinsic/firstbitlow.slang
blob: 418b8aa6f904eb3bcbedf5e1927c9010e4323fd3 (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
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-slang -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-slang -compute -dx12 -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -compute -shaderobj
//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cuda -compute -shaderobj

//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0], stride=4):out,name outputBuffer
RWStructuredBuffer<uint> outputBuffer;

[numthreads(10, 1, 1)]
void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
{
    uint idx = dispatchThreadID.x;
    
    if (idx < 5) {
        // Test unsigned values
        uint testValues[5] = {0, 1, 2, 4, 8};
        uint value = testValues[idx];
        uint result = firstbitlow(value);
        outputBuffer[idx] = result;
    } else {
        // Test signed values
        int testValues[5] = {-1, -2, -4, -8, 0}; // 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFC, 0xFFFFFFF8, 0
        int value = testValues[idx - 5];
        uint result = firstbitlow(value);
        outputBuffer[idx] = result;
    }
}

// CHECK: FFFFFFFF
// CHECK: 0
// CHECK: 1
// CHECK: 2
// CHECK: 3
// CHECK: 0
// CHECK: 1
// CHECK: 2
// CHECK: 3
// CHECK: FFFFFFFF