Merge pull request #84568 from bruvzg/gl_blocklist

[Windows] Add some AMD GPUs to the OpenGL blocklist.
This commit is contained in:
Rémi Verschelde 2023-11-09 20:04:21 +01:00
commit a49b932bdb
No known key found for this signature in database
GPG Key ID: C3336907360768E1
3 changed files with 24 additions and 3 deletions

View File

@ -2401,7 +2401,7 @@
If [code]true[/code], the compatibility renderer will fall back to native OpenGL if ANGLE over Metal is not supported.
[b]Note:[/b] This setting is implemented only on macOS.
</member>
<member name="rendering/gl_compatibility/force_angle_on_devices" type="Array" setter="" getter="" default="[]">
<member name="rendering/gl_compatibility/force_angle_on_devices" type="Array" setter="" getter="">
An [Array] of devices which should always use the ANGLE renderer.
Each entry is a [Dictionary] with the following keys: [code]vendor[/code] and [code]name[/code]. [code]name[/code] can be set to [code]*[/code] to add all devices with the specified [code]vendor[/code].
[b]Note:[/b] This setting is implemented only on Windows.

View File

@ -1776,7 +1776,28 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
GLOBAL_DEF_RST("rendering/gl_compatibility/fallback_to_native", true);
GLOBAL_DEF_RST("rendering/gl_compatibility/fallback_to_gles", true);
GLOBAL_DEF_RST(PropertyInfo(Variant::ARRAY, "rendering/gl_compatibility/force_angle_on_devices", PROPERTY_HINT_ARRAY_TYPE, vformat("%s/%s:%s", Variant::DICTIONARY, PROPERTY_HINT_NONE, String())), Array());
Array device_blocklist;
#define BLOCK_DEVICE(m_vendor, m_name) \
{ \
Dictionary device; \
device["vendor"] = m_vendor; \
device["name"] = m_name; \
device_blocklist.push_back(device); \
}
// AMD GPUs.
BLOCK_DEVICE("ATI", "AMD Radeon(TM) R2 Graphics");
BLOCK_DEVICE("ATI", "AMD Radeon(TM) R3 Graphics");
BLOCK_DEVICE("ATI", "AMD Radeon HD 8400 / R3 Series");
BLOCK_DEVICE("ATI", "AMD Radeon R5 M200 Series");
BLOCK_DEVICE("ATI", "AMD Radeon R5 M230 Series");
BLOCK_DEVICE("ATI", "AMD Radeon R5 M255");
BLOCK_DEVICE("AMD", "AMD Radeon (TM) R5 M330");
#undef BLOCK_DEVICE
GLOBAL_DEF_RST_NOVAL(PropertyInfo(Variant::ARRAY, "rendering/gl_compatibility/force_angle_on_devices", PROPERTY_HINT_ARRAY_TYPE, vformat("%s/%s:%s", Variant::DICTIONARY, PROPERTY_HINT_NONE, String())), device_blocklist);
}
// Start with RenderingDevice-based backends. Should be included if any RD driver present.

View File

@ -4658,7 +4658,7 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
Array device_list = GLOBAL_GET("rendering/gl_compatibility/force_angle_on_devices");
for (int i = 0; i < device_list.size(); i++) {
const Dictionary &device = device_list[i];
if (device.has("vendor") && device.has("name") && device["vendor"].operator String().to_upper() == gl_info["vendor"].operator String().to_upper() && (device["name"] == "*" || device["name"].operator String().to_upper() == gl_info["name"].operator String().to_upper())) {
if (device.has("vendor") && device.has("name") && gl_info["vendor"].operator String().to_upper().contains(device["vendor"].operator String().to_upper()) && (device["name"] == "*" || gl_info["name"].operator String().to_upper().contains(device["name"].operator String().to_upper()))) {
force_angle = true;
break;
}