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 4struct Test_t 5{ 6//SPIRV: Offset 0 7 uint v0; 8//SPIRV: Offset 4 9 float3 v1; 10//SPIRV: Offset 16 11 uint3 v2; 12//SPIRV: Offset 28 13 uint2 v3; 14//SPIRV: Offset 36 15 uint2 v4; 16//SPIRV: Offset 44 17 uint v5[4]; 18//SPIRV: Offset 60 19 uint3 v6[2]; 20}; 21 22//TEST_INPUT:ubuffer(data=[1 2.0 3.0 4.0 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21], stride=4):out,name testBuffer 23RWStructuredBuffer<Test_t> testBuffer; 24 25//TEST_INPUT:ubuffer(data=[0], stride=4):out,name outputBuffer 26RWStructuredBuffer<int> outputBuffer; 27 28__generic<T : IArithmetic, let N : int> 29bool comp(vector<T,N> v1, vector<T,N> v2) 30{ 31 for (uint i = 0; i < N; i++) 32 if (v1[i] != v2[i]) 33 return false; 34 35 return true; 36} 37 38[shader("compute")] 39[numthreads(16, 16, 1)] 40void computeMain() 41{ 42 // CHECK: 64 43 Test_t test = testBuffer[0]; 44 outputBuffer[0] = (true 45 && test.v0 == 1 46 && comp(test.v1, float3( 2, 3, 4)) 47 && comp(test.v2, uint3( 5, 6, 7)) 48 && comp(test.v3, uint2( 8, 9 )) 49 && comp(test.v4, uint2( 10, 11 )) 50 && test.v5[0] == 12 51 && test.v5[1] == 13 52 && test.v5[2] == 14 53 && test.v5[3] == 15 54 && comp(test.v6[0], uint3( 16, 17, 18 )) 55 && comp(test.v6[1], uint3( 19, 20, 21 )) 56 ) ? 100 : 0; 57}