Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/tests/angle_system_info_tests_main.cpp
1693 views
1
//
2
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
3
// Use of this source code is governed by a BSD-style license that can be
4
// found in the LICENSE file.
5
//
6
// Simple unit test suite that prints out system info as JSON.
7
//
8
// Example output for a Windows/NV machine:
9
//
10
// {
11
// "activeGPUIndex": 0,
12
// "isOptimus": false,
13
// "isMacSwitchable": false,
14
// "machineManufacturer": "",
15
// "machineModelVersion": "",
16
// "gpus": [
17
// {
18
// "vendorId": 4318,
19
// "deviceId": 7040,
20
// "driverVendor": "NVIDIA Corporation",
21
// "driverVersion": "452.6.0.0",
22
// "driverDate": "",
23
// "detailedDriverVersion": {
24
// "major": 452,
25
// "minor": 6,
26
// "subMinor": 0,
27
// "patch": 0
28
// }
29
// }
30
// ]
31
// }
32
33
#include "gpu_info_util/SystemInfo.h"
34
35
#include <cstdlib>
36
37
#include <gtest/gtest.h>
38
39
#include <rapidjson/document.h>
40
#include <rapidjson/prettywriter.h>
41
#include <rapidjson/stringbuffer.h>
42
43
namespace js = rapidjson;
44
45
bool gFailedToFindGPU;
46
47
int main(int argc, char **argv)
48
{
49
angle::SystemInfo info;
50
51
bool useVulkan = false;
52
bool listTests = false;
53
54
for (int arg = 1; arg < argc; ++arg)
55
{
56
if (strcmp(argv[arg], "--vulkan") == 0)
57
{
58
useVulkan = true;
59
}
60
else if (strcmp(argv[arg], "--gtest_list_tests") == 0)
61
{
62
listTests = true;
63
}
64
}
65
66
if (listTests)
67
{
68
testing::InitGoogleTest(&argc, argv);
69
return RUN_ALL_TESTS();
70
}
71
72
if (useVulkan)
73
{
74
#if defined(ANGLE_ENABLE_VULKAN)
75
angle::GetSystemInfoVulkan(&info);
76
#else
77
printf("Vulkan not supported.\n");
78
return EXIT_FAILURE;
79
#endif // defined(ANGLE_ENABLE_VULKAN)
80
}
81
else
82
{
83
angle::GetSystemInfo(&info);
84
}
85
86
if (info.gpus.empty())
87
{
88
gFailedToFindGPU = true;
89
}
90
91
js::Document doc;
92
doc.SetObject();
93
94
js::Document::AllocatorType &allocator = doc.GetAllocator();
95
96
doc.AddMember("activeGPUIndex", info.activeGPUIndex, allocator);
97
doc.AddMember("isOptimus", info.isOptimus, allocator);
98
doc.AddMember("isMacSwitchable", info.isMacSwitchable, allocator);
99
100
js::Value machineManufacturer;
101
machineManufacturer.SetString(info.machineManufacturer.c_str(), allocator);
102
doc.AddMember("machineManufacturer", machineManufacturer, allocator);
103
104
js::Value machineModelVersion;
105
machineModelVersion.SetString(info.machineModelVersion.c_str(), allocator);
106
doc.AddMember("machineModelVersion", machineModelVersion, allocator);
107
108
js::Value gpus;
109
gpus.SetArray();
110
111
for (const angle::GPUDeviceInfo &gpu : info.gpus)
112
{
113
js::Value obj;
114
obj.SetObject();
115
116
obj.AddMember("vendorId", gpu.vendorId, allocator);
117
obj.AddMember("deviceId", gpu.deviceId, allocator);
118
119
js::Value driverVendor;
120
driverVendor.SetString(gpu.driverVendor.c_str(), allocator);
121
obj.AddMember("driverVendor", driverVendor, allocator);
122
123
js::Value driverVersion;
124
driverVersion.SetString(gpu.driverVersion.c_str(), allocator);
125
obj.AddMember("driverVersion", driverVersion, allocator);
126
127
js::Value driverDate;
128
driverDate.SetString(gpu.driverDate.c_str(), allocator);
129
obj.AddMember("driverDate", driverDate, allocator);
130
131
js::Value versionInfo;
132
versionInfo.SetObject();
133
versionInfo.AddMember("major", gpu.detailedDriverVersion.major, allocator);
134
versionInfo.AddMember("minor", gpu.detailedDriverVersion.minor, allocator);
135
versionInfo.AddMember("subMinor", gpu.detailedDriverVersion.subMinor, allocator);
136
versionInfo.AddMember("patch", gpu.detailedDriverVersion.patch, allocator);
137
obj.AddMember("detailedDriverVersion", versionInfo, allocator);
138
139
gpus.PushBack(obj, allocator);
140
}
141
142
doc.AddMember("gpus", gpus, allocator);
143
144
js::StringBuffer buffer;
145
js::PrettyWriter<js::StringBuffer> writer(buffer);
146
doc.Accept(writer);
147
148
const char *output = buffer.GetString();
149
printf("%s\n", output);
150
151
testing::InitGoogleTest(&argc, argv);
152
return RUN_ALL_TESTS();
153
}
154
155
TEST(ANGLE, SystemInfo)
156
{
157
if (gFailedToFindGPU)
158
{
159
FAIL() << "Failed to find GPU info.";
160
}
161
}
162