yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
2a5d5b323
master
1//TEST(compute):COMPARE_COMPUTE:-dx11 -shaderobj 2//TEST(compute):COMPARE_COMPUTE:-vk -shaderobj 3//TEST(compute):COMPARE_COMPUTE:-cpu -xslang -disable-specialization -shaderobj 4//TEST(compute):COMPARE_COMPUTE:-cuda -xslang -disable-specialization -shaderobj 5 6// Test dynamic dispatch code gen for associated-typed return values 7// and local variables. 8// TODO: test arguments of associated type. 9[anyValueSize(8)] 10interface IAssoc 11{ 12 int Compute(); 13} 14[anyValueSize(16)] 15interface IInterface 16{ 17 associatedtype TAssoc : IAssoc; 18 19 [mutating] 20 void SetVal(int inVal); 21 22 TAssoc GetAssoc(); 23}; 24 25T.TAssoc CreateT_Assoc_Inner<T:IInterface>(int inVal) 26{ 27 T obj; 28 obj.SetVal(inVal); 29 return obj.GetAssoc(); 30} 31 32T.TAssoc CreateT_Assoc<T:IInterface>(int inVal) 33{ 34 return CreateT_Assoc_Inner<T>(inVal); 35} 36 37T CreateT<T:IInterface>(int inVal) 38{ 39 T obj; 40 obj.SetVal(inVal); 41 return obj; 42} 43 44struct Impl : IInterface 45{ 46 struct TAssoc : IAssoc 47 { 48 int base; 49 int Compute() 50 { 51 return base; 52 } 53 }; 54 55 TAssoc assoc; 56 [mutating] 57 void SetVal(int inVal) 58 { 59 assoc.base = inVal; 60 } 61 62 TAssoc GetAssoc() 63 { 64 return assoc; 65 } 66}; 67 68int test() 69{ 70 var obj = CreateT<Impl>(2); 71 var obj2 = CreateT_Assoc<Impl>(1); 72 // TODO: compiler crash if type parameter is missing. 73 // (hitting lowering logic of TypeEqualityWitness) 74 var obj3 = CreateT_Assoc_Inner<Impl>(1); 75 return obj.GetAssoc().Compute() + obj2.Compute() + obj3.Compute(); 76} 77 78//TEST_INPUT:ubuffer(data=[0 1 2 3], stride=4):out,name=outputBuffer 79RWStructuredBuffer<int> outputBuffer; 80 81[numthreads(4, 1, 1)] 82void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 83{ 84 uint tid = dispatchThreadID.x; 85 int outVal = test(); 86 outputBuffer[tid] = outVal; 87}