yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
257733f32
master
1//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type 2//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type 3//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -output-using-type -shaderobj 4 5//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer 6RWStructuredBuffer<float> outputBuffer; 7 8typedef DifferentialPair<float> dpfloat; 9typedef DifferentialPair<float2> dpfloat2; 10typedef DifferentialPair<float3> dpfloat3; 11 12[BackwardDifferentiable] 13float diffExp(float x) 14{ 15 return exp(x); 16} 17 18[BackwardDifferentiable] 19float diffSin(float x) 20{ 21 return sin(x); 22} 23 24[numthreads(1, 1, 1)] 25void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) 26{ 27 { 28 dpfloat dpx = dpfloat(2.0, 1.0); 29 __bwd_diff(diffExp)(dpx, 1.0); 30 outputBuffer[0] = dpx.p; // Expect: 2 31 outputBuffer[1] = dpx.d; // Expect: 7.389056 32 } 33 34 { 35 dpfloat dpx = dpfloat(0.0, 1.0); 36 __bwd_diff(diffExp)(dpx, 1.0); 37 outputBuffer[2] = dpx.p; // Expect: 0.000000 38 outputBuffer[3] = dpx.d; // Expect: 1.000000 39 } 40 41 { 42 dpfloat dpx = dpfloat(float.getPi(), 1.0); 43 __bwd_diff(diffSin)(dpx, 1.0); 44 outputBuffer[4] = dpx.d; // Expect: -1.000000 45 } 46 47 { 48 dpfloat dpx = dpfloat(float.getPi() / 3.0, 1.0); 49 __bwd_diff(sincos)(dpx, 1.0, 0.0); 50 outputBuffer[5] = dpx.d; // Expect: 0.5 51 __bwd_diff(sincos)(dpx, 0.0, 1.0); 52 outputBuffer[6] = dpx.d; // Expect: -0.8660254 53 __bwd_diff(sincos)(dpx, 1.0, 1.0); 54 outputBuffer[7] = dpx.d; // Expect: -0.3660254 55 } 56}