MetalDevice.mm 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "pch.h"
  2. #include "MetalDevice.h"
  3. namespace unity
  4. {
  5. namespace webrtc
  6. {
  7. class FakeMetalDeviceImpl : public MetalDevice
  8. {
  9. public:
  10. FakeMetalDeviceImpl()
  11. : device_(MTLCreateSystemDefaultDevice())
  12. {
  13. }
  14. ~FakeMetalDeviceImpl() = default;
  15. id<MTLDevice> Device() override
  16. {
  17. return device_;
  18. }
  19. id<MTLCommandBuffer> CurrentCommandBuffer() override
  20. {
  21. return nullptr;
  22. }
  23. id<MTLCommandEncoder> CurrentCommandEncoder() override
  24. {
  25. return nullptr;
  26. }
  27. void EndCurrentCommandEncoder() override
  28. {}
  29. private:
  30. id<MTLDevice> device_;
  31. };
  32. class UnityMetalDeviceImpl : public MetalDevice
  33. {
  34. public:
  35. UnityMetalDeviceImpl(IUnityGraphicsMetal* graphics)
  36. : graphics_(graphics)
  37. {
  38. }
  39. ~UnityMetalDeviceImpl() = default;
  40. id<MTLDevice> Device() override
  41. {
  42. return graphics_->MetalDevice();
  43. }
  44. id<MTLCommandBuffer> CurrentCommandBuffer() override
  45. {
  46. return graphics_->CurrentCommandBuffer();
  47. }
  48. id<MTLCommandEncoder> CurrentCommandEncoder() override
  49. {
  50. return graphics_->CurrentCommandEncoder();
  51. }
  52. void EndCurrentCommandEncoder() override
  53. {
  54. graphics_->EndCurrentCommandEncoder();
  55. }
  56. private:
  57. IUnityGraphicsMetal* graphics_;
  58. };
  59. std::unique_ptr<MetalDevice> MetalDevice::Create(IUnityGraphicsMetal* device)
  60. {
  61. return std::make_unique<UnityMetalDeviceImpl>(device);
  62. }
  63. std::unique_ptr<MetalDevice> MetalDevice::CreateForTest()
  64. {
  65. return std::make_unique<FakeMetalDeviceImpl>();
  66. }
  67. }
  68. }