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: -shaderobj 2//TEST(compute):COMPARE_COMPUTE:-cpu -shaderobj 3 4// Confirm that generics syntax can be used in user 5// code and generates valid output. 6 7//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer 8RWStructuredBuffer<float4> outputBuffer; 9 10interface IElement 11{ 12 float4 getValue(); 13}; 14 15struct SingleElement : IElement 16{ 17 float4 value; 18 float4 getValue() 19 { 20 return value; 21 } 22}; 23 24struct ListElement<THead : IElement, TTail : IElement> : IElement 25{ 26 THead head; 27 TTail tail; 28 float4 getValue() 29 { 30 return head.getValue() + tail.getValue(); 31 } 32}; 33 34float4 test<T : IElement>(T val) 35{ 36 return val.getValue(); 37} 38 39 40[numthreads(1, 1, 1)] 41void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 42{ 43 ListElement<SingleElement, ListElement<SingleElement, ListElement<SingleElement, SingleElement> > > list; 44 list.head.value = float4(1.0); 45 list.tail.head.value = float4(2.0); 46 list.tail.tail.head.value = float4(3.0); 47 list.tail.tail.tail.value = float4(4.0); 48 float4 outVal = test(list); 49 outputBuffer[0] = outVal; 50}