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