yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
9ec30a1d5
master
1// Test that storage type lowering correctly handles matrix layout modifiers. 2 3//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type -xslang -fvk-use-gl-layout 4 5//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 ], stride=4):out,name=outputBuffer 6RWStructuredBuffer<float> outputBuffer; 7 8struct MyStruct 9{ 10 column_major float3x2 mat; 11 int otherVal[4]; 12 13} 14 15//TEST_INPUT: set gConst = cbuffer(data=[1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103]) 16// gConst will be: 17// -- -- 18// | 1.0 2.0 | 19// | 3.0 4.0 | 20// | 5.0 6.0 | 21// -- -- 22ConstantBuffer<MyStruct> gConst; 23 24//TEST_INPUT: set gStructBuffer = ubuffer(data=[1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103 1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103]) 25RWStructuredBuffer<MyStruct[2]> gStructBuffer; 26 27//TEST_INPUT: set gRawBuffer = ubuffer(data=[1.0 3.0 5.0 0.0 2.0 4.0 6.0 0.0 100 101 102 103]) 28RWByteAddressBuffer gRawBuffer; 29 30[numthreads(1, 1, 1)] 31void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 32{ 33 { 34 float2 v = float2(2.0, 3.0); 35 float3 vm = mul(gConst.mat, v); 36 outputBuffer[0] = vm.x; // 8 37 outputBuffer[1] = vm.y; // 18 38 outputBuffer[2] = vm.z; // 28 39 } 40 { 41 float2 v = float2(2.0, 3.0); 42 float3 vm = mul(gStructBuffer[0][0].mat, v); 43 outputBuffer[3] = vm.x; // 8 44 outputBuffer[4] = vm.y; // 18 45 outputBuffer[5] = vm.z; // 28 46 } 47 { 48 float2 v = float2(2.0, 3.0); 49 float3 vm = mul(gRawBuffer.Load<MyStruct>(0).mat, v); 50 outputBuffer[6] = vm.x; // 8 51 outputBuffer[7] = vm.y; // 18 52 outputBuffer[8] = vm.z; // 28 53 gRawBuffer.Store(0, gRawBuffer.Load<MyStruct>(0)); 54 vm = mul(gRawBuffer.Load<MyStruct>(0).mat, v); 55 outputBuffer[9] = vm.x; // 8 56 outputBuffer[10] = vm.y; // 18 57 outputBuffer[11] = vm.z; // 28 58 } 59 60 { 61 int original; 62 InterlockedAdd(gStructBuffer[0][0].otherVal[0], 1, original); 63 outputBuffer[12] = gStructBuffer[0][0].otherVal[0]; 64 } 65}