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
2.1 KiB86 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//TEST_INPUT: set Test.v0 = 1;
4//TEST_INPUT: set Test.v1 = {2.0,3.0,4.0};
5//TEST_INPUT: set Test.v2 = {5,6,7};
6//TEST_INPUT: set Test.v3 = {8,9};
7//TEST_INPUT: set Test.v4 = {10,11};
8//TEST_INPUT: set Test.v5 = {12,13,14,15};
9//TEST_INPUT: set Test.v6 = {{16,17,18}, {19,20,21}};
10//TEST_INPUT: set Test.v6 = {{16,17,18}, {19,20,21}};
11//TEST_INPUT: set Test.v7 = 22;
12//TEST_INPUT: set Test.v8 = {23,24};
13//TEST_INPUT: set Test.v9 = {25,26};
14
15//SPIRV_DX: ArrayStride 16
16
17cbuffer Test
18{
19//SPIRV: Offset 0
20    uint v0;
21//SPIRV: Offset 4
22    float3 v1;
23
24//SPIRV: Offset 16
25    uint3 v2;
26
27//SPIRV: Offset 32
28    uint2 v3;
29//SPIRV: Offset 40
30    uint2 v4;
31
32//SPIRV: Offset 48
33    uint v5[4];
34
35//SPIRV: Offset 112
36// Array always starts on a new register.
37    uint3 v6[2];
38//SPIRV: Offset 140
39// Non-array can pack with a partially filled register
40    uint v7;
41
42//SPIRV: Offset 144
43    uint2 v8;
44
45// SPIRV: Offset 160
46// Array always starts on a new register.
47    uint v9[2];
48};
49
50//TEST_INPUT:ubuffer(data=[0], stride=4):out,name outputBuffer
51RWStructuredBuffer<int> outputBuffer;
52
53__generic<T : IArithmetic, let N : int>
54bool comp(vector<T,N> v1, vector<T,N> v2)
55{
56    for (uint i = 0; i < N; i++)
57        if (v1[i] != v2[i])
58            return false;
59
60    return true;
61}
62
63[shader("compute")]
64[numthreads(2, 2, 1)]
65void computeMain()
66{
67    // CHECK: 64
68
69    outputBuffer[0] = (true
70            && v0 == 1
71            && comp(v1, float3(2, 3, 4))
72            && comp(v2, uint3(5, 6, 7))
73            && comp(v3, uint2(8, 9))
74            && comp(v4, uint2(10, 11))
75            && v5[0] == 12
76            && v5[1] == 13
77            && v5[2] == 14
78            && v5[3] == 15
79            && comp(v6[0], uint3(16, 17, 18))
80            && comp(v6[1], uint3(19, 20, 21))
81            && v7 == 22
82            && comp(v8, uint2(23, 24))
83            && v9[0] == 25
84            && v9[1] == 26
85        ) ? 100 : 0;
86}