yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
fdf061e27
master
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}