| // RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s -fnative-half-type -fsyntax-only -verify -verify-ignore-unexpected=warning |
| |
| struct S0 { |
| half a; |
| half b; |
| half c; |
| half d; |
| half e; |
| half f; |
| half g; |
| half h; |
| }; |
| |
| cbuffer CB0Pass { |
| S0 s0p : packoffset(c0.x); |
| float f0p : packoffset(c1.x); |
| } |
| |
| cbuffer CB0Fail { |
| S0 s0f : packoffset(c0.x); |
| float f0f : packoffset(c0.w); |
| // expected-error@-1 {{packoffset overlap between 'f0f', 's0f'}} |
| } |
| |
| struct S1 { |
| float a; |
| double b; |
| float c; |
| }; |
| |
| cbuffer CB1Pass { |
| S1 s1p : packoffset(c0.x); |
| float f1p : packoffset(c1.y); |
| } |
| |
| cbuffer CB1Fail { |
| S1 s1f : packoffset(c0.x); |
| float f1f : packoffset(c1.x); |
| // expected-error@-1 {{packoffset overlap between 'f1f', 's1f'}} |
| } |
| |
| struct S2 { |
| float3 a; |
| float2 b; |
| }; |
| |
| cbuffer CB2Pass { |
| S2 s2p : packoffset(c0.x); |
| float f2p : packoffset(c1.z); |
| } |
| |
| cbuffer CB2Fail { |
| S2 s2f : packoffset(c0.x); |
| float f2f : packoffset(c1.y); |
| // expected-error@-1 {{packoffset overlap between 'f2f', 's2f'}} |
| } |
| |
| struct S3 { |
| float3 a; |
| float b; |
| }; |
| |
| cbuffer CB3Pass { |
| S3 s3p : packoffset(c0.x); |
| float f3p : packoffset(c1.x); |
| } |
| |
| cbuffer CB3Fail { |
| S3 s3f : packoffset(c0.x); |
| float f3f : packoffset(c0.w); |
| // expected-error@-1 {{packoffset overlap between 'f3f', 's3f'}} |
| } |
| |
| struct S4 { |
| float2 a; |
| float2 b; |
| }; |
| |
| cbuffer CB4Pass { |
| S4 s4p : packoffset(c0.x); |
| float f4p : packoffset(c1.x); |
| } |
| |
| cbuffer CB4Fail { |
| S4 s4f : packoffset(c0.x); |
| float f4f : packoffset(c0.w); |
| // expected-error@-1 {{packoffset overlap between 'f4f', 's4f'}} |
| } |
| |
| struct S5 { |
| float a[3]; |
| }; |
| |
| cbuffer CB5Pass { |
| S5 s5p : packoffset(c0.x); |
| float f5p : packoffset(c2.y); |
| } |
| |
| cbuffer CB5Fail { |
| S5 s5f : packoffset(c0.x); |
| float f5f : packoffset(c2.x); |
| // expected-error@-1 {{packoffset overlap between 'f5f', 's5f'}} |
| } |
| |
| struct S6 { |
| float a; |
| float2 b; |
| }; |
| |
| cbuffer CB6Pass { |
| S6 s6p : packoffset(c0.x); |
| float f6p : packoffset(c0.w); |
| } |
| |
| cbuffer CB6Fail { |
| S6 s6f : packoffset(c0.x); |
| float f6f : packoffset(c0.y); |
| // expected-error@-1 {{packoffset overlap between 'f6f', 's6f'}} |
| } |