forked from suyu/suyu
Merge pull request #11216 from lat9nq/no-mesa-astc
gl_device: Detect Mesa to disable their ASTC
This commit is contained in:
commit
85e3575496
1 changed files with 42 additions and 1 deletions
|
@ -106,6 +106,43 @@ bool IsASTCSupported() {
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool HasSlowSoftwareAstc(std::string_view vendor_name, std::string_view renderer) {
|
||||
// ifdef for Unix reduces string comparisons for non-Windows drivers, and Intel
|
||||
#ifdef YUZU_UNIX
|
||||
// Sorted vaguely by how likely a vendor is to appear
|
||||
if (vendor_name == "AMD") {
|
||||
// RadeonSI
|
||||
return true;
|
||||
}
|
||||
if (vendor_name == "Intel") {
|
||||
// Must be inside YUZU_UNIX ifdef as the Windows driver uses the same vendor string
|
||||
// iris, crocus
|
||||
const bool is_intel_dg = (renderer.find("DG") != std::string_view::npos);
|
||||
return is_intel_dg;
|
||||
}
|
||||
if (vendor_name == "nouveau") {
|
||||
return true;
|
||||
}
|
||||
if (vendor_name == "X.Org") {
|
||||
// R600
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
if (vendor_name == "Collabora Ltd") {
|
||||
// Zink
|
||||
return true;
|
||||
}
|
||||
if (vendor_name == "Microsoft Corporation") {
|
||||
// d3d12
|
||||
return true;
|
||||
}
|
||||
if (vendor_name == "Mesa/X.org") {
|
||||
// llvmpipe, softpipe, virgl
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
[[nodiscard]] bool IsDebugToolAttached(std::span<const std::string_view> extensions) {
|
||||
const bool nsight = std::getenv("NVTX_INJECTION64_PATH") || std::getenv("NSIGHT_LAUNCHED");
|
||||
return nsight || HasExtension(extensions, "GL_EXT_debug_tool") ||
|
||||
|
@ -120,12 +157,16 @@ Device::Device(Core::Frontend::EmuWindow& emu_window) {
|
|||
}
|
||||
vendor_name = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
|
||||
const std::string_view version = reinterpret_cast<const char*>(glGetString(GL_VERSION));
|
||||
const std::string_view renderer = reinterpret_cast<const char*>(glGetString(GL_RENDERER));
|
||||
const std::vector extensions = GetExtensions();
|
||||
|
||||
const bool is_nvidia = vendor_name == "NVIDIA Corporation";
|
||||
const bool is_amd = vendor_name == "ATI Technologies Inc.";
|
||||
const bool is_intel = vendor_name == "Intel";
|
||||
|
||||
const bool has_slow_software_astc =
|
||||
!is_nvidia && !is_amd && HasSlowSoftwareAstc(vendor_name, renderer);
|
||||
|
||||
#ifdef __unix__
|
||||
constexpr bool is_linux = true;
|
||||
#else
|
||||
|
@ -152,7 +193,7 @@ Device::Device(Core::Frontend::EmuWindow& emu_window) {
|
|||
has_vertex_viewport_layer = GLAD_GL_ARB_shader_viewport_layer_array;
|
||||
has_image_load_formatted = HasExtension(extensions, "GL_EXT_shader_image_load_formatted");
|
||||
has_texture_shadow_lod = HasExtension(extensions, "GL_EXT_texture_shadow_lod");
|
||||
has_astc = IsASTCSupported();
|
||||
has_astc = !has_slow_software_astc && IsASTCSupported();
|
||||
has_variable_aoffi = TestVariableAoffi();
|
||||
has_component_indexing_bug = is_amd;
|
||||
has_precise_bug = TestPreciseBug();
|
||||
|
|
Loading…
Reference in a new issue