diff --git a/intern/cycles/blender/addon/enums.py b/intern/cycles/blender/addon/enums.py index 4b30f606de2..0ae97184e65 100644 --- a/intern/cycles/blender/addon/enums.py +++ b/intern/cycles/blender/addon/enums.py @@ -18,7 +18,11 @@ devices = ( ("CPU", "CPU", "Processor"), -("GPU", "GPU", "Graphics card (NVidia only)")) +("GPU", "GPU", "Graphics card")) + +gpu_type = ( +("CUDA", "CUDA", "NVidia only"), +("OPENCL", "OpenCL", "")) shading_systems = ( ("GPU_COMPATIBLE", "GPU Compatible", "Restricted shading system compatible with GPU rendering"), diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index ca38520d28f..5d90223032f 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -28,6 +28,9 @@ class CyclesRenderSettings(bpy.types.PropertyGroup): cls.device = EnumProperty(name="Device", description="Device to use for rendering", items=enums.devices, default="CPU") + + cls.gpu_type = EnumProperty(name="GPU Type", description="Processing system to use on the GPU", + items=enums.gpu_type, default="CUDA") cls.shading_system = EnumProperty(name="Shading System", description="Shading system to use for rendering", items=enums.shading_systems, default="GPU_COMPATIBLE") diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 001aacea3eb..ca6800e7fa0 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -522,8 +522,10 @@ def draw_device(self, context): if scene.render.engine == "CYCLES": cscene = scene.cycles - if 'cuda' in engine.available_devices(): + if ('cuda' or 'opencl') in engine.available_devices(): layout.prop(cscene, "device") + if cscene.device == 'GPU': + layout.prop(cscene, "gpu_type", expand=True) 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 40ec4838dad..0c447c0512e 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -202,10 +202,14 @@ bool BlenderSync::get_session_pause(BL::Scene b_scene, bool background) 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 */ - DeviceType dtype = (RNA_enum_get(&cscene, "device") == 1)? DEVICE_CUDA: DEVICE_CPU; + 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();