yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
7b4d02803
master
1//TEST(compute):COMPARE_COMPUTE: -shaderobj 2//TEST(compute):COMPARE_COMPUTE: -cuda -shaderobj 3 4 5//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer 6RWStructuredBuffer<int> outputBuffer; 7 8interface IAdd 9{ 10 int addf(int u, int v); 11} 12 13interface ISub 14{ 15 int subf(int u, int v); 16} 17 18interface IAddAndSub : IAdd, ISub 19{ 20} 21 22struct Simple : IAddAndSub 23{ 24 int addf(int u, int v) 25 { 26 return u+v; 27 } 28 int subf(int u, int v) 29 { 30 return u-v; 31 } 32}; 33 34int testAdd<T:IAdd>(T t) 35{ 36 return t.addf(1, 1); 37} 38 39interface IAssoc 40{ 41 associatedtype AT : IAdd; 42} 43 44struct AssocImpl : IAssoc 45{ 46 typedef Simple AT; 47}; 48 49int testAdd2<T:IAssoc>(T assoc) 50{ 51 T.AT obj = T.AT(); 52 return obj.addf(1, 1); 53} 54 55int testSub<T:ISub>(T t, int base) 56{ 57 return t.subf(base, 1); 58} 59 60[numthreads(4, 1, 1)] 61void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 62{ 63 AssocImpl s; 64 65 // expected value: 1 + 1 = 2 66 int outVal = testAdd2(s); 67 Simple s1; 68 69 // expected value: 2 + (2-1) = 3 70 outVal += testSub(s1, outVal); 71 72 outputBuffer[dispatchThreadID.x] = outVal; 73}