[clang] [HLSL] support packoffset in clang codeGen (PR #91999)
Xiang Li via cfe-commits
cfe-commits at lists.llvm.org
Thu May 16 15:00:04 PDT 2024
python3kgae wrote:
> > Could you explain more about can't put any vectors or matrices into the cbuffer structure type?
>
> Consider this example (regardless of packoffset):
>
> ```hlsl
> cbuffer {
> float F;
> float2 V;
> }
> ```
>
> The layout for this is basically:
>
> ```c
> struct {
> float F;
> float Vx; // v.x
> float Vy; // v.y
> };
> ```
>
> These elements are all packed.
>
> If you translate this to an IR struct you get something like:
>
> ```llvm
> type { float, <2 x float>}
> ```
>
> The data layout will insert 4-bytes of padding between the float and the vector because the vector needs to be properly aligned.
This PR will not change this.
The padding will only be added when required.
```hlsl
cbuffer {
float F;
float2 V;
}
```
will still got
```llvm
type { float, <2 x float>}
```
But
```hlsl
cbuffer {
float3 F;
float2 V;
}
```
will got padding, because it crossed 4dword.
```llvm
type { <3 x float>, [4 x i8], <2 x float>}
```
https://github.com/llvm/llvm-project/pull/91999
More information about the cfe-commits
mailing list