yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
712ce653d
master
1//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj 2//TEST(compute,vulkan):COMPARE_COMPUTE_EX:-vk -slang -compute -shaderobj 3 4// Confirm that a generic method marked `[mutating]` 5// produces an `inout` parameter for `this`. 6 7interface IGenerator 8{ 9 [mutating] int generate(); 10} 11 12struct SimpleGenerator : IGenerator 13{ 14 int state = 0; 15 16 [mutating] int generate() { return state++; } 17} 18 19 20struct Reducer 21{ 22 int state = 0; 23 [mutating] void update<S : IGenerator>(inout S g) 24 { 25 state = (state << 8) | state; 26 state = state + g.generate(); 27 } 28} 29 30int test(int val) 31{ 32 SimpleGenerator g = { 0 }; 33 Reducer r = { val+1 }; 34 35 r.update(g); 36 r.update(g); 37 38 return r.state; 39} 40 41//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out, name outputBuffer 42RWStructuredBuffer<int> outputBuffer; 43 44[numthreads(4, 1, 1)] 45void computeMain(int3 dispatchThreadID : SV_DispatchThreadID) 46{ 47 int tid = dispatchThreadID.x; 48 int val = test(tid); 49 outputBuffer[tid] = val; 50}