Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/image.cpp
| Show First 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | if(info.type == DEVICE_CPU) { | ||||
| tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_NUM_FLOAT4_IMAGES_CPU; | tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_NUM_FLOAT4_IMAGES_CPU; | ||||
| tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_IMAGES_CPU; | tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_IMAGES_CPU; | ||||
| tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_IMAGES_CPU; | tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_IMAGES_CPU; | ||||
| tex_image_byte4_start = TEX_IMAGE_BYTE4_START_CPU; | tex_image_byte4_start = TEX_IMAGE_BYTE4_START_CPU; | ||||
| tex_image_float_start = TEX_IMAGE_FLOAT_START_CPU; | tex_image_float_start = TEX_IMAGE_FLOAT_START_CPU; | ||||
| tex_image_byte_start = TEX_IMAGE_BYTE_START_CPU; | tex_image_byte_start = TEX_IMAGE_BYTE_START_CPU; | ||||
| } | } | ||||
| /* CUDA (Fermi) */ | /* CUDA (Fermi) */ | ||||
| else if((info.type == DEVICE_CUDA || info.type == DEVICE_MULTI) && !info.extended_images) { | else if((info.type == DEVICE_CUDA || info.type == DEVICE_MULTI) && !info.has_bindless_textures) { | ||||
| tex_num_images[IMAGE_DATA_TYPE_BYTE4] = TEX_NUM_BYTE4_IMAGES_CUDA; | tex_num_images[IMAGE_DATA_TYPE_BYTE4] = TEX_NUM_BYTE4_IMAGES_CUDA; | ||||
| tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_NUM_FLOAT4_IMAGES_CUDA; | tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_NUM_FLOAT4_IMAGES_CUDA; | ||||
| tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_IMAGES_CUDA; | tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_IMAGES_CUDA; | ||||
| tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_IMAGES_CUDA; | tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_IMAGES_CUDA; | ||||
| tex_image_byte4_start = TEX_IMAGE_BYTE4_START_CUDA; | tex_image_byte4_start = TEX_IMAGE_BYTE4_START_CUDA; | ||||
| tex_image_float_start = TEX_IMAGE_FLOAT_START_CUDA; | tex_image_float_start = TEX_IMAGE_FLOAT_START_CUDA; | ||||
| tex_image_byte_start = TEX_IMAGE_BYTE_START_CUDA; | tex_image_byte_start = TEX_IMAGE_BYTE_START_CUDA; | ||||
| } | } | ||||
| /* CUDA (Kepler and above) */ | /* CUDA (Kepler and above) */ | ||||
| else if((info.type == DEVICE_CUDA || info.type == DEVICE_MULTI) && info.extended_images) { | else if((info.type == DEVICE_CUDA || info.type == DEVICE_MULTI) && info.has_bindless_textures) { | ||||
| tex_num_images[IMAGE_DATA_TYPE_BYTE4] = TEX_NUM_BYTE4_IMAGES_CUDA_KEPLER; | tex_num_images[IMAGE_DATA_TYPE_BYTE4] = TEX_NUM_BYTE4_IMAGES_CUDA_KEPLER; | ||||
| tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_NUM_FLOAT4_IMAGES_CUDA_KEPLER; | tex_num_images[IMAGE_DATA_TYPE_FLOAT4] = TEX_NUM_FLOAT4_IMAGES_CUDA_KEPLER; | ||||
| tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_IMAGES_CUDA_KEPLER; | tex_num_images[IMAGE_DATA_TYPE_FLOAT] = TEX_NUM_FLOAT_IMAGES_CUDA_KEPLER; | ||||
| tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_IMAGES_CUDA_KEPLER; | tex_num_images[IMAGE_DATA_TYPE_BYTE] = TEX_NUM_BYTE_IMAGES_CUDA_KEPLER; | ||||
| tex_image_byte4_start = TEX_IMAGE_BYTE4_START_CUDA_KEPLER; | tex_image_byte4_start = TEX_IMAGE_BYTE4_START_CUDA_KEPLER; | ||||
| tex_image_float_start = TEX_IMAGE_FLOAT_START_CUDA_KEPLER; | tex_image_float_start = TEX_IMAGE_FLOAT_START_CUDA_KEPLER; | ||||
| tex_image_byte_start = TEX_IMAGE_BYTE_START_CUDA_KEPLER; | tex_image_byte_start = TEX_IMAGE_BYTE_START_CUDA_KEPLER; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 218 Lines • ▼ Show 20 Lines | int ImageManager::add_image(const string& filename, | ||||
| size_t slot; | size_t slot; | ||||
| ImageDataType type = get_image_metadata(filename, builtin_data, is_linear); | ImageDataType type = get_image_metadata(filename, builtin_data, is_linear); | ||||
| /* Do we have a float? */ | /* Do we have a float? */ | ||||
| if(type == IMAGE_DATA_TYPE_FLOAT || type == IMAGE_DATA_TYPE_FLOAT4) | if(type == IMAGE_DATA_TYPE_FLOAT || type == IMAGE_DATA_TYPE_FLOAT4) | ||||
| is_float = true; | is_float = true; | ||||
| /* No float and byte textures on GPU yet */ | /* No single channel textures on Fermi GPUs, use available slots */ | ||||
| if(type == IMAGE_DATA_TYPE_FLOAT && tex_num_images[type] == 0) | if(type == IMAGE_DATA_TYPE_FLOAT && tex_num_images[type] == 0) | ||||
| type = IMAGE_DATA_TYPE_FLOAT4; | type = IMAGE_DATA_TYPE_FLOAT4; | ||||
| if(type == IMAGE_DATA_TYPE_BYTE && tex_num_images[type] == 0) | if(type == IMAGE_DATA_TYPE_BYTE && tex_num_images[type] == 0) | ||||
| type = IMAGE_DATA_TYPE_BYTE4; | type = IMAGE_DATA_TYPE_BYTE4; | ||||
| /* Fnd existing image. */ | /* Fnd existing image. */ | ||||
| for(slot = 0; slot < images[type].size(); slot++) { | for(slot = 0; slot < images[type].size(); slot++) { | ||||
| img = images[type][slot]; | img = images[type][slot]; | ||||
| ▲ Show 20 Lines • Show All 561 Lines • ▼ Show 20 Lines | void ImageManager::device_load_image(Device *device, DeviceScene *dscene, ImageDataType type, int slot, Progress *progress) | ||||
| img->need_load = false; | img->need_load = false; | ||||
| } | } | ||||
| void ImageManager::device_free_image(Device *device, DeviceScene *dscene, ImageDataType type, int slot) | void ImageManager::device_free_image(Device *device, DeviceScene *dscene, ImageDataType type, int slot) | ||||
| { | { | ||||
| Image *img = images[type][slot]; | Image *img = images[type][slot]; | ||||
| int flat_slot = type_index_to_flattened_slot(slot, type); | |||||
| if(img) { | if(img) { | ||||
| if(osl_texture_system && !img->builtin_data) { | if(osl_texture_system && !img->builtin_data) { | ||||
| #ifdef WITH_OSL | #ifdef WITH_OSL | ||||
| ustring filename(images[type][slot]->filename); | ustring filename(images[type][slot]->filename); | ||||
| ((OSL::TextureSystem*)osl_texture_system)->invalidate(filename); | ((OSL::TextureSystem*)osl_texture_system)->invalidate(filename); | ||||
| #endif | #endif | ||||
| } | } | ||||
| else if(type == IMAGE_DATA_TYPE_FLOAT4) { | else if(type == IMAGE_DATA_TYPE_FLOAT4) { | ||||
| ▲ Show 20 Lines • Show All 225 Lines • Show Last 20 Lines | |||||