From 66301ab9068c5705e5a2bcbf2eaadfb28e8bb084 Mon Sep 17 00:00:00 2001 From: Ellie Hermaszewska Date: Thu, 31 Jul 2025 15:23:13 +0800 Subject: msvc style bitfield packing (#7963) Closes https://github.com/shader-slang/slang/issues/3646 New tests rather than just adding another TEST line to existing tests so that we get the msvc- prefix in the output of slang-test --- tests/language-feature/bitfield/repr.slang | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/language-feature/bitfield/repr.slang (limited to 'tests/language-feature/bitfield/repr.slang') diff --git a/tests/language-feature/bitfield/repr.slang b/tests/language-feature/bitfield/repr.slang new file mode 100644 index 000000000..a199b23ff --- /dev/null +++ b/tests/language-feature/bitfield/repr.slang @@ -0,0 +1,36 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu + +// Default GCC/Clang style packs from LSB to MSB +// struct S { uint a:4; uint b:8; uint c:4; uint d:16; } +// Memory layout (32-bit): +// bits 0-3: a (0x5) +// bits 4-11: b (0xAB) +// bits 12-15: c (0xC) +// bits 16-31: d (0xDEF0) +// Expected: 0xDEF0CAB5 + +// CHECK: DEF0CAB5 + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +struct S { + uint a : 4; // bits 0-3 + uint b : 8; // bits 4-11 + uint c : 4; // bits 12-15 + uint d : 16; // bits 16-31 +}; + +[numthreads(1, 1, 1)] +void computeMain() +{ + S s; + s.a = 0x5; + s.b = 0xAB; + s.c = 0xC; + s.d = 0xDEF0; + + // Write the struct to memory and read it back as uint + outputBuffer[0] = *((uint*)&s); +} + -- cgit v1.2.3