yum-mirror/slang

Making it easier to work with shaders

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

ArielG-NVImplement `-fvk-use-dx-layout` (#4912)e1c6fecd9

master
1.5 KiB57 linesraw
1//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-vk -compute -xslang -fvk-use-dx-layout -emit-spirv-directly
2//TEST:SIMPLE(filecheck=SPIRV): -target spirv -entry computeMain -stage compute -fvk-use-dx-layout
3
4struct Test_t
5{
6//SPIRV: Offset 0
7    uint v0;
8//SPIRV: Offset 4
9    float3 v1;
10//SPIRV: Offset 16
11    uint3 v2;
12//SPIRV: Offset 28
13    uint2 v3;
14//SPIRV: Offset 36
15    uint2 v4;
16//SPIRV: Offset 44
17    uint v5[4];
18//SPIRV: Offset 60
19    uint3 v6[2];
20};
21
22//TEST_INPUT:ubuffer(data=[1   2.0 3.0 4.0   5 6 7   8 9 10 11   12 13 14 15   16 17 18   19 20 21], stride=4):out,name testBuffer
23RWStructuredBuffer<Test_t> testBuffer;
24
25//TEST_INPUT:ubuffer(data=[0], stride=4):out,name outputBuffer
26RWStructuredBuffer<int> outputBuffer;
27
28__generic<T : IArithmetic, let N : int>
29bool comp(vector<T,N> v1, vector<T,N> v2)
30{
31    for (uint i = 0; i < N; i++)
32        if (v1[i] != v2[i])
33            return false;
34
35    return true;
36}
37
38[shader("compute")]
39[numthreads(16, 16, 1)]
40void computeMain()
41{
42    // CHECK: 64
43    Test_t test = testBuffer[0];
44    outputBuffer[0] = (true
45            && test.v0 == 1
46            && comp(test.v1, float3( 2, 3, 4))
47            && comp(test.v2, uint3( 5, 6, 7))
48            && comp(test.v3, uint2( 8, 9 ))
49            && comp(test.v4, uint2( 10, 11 ))
50            && test.v5[0] == 12
51            && test.v5[1] == 13
52            && test.v5[2] == 14
53            && test.v5[3] == 15
54            && comp(test.v6[0], uint3( 16, 17, 18 ))
55            && comp(test.v6[1], uint3( 19, 20, 21 ))
56        ) ? 100 : 0;
57}