yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Simon Kallweitupdate slang-rhi (#6587)ae1a5e408

master
3.5 KiB137 linesraw
1//TEST:SIMPLE(filecheck=CHECK_GLSL):  -allow-glsl -stage compute -entry computeMain -target glsl
2//TEST:SIMPLE(filecheck=CHECK_SPV):  -allow-glsl -stage compute -entry computeMain -target spirv -emit-spirv-directly
3//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl
4//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -emit-spirv-directly
5#version 460
6
7// CHECK_GLSL: void main(
8// CHECK_SPV: OpEntryPoint
9
10//TEST_INPUT:ubuffer(data=[2 2 2 2], stride=4):out,name=raceCondition
11buffer MyBlockName1
12{
13    uint data[];
14} raceCondition;
15
16groupshared uint raceConditionShared;
17
18//TEST_INPUT: set raceConditionImage = RWTexture1D(format=R32Sint, size=4, content=one, mipMaps = 1)
19uniform layout(binding=0,r32i) iimage1D raceConditionImage;
20
21//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer
22buffer MyBlockName2
23{
24    uint data[];
25} outputBuffer;
26
27layout(local_size_x = 32) in;
28
29bool testMemoryBarrier()
30{
31    for (int i = 0; i < 4; i++)
32    {
33        raceCondition.data[0] = gl_GlobalInvocationID.x;
34        memoryBarrier();
35        raceCondition.data[0] = 1;
36        memoryBarrier();
37        if (raceCondition.data[0] != 1)
38            return false;
39    }
40    return true
41        && raceCondition.data[0] == 1
42        ;
43}
44bool testMemoryBarrierAtomicCounter()
45{
46    for (int i = 0; i < 4; i++)
47    {
48        atomicExchange(raceCondition.data[1], 2);
49        memoryBarrierAtomicCounter();
50        atomicExchange(raceCondition.data[1], 1);
51        memoryBarrierAtomicCounter();
52        if (raceCondition.data[1] != 1)
53            return false;
54    }
55    return true
56        && raceCondition.data[1] == 1
57        ;
58}
59bool testMemoryBarrierBuffer()
60{
61    for (int i = 0; i < 4; i++)
62    {
63        raceCondition.data[2] = gl_GlobalInvocationID.x;
64        memoryBarrierBuffer();
65        raceCondition.data[2] = 1;
66        memoryBarrierBuffer();
67        if (raceCondition.data[2] != 1)
68            return false;
69    }
70    return true
71        && raceCondition.data[2] == 1
72        ;
73}
74bool testMemoryBarrierShared()
75{
76    for (int i = 0; i < 4; i++)
77    {
78        raceConditionShared = 2;
79        memoryBarrierShared();
80        raceConditionShared = 1;
81        memoryBarrierShared();
82        if (raceConditionShared != 1)
83            return false;
84    }
85    return true
86        && raceConditionShared == 1
87        ;
88}
89bool testMemoryBarrierImage()
90{
91    for (int i = 0; i < 4; i++)
92    {
93        imageStore(raceConditionImage, 0, 2);
94        memoryBarrierShared();
95        imageStore(raceConditionImage, 0, 1);
96        memoryBarrierShared();
97        if (imageLoad(raceConditionImage, 0).x != 1)
98            return false;
99    }
100    return true
101        && imageLoad(raceConditionImage, 0).x == 1
102        ;
103}
104bool testGroupMemoryBarrier()
105{
106    for (int i = 0; i < 4; i++)
107    {
108        raceCondition.data[3] = gl_GlobalInvocationID.x;
109        groupMemoryBarrier();
110        raceCondition.data[3] = 1;
111        groupMemoryBarrier();
112        if (raceCondition.data[3] != 1)
113            return false;
114    }
115    return true
116        && raceCondition.data[3] == 1
117        ;
118}
119bool testMemoryBarriers()
120{
121    return true
122        && testMemoryBarrier()
123        && testMemoryBarrierAtomicCounter()
124        && testMemoryBarrierBuffer()
125        && testMemoryBarrierShared()
126        && testMemoryBarrierImage()
127        && testGroupMemoryBarrier()
128        ;
129}
130
131void computeMain()
132{
133    outputBuffer.data[0] = true
134        && testMemoryBarriers()
135        ;
136    // BUF: 1
137}