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
5.4 KiB154 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:SIMPLE(filecheck=CHECK_HLSL): -allow-glsl -stage compute -entry computeMain -target hlsl -DTARGET_HLSL
4
5// not testing cuda due to missing impl
6//DISABLE_TEST:SIMPLE(filecheck=CHECK_CUDA): -allow-glsl -stage compute -entry computeMain -target cuda -DTARGET_CUDA 
7// not testing cpp due to missing impl
8//DISABLE_TEST:SIMPLE(filecheck=CHECK_CPP):  -allow-glsl -stage compute -entry computeMain -target cpp -DTARGET_CPP
9
10//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl
11//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -emit-spirv-directly
12//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-wgpu -compute -entry computeMain -allow-glsl -xslang -DWGPU -render-feature half
13//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-metal -compute -entry computeMain -allow-glsl -xslang -DMETAL
14
15#version 430
16
17//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer
18buffer MyBlockName2 
19{
20    uint data[];
21} outputBuffer;
22
23layout(local_size_x = 4) in;
24
25__generic<T : __BuiltinLogicalType>
26bool test1QuadX() {
27    return true
28        & subgroupQuadSwapHorizontal(T(2)) == T(2)
29        & subgroupQuadSwapVertical(T(2)) == T(2)
30        & subgroupQuadSwapDiagonal(T(3)) == T(3)
31        // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions.
32#if !defined(WGPU)
33        & subgroupQuadBroadcast(T(1), 1) == T(1)
34#endif
35        ;
36}
37__generic<T : __BuiltinLogicalType, let N : int>
38bool testVQuadX() {
39    typealias gvec = vector<T, N>;
40
41    return true
42        & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
43        & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
44        & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
45        // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions.
46#if !defined(WGPU)
47        & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
48#endif
49        ;
50}
51
52__generic<T : __BuiltinFloatingPointType>
53bool test1QuadX() {
54    return true
55        & subgroupQuadSwapHorizontal(T(2)) == T(2)
56        & subgroupQuadSwapVertical(T(2)) == T(2)
57        & subgroupQuadSwapDiagonal(T(3)) == T(3)
58        // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions.
59#if !defined(WGPU)
60        & subgroupQuadBroadcast(T(1), 1) == T(1)
61#endif
62        ;
63}
64__generic<T : __BuiltinFloatingPointType, let N : int>
65bool testVQuadX() {
66    typealias gvec = vector<T, N>;
67
68    return true
69        & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
70        & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
71        & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
72        // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions.
73#if !defined(WGPU)
74        & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
75#endif
76        ;
77}
78bool testQuadSwapX() {
79    return true
80        & test1QuadX<float>()
81        & testVQuadX<float, 2>()
82        & testVQuadX<float, 3>()
83        & testVQuadX<float, 4>()
84        & test1QuadX<half>() 
85        & testVQuadX<half, 2>()
86        & testVQuadX<half, 3>()
87        & testVQuadX<half, 4>()
88        & test1QuadX<int>()
89        & testVQuadX<int, 2>()
90        & testVQuadX<int, 3>()
91        & testVQuadX<int, 4>()
92        & test1QuadX<uint>()
93        & testVQuadX<uint, 2>()
94        & testVQuadX<uint, 3>()
95        & testVQuadX<uint, 4>()
96
97        // Disabled on WGSL and Metal as these built-in types are not supported.
98#if !defined(WGPU) && !defined(METAL)
99        & test1QuadX<double>() // WARNING: intel GPU's lack FP64 support
100        & testVQuadX<double, 2>()
101        & testVQuadX<double, 3>()
102        & testVQuadX<double, 4>()
103        & test1QuadX<int8_t>() 
104        & testVQuadX<int8_t, 2>()
105        & testVQuadX<int8_t, 3>()
106        & testVQuadX<int8_t, 4>()
107        & test1QuadX<int16_t>() 
108        & testVQuadX<int16_t, 2>()
109        & testVQuadX<int16_t, 3>()
110        & testVQuadX<int16_t, 4>()
111        & test1QuadX<int64_t>() 
112        & testVQuadX<int64_t, 2>()
113        & testVQuadX<int64_t, 3>()
114        & testVQuadX<int64_t, 4>()
115        & test1QuadX<uint8_t>() 
116        & testVQuadX<uint8_t, 2>()
117        & testVQuadX<uint8_t, 3>()
118        & testVQuadX<uint8_t, 4>()
119        & test1QuadX<uint64_t>() 
120        & testVQuadX<uint64_t, 2>()
121        & testVQuadX<uint64_t, 3>()
122        & testVQuadX<uint64_t, 4>() & test1QuadX<bool>() & testVQuadX<bool, 2>()
123        & testVQuadX<bool, 3>()
124        & testVQuadX<bool, 4>()
125#endif
126
127
128#if !defined(WGPU)
129        & test1QuadX<int16_t>() 
130        & testVQuadX<int16_t, 2>()
131        & testVQuadX<int16_t, 3>()
132        & testVQuadX<int16_t, 4>()
133        & test1QuadX<uint16_t>() 
134        & testVQuadX<uint16_t, 2>()
135        & testVQuadX<uint16_t, 3>()
136        & testVQuadX<uint16_t, 4>()
137#endif
138        ;
139}
140
141void computeMain()
142{
143
144    outputBuffer.data[0] = true
145        & testQuadSwapX()
146        ;
147
148    // CHECK_GLSL: void main(
149    // CHECK_SPV: OpEntryPoint
150    // CHECK_HLSL: void computeMain(
151    // CHECK_CUDA: void computeMain(
152    // CHECK_CPP: void _computeMain(
153    // BUF: 1
154}