[Bf-blender-cvs] [55d28e604e7] master: Cycles: Proper fix for recent OpenCL image crash

Mai Lavelle noreply at git.blender.org
Wed Aug 9 10:28:36 CEST 2017


Commit: 55d28e604e7cd8bcac0ebb8dc8e27e07b58862a3
Author: Mai Lavelle
Date:   Wed Aug 9 04:24:26 2017 -0400
Branches: master
https://developer.blender.org/rB55d28e604e7cd8bcac0ebb8dc8e27e07b58862a3

Cycles: Proper fix for recent OpenCL image crash

Problem was that some code checks to see if device_pointer is null or
not and the new allocator wasn't even setting the pointer to anything
as it tracks memory location separately. Setting the pointer to non
null keeps all users of device_pointer happy.

===================================================================

M	intern/cycles/device/opencl/opencl_base.cpp

===================================================================

diff --git a/intern/cycles/device/opencl/opencl_base.cpp b/intern/cycles/device/opencl/opencl_base.cpp
index aa22086be29..7bdf81462b8 100644
--- a/intern/cycles/device/opencl/opencl_base.cpp
+++ b/intern/cycles/device/opencl/opencl_base.cpp
@@ -519,20 +519,26 @@ void OpenCLDeviceBase::tex_alloc(const char *name,
 	        << string_human_readable_size(mem.memory_size()) << ")";
 
 	memory_manager.alloc(name, mem);
+	/* Set the pointer to non-null to keep code that inspects its value from thinking its unallocated. */
+	mem.device_pointer = 1;
 	textures[name] = Texture(&mem, interpolation, extension);
 	textures_need_update = true;
 }
 
 void OpenCLDeviceBase::tex_free(device_memory& mem)
 {
-	if(memory_manager.free(mem)) {
-		textures_need_update = true;
-	}
+	if(mem.device_pointer) {
+		mem.device_pointer = 0;
 
-	foreach(TexturesMap::value_type& value, textures) {
-		if(value.second.mem == &mem) {
-			textures.erase(value.first);
-			break;
+		if(memory_manager.free(mem)) {
+			textures_need_update = true;
+		}
+
+		foreach(TexturesMap::value_type& value, textures) {
+			if(value.second.mem == &mem) {
+				textures.erase(value.first);
+				break;
+			}
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list