yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
ebe8ddefc
master
1// bit-field.slang 2 3//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUFFER):-vk -compute -output-using-type 4 5// Test direct SPIR-V emit on bit field operations. 6 7//TEST_INPUT:set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4) 8RWStructuredBuffer<uint> resultBuffer; 9 10enum Flag 11{ 12 AAA = 1, 13 BBB = 2, 14 CCC = 4, 15} 16struct Data 17{ 18 uint flags; 19 [mutating] void setFlag(Flag g, bool v) 20 { 21 const uint bit = uint(g) << 8; 22 if (v) flags |= bit; 23 else flags &= ~bit; 24 } 25 bool hasFlag(Flag g) 26 { 27 const uint bit = uint(g) << 8; 28 return (flags & bit) != 0; 29 } 30} 31 32//TEST_INPUT: set Uniforms.d = new Data{0}; 33cbuffer Uniforms 34{ 35 Data d; 36} 37 38// BUFFER: 1 39// BUFFER: 1 40// BUFFER: 1 41// BUFFER: 0 42 43[numthreads(1,1,1)] 44void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 45{ 46 Data d1 = d; 47 d1.setFlag(Flag.BBB, true); 48 d1.setFlag(Flag.AAA, true); 49 resultBuffer[0] = d1.hasFlag(Flag.AAA) ? 1 : 0; 50 resultBuffer[1] = d1.hasFlag(Flag.BBB) ? 1 : 0; 51 d1.setFlag(Flag.BBB, false); 52 resultBuffer[2] = d1.hasFlag(Flag.AAA) ? 1 : 0; 53 resultBuffer[3] = d1.hasFlag(Flag.BBB) ? 1 : 0; 54}