summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/classes/ProjectSettings.xml2
-rw-r--r--main/main.cpp23
-rw-r--r--platform/windows/display_server_windows.cpp2
3 files changed, 24 insertions, 3 deletions
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 2517b6a47f..93e0ed5491 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -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.
diff --git a/main/main.cpp b/main/main.cpp
index e29905b363..7ca22d90ca 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -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.
diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp
index 56f15789e9..55a6c290f1 100644
--- a/platform/windows/display_server_windows.cpp
+++ b/platform/windows/display_server_windows.cpp
@@ -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;
}