yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
66301ab90
master
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu 2 3// Default packing keeps all fields in one backing field when they fit 4// struct MixedSizes { uint8_t a:4; uint8_t b:4; uint16_t c:8; uint16_t d:8; } 5// All packed in single uint32_t backing: 6// bits 0-3: a (0xA) 7// bits 4-7: b (0xB) 8// bits 8-15: c (0xCD) 9// bits 16-23: d (0xEF) 10// Expected: 0x00EFCDBA (top 8 bits unused) 11 12// CHECK: EFCDBA 13 14//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer 15RWStructuredBuffer<uint> outputBuffer; 16 17struct MixedSizes { 18 uint8_t a : 4; // bits 0-3 19 uint8_t b : 4; // bits 4-7 20 uint16_t c : 8; // bits 8-15 21 uint16_t d : 8; // bits 16-23 22}; 23 24[numthreads(1, 1, 1)] 25void computeMain() 26{ 27 MixedSizes m; 28 m.a = 0xA; 29 m.b = 0xB; 30 m.c = 0xCD; 31 m.d = 0xEF; 32 33 // With default packing, all fields are in one backing field 34 outputBuffer[0] = *((uint*)&m) & 0xFFFFFF; // Mask to 24 bits 35} 36