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:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-07-20 12:08:50 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-07-20 13:46:56 +0300
commit87328bde478ba77db4387530c39d21c62c2c0d20 (patch)
treeb3f289845d619ff79ca1f4dda9b881e2d36234d0 /intern/cycles/blender/addon/engine.py
parentbd28c25f9b9006608a86ee9f747c9bd433fa9ccc (diff)
Fix T45218: Crash when trying to open System in the User preferences
Fix T45381: Crash Blender 2.75 in Win7 x64 AMD card The issue is basically caused by graphics card driver which crashes when querying OpenCL platforms. This isn't something we can really solve from the CLEW side, because opencl.dll does exist in old driver and even has all the needed symbols, but first ever call to clGetPlatformIDs crashes. While rest of the blender works fine with those older ATI/AMD cards it's really needed to solve crashes of OpenCL device enumeration. Solution here is to force disable OpenCL platforms if we've detected that display card is using old ATI/AMD driver. It's not really proper solution so it's done in the python side where it's easy to do tweaks. Reasoning behind this change is: - If one uses really old driver it's likely because it's the latest one he/she can ever to install (because of discontinued support from AMD). - If old card is used it's likely to not have dedicated GPUs for rendering. - Even if there's a dedicated GPU device enumeration is likely to crash because of attempt to query OpenCL from the old card. There are still some tweaks needed likely, but this commit should make some of the configurations to work.
Diffstat (limited to 'intern/cycles/blender/addon/engine.py')
-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', '')))