diff --git a/Sources/HdSt/include/HdSt/renderDelegate.h b/Sources/HdSt/include/HdSt/renderDelegate.h index 13e4dbaeb..697e05af5 100644 --- a/Sources/HdSt/include/HdSt/renderDelegate.h +++ b/Sources/HdSt/include/HdSt/renderDelegate.h @@ -48,11 +48,6 @@ class HdStRenderDelegate final : public HdRenderDelegate { HDST_API void SetDrivers(HdDriverVector const &drivers) override; -#if defined(ARCH_OS_DARWIN) - HDST_API - bool GetHgiFromMetalDriver(HdDriver *hdDriver); -#endif // defined(ARCH_OS_DARWIN) - HDST_API HdRenderParam *GetRenderParam() const override; diff --git a/Sources/HdSt/renderDelegate.cpp b/Sources/HdSt/renderDelegate.cpp index c64a6ef04..c8a29efff 100644 --- a/Sources/HdSt/renderDelegate.cpp +++ b/Sources/HdSt/renderDelegate.cpp @@ -37,6 +37,7 @@ #include "Hgi/hgiImpl.h" #include "Hgi/tokens.h" +#include "HgiInterop/hgiInteropImpl.h" #include "Glf/diagnostic.h" #include "Hio/glslfx.h" @@ -213,8 +214,12 @@ void HdStRenderDelegate::SetDrivers(HdDriverVector const &drivers) break; } #if defined(ARCH_OS_DARWIN) - if (GetHgiFromMetalDriver(hdDriver)) { - break; + if (hdDriver->name == HgiTokens->renderDriver) { + Hgi *hgiMetal = HgiInterop::GetHgiFromMetalDriver(hdDriver->driver); + if (hgiMetal) { + _hgi = hgiMetal; + break; + } } #endif } diff --git a/Sources/HdSt/renderDelegate.mm b/Sources/HdSt/renderDelegate.mm deleted file mode 100644 index 281584dd3..000000000 --- a/Sources/HdSt/renderDelegate.mm +++ /dev/null @@ -1,23 +0,0 @@ -#include "pxr/pxrns.h" -#include "Arch/defines.h" - -#if defined(ARCH_OS_DARWIN) -# include "HdSt/renderDelegate.h" -# include "Hd/driver.h" -# include "HgiMetal/hgi.h" - -PXR_NAMESPACE_OPEN_SCOPE - -bool HdStRenderDelegate::GetHgiFromMetalDriver(HdDriver *hdDriver) -{ - if (hdDriver->name == HgiTokens->renderDriver && hdDriver->driver.IsHolding()) { - _hgi = hdDriver->driver.UncheckedGet(); - return true; - } - - return false; -} - -PXR_NAMESPACE_CLOSE_SCOPE - -#endif // defined(ARCH_OS_DARWIN) diff --git a/Sources/HgiInterop/hgiInterop.cpp b/Sources/HgiInterop/hgiInterop.cpp index d4646f9bc..e6d9d53aa 100644 --- a/Sources/HgiInterop/hgiInterop.cpp +++ b/Sources/HgiInterop/hgiInterop.cpp @@ -104,6 +104,18 @@ void HgiInterop::TransferToApp(Hgi *srcHgi, TF_CODING_ERROR("Unsupported source Hgi backend: %s", srcApi.GetText()); } +#if defined(ARCH_OS_DARWIN) +// static. +Hgi* HgiInterop::GetHgiFromMetalDriver(VtValue const &hdDriver) +{ + if (hdDriver.IsHolding()) { + return hdDriver.UncheckedGet(); + } + + return nullptr; +} +#endif // defined(ARCH_OS_DARWIN) + PXR_NAMESPACE_CLOSE_SCOPE #endif // !defined(__APPLE__) diff --git a/Sources/HgiInterop/hgiInterop.mm b/Sources/HgiInterop/hgiInterop.mm index 334bdbd8e..e826e702c 100644 --- a/Sources/HgiInterop/hgiInterop.mm +++ b/Sources/HgiInterop/hgiInterop.mm @@ -108,6 +108,18 @@ TF_CODING_ERROR("Unsupported source Hgi backend: %s", srcApi.GetText()); } +#if defined(ARCH_OS_DARWIN) +// static. +Hgi* HgiInterop::GetHgiFromMetalDriver(VtValue const &hdDriver) +{ + if (hdDriver.IsHolding()) { + return hdDriver.UncheckedGet(); + } + + return nullptr; +} +#endif // defined(ARCH_OS_DARWIN) + PXR_NAMESPACE_CLOSE_SCOPE #endif // defined(__APPLE__) diff --git a/Sources/HgiInterop/include/HgiInterop/hgiInteropImpl.h b/Sources/HgiInterop/include/HgiInterop/hgiInteropImpl.h index 89b67d6e2..b386c0039 100644 --- a/Sources/HgiInterop/include/HgiInterop/hgiInteropImpl.h +++ b/Sources/HgiInterop/include/HgiInterop/hgiInteropImpl.h @@ -76,6 +76,11 @@ class HgiInterop final { VtValue const &dstFramebuffer, GfVec4i const &dstRegion); +#if defined(ARCH_OS_DARWIN) + HGIINTEROP_API + static Hgi *GetHgiFromMetalDriver(VtValue const &hdDriver); +#endif // defined(PXR_METAL_SUPPORT_ENABLED) && PXR_METAL_SUPPORT_ENABLED + private: HgiInterop &operator=(const HgiInterop &) = delete; HgiInterop(const HgiInterop &) = delete;