srg-layouts-structs.azsl 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. ShaderResourceGroupSemantic ExampleBinding { FrequencyId = 0; };
  2. ShaderResourceGroup ExampleSRG : ExampleBinding
  3. {
  4. struct Sab {
  5. float a; // Offset 0
  6. float2 b; // Offset 4
  7. };
  8. struct Sba {
  9. float2 b; // Offset 0
  10. float a; // Offset 8
  11. };
  12. struct Sabc {
  13. float a; // Offset 0
  14. float2 b; // Offset 4
  15. float3 c; // Offset 16
  16. };
  17. struct Sac {
  18. float a; // Offset 0
  19. float3 c; // Offset 4
  20. };
  21. struct S {
  22. float a; // Offset 0
  23. float4 b; // Offset 16
  24. };
  25. struct U {
  26. int32_t a; // Offset 0
  27. int64_t b; // Offset 4
  28. uint32_t c; // Offset 12
  29. uint64_t d; // Offset 16
  30. };
  31. // Note! dxc's SpirV generation has the following error:
  32. // fatal error: generated SPIR-V is invalid: Structure id 5 decorated as BufferBlock for variable
  33. // in Uniform storage class must follow relaxed storage buffer layout rules:
  34. // member 1 is an improperly straddling vector at offset 12
  35. struct T {
  36. // Dxc bug (below):
  37. // Having a float before the Sab struct below causes a layouting error in StructuredBuffer-s
  38. // float b;
  39. Sab ab; // Offset 0
  40. Sba ba; // Offset 16 (+16)
  41. Sabc abc; // Offset 32 (+16)
  42. Sac ac; // Offset 64 (+32)
  43. S s; // Offset 80 (+16)
  44. float a_float; // Offset 112 (+32)
  45. U u; // Offset 116/128 (+4/16)
  46. };
  47. T m_CB;
  48. StructuredBuffer<T> m_SB;
  49. };