summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar lat9nq2021-03-21 01:25:45 -0400
committerGravatar lat9nq2021-03-21 01:25:45 -0400
commit538f097f97a5cbf350aecbdec4ed08f27693358c (patch)
tree55eeb81350f4a9f57b8349cad6d319f691786b42
parentMerge pull request #6054 from Morph1984/time-GetClockSnapshot (diff)
downloadyuzu-538f097f97a5cbf350aecbdec4ed08f27693358c.tar.gz
yuzu-538f097f97a5cbf350aecbdec4ed08f27693358c.tar.xz
yuzu-538f097f97a5cbf350aecbdec4ed08f27693358c.zip
gl_device: Block async shaders on AMD and Intel
Currently, the Windows versions of the Intel OpenGL driver and the AMD proprietary OpenGL driver do not properly support (or in fact degrade) when asynchronous shader compilation is enabled. This blocks specifically those drivers from using this feature. This affects AMDGPU-PRO on Linux, and AMD's and Intel's OpenGL drivers on Windows.
-rw-r--r--src/video_core/renderer_opengl/gl_device.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp
index 1ae5f1d62..ba59414a7 100644
--- a/src/video_core/renderer_opengl/gl_device.cpp
+++ b/src/video_core/renderer_opengl/gl_device.cpp
@@ -210,6 +210,12 @@ Device::Device() {
210 const bool is_amd = vendor == "ATI Technologies Inc."; 210 const bool is_amd = vendor == "ATI Technologies Inc.";
211 const bool is_intel = vendor == "Intel"; 211 const bool is_intel = vendor == "Intel";
212 212
213#ifdef __linux__
214 const bool is_linux = true;
215#else
216 const bool is_linux = false;
217#endif
218
213 bool disable_fast_buffer_sub_data = false; 219 bool disable_fast_buffer_sub_data = false;
214 if (is_nvidia && version == "4.6.0 NVIDIA 443.24") { 220 if (is_nvidia && version == "4.6.0 NVIDIA 443.24") {
215 LOG_WARNING( 221 LOG_WARNING(
@@ -249,7 +255,9 @@ Device::Device() {
249 GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 && 255 GLAD_GL_NV_gpu_program5 && GLAD_GL_NV_compute_program5 &&
250 GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2; 256 GLAD_GL_NV_transform_feedback && GLAD_GL_NV_transform_feedback2;
251 257
252 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue(); 258 // Blocks AMD and Intel OpenGL drivers on Windows from using asynchronous shader compilation.
259 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue() &&
260 !(is_amd || (is_intel && !is_linux));
253 use_driver_cache = is_nvidia; 261 use_driver_cache = is_nvidia;
254 262
255 LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi); 263 LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi);
@@ -261,6 +269,10 @@ Device::Device() {
261 if (Settings::values.use_assembly_shaders.GetValue() && !use_assembly_shaders) { 269 if (Settings::values.use_assembly_shaders.GetValue() && !use_assembly_shaders) {
262 LOG_ERROR(Render_OpenGL, "Assembly shaders enabled but not supported"); 270 LOG_ERROR(Render_OpenGL, "Assembly shaders enabled but not supported");
263 } 271 }
272
273 if (Settings::values.use_asynchronous_shaders.GetValue() && !use_asynchronous_shaders) {
274 LOG_WARNING(Render_OpenGL, "Asynchronous shader compilation enabled but not supported");
275 }
264} 276}
265 277
266Device::Device(std::nullptr_t) { 278Device::Device(std::nullptr_t) {