InteropArray.cs 957 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. using System.Runtime.InteropServices;
  4. namespace Veldrid.SPIRV
  5. {
  6. [StructLayout(LayoutKind.Sequential, Pack = 1)]
  7. internal unsafe struct InteropArray
  8. {
  9. public uint Count;
  10. public void* Data;
  11. public InteropArray(uint count, void* data)
  12. {
  13. Count = count;
  14. Data = data;
  15. }
  16. public ref T Ref<T>(int index)
  17. {
  18. if (index >= Count)
  19. {
  20. throw new ArgumentOutOfRangeException(nameof(index));
  21. }
  22. return ref Unsafe.AsRef<T>((byte*)Data + (index * Unsafe.SizeOf<T>()));
  23. }
  24. public ref T Ref<T>(uint index)
  25. {
  26. if (index >= Count)
  27. {
  28. throw new ArgumentOutOfRangeException(nameof(index));
  29. }
  30. return ref Unsafe.AsRef<T>((byte*)Data + (index * Unsafe.SizeOf<T>()));
  31. }
  32. }
  33. }