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.1 KiB46 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:cbuffer(data=[1 0 0 0   2.0 3.0 4.0 0   5.0 6.0 7.0 0   8.0 9.0 10.0 11]):name=Test
4
5//SPIRV: ArrayStride 16
6
7cbuffer Test
8{
9//SPIRV: Offset 0
10    uint v0;
11
12//SPIRV: Offset 16
13// matrix always start on a new register
14    float3x3 v1;
15//SPIRV: Offset 60
16// Non-matrix can pack with a partially filled register
17    uint v2;
18};
19
20//TEST_INPUT:ubuffer(data=[0], stride=4):out,name outputBuffer
21RWStructuredBuffer<int> outputBuffer;
22
23__generic<T : IArithmetic, let N : int>
24bool comp(vector<T,N> v1, vector<T,N> v2)
25{
26    for (uint i = 0; i < N; i++)
27        if (v1[i] != v2[i])
28            return false;
29
30    return true;
31}
32
33[shader("compute")]
34[numthreads(2, 2, 1)]
35void computeMain()
36{
37    // CHECK: 64
38
39    outputBuffer[0] = (true
40            && v0 == 1
41            && comp(v1[0], float3(2, 3, 4))
42            && comp(v1[1], float3(5, 6, 7))
43            && comp(v1[2], float3(8, 9, 10))
44            && v2 == 11
45        ) ? 100 : 0;
46}