Can detect GPU and set combo default.

This commit is contained in:
NissimHadar 2019-04-02 11:57:55 -07:00
parent efd9a8935e
commit 0e0714c398
6 changed files with 171 additions and 24 deletions

View file

@ -9,6 +9,7 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "Nitpick.h"
#include "Platform.h"
#ifdef Q_OS_WIN
#include <windows.h>
@ -40,9 +41,15 @@ Nitpick::Nitpick(QWidget* parent) : QMainWindow(parent) {
setWindowTitle("Nitpick - " + nitpickVersion);
clientProfiles << "VR-High" << "Desktop-High" << "Desktop-Low" << "Mobile-Touch" << "VR-Standalone";
_ui.clientProfileComboBox->insertItems(0, clientProfiles);
_GPUVendors << "Nvidia" << "AMD";
_ui.clientProfileComboBox->insertItems(0, _GPUVendors);
QString gpuVendor = Platform::getGraphicsCardType().toUpper();
if (gpuVendor.contains("NVIDIA")) {
_ui.clientProfileComboBox->setCurrentIndex(0);
} else {
_ui.clientProfileComboBox->setCurrentIndex(1);
}
}
Nitpick::~Nitpick() {

View file

@ -111,7 +111,7 @@ private:
bool _isRunningFromCommandline{ false };
QStringList clientProfiles;
QStringList _GPUVendors;
};
#endif // hifi_Nitpick_h

View file

@ -0,0 +1,115 @@
//
// Platform.h
//
// Created by Nissim Hadar on 2 Apr 2019.
// Copyright 2013 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "Platform.h"
#include <vector>
#include <dxgi1_3.h>
#pragma comment(lib, "dxgi.lib")
QString Platform::getGraphicsCardType() {
#ifdef Q_OS_WIN
IDXGIFactory1* pFactory = nullptr;
HRESULT hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)(&pFactory));
if (hr != S_OK || pFactory == nullptr) {
return "Unable to create DXGI";
}
std::vector<int> validAdapterList;
using AdapterEntry = std::pair<std::pair<DXGI_ADAPTER_DESC1, LARGE_INTEGER>, std::vector<DXGI_OUTPUT_DESC>>;
std::vector<AdapterEntry> adapterToOutputs;
// Enumerate adapters and outputs
{
UINT adapterNum = 0;
IDXGIAdapter1* pAdapter = nullptr;
while (pFactory->EnumAdapters1(adapterNum, &pAdapter) != DXGI_ERROR_NOT_FOUND) {
// Found an adapter, get descriptor
DXGI_ADAPTER_DESC1 adapterDesc;
pAdapter->GetDesc1(&adapterDesc);
LARGE_INTEGER version;
hr = pAdapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &version);
std::wstring wDescription (adapterDesc.Description);
std::string description(wDescription.begin(), wDescription.end());
AdapterEntry adapterEntry;
adapterEntry.first.first = adapterDesc;
adapterEntry.first.second = version;
UINT outputNum = 0;
IDXGIOutput * pOutput;
bool hasOutputConnectedToDesktop = false;
while (pAdapter->EnumOutputs(outputNum, &pOutput) != DXGI_ERROR_NOT_FOUND) {
// FOund an output attached to the adapter, get descriptor
DXGI_OUTPUT_DESC outputDesc;
pOutput->GetDesc(&outputDesc);
adapterEntry.second.push_back(outputDesc);
std::wstring wDeviceName(outputDesc.DeviceName);
std::string deviceName(wDeviceName.begin(), wDeviceName.end());
hasOutputConnectedToDesktop |= (bool)outputDesc.AttachedToDesktop;
pOutput->Release();
outputNum++;
}
adapterToOutputs.push_back(adapterEntry);
// add this adapter to the valid list if has output
if (hasOutputConnectedToDesktop && !adapterEntry.second.empty()) {
validAdapterList.push_back(adapterNum);
}
pAdapter->Release();
adapterNum++;
}
}
pFactory->Release();
if (!validAdapterList.empty()) {
auto& adapterEntry = adapterToOutputs[validAdapterList.front()];
std::wstring wDescription(adapterEntry.first.first.Description);
std::string description(wDescription.begin(), wDescription.end());
return QString(description.c_str());
}
#elif defined Q_OS_MAC
FILE* stream = popen("system_profiler SPDisplaysDataType | grep Chipset", "r");
std::ostringstream hostStream;
while (!feof(stream) && !ferror(stream)) {
char buf[128];
int bytesRead = fread(buf, 1, 128, stream);
hostStream.write(buf, bytesRead);
}
QString result = QString::fromStdString(hostStream.str());
QStringList parts = result.split('\n');
for (int i = 0; i < parts.size(); ++i) {
if (parts[i].toLower().contains("radeon") || parts[i].toLower().contains("nvidia")) {
return parts[i];
}
}
// unkown graphics card
return "UNKNOWN";
#else
return QString("NO IMPLEMENTED");
#endif
return "";
}

View file

@ -0,0 +1,20 @@
//
// Platform.h
//
// Created by Nissim Hadar on 2 Apr 2019.
// Copyright 2013 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_Platform_h
#define hifi_Platform_h
#include <QString>
class Platform {
public:
static QString getGraphicsCardType();
};
#endif

View file

@ -60,5 +60,5 @@ const double R_Y = 0.212655f;
const double G_Y = 0.715158f;
const double B_Y = 0.072187f;
const QString nitpickVersion{ "v3.1.5" };
const QString nitpickVersion{ "v3.1.6" };
#endif // hifi_common_h

View file

@ -56,7 +56,7 @@
<property name="geometry">
<rect>
<x>70</x>
<y>40</y>
<y>120</y>
<width>220</width>
<height>40</height>
</rect>
@ -69,7 +69,7 @@
<property name="geometry">
<rect>
<x>70</x>
<y>180</y>
<y>200</y>
<width>220</width>
<height>40</height>
</rect>
@ -82,7 +82,7 @@
<property name="geometry">
<rect>
<x>320</x>
<y>180</y>
<y>200</y>
<width>220</width>
<height>40</height>
</rect>
@ -94,7 +94,7 @@
<widget class="QPushButton" name="createTestsOutlinePushbutton">
<property name="geometry">
<rect>
<x>210</x>
<x>320</x>
<y>120</y>
<width>220</width>
<height>40</height>
@ -108,7 +108,7 @@
<property name="geometry">
<rect>
<x>70</x>
<y>300</y>
<y>360</y>
<width>220</width>
<height>40</height>
</rect>
@ -121,7 +121,7 @@
<property name="geometry">
<rect>
<x>320</x>
<y>300</y>
<y>360</y>
<width>220</width>
<height>40</height>
</rect>
@ -134,7 +134,7 @@
<property name="geometry">
<rect>
<x>70</x>
<y>240</y>
<y>280</y>
<width>220</width>
<height>40</height>
</rect>
@ -147,7 +147,7 @@
<property name="geometry">
<rect>
<x>320</x>
<y>240</y>
<y>280</y>
<width>220</width>
<height>40</height>
</rect>
@ -156,16 +156,6 @@
<string>Create all testAuto scripts</string>
</property>
</widget>
<widget class="QComboBox" name="clientProfileComboBox">
<property name="geometry">
<rect>
<x>320</x>
<y>40</y>
<width>120</width>
<height>40</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
@ -927,14 +917,29 @@
<rect>
<x>330</x>
<y>190</y>
<width>181</width>
<height>51</height>
<width>180</width>
<height>50</height>
</rect>
</property>
<property name="text">
<string>Evaluate Test</string>
</property>
</widget>
<widget class="QComboBox" name="clientProfileComboBox">
<property name="geometry">
<rect>
<x>330</x>
<y>110</y>
<width>180</width>
<height>40</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">