|
|
|
@ -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; |
|
|
|
|