yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f55f669d1
master
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -render-feature cooperative-vector -output-using-type 2 3// HLSL doesn't support the training operations 4//DISABLE_TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-dx12 -render-feature cooperative-vector -dx12-experimental -output-using-type -profile cs_6_9 -Xslang... -Xdxc -Vd -X. 5 6// Disabled because of some pecularities stemming from our lowering of half to float 7//DISABLE_TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type 8 9// CHECK: type: half 10// CHECK-NEXT: 112.000000 11// CHECK-NEXT: 2.000000 12// CHECK-NEXT: 3.000000 13// CHECK-NEXT: 4.000000 14// CHECK-NEXT: 5.000000 15// CHECK-NEXT: 6.000000 16// CHECK-NEXT: 7.000000 17// CHECK-NEXT: 8.000000 18// CHECK-NEXT: 2.000000 19// CHECK-NEXT: 4.000000 20// CHECK-NEXT: 6.000000 21// CHECK-NEXT: 8.000000 22// CHECK-NEXT: 10.000000 23// CHECK-NEXT: 12.000000 24// CHECK-NEXT: 14.000000 25// CHECK-NEXT: 16.000000 26// CHECK-NEXT: 3.000000 27// CHECK-NEXT: 6.000000 28// CHECK-NEXT: 9.000000 29// CHECK-NEXT: 12.000000 30// CHECK-NEXT: 15.000000 31// CHECK-NEXT: 18.000000 32// CHECK-NEXT: 21.000000 33// CHECK-NEXT: 24.000000 34// CHECK-NEXT: 4.000000 35// CHECK-NEXT: 8.000000 36// CHECK-NEXT: 12.000000 37// CHECK-NEXT: 16.000000 38// CHECK-NEXT: 20.000000 39// CHECK-NEXT: 24.000000 40// CHECK-NEXT: 28.000000 41// CHECK-NEXT: 32.000000 42 43//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=2):out,name=outputBuffer 44RWStructuredBuffer<half> outputBuffer; 45 46//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4),name=output 47RWByteAddressBuffer output; 48 49[numthreads(1, 1, 1)] 50void computeMain() 51{ 52 CoopVec<half, 4> vecA; 53 CoopVec<half, 8> vecB; 54 for(int i = 0; i < vecA.getCount(); ++i) 55 vecA[i] = half(i+1); 56 for(int i = 0; i < vecB.getCount(); ++i) 57 vecB[i] = half(i+1); 58 59 output.Store<half>(0, half(111)); 60 61 coopVecOuterProductAccumulate( 62 vecA, 63 vecB, 64 output, 65 0, 66 32, 67 CoopVecMatrixLayout::TrainingOptimal, 68 CoopVecComponentType::Float16, 69 ); 70 71 for(int i = 0; i < vecA.getCount() * vecB.getCount(); ++i) 72 outputBuffer[i] = output.Load<half>(i * 2); 73}