yum-mirror/slang

Making it easier to work with shaders

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

Ellie HermaszewskaRemove -use-glsl-matrix-layout-modifier from test (#3104)9ec30a1d5

master
2.0 KiB65 linesraw
1// Test that storage type lowering correctly handles matrix layout modifiers.
2
3//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type -xslang -fvk-use-gl-layout
4
5//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 ], stride=4):out,name=outputBuffer
6RWStructuredBuffer<float> outputBuffer;
7
8struct MyStruct
9{
10    column_major float3x2 mat;
11    int otherVal[4];
12
13}
14
15//TEST_INPUT: set gConst = cbuffer(data=[1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103])
16// gConst will be:
17// --             --
18// |   1.0   2.0   |
19// |   3.0   4.0   |
20// |   5.0   6.0   |
21// --             --
22ConstantBuffer<MyStruct> gConst;
23
24//TEST_INPUT: set gStructBuffer = ubuffer(data=[1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103 1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103])
25RWStructuredBuffer<MyStruct[2]> gStructBuffer;
26
27//TEST_INPUT: set gRawBuffer = ubuffer(data=[1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103])
28RWByteAddressBuffer gRawBuffer;
29
30[numthreads(1, 1, 1)]
31void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
32{
33    {
34        float2 v = float2(2.0, 3.0);
35        float3 vm = mul(gConst.mat, v);
36        outputBuffer[0] = vm.x; // 8
37        outputBuffer[1] = vm.y; // 18
38        outputBuffer[2] = vm.z; // 28
39    }
40    {
41        float2 v = float2(2.0, 3.0);
42        float3 vm = mul(gStructBuffer[0][0].mat, v);
43        outputBuffer[3] = vm.x; // 8
44        outputBuffer[4] = vm.y; // 18
45        outputBuffer[5] = vm.z; // 28
46    }
47    {
48        float2 v = float2(2.0, 3.0);
49        float3 vm = mul(gRawBuffer.Load<MyStruct>(0).mat, v);
50        outputBuffer[6] = vm.x; // 8
51        outputBuffer[7] = vm.y; // 18
52        outputBuffer[8] = vm.z; // 28
53        gRawBuffer.Store(0, gRawBuffer.Load<MyStruct>(0));
54        vm = mul(gRawBuffer.Load<MyStruct>(0).mat, v);
55        outputBuffer[9] = vm.x; // 8
56        outputBuffer[10] = vm.y; // 18
57        outputBuffer[11] = vm.z; // 28
58    }
59
60    {
61        int original;
62        InterlockedAdd(gStructBuffer[0][0].otherVal[0], 1, original);
63        outputBuffer[12] = gStructBuffer[0][0].otherVal[0];
64    }
65}