cbuffer_alignment_16.hlsl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // RUN: %dxc -T lib_6_3 %s | FileCheck %s
  2. // CHECK: ; Buffer Definitions:
  3. // CHECK: ;
  4. // CHECK: ; cbuffer cbuf
  5. // CHECK: ; {
  6. // CHECK: ;
  7. // CHECK: ; struct cbuf
  8. // CHECK: ; {
  9. // CHECK: ;
  10. // CHECK: ; struct struct.Agg
  11. // CHECK: ; {
  12. // CHECK: ;
  13. // CHECK: ; struct struct.Value
  14. // CHECK: ; {
  15. // CHECK: ;
  16. // CHECK: ; uint v; ; Offset: 0
  17. // CHECK: ;
  18. // CHECK: ; } value[1];; ; Offset: 0
  19. // CHECK: ;
  20. // CHECK: ; min16ui fodder; ; Offset: 4
  21. // CHECK: ;
  22. // CHECK: ; } aggie; ; Offset: 0
  23. // CHECK: ;
  24. // CHECK: ;
  25. // CHECK: ; } cbuf; ; Offset: 0 Size: 8
  26. // CHECK: ;
  27. // CHECK: ; }
  28. // Test Cbuffer validation likely to cause mistaken overlaps
  29. struct Value { uint v; }; // This may be stripped because it has nothing below 32 bits
  30. struct Agg {
  31. Value value[1];
  32. min16uint fodder; // This will cause this struct to be preserved
  33. };
  34. cbuffer cbuf : register(b1)
  35. {
  36. Agg aggie;
  37. }
  38. RWBuffer<int> Out : register(u0);
  39. [shader("raygeneration")]
  40. void main()
  41. {
  42. Out[0] = aggie.value[0].v;
  43. }