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:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-04-28 15:48:40 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-04-28 15:48:40 +0300
commit1ec59c8e067f4af213d61e114de97334ce9f3e77 (patch)
treef690b0ea07b85750e1c995df362ca2a86da7c9ce /intern/cycles
parent06034b147aab1c80ad959d88a69b493cd5891e9c (diff)
Revert "Cycles: Fix image textures were completely broken since recent unlimited textures commit"
This reverts commit 8f4166ee495531fa38b676b0a5ef4c482e89f9a5. The fix was not correct for cases when we've got float textures.
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/kernel/kernel_image_opencl.h8
-rw-r--r--intern/cycles/render/image.cpp22
2 files changed, 15 insertions, 15 deletions
diff --git a/intern/cycles/kernel/kernel_image_opencl.h b/intern/cycles/kernel/kernel_image_opencl.h
index a5c5a73ddb0..ddf56f119a8 100644
--- a/intern/cycles/kernel/kernel_image_opencl.h
+++ b/intern/cycles/kernel/kernel_image_opencl.h
@@ -66,8 +66,7 @@ ccl_device_inline float svm_image_texture_frac(float x, int *ix)
ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, float y)
{
- const int texture_id = kernel_tex_index(id);
- uint4 info = kernel_tex_fetch(__tex_image_packed_info, texture_id*2);
+ uint4 info = kernel_tex_fetch(__tex_image_packed_info, id*2);
uint width = info.x;
uint height = info.y;
uint offset = info.z;
@@ -144,12 +143,11 @@ ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, fl
ccl_device float4 kernel_tex_image_interp_3d(KernelGlobals *kg, int id, float x, float y, float z)
{
- const int texture_id = kernel_tex_index(id);
- uint4 info = kernel_tex_fetch(__tex_image_packed_info, texture_id*2);
+ uint4 info = kernel_tex_fetch(__tex_image_packed_info, id*2);
uint width = info.x;
uint height = info.y;
uint offset = info.z;
- uint depth = kernel_tex_fetch(__tex_image_packed_info, texture_id*2+1).x;
+ uint depth = kernel_tex_fetch(__tex_image_packed_info, id*2+1).x;
/* Image Options */
uint interpolation = (info.w & (1 << 0)) ? INTERPOLATION_CLOSEST : INTERPOLATION_LINEAR;
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index 60d1f5f44f9..5ce3b75a226 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -1049,8 +1049,6 @@ void ImageManager::device_pack_images(Device *device,
+ tex_num_images[IMAGE_DATA_TYPE_FLOAT] + tex_num_images[IMAGE_DATA_TYPE_BYTE];
uint4 *info = dscene->tex_image_packed_info.resize(info_size*2);
- size_t index = 0;
-
/* Byte4 Textures*/
type = IMAGE_DATA_TYPE_BYTE4;
@@ -1072,8 +1070,9 @@ void ImageManager::device_pack_images(Device *device,
uint8_t options = pack_image_options(type, slot);
- info[index++] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
- info[index++] = make_uint4(tex_img.data_depth, 0, 0, 0);
+ int index = type_index_to_flattened_slot(slot, type) * 2;
+ info[index] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
+ info[index+1] = make_uint4(tex_img.data_depth, 0, 0, 0);
memcpy(pixels_byte4+offset, (void*)tex_img.data_pointer, tex_img.memory_size());
offset += tex_img.size();
@@ -1103,8 +1102,9 @@ void ImageManager::device_pack_images(Device *device,
uint8_t options = pack_image_options(type, slot);
- info[index++] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
- info[index++] = make_uint4(tex_img.data_depth, 0, 0, 0);
+ int index = type_index_to_flattened_slot(slot, type) * 2;
+ info[index] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
+ info[index+1] = make_uint4(tex_img.data_depth, 0, 0, 0);
memcpy(pixels_float4+offset, (void*)tex_img.data_pointer, tex_img.memory_size());
offset += tex_img.size();
@@ -1132,8 +1132,9 @@ void ImageManager::device_pack_images(Device *device,
uint8_t options = pack_image_options(type, slot);
- info[index++] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
- info[index++] = make_uint4(tex_img.data_depth, 0, 0, 0);
+ int index = type_index_to_flattened_slot(slot, type) * 2;
+ info[index] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
+ info[index+1] = make_uint4(tex_img.data_depth, 0, 0, 0);
memcpy(pixels_byte+offset, (void*)tex_img.data_pointer, tex_img.memory_size());
offset += tex_img.size();
@@ -1163,8 +1164,9 @@ void ImageManager::device_pack_images(Device *device,
uint8_t options = pack_image_options(type, slot);
- info[index++] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
- info[index++] = make_uint4(tex_img.data_depth, 0, 0, 0);
+ int index = type_index_to_flattened_slot(slot, type) * 2;
+ info[index] = make_uint4(tex_img.data_width, tex_img.data_height, offset, options);
+ info[index+1] = make_uint4(tex_img.data_depth, 0, 0, 0);
memcpy(pixels_float+offset, (void*)tex_img.data_pointer, tex_img.memory_size());
offset += tex_img.size();