diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-10-25 11:13:35 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-10-25 11:13:35 +0300 |
commit | 1e107fa5143ad340176b1a84ceb43c8b00532eca (patch) | |
tree | 58bec6266e0f211d7ef7cd4e55af7fb59aa8c3da /intern/cycles/device | |
parent | 8dab90915f37b01e7d0da59d06cadad23330897c (diff) | |
parent | 83877632a37af921d94811f47798c65520974a92 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern/cycles/device')
-rw-r--r-- | intern/cycles/device/device_memory.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/device/device_memory.h | 5 | ||||
-rw-r--r-- | intern/cycles/device/device_multi.cpp | 12 | ||||
-rw-r--r-- | intern/cycles/device/device_network.h | 2 | ||||
-rw-r--r-- | intern/cycles/device/opencl/opencl_base.cpp | 4 |
5 files changed, 15 insertions, 10 deletions
diff --git a/intern/cycles/device/device_memory.cpp b/intern/cycles/device/device_memory.cpp index 9f4f60e7531..9c67345f39e 100644 --- a/intern/cycles/device/device_memory.cpp +++ b/intern/cycles/device/device_memory.cpp @@ -85,7 +85,6 @@ void device_memory::device_free() void device_memory::device_copy_to() { - assert(type != MEM_PIXELS && type != MEM_WRITE_ONLY); if(data_size) { device->mem_copy_to(*this); } @@ -99,7 +98,6 @@ void device_memory::device_copy_from(int y, int w, int h, int elem) void device_memory::device_zero() { - assert(type != MEM_PIXELS && type != MEM_WRITE_ONLY); if(data_size) { device->mem_zero(*this); } diff --git a/intern/cycles/device/device_memory.h b/intern/cycles/device/device_memory.h index e6b2d059ef3..6bef6a9d5cc 100644 --- a/intern/cycles/device/device_memory.h +++ b/intern/cycles/device/device_memory.h @@ -33,7 +33,6 @@ class Device; enum MemoryType { MEM_READ_ONLY, - MEM_WRITE_ONLY, MEM_READ_WRITE, MEM_TEXTURE, MEM_PIXELS @@ -297,13 +296,13 @@ public: device_free(); host_free(data_pointer, sizeof(T)*data_size); data_pointer = host_alloc(sizeof(T)*new_size); + assert(device_pointer == 0); } data_size = new_size; data_width = width; data_height = height; data_depth = depth; - assert(device_pointer == 0); return get_data(); } @@ -325,13 +324,13 @@ public: device_free(); host_free(data_pointer, sizeof(T)*data_size); data_pointer = new_ptr; + assert(device_pointer == 0); } data_size = new_size; data_width = width; data_height = height; data_depth = depth; - assert(device_pointer == 0); return get_data(); } diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp index 298105af50a..16238c14aa0 100644 --- a/intern/cycles/device/device_multi.cpp +++ b/intern/cycles/device/device_multi.cpp @@ -113,6 +113,7 @@ public: foreach(SubDevice& sub, devices) { mem.device = sub.device; mem.device_pointer = 0; + mem.device_size = 0; sub.device->mem_alloc(mem); sub.ptr_map[key] = mem.device_pointer; @@ -120,16 +121,19 @@ public: mem.device = this; mem.device_pointer = key; + stats.mem_alloc(mem.device_size); } void mem_copy_to(device_memory& mem) { device_ptr existing_key = mem.device_pointer; device_ptr key = (existing_key)? existing_key: unique_key++; + size_t existing_size = mem.device_size; foreach(SubDevice& sub, devices) { mem.device = sub.device; mem.device_pointer = (existing_key)? sub.ptr_map[existing_key]: 0; + mem.device_size = existing_size; sub.device->mem_copy_to(mem); sub.ptr_map[key] = mem.device_pointer; @@ -137,6 +141,7 @@ public: mem.device = this; mem.device_pointer = key; + stats.mem_alloc(mem.device_size - existing_size); } void mem_copy_from(device_memory& mem, int y, int w, int h, int elem) @@ -163,10 +168,12 @@ public: { device_ptr existing_key = mem.device_pointer; device_ptr key = (existing_key)? existing_key: unique_key++; + size_t existing_size = mem.device_size; foreach(SubDevice& sub, devices) { mem.device = sub.device; mem.device_pointer = (existing_key)? sub.ptr_map[existing_key]: 0; + mem.device_size = existing_size; sub.device->mem_zero(mem); sub.ptr_map[key] = mem.device_pointer; @@ -174,15 +181,18 @@ public: mem.device = this; mem.device_pointer = key; + stats.mem_alloc(mem.device_size - existing_size); } void mem_free(device_memory& mem) { device_ptr key = mem.device_pointer; + size_t existing_size = mem.device_size; foreach(SubDevice& sub, devices) { mem.device = sub.device; mem.device_pointer = sub.ptr_map[key]; + mem.device_size = existing_size; sub.device->mem_free(mem); sub.ptr_map.erase(sub.ptr_map.find(key)); @@ -190,6 +200,8 @@ public: mem.device = this; mem.device_pointer = 0; + mem.device_size = 0; + stats.mem_free(existing_size); } void const_copy_to(const char *name, void *host, size_t size) diff --git a/intern/cycles/device/device_network.h b/intern/cycles/device/device_network.h index a38d962c0af..b2be7e23147 100644 --- a/intern/cycles/device/device_network.h +++ b/intern/cycles/device/device_network.h @@ -282,7 +282,7 @@ public: /* Can't transfer OpenGL texture over network. */ if(mem.type == MEM_PIXELS) { - mem.type = MEM_WRITE_ONLY; + mem.type = MEM_READ_WRITE; } } diff --git a/intern/cycles/device/opencl/opencl_base.cpp b/intern/cycles/device/opencl/opencl_base.cpp index 5e9debc3b17..e6c0961afd7 100644 --- a/intern/cycles/device/opencl/opencl_base.cpp +++ b/intern/cycles/device/opencl/opencl_base.cpp @@ -319,8 +319,6 @@ void OpenCLDeviceBase::mem_alloc(device_memory& mem) if(mem.type == MEM_READ_ONLY || mem.type == MEM_TEXTURE) mem_flag = CL_MEM_READ_ONLY; - else if(mem.type == MEM_WRITE_ONLY || mem.type == MEM_PIXELS) - mem_flag = CL_MEM_WRITE_ONLY; else mem_flag = CL_MEM_READ_WRITE; @@ -484,8 +482,6 @@ device_ptr OpenCLDeviceBase::mem_alloc_sub_ptr(device_memory& mem, int offset, i cl_mem_flags mem_flag; if(mem.type == MEM_READ_ONLY || mem.type == MEM_TEXTURE) mem_flag = CL_MEM_READ_ONLY; - else if(mem.type == MEM_WRITE_ONLY || mem.type == MEM_PIXELS) - mem_flag = CL_MEM_WRITE_ONLY; else mem_flag = CL_MEM_READ_WRITE; |