[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