2
0
Эх сурвалжийг харах

Remove 4 byte align on struct. (#3063)

Xiang Li 5 жил өмнө
parent
commit
3dfed82446

+ 1 - 1
tools/clang/include/clang/Basic/LangOptions.fixed.def

@@ -135,7 +135,7 @@ COMPATIBLE_LANGOPT(ModulesHideInternalLinkage, 1, 0, "hiding non-visible interna
 COMPATIBLE_LANGOPT(Optimize          , 1, 0, "__OPTIMIZE__ predefined macro")
 COMPATIBLE_LANGOPT(OptimizeSize      , 1, 0, "__OPTIMIZE_SIZE__ predefined macro")
 LANGOPT(Static            , 1, 0, "__STATIC__ predefined macro (as opposed to __DYNAMIC__)")
-VALUE_LANGOPT(PackStruct  , 32, 4,       // HLSL Change : change to 4 bytes align
+VALUE_LANGOPT(PackStruct  , 32, 0,
               "default struct packing maximum alignment")
 VALUE_LANGOPT(MaxTypeAlign  , 32, 0,
               "default maximum alignment for types")

+ 4 - 3
tools/clang/unittests/HLSL/PixTest.cpp

@@ -1985,8 +1985,9 @@ void main()
   VERIFY_ARE_EQUAL(1, Testables.OffsetAndSizes.size());
   VERIFY_ARE_EQUAL(4, Testables.OffsetAndSizes[0].countOfMembers);
   VERIFY_ARE_EQUAL(0, Testables.OffsetAndSizes[0].offset);
-  // 16+16 to place "thirtytwo" at its natural alignment:
-  VERIFY_ARE_EQUAL(32+16+16+64+32, Testables.OffsetAndSizes[0].size);
+  // 8 bytes align for uint64_t:
+  VERIFY_ARE_EQUAL(32 + 16 + 16 /*alignment for next field*/ + 32 + 32/*alignment for max align*/ + 64,
+                   Testables.OffsetAndSizes[0].size);
 
   VERIFY_ARE_EQUAL(4, Testables.AllocaWrites.size());
   ValidateAllocaWrite(Testables.AllocaWrites, 0, "b1");
@@ -2334,7 +2335,7 @@ void main()
   VERIFY_ARE_EQUAL(0, Testables.OffsetAndSizes[0].offset);
   constexpr uint32_t BigStructBitSize = 64 * 2;
   constexpr uint32_t EmbeddedStructBitSize = 32 * 5;
-  VERIFY_ARE_EQUAL(3 * 32 + EmbeddedStructBitSize + 64 + 16 +16/*alignment for next field*/ + BigStructBitSize*2 + 32, Testables.OffsetAndSizes[0].size);
+  VERIFY_ARE_EQUAL(3 * 32 + EmbeddedStructBitSize + 64 + 16 +16/*alignment for next field*/ + BigStructBitSize*2 + 32 + 32/*align to max align*/, Testables.OffsetAndSizes[0].size);
 }