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:
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r--intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h12
-rw-r--r--intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h12
-rw-r--r--intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h27
3 files changed, 16 insertions, 35 deletions
diff --git a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
index 347d0fec7f5..b466b41f456 100644
--- a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
+++ b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
@@ -490,21 +490,17 @@ template<typename T> struct NanoVDBInterpolator {
static ccl_always_inline float4
interp_3d(const TextureInfo &info, float x, float y, float z, InterpolationType interp)
{
+ const nanovdb::Vec3f xyz(x, y, z);
nanovdb::NanoGrid<T> *const grid = (nanovdb::NanoGrid<T> *)info.data;
const nanovdb::NanoRoot<T> &root = grid->tree().root();
- const nanovdb::Coord off(root.bbox().min());
- const nanovdb::Coord dim(root.bbox().dim());
- const nanovdb::Vec3f xyz(off[0] + x * dim[0], off[1] + y * dim[1], off[2] + z * dim[2]);
-
typedef nanovdb::ReadAccessor<nanovdb::NanoRoot<T>> ReadAccessorT;
switch ((interp == INTERPOLATION_NONE) ? info.interpolation : interp) {
- default:
- case INTERPOLATION_LINEAR:
- return read(nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz));
case INTERPOLATION_CLOSEST:
return read(nanovdb::SampleFromVoxels<ReadAccessorT, 0, false>(root)(xyz));
- case INTERPOLATION_CUBIC:
+ case INTERPOLATION_LINEAR:
+ return read(nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz));
+ default:
return read(nanovdb::SampleFromVoxels<ReadAccessorT, 3, false>(root)(xyz));
}
}
diff --git a/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h b/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h
index 5a005a3f65b..c2a0ee06dbc 100644
--- a/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h
+++ b/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h
@@ -130,21 +130,17 @@ template<typename T>
ccl_device_inline T kernel_tex_image_interp_nanovdb(
const TextureInfo &info, float x, float y, float z, uint interpolation)
{
+ const nanovdb::Vec3f xyz(x, y, z);
nanovdb::NanoGrid<T> *const grid = (nanovdb::NanoGrid<T> *)info.data;
const nanovdb::NanoRoot<T> &root = grid->tree().root();
- const nanovdb::Coord off(root.bbox().min());
- const nanovdb::Coord dim(root.bbox().dim());
- const nanovdb::Vec3f xyz(off[0] + x * dim[0], off[1] + y * dim[1], off[2] + z * dim[2]);
-
typedef nanovdb::ReadAccessor<nanovdb::NanoRoot<T>> ReadAccessorT;
switch (interpolation) {
- default:
- case INTERPOLATION_LINEAR:
- return nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz);
case INTERPOLATION_CLOSEST:
return nanovdb::SampleFromVoxels<ReadAccessorT, 0, false>(root)(xyz);
- case INTERPOLATION_CUBIC:
+ case INTERPOLATION_LINEAR:
+ return nanovdb::SampleFromVoxels<ReadAccessorT, 1, false>(root)(xyz);
+ default:
return nanovdb::SampleFromVoxels<ReadAccessorT, 3, false>(root)(xyz);
}
}
diff --git a/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h b/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h
index 2f44f249c5f..cbf9a208112 100644
--- a/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h
+++ b/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h
@@ -229,32 +229,29 @@ ccl_device float4 kernel_tex_image_interp_3d(KernelGlobals *kg, int id, float3 P
uint interpolation = (interp == INTERPOLATION_NONE) ? info->interpolation : interp;
#ifdef WITH_NANOVDB
+ cnanovdb_Vec3F xyz;
+ xyz.mVec[0] = x;
+ xyz.mVec[1] = y;
+ xyz.mVec[2] = z;
+
if (info->data_type == IMAGE_DATA_TYPE_NANOVDB_FLOAT) {
ccl_global cnanovdb_griddata *grid =
(ccl_global cnanovdb_griddata *)(kg->buffers[info->cl_buffer] + info->data);
const ccl_global cnanovdb_rootdataF *root = cnanovdb_treedata_rootF(
cnanovdb_griddata_tree(grid));
- cnanovdb_Vec3F xyz;
- xyz.mVec[0] = root->mBBox_min.mVec[0] +
- x * (root->mBBox_max.mVec[0] - root->mBBox_min.mVec[0]);
- xyz.mVec[1] = root->mBBox_min.mVec[1] +
- y * (root->mBBox_max.mVec[1] - root->mBBox_min.mVec[1]);
- xyz.mVec[2] = root->mBBox_min.mVec[2] +
- z * (root->mBBox_max.mVec[2] - root->mBBox_min.mVec[2]);
-
cnanovdb_readaccessor acc;
cnanovdb_readaccessor_init(&acc, root);
float value;
switch (interpolation) {
+ case INTERPOLATION_CLOSEST:
+ value = cnanovdb_sampleF_nearest(&acc, &xyz);
+ break;
default:
case INTERPOLATION_LINEAR:
value = cnanovdb_sampleF_trilinear(&acc, &xyz);
break;
- case INTERPOLATION_CLOSEST:
- value = cnanovdb_sampleF_nearest(&acc, &xyz);
- break;
}
return make_float4(value, value, value, 1.0f);
}
@@ -264,14 +261,6 @@ ccl_device float4 kernel_tex_image_interp_3d(KernelGlobals *kg, int id, float3 P
const ccl_global cnanovdb_rootdataF3 *root = cnanovdb_treedata_rootF3(
cnanovdb_griddata_tree(grid));
- cnanovdb_Vec3F xyz;
- xyz.mVec[0] = root->mBBox_min.mVec[0] +
- x * (root->mBBox_max.mVec[0] - root->mBBox_min.mVec[0]);
- xyz.mVec[1] = root->mBBox_min.mVec[1] +
- y * (root->mBBox_max.mVec[1] - root->mBBox_min.mVec[1]);
- xyz.mVec[2] = root->mBBox_min.mVec[2] +
- z * (root->mBBox_max.mVec[2] - root->mBBox_min.mVec[2]);
-
cnanovdb_readaccessor acc;
cnanovdb_readaccessor_init(&acc, root);