[Bf-blender-cvs] [b576510] cycles_split_kernel: Cycles: Add functions to allocate kernel globals for split kernel
Mai Lavelle
noreply at git.blender.org
Thu Oct 27 20:22:35 CEST 2016
Commit: b5765104acf8e9d5a5726022ac2fd612aa937bc6
Author: Mai Lavelle
Date: Thu Oct 27 18:23:18 2016 +0200
Branches: cycles_split_kernel
https://developer.blender.org/rBb5765104acf8e9d5a5726022ac2fd612aa937bc6
Cycles: Add functions to allocate kernel globals for split kernel
CPU device needs to allocate and free thread specific data, these functions
are used to do that.
===================================================================
M intern/cycles/device/device.h
M intern/cycles/device/device_cpu.cpp
M intern/cycles/device/device_split_kernel.cpp
M intern/cycles/device/opencl/opencl_split.cpp
===================================================================
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 7857e5f..71e9a02 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -318,10 +318,14 @@ public:
return NULL;
}
- virtual size_t sizeof_KernelGlobals()
+ virtual void alloc_kernel_globals(device_memory& /*mem*/)
+ {
+ assert(!"not implemented for this device");
+ }
+
+ virtual void free_kernel_globals(device_memory& /*mem*/)
{
assert(!"not implemented for this device");
- return 0;
}
/* tasks */
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index e3f36ae..1955952 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -223,6 +223,8 @@ public:
task_pool.stop();
}
+ using Device::mem_alloc;
+
void mem_alloc(device_memory& mem, MemoryType /*type*/)
{
mem.device_pointer = mem.data_pointer;
@@ -422,7 +424,6 @@ public:
return;
}
- KernelGlobals kg = thread_kernel_globals_init();
RenderTile tile;
DeviceSplitKernel split_kernel(this);
@@ -444,8 +445,6 @@ public:
break;
}
}
-
- thread_kernel_globals_free(&kg);
}
void thread_film_convert(DeviceTask& task)
@@ -702,9 +701,17 @@ protected:
return kernel;
}
- virtual size_t sizeof_KernelGlobals()
+ virtual void alloc_kernel_globals(device_memory& mem)
+ {
+ mem_alloc(mem, sizeof(KernelGlobals));
+
+ KernelGlobals *kg = (KernelGlobals*)mem.device_pointer;
+ *kg = thread_kernel_globals_init();
+ }
+
+ virtual void free_kernel_globals(device_memory& mem)
{
- return sizeof(KernelGlobals);
+ thread_kernel_globals_free((KernelGlobals*)mem.device_pointer);
}
};
diff --git a/intern/cycles/device/device_split_kernel.cpp b/intern/cycles/device/device_split_kernel.cpp
index afbb01b..b9cec54 100644
--- a/intern/cycles/device/device_split_kernel.cpp
+++ b/intern/cycles/device/device_split_kernel.cpp
@@ -32,7 +32,7 @@ DeviceSplitKernel::DeviceSplitKernel(Device *device) : device(device)
DeviceSplitKernel::~DeviceSplitKernel()
{
- device->mem_free(kgbuffer);
+ device->free_kernel_globals(kgbuffer);
device->mem_free(split_data);
device->mem_free(ray_state);
device->mem_free(use_queues_flag);
@@ -177,7 +177,7 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task,
device->mem_alloc(queue_index, NUM_QUEUES * sizeof(int));
device->mem_alloc(use_queues_flag, sizeof(char));
- device->mem_alloc(kgbuffer, device->sizeof_KernelGlobals());
+ device->alloc_kernel_globals(kgbuffer);
ray_state.resize(num_global_elements);
device->mem_alloc(ray_state, MEM_READ_WRITE);
diff --git a/intern/cycles/device/opencl/opencl_split.cpp b/intern/cycles/device/opencl/opencl_split.cpp
index 4387b62..7f50968 100644
--- a/intern/cycles/device/opencl/opencl_split.cpp
+++ b/intern/cycles/device/opencl/opencl_split.cpp
@@ -82,8 +82,7 @@ public:
background = background_;
}
- /* Returns size of KernelGlobals structure associated with OpenCL. */
- size_t sizeof_KernelGlobals()
+ virtual void alloc_kernel_globals(device_memory& mem)
{
/* Copy dummy KernelGlobals related to OpenCL from kernel_globals.h to
* fetch its size.
@@ -100,7 +99,12 @@ public:
SplitParams split_param_data;
} KernelGlobals;
- return sizeof(KernelGlobals);
+ mem_alloc(mem, sizeof(KernelGlobals));
+ }
+
+ virtual void free_kernel_globals(device_memory& mem)
+ {
+ mem_free(mem);
}
string get_build_options(const DeviceRequestedFeatures& requested_features)
More information about the Bf-blender-cvs
mailing list