================
@@ -172,6 +172,23 @@ Decl *SemaHLSL::ActOnStartBuffer(Scope *BufferScope, bool 
CBuffer,
   return Result;
 }
 
+static unsigned calculateLegacyCbufferFieldAlign(const ASTContext &Context,
+                                                 QualType T) {
+  // Arrays and Structs are always aligned to new buffer rows
+  if (T->isArrayType() || T->isStructureType())
+    return 16;
+
+  // Vectors are aligned to the type they contain
+  if (const VectorType *VT = T->getAs<VectorType>())
+    return calculateLegacyCbufferFieldAlign(Context, VT->getElementType());
----------------
tex3d wrote:

This test would have had no difference with the change you made.  It would have 
looked the same as two 64-bit values, with the same locations.  I think you'll 
need something like this:

```hlsl
struct S6 {
  float a;
  float2 b;
};

cbuffer CB6Pass {
  S6 s6p : packoffset(c0.x);
  float f6p : packoffset(c0.w);
}
```

https://github.com/llvm/llvm-project/pull/128086
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to