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:
authorThomas Dinges <blender@dingto.org>2014-05-11 05:38:39 +0400
committerThomas Dinges <blender@dingto.org>2014-05-11 05:38:39 +0400
commitc08c931fb6f57bdca7865d48ac09a0775590f3ce (patch)
tree8d5bbe8b0e23288d6227545811b3822eebf01fba /intern/cycles/render
parent8904eaf5047780eaf97eb7dc3acebb1b65f258bd (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.cpp13
-rw-r--r--intern/cycles/render/image.h10
-rw-r--r--intern/cycles/render/scene.cpp4
-rw-r--r--intern/cycles/render/scene.h4
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 */