[Bf-blender-cvs] [a78b3ee53aa] openvdb: Merge remote-tracking branch 'origin/master' into openvdb
Lukas Tönne
noreply at git.blender.org
Mon Oct 16 11:24:19 CEST 2017
Commit: a78b3ee53aa53020b086a6df25c0e28491223dcc
Author: Lukas Tönne
Date: Mon Oct 16 10:16:13 2017 +0100
Branches: openvdb
https://developer.blender.org/rBa78b3ee53aa53020b086a6df25c0e28491223dcc
Merge remote-tracking branch 'origin/master' into openvdb
===================================================================
===================================================================
diff --cc intern/cycles/blender/CMakeLists.txt
index 3612456f34d,ae4977aaed0..4a1c3377055
--- a/intern/cycles/blender/CMakeLists.txt
+++ b/intern/cycles/blender/CMakeLists.txt
@@@ -33,9 -28,9 +28,10 @@@ set(SR
blender_shader.cpp
blender_sync.cpp
blender_texture.cpp
+ blender_volume.cpp
CCL_api.h
+ blender_object_cull.h
blender_sync.h
blender_session.h
blender_texture.h
diff --cc intern/cycles/blender/blender_object.cpp
index 5ff3293020d,eb573b75e9e..48e7bebeff8
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@@ -14,24 -14,24 +14,25 @@@
* limitations under the License.
*/
- #include "camera.h"
- #include "integrator.h"
- #include "graph.h"
- #include "light.h"
- #include "mesh.h"
- #include "object.h"
- #include "scene.h"
- #include "nodes.h"
- #include "particles.h"
- #include "shader.h"
+ #include "render/camera.h"
+ #include "render/integrator.h"
+ #include "render/graph.h"
+ #include "render/light.h"
+ #include "render/mesh.h"
+ #include "render/object.h"
+ #include "render/scene.h"
+ #include "render/nodes.h"
+ #include "render/particles.h"
+ #include "render/shader.h"
+#include "volume.h"
- #include "blender_sync.h"
- #include "blender_util.h"
+ #include "blender/blender_object_cull.h"
+ #include "blender/blender_sync.h"
+ #include "blender/blender_util.h"
- #include "util_foreach.h"
- #include "util_hash.h"
- #include "util_logging.h"
+ #include "util/util_foreach.h"
+ #include "util/util_hash.h"
+ #include "util/util_logging.h"
CCL_NAMESPACE_BEGIN
@@@ -460,15 -349,8 +365,13 @@@ Object *BlenderSync::sync_object(BL::Ob
if(object_map.sync(&object, b_ob, b_parent, key))
object_updated = true;
- bool use_holdout = (layer_flag & render_layer.holdout_layer) != 0;
-
- /* mesh sync */
- object->mesh = sync_mesh(b_ob, object_updated, hide_tris);
+ if(object_has_sparse_volume(b_ob)) {
+ sync_volume(b_ob);
+ }
+ /*else*/ {
+ /* mesh sync */
+ object->mesh = sync_mesh(b_ob, object_updated, hide_tris);
+ }
/* special case not tracked by object update flags */
diff --cc intern/cycles/blender/blender_util.h
index c729f5f2a35,363e19f7a20..5b63f986538
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@@ -781,26 -784,35 +784,55 @@@ struct ParticleSystemKey
}
};
+ class EdgeMap {
+ public:
+ EdgeMap() {
+ }
+
+ void clear() {
+ edges_.clear();
+ }
+
+ void insert(int v0, int v1) {
+ get_sorted_verts(v0, v1);
+ edges_.insert(std::pair<int, int>(v0, v1));
+ }
+
+ bool exists(int v0, int v1) {
+ get_sorted_verts(v0, v1);
+ return edges_.find(std::pair<int, int>(v0, v1)) != edges_.end();
+ }
+
+ protected:
+ void get_sorted_verts(int& v0, int& v1) {
+ if(v0 > v1) {
+ swap(v0, v1);
+ }
+ }
+
+ set< std::pair<int, int> > edges_;
+ };
+
+/* Volume Key */
+
+/* XXX For now we just use Object ID as a volume key;
+ * Volumes may become a true ID block in Blender later,
+ * or the key can be augmented to distinguish multiple volumes inside the same object.
+ */
+struct VolumeKey {
+ void *ob;
+
+ VolumeKey(void *ob_)
+ : ob(ob_)
+ {
+ }
+
+ bool operator<(const VolumeKey& k) const
+ {
+ return ob < k.ob;
+ }
+};
+
CCL_NAMESPACE_END
#endif /* __BLENDER_UTIL_H__ */
diff --cc intern/cycles/device/CMakeLists.txt
index 091bb767162,3c632160fbd..711f81790e5
--- a/intern/cycles/device/CMakeLists.txt
+++ b/intern/cycles/device/CMakeLists.txt
@@@ -1,13 -1,6 +1,7 @@@
set(INC
- .
- ../graph
- ../kernel
- ../kernel/svm
+ ..
+ ../kernel/openvdb
- ../kernel/osl
- ../util
- ../render
../../glew-mx
)
diff --cc intern/cycles/device/device_cpu.cpp
index fe870b1587f,a17caabc850..e4830ca77fd
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@@ -24,32 -24,34 +24,40 @@@
# include <OSL/oslexec.h>
#endif
- #include "device.h"
- #include "device_intern.h"
+ #include "device/device.h"
+ #include "device/device_denoising.h"
+ #include "device/device_intern.h"
+ #include "device/device_split_kernel.h"
- #include "kernel.h"
- #include "kernel_compat_cpu.h"
- #include "kernel_types.h"
- #include "kernel_globals.h"
+ #include "kernel/kernel.h"
+ #include "kernel/kernel_compat_cpu.h"
+ #include "kernel/kernel_types.h"
+ #include "kernel/split/kernel_split_data.h"
+ #include "kernel/kernel_globals.h"
- #include "osl_shader.h"
- #include "osl_globals.h"
+ #include "kernel/filter/filter.h"
+
+ #include "kernel/osl/osl_shader.h"
+ #include "kernel/osl/osl_globals.h"
+#ifdef WITH_OPENVDB
+#include "vdb_globals.h"
+#include "vdb_thread.h"
+#endif
+
- #include "buffers.h"
+
- #include "util_debug.h"
- #include "util_foreach.h"
- #include "util_function.h"
- #include "util_logging.h"
- #include "util_opengl.h"
- #include "util_progress.h"
- #include "util_system.h"
- #include "util_thread.h"
+ #include "render/buffers.h"
+
+ #include "util/util_debug.h"
+ #include "util/util_foreach.h"
+ #include "util/util_function.h"
+ #include "util/util_logging.h"
+ #include "util/util_map.h"
+ #include "util/util_opengl.h"
+ #include "util/util_optimization.h"
+ #include "util/util_progress.h"
+ #include "util/util_system.h"
+ #include "util/util_thread.h"
CCL_NAMESPACE_BEGIN
@@@ -116,6 -126,143 +132,147 @@@ public
}
}
+ inline F operator()() const {
+ assert(kernel);
+ return kernel;
+ }
+ protected:
+ F kernel;
+ };
+
+ class CPUSplitKernel : public DeviceSplitKernel {
+ CPUDevice *device;
+ public:
+ explicit CPUSplitKernel(CPUDevice *device);
+
+ virtual bool enqueue_split_kernel_data_init(const KernelDimensions& dim,
+ RenderTile& rtile,
+ int num_global_elements,
+ device_memory& kernel_globals,
+ device_memory& kernel_data_,
+ device_memory& split_data,
+ device_memory& ray_state,
+ device_memory& queue_index,
+ device_memory& use_queues_flag,
+ device_memory& work_pool_wgs);
+
+ virtual SplitKernelFunction* get_split_kernel_function(const string& kernel_name,
+ const DeviceRequestedFeatures&);
+ virtual int2 split_kernel_local_size();
+ virtual int2 split_kernel_global_size(device_memory& kg, device_memory& data, DeviceTask *task);
+ virtual uint64_t state_buffer_size(device_memory& kg, device_memory& data, size_t num_threads);
+ };
+
+ class CPUDevice : public Device
+ {
+ public:
+ TaskPool task_pool;
+ KernelGlobals kernel_globals;
+
+ device_vector<TextureInfo> texture_info;
+ bool need_texture_info;
+
+ #ifdef WITH_OSL
+ OSLGlobals osl_globals;
+ #endif
+
++#ifdef WITH_OPENVDB
++ OpenVDBGlobals vdb_globals;
++#endif
++
+ bool use_split_kernel;
+
+ DeviceRequestedFeatures requested_features;
+
+ KernelFunctions<void(*)(KernelGlobals *, float *, int, int, int, int, int)> path_trace_kernel;
+ KernelFunctions<void(*)(KernelGlobals *, uchar4 *, float *, float, int, int, int, int)> convert_to_half_float_kernel;
+ KernelFunctions<void(*)(KernelGlobals *, uchar4 *, float *, float, int, int, int, int)> convert_to_byte_kernel;
+ KernelFunctions<void(*)(KernelGlobals *, uint4 *, float4 *, int, int, int, int, int)> shader_kernel;
+
+ KernelFunctions<void(*)(int, TilesInfo*, int, int, float*, float*, float*, float*, float*, int*, int, int)> filter_divide_shadow_kernel;
+ KernelFunctions<void(*)(int, TilesInfo*, int, int, int, int, float*, float*, int*, int, int)> filter_get_feature_kernel;
+ KernelFunctions<void(*)(int, int, float*, float*, float*, float*, int*, int)> filter_detect_outliers_kernel;
+ KernelFunctions<void(*)(int, int, float*, float*, float*, float*, int*, int)> filter_combine_halves_kernel;
+
+ KernelFunctions<void(*)(int, int, float*, float*, float*, int*, int, int, float, float)> filter_nlm_calc_difference_kernel;
+ KernelFunctions<void(*)(float*, float*, int*, int, int)> filter_nlm_blur_kernel;
+ KernelFunctions<void(*)(float*, float*, int*, int, int)> filter_nlm_calc_weight_kernel;
+ KernelFunctions<void(*)(int, int, float*, float*, float*, float*, int*, int, int)> filter_nlm_update_output_kernel;
+ KernelFunctions<void(*)(float*, float*, int*, int)> filter_nlm_normalize_kernel;
+
+ KernelFunctions<void(*)(float*, int, int, int, float*, int*, int*, int, int, float)> filter_construct_transform_kernel;
+ KernelFunctions<void(*)(int, int, float*, float*, float*, int*, float*, float3*, int*, int*, int, int, int, int)> filter_nlm_construct_gramian_kernel;
+ KernelFunctions<void(*)(int, int, int, int, int, float*, int*, float*, float3*, int*, int)> filter_finalize_kernel;
+
+ KernelFunctions<void(*)(KernelGlobals *, ccl_constant KernelData*, ccl_global void*, int, ccl_global char*,
+ int, int, int, int, int, int, int, int, ccl_global int*, int,
+ ccl_global char*, ccl_global unsigned int*, unsigned int, ccl_global float*)> data_init_kernel;
+ unordered_map<string, KernelFunctions<void(*)(KernelGlobals*, KernelData*)> > split_kernels;
+
+ #define KERNEL_FUNCTIONS(name) \
+ KERNEL_NAME_EVAL(cpu, name), \
+ KERNEL_NAME_EVAL(cpu_sse2, name), \
+ KERNEL_NAME_EVAL(cpu_sse3, name), \
+ KERNEL_NAME_EVAL(cpu_sse41, name), \
+ KERNEL_NAME_EVAL(cpu_avx, name), \
+ KERNEL_NAME_EVAL(cpu_avx2, name)
+
+ CPUDevice(DeviceInfo& info, Stats &stats, bool background)
+ : Device(info, stats, background),
+ #define REGISTER_KERNEL(name) name ## _kernel(KERNEL_FUNCTIONS(name))
+ REGISTER_KERNEL(path_trace),
+ REGISTER_KERNEL(convert_to_half_float
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list