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.8 KiB69 linesraw
1// Test using generic interface methods with dynamic dispatch.
2
3//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -vk -output-using-type
4//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile sm_6_0 -output-using-type
5//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx11 -profile sm_5_0 -output-using-type
6//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type
7
8interface IReturnsZero
9{
10    float get();
11}
12
13[anyValueSize(16)]
14interface IInterface
15{
16    float run<Z:IReturnsZero>();
17}
18
19struct UserDefinedPackedType
20{
21    float3 val;
22    uint flags;
23};
24
25//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=gOutputBuffer
26RWStructuredBuffer<float> gOutputBuffer;
27
28//TEST_INPUT: set gObj = new StructuredBuffer<UserDefinedPackedType>[new UserDefinedPackedType{[1.0, 2.0, 3.0], 3}, new UserDefinedPackedType{[2.0, 3.0, 4.0], 4}];
29RWStructuredBuffer<UserDefinedPackedType> gObj;
30
31//TEST_INPUT: type_conformance FloatVal:IInterface = 3
32//TEST_INPUT: type_conformance Float4Val:IInterface = 4
33
34[numthreads(1, 1, 1)]
35void computeMain(uint3       dispatchThreadID : SV_DispatchThreadID)
36{
37    float result = 0.0;
38    for (int i = 0; i < 2; i++)
39    {
40        var rawObj = gObj.Load(i);
41        IInterface dynamicObj = createDynamicObject<IInterface, UserDefinedPackedType>(rawObj.flags, rawObj);
42        result += dynamicObj.run<ReturnsZero>();
43    }
44    gOutputBuffer[0] = result;
45}
46
47struct ReturnsZero : IReturnsZero
48{
49    float get() { return 0.0; }
50}
51struct FloatVal : IInterface
52{
53    float val;
54    float run<Z:IReturnsZero>()
55    {
56        Z z = Z();
57        return val + z.get();
58    }
59};
60struct Float4Struct { float4 val; }
61struct Float4Val : IInterface
62{
63    Float4Struct val;
64    float run<Z:IReturnsZero>()
65    {
66        Z z = Z();
67        return val.val.x + val.val.y + z.get();
68    }
69};