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 0 0 0 2.0 3.0 4.0 0 5.0 6.0 7.0 0 8.0 9.0 10.0 11]):name=Test 4 5//SPIRV: ArrayStride 16 6 7cbuffer Test 8{ 9//SPIRV: Offset 0 10 uint v0; 11 12//SPIRV: Offset 16 13// matrix always start on a new register 14 float3x3 v1; 15//SPIRV: Offset 60 16// Non-matrix can pack with a partially filled register 17 uint v2; 18}; 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 39 outputBuffer[0] = (true 40 && v0 == 1 41 && comp(v1[0], float3(2, 3, 4)) 42 && comp(v1[1], float3(5, 6, 7)) 43 && comp(v1[2], float3(8, 9, 10)) 44 && v2 == 11 45 ) ? 100 : 0; 46}