Commit: 570bbf680a58b6159792e22d6a1206e4a505bae4
Author: Lukas Tönne
Date:   Thu Jun 2 17:30:33 2016 +0200
Branches: object_nodes
https://developer.blender.org/rB570bbf680a58b6159792e22d6a1206e4a505bae4

Support for image sampling in the LLVM backend.

This reintroduces the "globals" concept for mapping ID datablocks with
a consistent permanent identifier key.

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

M       release/scripts/nodes/texture_nodes.py
M       source/blender/blenkernel/BKE_texture.h
M       source/blender/blenkernel/intern/texture.c
M       source/blender/blenvm/BVM_api.h
M       source/blender/blenvm/CMakeLists.txt
M       source/blender/blenvm/bvm/CMakeLists.txt
M       source/blender/blenvm/bvm/bvm_eval.cc
M       source/blender/blenvm/bvm/bvm_eval.h
M       source/blender/blenvm/compile/node_graph.cc
M       source/blender/blenvm/compile/node_graph.h
M       source/blender/blenvm/intern/bvm_api.cc
M       source/blender/blenvm/llvm/CMakeLists.txt
M       source/blender/blenvm/llvm/llvm_compiler.cc
M       source/blender/blenvm/llvm/llvm_compiler.h
M       source/blender/blenvm/llvm/llvm_compiler_dual.cc
A       source/blender/blenvm/modules/mod_image.h
M       source/blender/blenvm/modules/modules.h
A       source/blender/blenvm/util/util_eval_globals.cc
A       source/blender/blenvm/util/util_eval_globals.h
M       source/blender/blenvm/util/util_opcode.h
M       source/blender/modifiers/CMakeLists.txt
M       source/blender/modifiers/intern/MOD_displace.c
M       source/blender/render/intern/source/render_texture.c

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

diff --git a/release/scripts/nodes/texture_nodes.py 
b/release/scripts/nodes/texture_nodes.py
index d1fe4d3..78adad8 100644
--- a/release/scripts/nodes/texture_nodes.py
+++ b/release/scripts/nodes/texture_nodes.py
@@ -190,6 +190,7 @@ def register():
             NodeItem("ObjectValueIntNode"),
             NodeItem("ObjectValueVectorNode"),
             NodeItem("ObjectValueColorNode"),
+            NodeItem("ImageSampleNode"),
             ]),
         TextureNodeCategory("TEX_OUTPUT", "Output", items=[
             NodeItem("TextureOutputNode"),
diff --git a/source/blender/blenkernel/BKE_texture.h 
b/source/blender/blenkernel/BKE_texture.h
index e4c9a6d..904c130 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -39,6 +39,7 @@ extern "C" {
 
 struct bNode;
 struct Brush;
+struct BVMEvalGlobals;
 struct ColorBand;
 struct EnvMap;
 struct EvaluationContext;
@@ -136,8 +137,9 @@ bool    BKE_texture_is_image_user(const struct Tex *tex);
 
 void BKE_texture_get_value(
         const struct Scene *scene, struct Tex *texture,
-        float *tex_co, struct TexResult *texres, bool use_color_management);
-void BKE_texture_get_value_deriv(
+        const float *tex_co, struct TexResult *texres, bool 
use_color_management);
+void BKE_texture_get_value_ex(
+        struct BVMEvalGlobals *globals,
         const struct Scene *scene, struct Tex *texture,
         const float *tex_co, const float *tex_dx, const float *tex_dy,
         struct TexResult *texres, struct TexResult *texres_dx, struct 
TexResult *texres_dy,
diff --git a/source/blender/blenkernel/intern/texture.c 
b/source/blender/blenkernel/intern/texture.c
index 8e24dd1..b6ce24d 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -1660,45 +1660,36 @@ bool BKE_texture_dependsOnTime(const struct Tex 
*texture)
 
 void BKE_texture_get_value(
         const Scene *scene, Tex *texture,
-        float *tex_co, TexResult *texres, bool use_color_management)
+        const float *tex_co, TexResult *texres,
+        bool use_color_management)
 {
-       int result_type;
-       bool do_color_manage = false;
-
-       if (scene && use_color_management) {
-               do_color_manage = 
BKE_scene_check_color_management_enabled(scene);
-       }
-
-       /* no node textures for now */
-       result_type = multitex_ext_safe(texture, tex_co, texres, NULL, 
do_color_manage, false);
-
-       /* if the texture gave an RGB value, we assume it didn't give a valid
-        * intensity, since this is in the context of modifiers don't use 
perceptual color conversion.
-        * if the texture didn't give an RGB value, copy the intensity across
-        */
-       if (result_type & TEX_RGB) {
-               texres->tin = (1.0f / 3.0f) * (texres->tr + texres->tg + 
texres->tb);
-       }
-       else {
-               copy_v3_fl(&texres->tr, texres->tin);
-       }
+       BKE_texture_get_value_ex(NULL, scene, texture,
+                                tex_co, NULL, NULL,
+                                texres, NULL, NULL,
+                                use_color_management);
 }
 
-void BKE_texture_get_value_deriv(
+void BKE_texture_get_value_ex(
+        struct BVMEvalGlobals *globals,
         const Scene *scene, Tex *texture,
         const float *tex_co, const float *tex_dx, const float *tex_dy,
         TexResult *texres, TexResult *texres_dx, TexResult *texres_dy,
-        bool UNUSED(use_color_management))
+        bool use_color_management)
 {
        int result_type;
+       bool do_color_manage = false;
+
+       if (scene && use_color_management) {
+               do_color_manage = 
BKE_scene_check_color_management_enabled(scene);
+       }
 
-       /* no node textures for now */
        if (texture->use_nodes && texture->nodetree) {
                struct BVMFunction *fn = 
BVM_gen_texture_function_llvm(texture->nodetree, true);
                if (fn) {
                        struct BVMEvalContext *context = BVM_context_create();
                        
-                       BVM_eval_texture_llvm(context, fn, 
+                       BVM_eval_texture_llvm(globals,
+                                             context, fn,
                                              texres, texres_dx, texres_dy,
                                              tex_co, tex_dx, tex_dy,
                                              0, 0, scene->r.cfra, false);
@@ -1708,6 +1699,10 @@ void BKE_texture_get_value_deriv(
                        BVM_function_llvm_release(fn);
                }
        }
+       else {
+               struct ImagePool *image_pool = (globals ? 
BVM_globals_image_pool(globals) : NULL);
+               result_type = multitex_ext_safe(texture, (float*)tex_co, 
texres, image_pool, do_color_manage, false);
+       }
 
        /* if the texture gave an RGB value, we assume it didn't give a valid
         * intensity, since this is in the context of modifiers don't use 
perceptual color conversion.
diff --git a/source/blender/blenvm/BVM_api.h b/source/blender/blenvm/BVM_api.h
index 45f3af3..467e147 100644
--- a/source/blender/blenvm/BVM_api.h
+++ b/source/blender/blenvm/BVM_api.h
@@ -91,6 +91,7 @@ BVMBufferType BVM_typedesc_buffer_type(struct BVMTypeDesc 
*typedesc);
 
 /* ------------------------------------------------------------------------- */
 
+struct bNodeTree;
 struct DepsNodeHandle;
 
 void BVM_nodetree_compile_dependencies(struct bNodeTree *ntree, struct 
DepsNodeHandle *handle);
@@ -102,10 +103,12 @@ struct BVMEvalGlobals;
 struct BVMEvalContext;
 
 struct bNodeTree;
+struct ImagePool;
 
 struct BVMEvalGlobals *BVM_globals_create(void);
 void BVM_globals_free(struct BVMEvalGlobals *globals);
 
+struct ImagePool *BVM_globals_image_pool(struct BVMEvalGlobals *globals);
 void BVM_globals_add_object(struct BVMEvalGlobals *globals, int key, struct 
Object *ob);
 void BVM_globals_add_nodetree_relations(struct BVMEvalGlobals *globals, struct 
bNodeTree *ntree);
 
@@ -139,7 +142,7 @@ struct BVMFunction *BVM_gen_forcefield_function_bvm(struct 
bNodeTree *btree, boo
 void BVM_debug_forcefield_nodes(struct bNodeTree *btree, FILE *debug_file, 
const char *label, BVMDebugMode mode);
 
 void BVM_eval_forcefield_bvm(struct BVMEvalGlobals *globals, struct 
BVMEvalContext *context, struct BVMFunction *fn,
-                         struct Object *effob, const struct EffectedPoint 
*point, float force[3], float impulse[3]);
+                             struct Object *effob, const struct EffectedPoint 
*point, float force[3], float impulse[3]);
 
 /* ------------------------------------------------------------------------- */
 
@@ -151,11 +154,13 @@ struct BVMFunction *BVM_gen_texture_function_llvm(struct 
bNodeTree *btree, bool
 
 void BVM_debug_texture_nodes(struct bNodeTree *btree, FILE *debug_file, const 
char *label, BVMDebugMode mode);
 
-void BVM_eval_texture_bvm(struct BVMEvalContext *context, struct BVMFunction 
*fn,
+void BVM_eval_texture_bvm(struct BVMEvalGlobals *globals, struct 
BVMEvalContext *context,
+                          struct BVMFunction *fn,
                           struct TexResult *target,
                           float coord[3], float dxt[3], float dyt[3], int 
osatex,
                           short which_output, int cfra, int preview);
-void BVM_eval_texture_llvm(struct BVMEvalContext *context, struct BVMFunction 
*fn,
+void BVM_eval_texture_llvm(struct BVMEvalGlobals *globals, struct 
BVMEvalContext *context,
+                           struct BVMFunction *fn,
                            struct TexResult *value,
                            struct TexResult *value_dx,
                            struct TexResult *value_dy,
diff --git a/source/blender/blenvm/CMakeLists.txt 
b/source/blender/blenvm/CMakeLists.txt
index 9b264a5..af06863 100644
--- a/source/blender/blenvm/CMakeLists.txt
+++ b/source/blender/blenvm/CMakeLists.txt
@@ -33,6 +33,7 @@ set(INC
        ../blenkernel
        ../blenlib
        ../depsgraph
+       ../imbuf
        ../makesdna
        ../makesrna
        ../render/extern/include
@@ -54,12 +55,15 @@ set(SRC
        modules/mod_defines.h
        modules/mod_base.h
        modules/mod_color.h
+       modules/mod_image.h
        modules/mod_math.h
        modules/mod_texture.h
 
        util/util_opcode.h
        util/util_data_ptr.h
        util/util_debug.h
+       util/util_eval_globals.cc
+       util/util_eval_globals.h
        util/util_hash.h
        util/util_map.h
        util/util_math.h
diff --git a/source/blender/blenvm/bvm/CMakeLists.txt 
b/source/blender/blenvm/bvm/CMakeLists.txt
index 14601ef..ac668dd 100644
--- a/source/blender/blenvm/bvm/CMakeLists.txt
+++ b/source/blender/blenvm/bvm/CMakeLists.txt
@@ -26,6 +26,7 @@
 set(INC
        .
        ..
+       ../intern
        ../modules
        ../util
        ../../blenkernel
diff --git a/source/blender/blenvm/bvm/bvm_eval.cc 
b/source/blender/blenvm/bvm/bvm_eval.cc
index 79da5cb..fd053c7 100644
--- a/source/blender/blenvm/bvm/bvm_eval.cc
+++ b/source/blender/blenvm/bvm/bvm_eval.cc
@@ -59,70 +59,6 @@ extern "C" {
 
 namespace blenvm {
 
-EvalGlobals::EvalGlobals()
-{
-       m_image_pool = BKE_image_pool_new();
-}
-
-EvalGlobals::~EvalGlobals()
-{
-       BKE_image_pool_free(m_image_pool);
-}
-
-int EvalGlobals::get_id_key(ID *id)
-{
-       int hash = BLI_ghashutil_strhash(id->name);
-       if (id->lib) {
-               hash = hash_combine(hash, BLI_ghashutil_strhash(id->lib->name));
-       }
-       return hash;
-}
-
-void EvalGlobals::add_object(int key, Object *ob)
-{
-       m_objects[key] = ob;
-}
-
-PointerRNA EvalGlobals::lookup_object(int key) const
-{
-       ObjectMap::const_iterator it = m_objects.find(key);
-       if (it != m_objects.end()) {
-               PointerRNA ptr;
-               RNA_id_pointer_create((ID *)it->second, &ptr);
-               return ptr;
-       }
-       else {
-               return PointerRNA_NULL;
-       }
-}
-
-void EvalGlobals::add_image(int key, Image *ima)
-{
-       m_images[key] = ima;
-}
-
-ImBuf *EvalGlobals::lookup_imbuf(int key, ImageUser *iuser) const
-{
-       ImageMap::const_iterator ima_it = m_images.find(key);
-       Image *ima = (ima_it != m_images.end()) ? ima_it->second : NULL;
-       if (!ima)
-               return NULL;
-       
-       /* local changes to the original ImageUser */
-//     if (!BKE_image_is_multilayer(ima))
-//             iuser->multi_index = 
BKE_scene_multiview_view_id_get(this->m_rd, this->m_viewName);
-       
-       ImBuf *ibuf = BKE_image_pool_acquire_ibuf(ima, iuser, m_image_pool);
-       if (!ibuf || (!ibuf->rect && !ibuf->rect_float)) {
-               BKE_image_pool_release_ibuf(ima, ibuf, m_image_pool);
-               return NULL;
-       }
-       
-       return ibuf;
-}
-
-/* ------------------------------------------------------------------------- */
-
 int EvalStack::stack_size(size_t datasize)
 {
        return int_div_ceil(datasize, sizeof(EvalStack));
diff --git a/source/blender/blenvm/bvm/bvm_eval.h 
b/source/blender/blenvm/bvm/bvm_eval.h
index 68dd80f..c4d4c06 100644
--- a/source/blender/blen

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to