diff --git a/intern/cycles/blender/addon/enums.py b/intern/cycles/blender/addon/enums.py index 0ae97184e65..4f0666cf1e8 100644 --- a/intern/cycles/blender/addon/enums.py +++ b/intern/cycles/blender/addon/enums.py @@ -22,7 +22,7 @@ devices = ( gpu_type = ( ("CUDA", "CUDA", "NVidia only"), -("OPENCL", "OpenCL", "")) +("OPENCL", "OpenCL (incomplete)", "")) shading_systems = ( ("GPU_COMPATIBLE", "GPU Compatible", "Restricted shading system compatible with GPU rendering"), diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index ca6800e7fa0..da99e4e23d6 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -522,10 +522,14 @@ def draw_device(self, context): if scene.render.engine == "CYCLES": cscene = scene.cycles - if ('cuda' or 'opencl') in engine.available_devices(): + available_devices = engine.available_devices() + available_cuda = 'cuda' in available_devices + available_opencl = 'opencl' in available_devices + + if available_cuda or available_opencl: layout.prop(cscene, "device") - if cscene.device == 'GPU': - layout.prop(cscene, "gpu_type", expand=True) + if cscene.device == 'GPU' and available_cuda and available_opencl: + layout.prop(cscene, "gpu_type") if cscene.device == 'CPU' and engine.with_osl(): layout.prop(cscene, "shading_system") diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 0c447c0512e..ea5d0a1a3c6 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -199,24 +199,34 @@ bool BlenderSync::get_session_pause(BL::Scene b_scene, bool background) return (background)? false: get_boolean(cscene, "preview_pause"); } +static bool device_type_available(vector& types, DeviceType dtype) +{ + foreach(DeviceType dt, types) + if(dt == dtype) + return true; + + return false; +} + SessionParams BlenderSync::get_session_params(BL::Scene b_scene, bool background) { SessionParams params; - DeviceType dtype; PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); /* device type */ - if ((RNA_enum_get(&cscene, "device")) == 0) - dtype = DEVICE_CPU; - else - dtype = ((RNA_enum_get(&cscene, "gpu_type")) == 0)? DEVICE_CUDA: DEVICE_OPENCL; - params.device_type = DEVICE_CPU; - vector types = Device::available_types(); - foreach(DeviceType dt, types) - if(dt == dtype) + if(RNA_enum_get(&cscene, "device") != 0) { + vector types = Device::available_types(); + DeviceType dtype = (RNA_enum_get(&cscene, "gpu_type") == 0)? DEVICE_CUDA: DEVICE_OPENCL; + + if(device_type_available(types, dtype)) params.device_type = dtype; + else if(device_type_available(types, DEVICE_OPENCL)) + params.device_type = DEVICE_OPENCL; + else if(device_type_available(types, DEVICE_CUDA)) + params.device_type = DEVICE_CUDA; + } /* Background */ params.background = background; diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index ed3aec21207..237033eff8b 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -357,8 +357,8 @@ __device float3 shader_holdout_eval(KernelGlobals *kg, ShaderData *sd) if(sd->svm_closure == CLOSURE_HOLDOUT_ID) return make_float3(1.0f, 1.0f, 1.0f); else - return make_float3(0.0f, 0.0f, 0.0f); #endif + return make_float3(0.0f, 0.0f, 0.0f); } } diff --git a/intern/cycles/util/util_opencl.c b/intern/cycles/util/util_opencl.c index b049a7b44ce..d0b7bb331a8 100755 --- a/intern/cycles/util/util_opencl.c +++ b/intern/cycles/util/util_opencl.c @@ -134,7 +134,7 @@ int clLibraryInit() #elif defined(__APPLE__) const char *path = "/Library/Frameworks/OpenCL.framework/OpenCL"; #else - const char *path = "libopencl.so"; + const char *path = "libOpenCL.so"; #endif int error = 0;