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