MTLLibrary.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using static Veldrid.MetalBindings.ObjectiveCRuntime;
  4. namespace Veldrid.MetalBindings
  5. {
  6. [StructLayout(LayoutKind.Sequential)]
  7. public struct MTLLibrary
  8. {
  9. public readonly IntPtr NativePtr;
  10. public MTLLibrary(IntPtr ptr) => NativePtr = ptr;
  11. public MTLFunction newFunctionWithName(string name)
  12. {
  13. NSString nameNSS = NSString.New(name);
  14. IntPtr function = IntPtr_objc_msgSend(NativePtr, sel_newFunctionWithName, nameNSS);
  15. release(nameNSS.NativePtr);
  16. return new MTLFunction(function);
  17. }
  18. public MTLFunction newFunctionWithNameConstantValues(string name, MTLFunctionConstantValues constantValues)
  19. {
  20. NSString nameNSS = NSString.New(name);
  21. IntPtr function = IntPtr_objc_msgSend(
  22. NativePtr,
  23. sel_newFunctionWithNameConstantValues,
  24. nameNSS.NativePtr,
  25. constantValues.NativePtr,
  26. out NSError error);
  27. release(nameNSS.NativePtr);
  28. if (function == IntPtr.Zero)
  29. {
  30. throw new Exception($"Failed to create MTLFunction: {error.localizedDescription}");
  31. }
  32. return new MTLFunction(function);
  33. }
  34. private static readonly Selector sel_newFunctionWithName = "newFunctionWithName:";
  35. private static readonly Selector sel_newFunctionWithNameConstantValues = "newFunctionWithName:constantValues:error:";
  36. }
  37. }