Commit: c987ad81b684f4f0b361ff11325786d268c603c1
Author: Geraldine Chua
Date:   Mon Jul 16 20:57:55 2018 +0800
Branches: soc-2018-cycles-volumes
https://developer.blender.org/rBc987ad81b684f4f0b361ff11325786d268c603c1

Cleanup and bug fixes.

===================================================================

M       intern/cycles/blender/blender_mesh.cpp
M       intern/cycles/blender/blender_session.cpp
M       intern/cycles/blender/blender_shader.cpp
M       intern/cycles/device/device_cpu.cpp
M       intern/cycles/device/device_memory_openvdb.h
M       intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
M       intern/cycles/render/image.cpp
M       intern/cycles/render/image.h
M       intern/cycles/render/mesh_volume.cpp
M       intern/cycles/render/nodes.cpp
M       intern/cycles/render/openvdb.cpp
M       intern/cycles/render/openvdb.h
M       intern/cycles/util/util_sparse_grid.h
M       intern/cycles/util/util_texture.h
M       intern/openvdb/openvdb_capi.cc
M       intern/openvdb/openvdb_capi.h
M       source/blender/blenkernel/intern/pointcache.c

===================================================================

diff --git a/intern/cycles/blender/blender_mesh.cpp 
b/intern/cycles/blender/blender_mesh.cpp
index f70e859ba8a..d8261d7d86d 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -324,7 +324,8 @@ static void mikk_compute_tangents(const BL::Mesh& b_mesh,
 
 /* Create Volume Attribute */
 
-static void create_mesh_volume_attribute(BL::Object& b_ob,
+static void create_mesh_volume_attribute(BL::BlendData& b_data,
+                                         BL::Object& b_ob,
                                          Mesh *mesh,
                                          ImageManager *image_manager,
                                          AttributeStandard std,
@@ -339,15 +340,31 @@ static void create_mesh_volume_attribute(BL::Object& b_ob,
 
        Attribute *attr = mesh->attributes.add(std);
        VoxelAttribute *volume_data = attr->data_voxel();
-       ImageMetaData metadata;
        bool animated = false;
        bool use_alpha = true;
        bool make_sparse = true;
 
+       string filename;
+       void *builtin_data;
+       ImageMetaData metadata;
+
+       if(b_domain.is_openvdb()) {
+               BL::ID b_id = b_ob.data();
+               filename = blender_absolute_path(b_data,
+                                                b_id,
+                                                b_domain.openvdb_filepath());
+               builtin_data = NULL;
+               metadata.grid_name = Attribute::standard_name(std);
+       }
+       else {
+               filename = Attribute::standard_name(std);
+               builtin_data = b_ob.ptr.data;
+       }
+
        volume_data->manager = image_manager;
        volume_data->slot = image_manager->add_image(
-               Attribute::standard_name(std),
-               b_ob.ptr.data,
+               filename,
+               builtin_data,
                animated,
                frame,
                INTERPOLATION_LINEAR,
@@ -359,23 +376,24 @@ static void create_mesh_volume_attribute(BL::Object& b_ob,
 }
 
 static void create_mesh_volume_attributes(Scene *scene,
+                                          BL::BlendData& b_data,
                                           BL::Object& b_ob,
                                           Mesh *mesh,
                                           float frame)
 {
        /* for smoke volume rendering */
        if(mesh->need_attribute(scene, ATTR_STD_VOLUME_DENSITY))
-               create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, 
ATTR_STD_VOLUME_DENSITY, frame);
+               create_mesh_volume_attribute(b_data, b_ob, mesh, 
scene->image_manager, ATTR_STD_VOLUME_DENSITY, frame);
        if(mesh->need_attribute(scene, ATTR_STD_VOLUME_COLOR))
-               create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, 
ATTR_STD_VOLUME_COLOR, frame);
+               create_mesh_volume_attribute(b_data, b_ob, mesh, 
scene->image_manager, ATTR_STD_VOLUME_COLOR, frame);
        if(mesh->need_attribute(scene, ATTR_STD_VOLUME_FLAME))
-               create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, 
ATTR_STD_VOLUME_FLAME, frame);
+               create_mesh_volume_attribute(b_data, b_ob, mesh, 
scene->image_manager, ATTR_STD_VOLUME_FLAME, frame);
        if(mesh->need_attribute(scene, ATTR_STD_VOLUME_HEAT))
-               create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, 
ATTR_STD_VOLUME_HEAT, frame);
+               create_mesh_volume_attribute(b_data, b_ob, mesh, 
scene->image_manager, ATTR_STD_VOLUME_HEAT, frame);
        if(mesh->need_attribute(scene, ATTR_STD_VOLUME_TEMPERATURE))
-               create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, 
ATTR_STD_VOLUME_TEMPERATURE, frame);
+               create_mesh_volume_attribute(b_data, b_ob, mesh, 
scene->image_manager, ATTR_STD_VOLUME_TEMPERATURE, frame);
        if(mesh->need_attribute(scene, ATTR_STD_VOLUME_VELOCITY))
-               create_mesh_volume_attribute(b_ob, mesh, scene->image_manager, 
ATTR_STD_VOLUME_VELOCITY, frame);
+               create_mesh_volume_attribute(b_data, b_ob, mesh, 
scene->image_manager, ATTR_STD_VOLUME_VELOCITY, frame);
 }
 
 /* Create vertex color attributes. */
@@ -1203,7 +1221,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
                                else
                                        create_mesh(scene, mesh, b_mesh, 
used_shaders, false);
 
-                               create_mesh_volume_attributes(scene, b_ob, 
mesh, b_scene.frame_current());
+                               create_mesh_volume_attributes(scene, b_data, 
b_ob, mesh, b_scene.frame_current());
                        }
 
                        if(render_layer.use_hair && mesh->subdivision_type == 
Mesh::SUBDIVISION_NONE)
diff --git a/intern/cycles/blender/blender_session.cpp 
b/intern/cycles/blender/blender_session.cpp
index 481057e308c..00d23b9095e 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -1082,11 +1082,6 @@ void BlenderSession::builtin_image_info(const string 
&builtin_name,
                metadata.width = resolution.x * amplify;
                metadata.height = resolution.y * amplify;
                metadata.depth = resolution.z * amplify;
-
-               if(b_domain.is_openvdb()) {
-                       metadata.openvdb_filepath = 
blender_absolute_path(b_data, b_id,
-                                                                         
b_domain.openvdb_filepath());
-               }
        }
        else {
                /* TODO(sergey): Check we're indeed in shader node tree. */
diff --git a/intern/cycles/blender/blender_shader.cpp 
b/intern/cycles/blender/blender_shader.cpp
index 9896dd1d94f..7c7ebf0ff01 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -673,7 +673,8 @@ static ShaderNode *add_node(Scene *scene,
                                        image->builtin_data,
                                        get_image_interpolation(b_image_node),
                                        get_image_extension(b_image_node),
-                                       image->use_alpha);
+                                       image->use_alpha,
+                                       string());
                        }
                }
                image->color_space = 
(NodeImageColorSpace)b_image_node.color_space();
@@ -721,7 +722,8 @@ static ShaderNode *add_node(Scene *scene,
                                        env->builtin_data,
                                        get_image_interpolation(b_env_node),
                                        EXTENSION_REPEAT,
-                                       env->use_alpha);
+                                       env->use_alpha,
+                                       string());
                        }
                }
                env->color_space = 
(NodeImageColorSpace)b_env_node.color_space();
@@ -875,7 +877,8 @@ static ShaderNode *add_node(Scene *scene,
                                point_density->builtin_data,
                                point_density->interpolation,
                                EXTENSION_CLIP,
-                               true);
+                               true,
+                               string());
                }
                node = point_density;
 
diff --git a/intern/cycles/device/device_cpu.cpp 
b/intern/cycles/device/device_cpu.cpp
index f38225f867a..f29b54ff237 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -432,9 +432,13 @@ public:
                                        info.util = 
(uint64_t)grid_info->host_pointer;
                                        info.tiled_width = 
get_tile_res(info.width);
                                        info.tiled_height = 
get_tile_res(info.height);
-                                       info.last_tile_width = info.width % 
TILE_SIZE;
-                                       info.last_tile_height = info.height % 
TILE_SIZE;
+                                       info.even_width = info.width - 
(info.width % TILE_SIZE);
+                                       info.even_height = info.height - 
(info.height % TILE_SIZE);
+                                       info.last_tile_dim = 0;
+                                       info.last_tile_dim |= ((info.width % 
TILE_SIZE) << LAST_TILE_WIDTH_MASK);
+                                       info.last_tile_dim |= ((info.height % 
TILE_SIZE) << LAST_TILE_HEIGHT_MASK);
                                        break;
+                               case IMAGE_GRID_TYPE_DEFAULT:
                                default:
                                        info.util = 0;
                        }
diff --git a/intern/cycles/device/device_memory_openvdb.h 
b/intern/cycles/device/device_memory_openvdb.h
index a387612b3dd..eb9fbe4912b 100644
--- a/intern/cycles/device/device_memory_openvdb.h
+++ b/intern/cycles/device/device_memory_openvdb.h
@@ -10,7 +10,17 @@
 
 CCL_NAMESPACE_BEGIN
 
-template<typename GridType, typename DataType>
+template<> struct device_type_traits<openvdb::Vec3SGrid> {
+       static const DataType data_type = TYPE_FLOAT;
+       static const int num_elements = 4;
+};
+
+template<> struct device_type_traits<openvdb::FloatGrid> {
+       static const DataType data_type = TYPE_FLOAT;
+       static const int num_elements = 1;
+};
+
+template<typename GridType>
 class device_openvdb : public device_memory
 {
 public:
@@ -26,8 +36,8 @@ public:
        {
                using namespace openvdb;
 
-               data_type = device_type_traits<DataType>::data_type;
-               data_elements = device_type_traits<DataType>::num_elements;
+               data_type = device_type_traits<GridType>::data_type;
+               data_elements = device_type_traits<GridType>::num_elements;
 
                assert(data_elements > 0);
 
diff --git a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h 
b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
index 22efcff344c..0b05dac544b 100644
--- a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
+++ b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
@@ -17,8 +17,6 @@
 #ifndef __KERNEL_CPU_IMAGE_H__
 #define __KERNEL_CPU_IMAGE_H__
 
-#include "util/util_sparse_grid.h"
-
 #ifdef WITH_OPENVDB
 #include <openvdb/openvdb.h>
 #endif
@@ -86,6 +84,7 @@ struct TextureInterpolator {
                                                  int x, int y, int z,
                                                  int width, int height,
                                                  int /*tiw*/, int /*tih*/,
+                                                 int /*evw*/, int /*evh*/,
                                                  int /*ltw*/, int /*lth*/)
        {
                return read(data[x + width * (y + z * height)]);
@@ -97,19 +96,18 @@ struct TextureInterpolator {
                                                  int x, int y, int z,
                                                  int /*width*/, int /*height*/,
                                                  int tiw, int tih,
+                                                 int evw, int evh,
                                                  int ltw, int lth)
        {
                int tix = x / TILE_SIZE, itix = x % TILE_SIZE,
                    tiy = y / TILE_SIZE, itiy = y % TILE_SIZE,
                    tiz = z / TILE_SIZE, itiz = z % TILE_SIZE;
-               int dense_index = (tix + tiw * (tiy + tiz * tih)) * 2;
-               int sparse_index = grid_info[dense_index];
-               int dims = grid_info[dense_index + 1];
+               int sparse_index = grid_info[(tix + tiw * (tiy + tiz * tih))];
                if(sparse_index < 0) {
                        return make_float4(0.0f);
                }
-               int itiw = dims & (1 << ST_SHIFT_TRUNCATE_WIDTH) ? ltw : 
TILE_SIZE;
-               int itih = dims & (1 << ST_SHIFT_TRUNCATE_HEIGHT) ? lth : 
TILE_SIZE;
+               int itiw = (x > evw) ? ltw : TILE_SIZE;
+               int itih = (y > evh) ? lth : TILE_SIZE;
                int in_tile_index = itix + itiw * (itiy + itiz * itih);
                return read(data[sparse_index + in_tile_index]);
        }
@@ -121,6 +119,7 @@ struct TextureInterpolator {
                                                  int x, int y, int z,
                            

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to