yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
2a5d5b323
master
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}