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
2.3 KiB86 linesraw
1//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type
2//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -profile sm_6_0 -output-using-type
3//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -cuda -shaderobj -output-using-type
4//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -cpu -shaderobj -output-using-type
5//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -wgpu -output-using-type
6
7
8interface IFoo
9{
10    associatedtype FooType : IFoo;
11}
12
13extension float : IFoo
14{
15    typedef float FooType;
16}
17
18__generic<T:IFoo, let N:int>
19extension Array<T, N> : IFoo
20{
21    typedef Array<T.FooType, N> FooType;
22}
23
24__generic<T:IFoo, let N:int>
25extension vector<T, N> : IFoo
26{
27    typedef vector<T.FooType, N> FooType;
28}
29
30__generic<T:IFoo, let N:int, let M:int>
31extension matrix<T, N, M> : IFoo
32{
33    typedef matrix<T.FooType, N, M> FooType;
34}
35
36struct WrappedBuffer<T : IFoo>
37{
38    StructuredBuffer<T> buffer;
39    int shape;
40
41    T get(int idx) { return buffer[idx]; }
42}
43
44
45struct GradInBuffer<T : IFoo>
46{
47    WrappedBuffer<T.FooType> wrapBuffer;
48}
49
50struct CallData
51{
52    GradInBuffer<float[2]> grad_in1;
53    GradInBuffer<vector<float, 2>> grad_in2;
54    GradInBuffer<float2x2> grad_in3;
55}
56
57
58//TEST_INPUT: set call_data.grad_in1.wrapBuffer.buffer = ubuffer(data=[1.0 2.0 3.0 4.0], stride=4);
59//TEST_INPUT: set call_data.grad_in2.wrapBuffer.buffer = ubuffer(data=[5.0 6.0 7.0 8.0], stride=4);
60//TEST_INPUT: set call_data.grad_in3.wrapBuffer.buffer = ubuffer(data=[1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0], stride=4);
61ParameterBlock<CallData> call_data;
62
63
64//TEST_INPUT:ubuffer(data=[0.0 0.0 0.0 0.0 0.0 0.0 0.0], stride=4):out, name outputBuffer
65RWStructuredBuffer<float> outputBuffer;
66
67
68[shader("compute")]
69[numthreads(1, 1, 1)]
70void computeMain()
71{
72    float[2] data1 = call_data.grad_in1.wrapBuffer.buffer[0];
73    float[2] data2 = call_data.grad_in1.wrapBuffer.get(1);
74    outputBuffer[0] = data1[0];
75    outputBuffer[1] = data2[0];
76
77    vector<float, 2> data3 = call_data.grad_in2.wrapBuffer.buffer[0];
78    vector<float, 2> data4 = call_data.grad_in2.wrapBuffer.get(1);
79    outputBuffer[2] = data3[0];
80    outputBuffer[3] = data4[0];
81
82    float2x2 data5 = call_data.grad_in3.wrapBuffer.buffer[0];
83    float2x2 data6 = call_data.grad_in3.wrapBuffer.get(1);
84    outputBuffer[4] = data5[0][0];
85    outputBuffer[5] = data6[0][0];
86}