Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intern/cycles/blender/addon/engine.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py
index 4187e2381ac..db81cbbcd9b 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -17,11 +17,55 @@
# <pep8 compliant>
+def _is_using_buggy_driver():
+ import bgl
+ # We need to be conservative here because in multi-GPU systems display card
+ # might be quite old, but others one might be just good.
+ #
+ # So We shouldn't disable possible good dedicated cards just because display
+ # card seems weak. And instead we only blacklist configurations which are
+ # proven to cause problems.
+ if bgl.glGetString(bgl.GL_VENDOR) == "ATI Technologies Inc.":
+ import re
+ version = bgl.glGetString(bgl.GL_VERSION)
+ if version.endswith("Compatibility Profile Context"):
+ # Old HD 4xxx and 5xxx series drivers did not have driver version
+ # in the version string, but thsoe cards do not quite work and
+ # cusing crashes.
+ return True
+ regex = re.compile(".*Compatibility Profile Context ([0-9]+(\.[0-9]+)+)$")
+ if not regex.match(version):
+ # Skip cards like FireGL
+ return False
+ version = regex.sub("\\1", version).split('.')
+ return int(version[0]) == 8
+ return False
+
+
+def _workaround_buggy_drivers():
+ if _is_using_buggy_driver():
+ import os
+ print("Cycles: OpenGL driver known to be buggy, disabling OpenCL platform.")
+ os.environ["CYCLES_OPENCL_TEST"] = "NONE"
+
def init():
import bpy
import _cycles
import os.path
+ # Workaroud posibly buggy legacy drivers which crashes on the OpenCL
+ # device enumeration.
+ #
+ # This checks are not really correct because they might still fail
+ # in the case of multiple GPUs. However, currently buggy drivers
+ # are really old and likely to be used in single GPU systems only
+ # anyway.
+ #
+ # Can't do it in the background mode, so we hope OpenCL is no enabled
+ # in the user preferences.
+ if not bpy.app.background:
+ _workaround_buggy_drivers()
+
path = os.path.dirname(__file__)
user_path = os.path.dirname(os.path.abspath(bpy.utils.user_resource('CONFIG', '')))