yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

James Helferty (NVIDIA)render-test: Change D3D12 default to sm_6_5 (#8320)f02b08490

master
1.4 KiB54 linesraw
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}