diff options
author | Thomas Dinges <blender@dingto.org> | 2014-05-11 05:38:39 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2014-05-11 05:38:39 +0400 |
commit | c08c931fb6f57bdca7865d48ac09a0775590f3ce (patch) | |
tree | 8d5bbe8b0e23288d6227545811b3822eebf01fba /intern/cycles/render | |
parent | 8904eaf5047780eaf97eb7dc3acebb1b65f258bd (diff) |
Cycles / CUDA: Increase maximum image textures on GPU.
Instead of 95, we can use 145 images now. This only affects Kepler and above (sm30, sm_35 and sm_50).
This can be increased further if needed, but let's first test if this does not come with a performance impact.
Originally developed during my GSoC 2013.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r-- | intern/cycles/render/image.cpp | 13 | ||||
-rw-r--r-- | intern/cycles/render/image.h | 10 | ||||
-rw-r--r-- | intern/cycles/render/scene.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/scene.h | 4 |
4 files changed, 21 insertions, 10 deletions
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp index 8dde642f70b..86755badc42 100644 --- a/intern/cycles/render/image.cpp +++ b/intern/cycles/render/image.cpp @@ -59,11 +59,16 @@ void ImageManager::set_osl_texture_system(void *texture_system) osl_texture_system = texture_system; } -void ImageManager::set_extended_image_limits(void) +void ImageManager::set_extended_image_limits(const DeviceInfo& info) { - tex_num_images = TEX_EXTENDED_NUM_IMAGES; - tex_num_float_images = TEX_EXTENDED_NUM_FLOAT_IMAGES; - tex_image_byte_start = TEX_EXTENDED_IMAGE_BYTE_START; + if(info.type == DEVICE_CPU) { + tex_num_images = TEX_EXTENDED_NUM_IMAGES_CPU; + tex_num_float_images = TEX_EXTENDED_NUM_FLOAT_IMAGES; + tex_image_byte_start = TEX_EXTENDED_IMAGE_BYTE_START; + } + else if((info.type == DEVICE_CUDA || info.type == DEVICE_MULTI) && info.extended_images) { + tex_num_images = TEX_EXTENDED_NUM_IMAGES_GPU; + } } bool ImageManager::set_animation_frame_update(int frame) diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h index a862ffce5c3..561550fe0d2 100644 --- a/intern/cycles/render/image.h +++ b/intern/cycles/render/image.h @@ -17,6 +17,7 @@ #ifndef __IMAGE_H__ #define __IMAGE_H__ +#include "device.h" #include "device_memory.h" #include "util_string.h" @@ -27,11 +28,16 @@ CCL_NAMESPACE_BEGIN +/* generic */ #define TEX_NUM_IMAGES 95 #define TEX_IMAGE_BYTE_START TEX_NUM_FLOAT_IMAGES +/* extended gpu */ +#define TEX_EXTENDED_NUM_IMAGES_GPU 145 + +/* extended cpu */ #define TEX_EXTENDED_NUM_FLOAT_IMAGES 1024 -#define TEX_EXTENDED_NUM_IMAGES 1024 +#define TEX_EXTENDED_NUM_IMAGES_CPU 1024 #define TEX_EXTENDED_IMAGE_BYTE_START TEX_EXTENDED_NUM_FLOAT_IMAGES /* color to use when textures are not found */ @@ -59,7 +65,7 @@ public: void set_osl_texture_system(void *texture_system); void set_pack_images(bool pack_images_); - void set_extended_image_limits(void); + void set_extended_image_limits(const DeviceInfo& info); bool set_animation_frame_update(int frame); bool need_update; diff --git a/intern/cycles/render/scene.cpp b/intern/cycles/render/scene.cpp index 4a42b2c9e35..686a1bc406e 100644 --- a/intern/cycles/render/scene.cpp +++ b/intern/cycles/render/scene.cpp @@ -63,8 +63,8 @@ Scene::Scene(const SceneParams& params_, const DeviceInfo& device_info_) else shader_manager = ShaderManager::create(this, SceneParams::SVM); - if (device_info_.type == DEVICE_CPU) - image_manager->set_extended_image_limits(); + /* Extended image limits for CPU and GPUs */ + image_manager->set_extended_image_limits(device_info_); } Scene::~Scene() diff --git a/intern/cycles/render/scene.h b/intern/cycles/render/scene.h index c913b4c59da..0f0bb725823 100644 --- a/intern/cycles/render/scene.h +++ b/intern/cycles/render/scene.h @@ -105,8 +105,8 @@ public: /* integrator */ device_vector<uint> sobol_directions; - /* images */ - device_vector<uchar4> tex_image[TEX_EXTENDED_NUM_IMAGES]; + /* cpu images */ + device_vector<uchar4> tex_image[TEX_EXTENDED_NUM_IMAGES_CPU]; device_vector<float4> tex_float_image[TEX_EXTENDED_NUM_FLOAT_IMAGES]; /* opencl images */ |