|
|
@@ -202,13 +202,13 @@ Device::Device() {
|
|
|
LOG_ERROR(Render_OpenGL, "OpenGL 4.6 is not available");
|
|
|
throw std::runtime_error{"Insufficient version"};
|
|
|
}
|
|
|
- const std::string_view vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
|
|
|
+ vendor_name = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
|
|
|
const std::string_view version = reinterpret_cast<const char*>(glGetString(GL_VERSION));
|
|
|
const std::vector extensions = GetExtensions();
|
|
|
|
|
|
- const bool is_nvidia = vendor == "NVIDIA Corporation";
|
|
|
- const bool is_amd = vendor == "ATI Technologies Inc.";
|
|
|
- const bool is_intel = vendor == "Intel";
|
|
|
+ const bool is_nvidia = vendor_name == "NVIDIA Corporation";
|
|
|
+ const bool is_amd = vendor_name == "ATI Technologies Inc.";
|
|
|
+ const bool is_intel = vendor_name == "Intel";
|
|
|
|
|
|
#ifdef __unix__
|
|
|
const bool is_linux = true;
|
|
|
@@ -275,6 +275,56 @@ Device::Device() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+std::string Device::GetVendorName() const {
|
|
|
+ if (vendor_name == "NVIDIA Corporation") {
|
|
|
+ return "NVIDIA";
|
|
|
+ }
|
|
|
+ if (vendor_name == "ATI Technologies Inc.") {
|
|
|
+ return "AMD";
|
|
|
+ }
|
|
|
+ if (vendor_name == "Intel") {
|
|
|
+ // For Mesa, `Intel` is an overloaded vendor string that could mean crocus or iris.
|
|
|
+ // Simply return `INTEL` for those as well as the Windows driver.
|
|
|
+ return "INTEL";
|
|
|
+ }
|
|
|
+ if (vendor_name == "Intel Open Source Technology Center") {
|
|
|
+ return "I965";
|
|
|
+ }
|
|
|
+ if (vendor_name == "Mesa Project") {
|
|
|
+ return "I915";
|
|
|
+ }
|
|
|
+ if (vendor_name == "Mesa/X.org") {
|
|
|
+ // This vendor string is overloaded between llvmpipe, softpipe, and virgl, so just return
|
|
|
+ // MESA instead of one of those driver names.
|
|
|
+ return "MESA";
|
|
|
+ }
|
|
|
+ if (vendor_name == "AMD") {
|
|
|
+ return "RADEONSI";
|
|
|
+ }
|
|
|
+ if (vendor_name == "nouveau") {
|
|
|
+ return "NOUVEAU";
|
|
|
+ }
|
|
|
+ if (vendor_name == "X.Org") {
|
|
|
+ return "R600";
|
|
|
+ }
|
|
|
+ if (vendor_name == "Collabora Ltd") {
|
|
|
+ return "ZINK";
|
|
|
+ }
|
|
|
+ if (vendor_name == "Intel Corporation") {
|
|
|
+ return "OPENSWR";
|
|
|
+ }
|
|
|
+ if (vendor_name == "Microsoft Corporation") {
|
|
|
+ return "D3D12";
|
|
|
+ }
|
|
|
+ if (vendor_name == "NVIDIA") {
|
|
|
+ // Mesa's tegra driver reports `NVIDIA`. Only present in this list because the default
|
|
|
+ // strategy would have returned `NVIDIA` here for this driver, the same result as the
|
|
|
+ // proprietary driver.
|
|
|
+ return "TEGRA";
|
|
|
+ }
|
|
|
+ return vendor_name;
|
|
|
+}
|
|
|
+
|
|
|
Device::Device(std::nullptr_t) {
|
|
|
max_uniform_buffers.fill(std::numeric_limits<u32>::max());
|
|
|
uniform_buffer_alignment = 4;
|