From 7f748153c5e0068120e4ed029d7813340285a848 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Thu, 21 Apr 2016 14:41:30 -0700 Subject: [PATCH] Mac code for gpu memory. --- libraries/render/src/render/Task.h | 3 --- libraries/shared/src/GPUIdent.cpp | 27 ++++++++++++++++++++++++++- libraries/shared/src/SharedUtil.cpp | 1 - 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index 9e8274b802..300c0efd56 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -18,7 +18,6 @@ #include #include #include -#include #include "SettingHandle.h" @@ -180,8 +179,6 @@ public: // getter for qml integration, prefer the templated getter Q_INVOKABLE QObject* getConfig(const QString& name) { return QObject::findChild(name); } - Q_INVOKABLE uint getVRam() { return GPUIdent::getInstance()->getMemory(); } - Q_INVOKABLE QString getVCard() { return GPUIdent::getInstance()->getName(); } // getter for cpp (strictly typed), prefer this getter template typename T::Config* getConfig(std::string job = "") const { QString name = job.empty() ? QString() : QString(job.c_str()); // an empty string is not a null string diff --git a/libraries/shared/src/GPUIdent.cpp b/libraries/shared/src/GPUIdent.cpp index 92bb961400..957c4232ff 100644 --- a/libraries/shared/src/GPUIdent.cpp +++ b/libraries/shared/src/GPUIdent.cpp @@ -9,9 +9,13 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html #include + #ifdef Q_OS_WIN #include #include + +#elif defined(Q_OS_MAC) +#include #endif #include "SharedLogging.h" @@ -26,7 +30,28 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer) return this; } _isQueried = true; // Don't try again, even if not _isValid; -#ifdef Q_OS_WIN +#if (defined Q_OS_MAC) + GLuint cglDisplayMask = -1; // Iterate over all of them. + CGLRendererInfoObj rendererInfo; + GLint rendererInfoCount; + CGLError err = CGLQueryRendererInfo(cglDisplayMask, &rendererInfo, &rendererInfoCount); + GLint j, numRenderers = 0, deviceVRAM, bestVRAM = 0; + err = CGLQueryRendererInfo(cglDisplayMask, &rendererInfo, &numRenderers); + if (0 == err) { + // Iterate over all of them and use the figure for the one with the most VRAM, + // on the assumption that this is the one that will actually be used. + CGLDescribeRenderer(rendererInfo, 0, kCGLRPRendererCount, &numRenderers); + for (j = 0; j < numRenderers; j++) { + CGLDescribeRenderer(rendererInfo, j, kCGLRPVideoMemoryMegabytes, &deviceVRAM); + if (deviceVRAM > bestVRAM) { + bestVRAM = deviceVRAM; + } + } + } + _dedicatedMemoryMB = bestVRAM; + CGLDestroyRendererInfo(rendererInfo); + +#elif defined(Q_OS_WIN) // COM must be initialized already using CoInitialize. E.g., by the audio subsystem. CComPtr spLoc = NULL; HRESULT hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_SERVER, IID_IWbemLocator, (LPVOID *)&spLoc); diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index c116e99576..8f68e20222 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -26,7 +26,6 @@ #ifdef Q_OS_WIN #include "CPUIdent.h" #endif -#include "GPUIdent.h" #ifdef __APPLE__