diff options
author | Thomas Dinges <blender@dingto.org> | 2016-05-28 00:35:29 +0300 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2016-05-28 00:35:29 +0300 |
commit | dc07a5561fe12411c3cb6a74875a97928be7ce06 (patch) | |
tree | 884db2da16bd4b02fd5fd87ce59e00886dc43270 | |
parent | 2f457b76490bec3f195691e6da64ef38bf77502a (diff) |
Cleanup: Further tweaks for consistency and simplifications.
Now I can start adding half float without adding even bigger mess to all these functions. ;)
-rw-r--r-- | intern/cycles/render/image.cpp | 50 | ||||
-rw-r--r-- | intern/cycles/render/image.h | 5 | ||||
-rw-r--r-- | intern/cycles/util/util_texture.h | 4 |
3 files changed, 25 insertions, 34 deletions
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp index dd90e7468ae..71dc85f5f03 100644 --- a/intern/cycles/render/image.cpp +++ b/intern/cycles/render/image.cpp @@ -54,9 +54,10 @@ ImageManager::ImageManager(const DeviceInfo& info) tex_num_images[IMAGE_DATA_TYPE_BYTE4] = TEX_NUM_BYTE4_ ## ARCH; \ tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_ ## ARCH; \ tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_ ## ARCH; \ - tex_image_byte4_start = TEX_START_BYTE4_ ## ARCH; \ - tex_image_float_start = TEX_START_FLOAT_ ## ARCH; \ - tex_image_byte_start = TEX_START_BYTE_ ## ARCH; \ + tex_start_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_START_FLOAT4_ ## ARCH; \ + tex_start_images[IMAGE_DATA_TYPE_BYTE4] = TEX_START_BYTE4_ ## ARCH; \ + tex_start_images[IMAGE_DATA_TYPE_FLOAT] = TEX_START_FLOAT_ ## ARCH; \ + tex_start_images[IMAGE_DATA_TYPE_BYTE] = TEX_START_BYTE_ ## ARCH; \ } if(device_type == DEVICE_CPU) { @@ -74,14 +75,15 @@ ImageManager::ImageManager(const DeviceInfo& info) SET_TEX_IMAGES_LIMITS(OPENCL); } else { - /* Should never happen */ - tex_num_images[IMAGE_DATA_TYPE_BYTE4] = 0; + /* Should not happen. */ tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = 0; + tex_num_images[IMAGE_DATA_TYPE_BYTE4] = 0; tex_num_images[IMAGE_DATA_TYPE_FLOAT] = 0; tex_num_images[IMAGE_DATA_TYPE_BYTE] = 0; - tex_image_byte4_start = 0; - tex_image_float_start = 0; - tex_image_byte_start = 0; + tex_start_images[IMAGE_DATA_TYPE_FLOAT4] = 0; + tex_start_images[IMAGE_DATA_TYPE_BYTE4] = 0; + tex_start_images[IMAGE_DATA_TYPE_FLOAT] = 0; + tex_start_images[IMAGE_DATA_TYPE_BYTE] = 0; assert(0); } @@ -204,34 +206,20 @@ ImageManager::ImageDataType ImageManager::get_image_metadata(const string& filen * to device ones and vice versa. */ int ImageManager::type_index_to_flattened_slot(int slot, ImageDataType type) { - if(type == IMAGE_DATA_TYPE_BYTE4) - return slot + tex_image_byte4_start; - else if(type == IMAGE_DATA_TYPE_FLOAT) - return slot + tex_image_float_start; - else if(type == IMAGE_DATA_TYPE_BYTE) - return slot + tex_image_byte_start; - else - return slot; + return slot + tex_start_images[type]; } int ImageManager::flattened_slot_to_type_index(int flat_slot, ImageDataType *type) { - if(flat_slot >= tex_image_byte_start) { - *type = IMAGE_DATA_TYPE_BYTE; - return flat_slot - tex_image_byte_start; - } - else if(flat_slot >= tex_image_float_start) { - *type = IMAGE_DATA_TYPE_FLOAT; - return flat_slot - tex_image_float_start; - } - else if(flat_slot >= tex_image_byte4_start) { - *type = IMAGE_DATA_TYPE_BYTE4; - return flat_slot - tex_image_byte4_start; - } - else { - *type = IMAGE_DATA_TYPE_FLOAT4; - return flat_slot; + for(int i = IMAGE_DATA_NUM_TYPES - 1; i >= 0; i--) { + if(flat_slot >= tex_start_images[i]) { + *type = (ImageDataType)i; + return flat_slot - tex_start_images[i]; + } } + + /* Should not happen. */ + return flat_slot; } string ImageManager::name_from_type(int type) diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h index 2ab16dd8967..8735133fd91 100644 --- a/intern/cycles/render/image.h +++ b/intern/cycles/render/image.h @@ -96,9 +96,8 @@ public: private: int tex_num_images[IMAGE_DATA_NUM_TYPES]; - int tex_image_byte4_start; - int tex_image_float_start; - int tex_image_byte_start; + int tex_start_images[IMAGE_DATA_NUM_TYPES]; + thread_mutex device_mutex; int animation_frame; diff --git a/intern/cycles/util/util_texture.h b/intern/cycles/util/util_texture.h index c419c3aab61..e00edc046f7 100644 --- a/intern/cycles/util/util_texture.h +++ b/intern/cycles/util/util_texture.h @@ -26,6 +26,7 @@ CCL_NAMESPACE_BEGIN #define TEX_NUM_BYTE4_CPU 1024 #define TEX_NUM_FLOAT_CPU 1024 #define TEX_NUM_BYTE_CPU 1024 +#define TEX_START_FLOAT4_CPU 0 #define TEX_START_BYTE4_CPU TEX_NUM_FLOAT4_CPU #define TEX_START_FLOAT_CPU (TEX_NUM_FLOAT4_CPU + TEX_NUM_BYTE4_CPU) #define TEX_START_BYTE_CPU (TEX_NUM_FLOAT4_CPU + TEX_NUM_BYTE4_CPU + TEX_NUM_BYTE_CPU) @@ -35,6 +36,7 @@ CCL_NAMESPACE_BEGIN #define TEX_NUM_BYTE4_CUDA 88 #define TEX_NUM_FLOAT_CUDA 0 #define TEX_NUM_BYTE_CUDA 0 +#define TEX_START_FLOAT4_CUDA 0 #define TEX_START_BYTE4_CUDA TEX_NUM_FLOAT4_CUDA #define TEX_START_FLOAT_CUDA (TEX_NUM_FLOAT4_CUDA + TEX_NUM_BYTE4_CUDA) #define TEX_START_BYTE_CUDA (TEX_NUM_FLOAT4_CUDA + TEX_NUM_BYTE4_CUDA + TEX_NUM_BYTE_CUDA) @@ -44,6 +46,7 @@ CCL_NAMESPACE_BEGIN #define TEX_NUM_BYTE4_CUDA_KEPLER 1024 #define TEX_NUM_FLOAT_CUDA_KEPLER 1024 #define TEX_NUM_BYTE_CUDA_KEPLER 1024 +#define TEX_START_FLOAT4_CUDA_KEPLER 0 #define TEX_START_BYTE4_CUDA_KEPLER TEX_NUM_FLOAT4_CUDA_KEPLER #define TEX_START_FLOAT_CUDA_KEPLER (TEX_NUM_FLOAT4_CUDA_KEPLER + TEX_NUM_BYTE4_CUDA_KEPLER) #define TEX_START_BYTE_CUDA_KEPLER (TEX_NUM_FLOAT4_CUDA_KEPLER + TEX_NUM_BYTE4_CUDA_KEPLER + TEX_NUM_BYTE_CUDA_KEPLER) @@ -53,6 +56,7 @@ CCL_NAMESPACE_BEGIN #define TEX_NUM_BYTE4_OPENCL 1024 #define TEX_NUM_FLOAT_OPENCL 0 #define TEX_NUM_BYTE_OPENCL 0 +#define TEX_START_FLOAT4_OPENCL 0 #define TEX_START_BYTE4_OPENCL TEX_NUM_FLOAT4_OPENCL #define TEX_START_FLOAT_OPENCL (TEX_NUM_FLOAT4_OPENCL + TEX_NUM_BYTE4_OPENCL) #define TEX_START_BYTE_OPENCL (TEX_NUM_FLOAT4_OPENCL + TEX_NUM_BYTE4_OPENCL + TEX_NUM_BYTE_OPENCL) |