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:02:49 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-05-02 16:03:12 +0300
commit4174e533c001367b0ef391b72baa5b07cb517ce8 (patch)
treea18112243e6a2c894d4421926cbc5394b54240a5
parentfc8f428224a8e77ba66394ad8238a406fa24ee3a (diff)
Cycles: Cache split kernels in CUDA device
This way we don't re-load kernels for every sample in the viewport. Additionally, we don't risk global size changed inbetween of samples.
-rw-r--r--intern/cycles/device/device_cuda.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index ef283c9d455..acfb3e1d8f4 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);
}
@@ -1336,12 +1341,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);