yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f02b08490
master
1// Test using generic interface methods with dynamic dispatch. 2 3//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile sm_6_0 -output-using-type 4//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx11 -profile sm_5_0 -output-using-type 5//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -output-using-type 6//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type 7 8[anyValueSize(12)] 9interface IReturnsZero 10{ 11 float get(); 12} 13 14[anyValueSize(16)] 15interface IInterface 16{ 17 associatedtype Getter : IReturnsZero; 18 Getter createGetter(); 19} 20 21struct Impl : IInterface 22{ 23 int data; 24 struct Getter : IReturnsZero 25 { 26 bool data; 27 float get() { if (data) return 0.0; else return 1.0;} 28 } 29 Getter createGetter() { Getter g; g.data = true; return g; } 30}; 31 32 33float test(IReturnsZero r) 34{ 35 return r.get(); 36} 37 38//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=gOutputBuffer 39RWStructuredBuffer<float> gOutputBuffer; 40 41//TEST_INPUT: set gObj = new StructuredBuffer<IInterface>[new Impl{1}]; 42RWStructuredBuffer<IInterface> gObj; 43 44//TEST_INPUT: type_conformance Impl:IInterface = 3 45 46[numthreads(1, 1, 1)] 47void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 48{ 49 float result = 0.0; 50 let i = createDynamicObject<IInterface, int>(3, 0); 51 IReturnsZero iobj = i.createGetter(); 52 result = test(iobj); 53 gOutputBuffer[0] = result; 54}