Cleanup: Further tweaks for consistency and simplifications.

Now I can start adding half float without adding even bigger mess to all these functions. ;)
This commit is contained in:
Thomas Dinges
2016-05-27 23:35:29 +02:00
parent 2f457b7649
commit dc07a5561f
3 changed files with 25 additions and 34 deletions

View File

@@ -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_BYTE4] = TEX_NUM_BYTE4_ ## ARCH; \
tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_ ## ARCH; \ tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_ ## ARCH; \
tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_ ## ARCH; \ tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_ ## ARCH; \
tex_image_byte4_start = TEX_START_BYTE4_ ## ARCH; \ tex_start_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_START_FLOAT4_ ## ARCH; \
tex_image_float_start = TEX_START_FLOAT_ ## ARCH; \ tex_start_images[IMAGE_DATA_TYPE_BYTE4] = TEX_START_BYTE4_ ## ARCH; \
tex_image_byte_start = TEX_START_BYTE_ ## 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) { if(device_type == DEVICE_CPU) {
@@ -74,14 +75,15 @@ ImageManager::ImageManager(const DeviceInfo& info)
SET_TEX_IMAGES_LIMITS(OPENCL); SET_TEX_IMAGES_LIMITS(OPENCL);
} }
else { else {
/* Should never happen */ /* Should not happen. */
tex_num_images[IMAGE_DATA_TYPE_BYTE4] = 0;
tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = 0; 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_FLOAT] = 0;
tex_num_images[IMAGE_DATA_TYPE_BYTE] = 0; tex_num_images[IMAGE_DATA_TYPE_BYTE] = 0;
tex_image_byte4_start = 0; tex_start_images[IMAGE_DATA_TYPE_FLOAT4] = 0;
tex_image_float_start = 0; tex_start_images[IMAGE_DATA_TYPE_BYTE4] = 0;
tex_image_byte_start = 0; tex_start_images[IMAGE_DATA_TYPE_FLOAT] = 0;
tex_start_images[IMAGE_DATA_TYPE_BYTE] = 0;
assert(0); assert(0);
} }
@@ -204,35 +206,21 @@ ImageManager::ImageDataType ImageManager::get_image_metadata(const string& filen
* to device ones and vice versa. */ * to device ones and vice versa. */
int ImageManager::type_index_to_flattened_slot(int slot, ImageDataType type) int ImageManager::type_index_to_flattened_slot(int slot, ImageDataType type)
{ {
if(type == IMAGE_DATA_TYPE_BYTE4) return slot + tex_start_images[type];
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;
} }
int ImageManager::flattened_slot_to_type_index(int flat_slot, ImageDataType *type) int ImageManager::flattened_slot_to_type_index(int flat_slot, ImageDataType *type)
{ {
if(flat_slot >= tex_image_byte_start) { for(int i = IMAGE_DATA_NUM_TYPES - 1; i >= 0; i--) {
*type = IMAGE_DATA_TYPE_BYTE; if(flat_slot >= tex_start_images[i]) {
return flat_slot - tex_image_byte_start; *type = (ImageDataType)i;
return flat_slot - tex_start_images[i];
} }
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; /* Should not happen. */
return flat_slot - tex_image_byte4_start;
}
else {
*type = IMAGE_DATA_TYPE_FLOAT4;
return flat_slot; return flat_slot;
} }
}
string ImageManager::name_from_type(int type) string ImageManager::name_from_type(int type)
{ {

View File

@@ -96,9 +96,8 @@ public:
private: private:
int tex_num_images[IMAGE_DATA_NUM_TYPES]; int tex_num_images[IMAGE_DATA_NUM_TYPES];
int tex_image_byte4_start; int tex_start_images[IMAGE_DATA_NUM_TYPES];
int tex_image_float_start;
int tex_image_byte_start;
thread_mutex device_mutex; thread_mutex device_mutex;
int animation_frame; int animation_frame;

View File

@@ -26,6 +26,7 @@ CCL_NAMESPACE_BEGIN
#define TEX_NUM_BYTE4_CPU 1024 #define TEX_NUM_BYTE4_CPU 1024
#define TEX_NUM_FLOAT_CPU 1024 #define TEX_NUM_FLOAT_CPU 1024
#define TEX_NUM_BYTE_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_BYTE4_CPU TEX_NUM_FLOAT4_CPU
#define TEX_START_FLOAT_CPU (TEX_NUM_FLOAT4_CPU + TEX_NUM_BYTE4_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) #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_BYTE4_CUDA 88
#define TEX_NUM_FLOAT_CUDA 0 #define TEX_NUM_FLOAT_CUDA 0
#define TEX_NUM_BYTE_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_BYTE4_CUDA TEX_NUM_FLOAT4_CUDA
#define TEX_START_FLOAT_CUDA (TEX_NUM_FLOAT4_CUDA + TEX_NUM_BYTE4_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) #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_BYTE4_CUDA_KEPLER 1024
#define TEX_NUM_FLOAT_CUDA_KEPLER 1024 #define TEX_NUM_FLOAT_CUDA_KEPLER 1024
#define TEX_NUM_BYTE_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_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_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) #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_BYTE4_OPENCL 1024
#define TEX_NUM_FLOAT_OPENCL 0 #define TEX_NUM_FLOAT_OPENCL 0
#define TEX_NUM_BYTE_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_BYTE4_OPENCL TEX_NUM_FLOAT4_OPENCL
#define TEX_START_FLOAT_OPENCL (TEX_NUM_FLOAT4_OPENCL + TEX_NUM_BYTE4_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) #define TEX_START_BYTE_OPENCL (TEX_NUM_FLOAT4_OPENCL + TEX_NUM_BYTE4_OPENCL + TEX_NUM_BYTE_OPENCL)