forked from bartvdbraak/blender
Cycles: Allow device_memory to be used directly
This is useful for when theres no host side memory attched to the buffer
This commit is contained in:
parent
9e566b06e3
commit
0f56f7a811
@ -120,6 +120,11 @@ public:
|
||||
void mem_alloc(device_memory& mem, MemoryType /*type*/)
|
||||
{
|
||||
mem.device_pointer = mem.data_pointer;
|
||||
|
||||
if(!mem.device_pointer) {
|
||||
mem.device_pointer = (device_ptr)malloc(mem.memory_size());
|
||||
}
|
||||
|
||||
mem.device_size = mem.memory_size();
|
||||
stats.mem_alloc(mem.device_size);
|
||||
}
|
||||
@ -144,6 +149,10 @@ public:
|
||||
void mem_free(device_memory& mem)
|
||||
{
|
||||
if(mem.device_pointer) {
|
||||
if(!mem.data_pointer) {
|
||||
free((void*)mem.device_pointer);
|
||||
}
|
||||
|
||||
mem.device_pointer = 0;
|
||||
stats.mem_free(mem.device_size);
|
||||
mem.device_size = 0;
|
||||
|
@ -505,7 +505,9 @@ public:
|
||||
|
||||
void mem_zero(device_memory& mem)
|
||||
{
|
||||
memset((void*)mem.data_pointer, 0, mem.memory_size());
|
||||
if(mem.data_pointer) {
|
||||
memset((void*)mem.data_pointer, 0, mem.memory_size());
|
||||
}
|
||||
|
||||
cuda_push_context();
|
||||
if(mem.device_pointer)
|
||||
|
@ -180,10 +180,27 @@ public:
|
||||
/* device pointer */
|
||||
device_ptr device_pointer;
|
||||
|
||||
protected:
|
||||
device_memory() {}
|
||||
device_memory()
|
||||
{
|
||||
data_type = device_type_traits<uchar>::data_type;
|
||||
data_elements = device_type_traits<uchar>::num_elements;
|
||||
data_pointer = 0;
|
||||
data_size = 0;
|
||||
device_size = 0;
|
||||
data_width = 0;
|
||||
data_height = 0;
|
||||
data_depth = 0;
|
||||
device_pointer = 0;
|
||||
}
|
||||
virtual ~device_memory() { assert(!device_pointer); }
|
||||
|
||||
void resize(size_t size)
|
||||
{
|
||||
data_size = size;
|
||||
data_width = size;
|
||||
}
|
||||
|
||||
protected:
|
||||
/* no copying */
|
||||
device_memory(const device_memory&);
|
||||
device_memory& operator = (const device_memory&);
|
||||
@ -198,16 +215,8 @@ public:
|
||||
{
|
||||
data_type = device_type_traits<T>::data_type;
|
||||
data_elements = device_type_traits<T>::num_elements;
|
||||
data_pointer = 0;
|
||||
data_size = 0;
|
||||
device_size = 0;
|
||||
data_width = 0;
|
||||
data_height = 0;
|
||||
data_depth = 0;
|
||||
|
||||
assert(data_elements > 0);
|
||||
|
||||
device_pointer = 0;
|
||||
}
|
||||
|
||||
virtual ~device_vector() {}
|
||||
@ -266,6 +275,7 @@ public:
|
||||
data_height = 0;
|
||||
data_depth = 0;
|
||||
data_size = 0;
|
||||
device_pointer = 0;
|
||||
}
|
||||
|
||||
size_t size()
|
||||
|
@ -311,7 +311,9 @@ void OpenCLDeviceBase::mem_copy_from(device_memory& mem, int y, int w, int h, in
|
||||
void OpenCLDeviceBase::mem_zero(device_memory& mem)
|
||||
{
|
||||
if(mem.device_pointer) {
|
||||
memset((void*)mem.data_pointer, 0, mem.memory_size());
|
||||
if(mem.data_pointer) {
|
||||
memset((void*)mem.data_pointer, 0, mem.memory_size());
|
||||
}
|
||||
mem_copy_to(mem);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user