yum-mirror/slang

Making it easier to work with shaders

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

Tim FoleyConvert more tests to use shader objects (#1659)2a5d5b323

master
1.2 KiB49 linesraw
1//TEST(compute):COMPARE_COMPUTE: -shaderobj
2//TEST(compute):COMPARE_COMPUTE:-cpu -shaderobj
3
4//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
5RWStructuredBuffer<float> outputBuffer;
6
7interface IVertexInterpolant
8{
9    float2 getUV();
10}
11
12interface IBRDFPattern
13{
14    __generic<TVertexInterpolant:IVertexInterpolant>
15    float evalPattern(TVertexInterpolant interpolants);
16}
17
18struct StandardVertexInterpolant : IVertexInterpolant
19{
20    float2 getUV() { return float2(0.5); }
21};
22
23struct MaterialPattern1 : IBRDFPattern
24{
25    float base;
26    __generic<TVertexInterpolant:IVertexInterpolant>
27    float evalPattern(TVertexInterpolant interpolants)
28    {
29        float rs = base + interpolants.getUV().x;
30        return rs;
31    }
32};
33
34__generic<TPattern : IBRDFPattern, TInterpolant: IVertexInterpolant>
35float test(TPattern pattern, TInterpolant vertInterps)
36{
37    float rs = pattern.evalPattern<TInterpolant>(vertInterps);    
38    return rs;
39}
40
41[numthreads(4, 1, 1)]
42void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
43{
44    StandardVertexInterpolant vertInterp;
45    MaterialPattern1 mp1;
46    mp1.base = 0.5;
47	float outVal = test<MaterialPattern1, StandardVertexInterpolant>(mp1, vertInterp);
48	outputBuffer[dispatchThreadID.x] = outVal;
49}