Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-05-02 16:29:00 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-05-02 16:29:00 +0300
commit7f833c0da8848d424de9d2324412d8ca9d9c4e30 (patch)
tree223a60022188132e5f7b64e9c649f80d72bfbcd7 /intern/cycles
parentec9ce9e11864146dc6748f2388b56f95346a5053 (diff)
parent4384a7cf463eedea83179da80bbe12ff7d55578a (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/device/device_cuda.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 3532e640eaa..e497ec6b0e1 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -119,6 +119,7 @@ public:
int cuDevId;
int cuDevArchitecture;
bool first_error;
+ CUDASplitKernel *split_kernel;
struct PixelMem {
GLuint cuPBO;
@@ -221,6 +222,8 @@ public:
cuDevice = 0;
cuContext = 0;
+ split_kernel = NULL;
+
need_bindless_mapping = false;
/* intialize */
@@ -260,6 +263,8 @@ public:
{
task_pool.stop();
+ delete split_kernel;
+
if(info.has_bindless_textures) {
tex_free(bindless_mapping);
}
@@ -1357,12 +1362,14 @@ public:
requested_features.max_closure = 64;
}
- CUDASplitKernel split_kernel(this);
- split_kernel.load_kernels(requested_features);
+ if(split_kernel == NULL) {
+ split_kernel = new CUDASplitKernel(this);
+ split_kernel->load_kernels(requested_features);
+ }
while(task->acquire_tile(this, tile)) {
device_memory void_buffer;
- split_kernel.path_trace(task, tile, void_buffer, void_buffer);
+ split_kernel->path_trace(task, tile, void_buffer, void_buffer);
task->release_tile(tile);
@@ -1648,7 +1655,8 @@ int2 CUDASplitKernel::split_kernel_global_size(device_memory& kg, device_memory&
<< string_human_readable_size(free) << ").";
size_t num_elements = max_elements_for_max_buffer_size(kg, data, free / 2);
- int2 global_size = make_int2(round_down((int)sqrt(num_elements), 32), (int)sqrt(num_elements));
+ size_t side = round_down((int)sqrt(num_elements), 32);
+ int2 global_size = make_int2(side, round_down(num_elements / side, 16));
VLOG(1) << "Global size: " << global_size << ".";
return global_size;
}