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