yum-mirror/slang

Making it easier to work with shaders

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

Yong HeAdd datalayout for constant buffers. (#5608)fdf061e27

master
994 B45 linesraw
1//TEST:SIMPLE(filecheck=SPIRV): -target spirv -emit-spirv-directly
2
3//SPIRV: ArrayStride 12
4
5struct Test
6{
7//SPIRV: Offset 0
8    uint v0;
9
10//SPIRV: Offset 4
11// matrix always start on a new register
12    float3x3 v1;
13//SPIRV: Offset 40
14// Non-matrix can pack with a partially filled register
15    uint v2;
16};
17
18ConstantBuffer<Test, ScalarDataLayout> buffer;
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    outputBuffer[0] = (true
39            && buffer.v0 == 1
40            && comp(buffer.v1[0], float3(2, 3, 4))
41            && comp(buffer.v1[1], float3(5, 6, 7))
42            && comp(buffer.v1[2], float3(8, 9, 10))
43            && buffer.v2 == 11
44        ) ? 100 : 0;
45}