[Bf-blender-cvs] [6a7af7273de] soc-2018-cycles-volumes: Remove most VDB grid as texture storage functions.

Geraldine Chua noreply at git.blender.org
Thu Aug 2 18:10:09 CEST 2018


Commit: 6a7af7273de37ce7e3b72dd5cb33b2fabc8ad6e9
Author: Geraldine Chua
Date:   Thu Aug 2 23:27:28 2018 +0800
Branches: soc-2018-cycles-volumes
https://developer.blender.org/rB6a7af7273de37ce7e3b72dd5cb33b2fabc8ad6e9

Remove most VDB grid as texture storage functions.

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

M	intern/cycles/device/CMakeLists.txt
M	intern/cycles/device/device_cpu.cpp
D	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/mesh_volume.cpp
M	intern/cycles/render/openvdb.cpp
M	intern/cycles/render/openvdb.h

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

diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt
index 8e3494a814c..75e78e038ea 100644
--- a/intern/cycles/device/CMakeLists.txt
+++ b/intern/cycles/device/CMakeLists.txt
@@ -60,10 +60,6 @@ set(SRC_HEADERS
 	device_task.h
 )
 
-if(WITH_OPENVDB)
-	list(APPEND SRC_HEADERS device_memory_openvdb.h)
-endif()
-
 add_definitions(${GL_DEFINITIONS})
 if(WITH_CYCLES_NETWORK)
 	add_definitions(-DWITH_NETWORK)
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 0b8e95c03c9..f2c643f5202 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -423,9 +423,6 @@ public:
 			info.depth = mem.real_depth;
 
 			switch(mem.grid_type) {
-				case IMAGE_GRID_TYPE_OPENVDB:
-					info.util = (uint64_t)mem.grid_info;
-					break;
 				case IMAGE_GRID_TYPE_SPARSE:
 					info.util = (uint64_t)sparse_mem->host_pointer;
 					info.tiled_width = get_tile_res(info.width);
@@ -436,6 +433,7 @@ public:
 					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_OPENVDB:
 				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
deleted file mode 100644
index ee655318b61..00000000000
--- a/intern/cycles/device/device_memory_openvdb.h
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef __DEVICE_MEMORY_OPENVDB_H__
-#define __DEVICE_MEMORY_OPENVDB_H__
-
-/* OpenVDB Memory
- *
- *
- */
-#include <openvdb/openvdb.h>
-#include "device/device_memory.h"
-
-CCL_NAMESPACE_BEGIN
-
-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:
-	device_openvdb(Device *device,
-	               const char *name,
-	               MemoryType type,
-	               typename GridType::Ptr grid,
-	               typename GridType::ConstAccessor accessor,
-	               int3 resolution)
-	: device_memory(device, name, type),
-	  vdb_grid(grid),
-	  vdb_acc(accessor)
-	{
-		using namespace openvdb;
-
-		data_type = device_type_traits<GridType>::data_type;
-		data_elements = device_type_traits<GridType>::num_elements;
-
-		assert(data_elements > 0);
-
-		host_pointer = static_cast<void*>(&vdb_grid);
-		grid_info = static_cast<void*>(&vdb_acc);
-
-		data_width = real_width = resolution.x;
-		data_height = real_height = resolution.y;
-		data_depth = real_depth = resolution.z;
-
-		assert((vdb_grid->memUsage() % (data_elements * datatype_size(data_type))) == 0);
-
-		data_size = vdb_grid->memUsage() / (data_elements * datatype_size(data_type));
-	}
-
-	typename GridType::Ptr vdb_grid;
-	typename GridType::ConstAccessor vdb_acc;
-
-	void copy_to_device()
-	{
-		device_copy_to();
-	}
-
-protected:
-	size_t size(size_t width, size_t height, size_t depth)
-	{
-		return width * ((height == 0)? 1: height) * ((depth == 0)? 1: depth);
-	}
-};
-
-CCL_NAMESPACE_END
-
-#endif /* __DEVICE_MEMORY_OPENVDB_H__ */
diff --git a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
index 0b05dac544b..08f79278cf1 100644
--- a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
+++ b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
@@ -17,13 +17,9 @@
 #ifndef __KERNEL_CPU_IMAGE_H__
 #define __KERNEL_CPU_IMAGE_H__
 
-#ifdef WITH_OPENVDB
-#include <openvdb/openvdb.h>
-#endif
-
 CCL_NAMESPACE_BEGIN
 
-template<typename T, typename UtilType>
+template<typename T>
 struct TextureInterpolator {
 #define SET_CUBIC_SPLINE_WEIGHTS(u, t) \
 	{ \
@@ -92,7 +88,7 @@ struct TextureInterpolator {
 
 	/* Sparse grid voxel access. */
 	static ccl_always_inline float4 read_data(const T *data,
-	                                          const int *grid_info,
+	                                          const int *sparse_indexes,
 	                                          int x, int y, int z,
 	                                          int /*width*/, int /*height*/,
 	                                          int tiw, int tih,
@@ -102,7 +98,7 @@ struct TextureInterpolator {
 		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 sparse_index = grid_info[(tix + tiw * (tiy + tiz * tih))];
+		int sparse_index = sparse_indexes[(tix + tiw * (tiy + tiz * tih))];
 		if(sparse_index < 0) {
 			return make_float4(0.0f);
 		}
@@ -112,34 +108,6 @@ struct TextureInterpolator {
 		return read(data[sparse_index + in_tile_index]);
 	}
 
-#ifdef WITH_OPENVDB
-	/* OpenVDB grid voxel access. */
-	static ccl_always_inline float4 read_data(const T */*data*/,
-	                                          openvdb::FloatGrid::ConstAccessor *accessor,
-	                                          int x, int y, int z,
-	                                          int /*width*/, int /*height*/,
-	                                          int /*tiw*/, int /*tih*/,
-	                                          int /*evw*/, int /*evh*/,
-	                                          int /*ltw*/, int /*lth*/)
-	{
-		const openvdb::math::Coord xyz(x, y, z);
-		return read(accessor->getValue(xyz));
-	}
-
-	static ccl_always_inline float4 read_data(const T */*data*/,
-	                                          openvdb::Vec3SGrid::ConstAccessor *accessor,
-	                                          int x, int y, int z,
-	                                          int /*width*/, int /*height*/,
-	                                          int /*tiw*/, int /*tih*/,
-	                                          int /*evw*/, int /*evh*/,
-	                                          int /*ltw*/, int /*lth*/)
-	{
-		const openvdb::math::Coord xyz(x, y, z);
-		openvdb::math::Vec3s r = accessor->getValue(xyz);
-		return make_float4(r.x(), r.y(), r.z(), 1.0f);
-	}
-#endif
-
 	static ccl_always_inline int wrap_periodic(int x, int width)
 	{
 		x %= width;
@@ -347,7 +315,7 @@ struct TextureInterpolator {
 		}
 
 		const T *data = (const T*)info.data;
-		UtilType *util = (UtilType*)info.util;
+		const int *util = (const int*)info.util;
 		int ltw = info.last_tile_dim & LAST_TILE_WIDTH_MASK;
 		int lth = info.last_tile_dim & LAST_TILE_HEIGHT_MASK;
 
@@ -402,7 +370,7 @@ struct TextureInterpolator {
 
 		float4 r;
 		const T *data = (const T*)info.data;
-		UtilType *util = (UtilType*)info.util;
+		const int *util = (const int*)info.util;
 		int tiw = info.tiled_width;
 		int tih = info.tiled_height;
 		int evw = info.even_width;
@@ -558,18 +526,18 @@ ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, fl
 
 	switch(kernel_tex_type(id)) {
 		case IMAGE_DATA_TYPE_HALF:
-			return TextureInterpolator<half, void>::interp(info, x, y);
+			return TextureInterpolator<half>::interp(info, x, y);
 		case IMAGE_DATA_TYPE_BYTE:
-			return TextureInterpolator<uchar, void>::interp(info, x, y);
+			return TextureInterpolator<uchar>::interp(info, x, y);
 		case IMAGE_DATA_TYPE_FLOAT:
-			return TextureInterpolator<float, void>::interp(info, x, y);
+			return TextureInterpolator<float>::interp(info, x, y);
 		case IMAGE_DATA_TYPE_HALF4:
-			return TextureInterpolator<half4, void>::interp(info, x, y);
+			return TextureInterpolator<half4>::interp(info, x, y);
 		case IMAGE_DATA_TYPE_BYTE4:
-			return TextureInterpolator<uchar4, void>::interp(info, x, y);
+			return TextureInterpolator<uchar4>::interp(info, x, y);
 		case IMAGE_DATA_TYPE_FLOAT4:
 		default:
-			return TextureInterpolator<float4, void>::interp(info, x, y);
+			return TextureInterpolator<float4>::interp(info, x, y);
 	}
 }
 
@@ -577,50 +545,19 @@ ccl_device float4 kernel_tex_image_interp_3d(KernelGlobals *kg, int id, float x,
 {
 	const TextureInfo& info = kernel_tex_fetch(__texture_info, id);
 
-	/* UNLIKELY(info.util) is a quicker way to check if grid type is not
-	 * default, since only default type will have util == 0. */
-
 	switch(kernel_tex_type(id)) {
 		case IMAGE_DATA_TYPE_HALF:
-			if(UNLIKELY(info.util))
-				return TextureInterpolator<half, int>::interp_3d(info, x, y, z, interp);
-			else
-				return TextureInterpolator<half, void>::interp_3d(info, x, y, z, interp);
+			return TextureInterpolator<half>::interp_3d(info, x, y, z, interp);
 		case IMAGE_DATA_TYPE_BYTE:
-			if(UNLIKELY(info.util))
-				return TextureInterpolator<uchar, int>::interp_3d(info, x, y, z, interp);
-			else
-				return TextureInterpolator<uchar, void>::interp_3d(info, x, y, z, interp);
+			return TextureInterpolator<uchar>::interp_3d(info, x, y, z, interp);
 		case IMAGE_DATA_TYPE_FLOAT:
-			if(UNLIKELY(info.util))
-#ifdef WITH_OPENVDB
-				if(info.grid_type == IMAGE_GRID_TYPE_OPENVDB)
-				    return TextureInterpolator<float, openvdb::FloatGrid::ConstAccessor>::interp_3d(info, x, y, z, interp);
-				else
-#endif
-					return TextureInterpolator<float, int>::interp_3d(info, x, y, z, interp);
-			else
-				return TextureInterpolator<float, void>::interp_3d(info, x, y, z, interp);
+			return TextureInterpolator<float>::interp_3d(info, x, y, z, interp);
 		case IMAGE_DATA_TYPE_HALF4:
-			if(UNLIKELY(info.util))
-				return TextureInterpolator<half4, int>::interp_3d(info, x, y, z, interp);
-			else
-				return TextureInterpolator<half4, void>::interp_3d(info, x, y, z, interp);
+			return TextureInterpolator<half4>::interp_3d(info, x, y, z, interp);
 		case IMAGE_DATA_TYPE_BYTE4:
-			if(UNLIKELY(info.util))
-				return TextureInterpolator<uchar4, int>::interp_3d(info, x, y, z, interp);
-			else
-				return TextureInterpolator<half4, void>::interp_3d(info, x, y, z, interp);
+			return TextureInterpolator<uchar4>::interp_3d(info, x, y, z, interp);
 		case IMAGE_DATA_TYPE_FLOAT4:
-			if(UNLIKELY(info.util))
-#ifdef WITH_OPENVDB
-				if(info.grid_type == IMAGE_GRID_TYPE_OPENVDB)
-				    return TextureInterpolator<float4, openvdb

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list