[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51117] trunk/blender/intern/cycles/kernel /osl: Fix for a case of 'static initialization fiasco' with OSL closure variables.

Dalai Felinto dfelinto at gmail.com
Sun Oct 7 01:03:23 CEST 2012


ok, so we do need this patch in, right?

It may be a good idea to remove the -forceload from OSX then, to make
Linux and OSX to behave alike.

Cheers,
Dalai

2012/10/6 Lukas Toenne <lukas.toenne at googlemail.com>:
> Revision: 51117
>           http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51117
> Author:   lukastoenne
> Date:     2012-10-06 16:28:02 +0000 (Sat, 06 Oct 2012)
> Log Message:
> -----------
> Fix for a case of 'static initialization fiasco' with OSL closure variables. The parameter lists are using OIIO::TypeDesc static standards, which are also static variables. With static OSL libraries these are not initialized when the closure parameter lists are initialized, so OSL rejects the closure types.
>
> Putting static initialization into functions works just as well, but ensures the OIIO::TypeDesc access is delayed until initialization is complete.
>
> Modified Paths:
> --------------
>     trunk/blender/intern/cycles/kernel/osl/background.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_transparent.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_ward.cpp
>     trunk/blender/intern/cycles/kernel/osl/bsdf_westin.cpp
>     trunk/blender/intern/cycles/kernel/osl/bssrdf.cpp
>     trunk/blender/intern/cycles/kernel/osl/debug.cpp
>     trunk/blender/intern/cycles/kernel/osl/emissive.cpp
>     trunk/blender/intern/cycles/kernel/osl/osl_closures.cpp
>     trunk/blender/intern/cycles/kernel/osl/osl_closures.h
>     trunk/blender/intern/cycles/kernel/osl/vol_subsurface.cpp
>
> Modified: trunk/blender/intern/cycles/kernel/osl/background.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/background.cpp       2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/background.cpp       2012-10-06 16:28:02 UTC (rev 51117)
> @@ -85,16 +85,25 @@
>         }
>  };
>
> -ClosureParam closure_background_params[] = {
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(GenericBackgroundClosure)
> -};
>
> +ClosureParam *closure_background_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(GenericBackgroundClosure)
> +       };
> +       return params;
> +}
> +
>  CLOSURE_PREPARE(closure_background_prepare, GenericBackgroundClosure)
>
> -ClosureParam closure_holdout_params[] = {
> -       CLOSURE_FINISH_PARAM(HoldoutClosure)
> -};
> +ClosureParam *closure_holdout_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_FINISH_PARAM(HoldoutClosure)
> +       };
> +       return params;
> +}
>
>  CLOSURE_PREPARE(closure_holdout_prepare, HoldoutClosure)
>
>
> Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp    2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/bsdf_ashikhmin_velvet.cpp    2012-10-06 16:28:02 UTC (rev 51117)
> @@ -173,12 +173,16 @@
>
>
>
> -ClosureParam bsdf_ashikhmin_velvet_params[] = {
> -       CLOSURE_VECTOR_PARAM(AshikhminVelvetClosure, m_N),
> -       CLOSURE_FLOAT_PARAM(AshikhminVelvetClosure, m_sigma),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(AshikhminVelvetClosure)
> -};
> +ClosureParam *bsdf_ashikhmin_velvet_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(AshikhminVelvetClosure, m_N),
> +           CLOSURE_FLOAT_PARAM(AshikhminVelvetClosure, m_sigma),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(AshikhminVelvetClosure)
> +       };
> +       return params;
> +}
>
>  CLOSURE_PREPARE(bsdf_ashikhmin_velvet_prepare, AshikhminVelvetClosure)
>
>
> Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp     2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/bsdf_diffuse.cpp     2012-10-06 16:28:02 UTC (rev 51117)
> @@ -168,17 +168,25 @@
>         }
>  };
>
> -ClosureParam bsdf_diffuse_params[] = {
> -       CLOSURE_VECTOR_PARAM(DiffuseClosure, m_N),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(DiffuseClosure)
> -};
> +ClosureParam *bsdf_diffuse_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(DiffuseClosure, m_N),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(DiffuseClosure)
> +       };
> +       return params;
> +}
>
> -ClosureParam bsdf_translucent_params[] = {
> -       CLOSURE_VECTOR_PARAM(TranslucentClosure, m_N),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(TranslucentClosure)
> -};
> +ClosureParam *bsdf_translucent_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(TranslucentClosure, m_N),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(TranslucentClosure)
> +       };
> +       return params;
> +}
>
>  CLOSURE_PREPARE(bsdf_diffuse_prepare, DiffuseClosure)
>  CLOSURE_PREPARE(bsdf_translucent_prepare, TranslucentClosure)
>
> Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp  2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/bsdf_microfacet.cpp  2012-10-06 16:28:02 UTC (rev 51117)
> @@ -503,35 +503,51 @@
>
>
>
> -ClosureParam bsdf_microfacet_ggx_params[] = {
> -       CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<0>, m_N),
> -       CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<0>, m_ag),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<0>)
> -};
> +ClosureParam *bsdf_microfacet_ggx_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<0>, m_N),
> +           CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<0>, m_ag),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<0>)
> +       };
> +       return params;
> +}
>
> -ClosureParam bsdf_microfacet_ggx_refraction_params[] = {
> -       CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<1>, m_N),
> -       CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_ag),
> -       CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_eta),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<1>)
> -};
> +ClosureParam *bsdf_microfacet_ggx_refraction_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(MicrofacetGGXClosure<1>, m_N),
> +           CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_ag),
> +           CLOSURE_FLOAT_PARAM(MicrofacetGGXClosure<1>, m_eta),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(MicrofacetGGXClosure<1>)
> +       };
> +       return params;
> +}
>
> -ClosureParam bsdf_microfacet_beckmann_params[] = {
> -       CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<0>, m_N),
> -       CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<0>, m_ab),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<0>)
> -};
> +ClosureParam *bsdf_microfacet_beckmann_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<0>, m_N),
> +           CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<0>, m_ab),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<0>)
> +       };
> +       return params;
> +}
>
> -ClosureParam bsdf_microfacet_beckmann_refraction_params[] = {
> -       CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<1>, m_N),
> -       CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_ab),
> -       CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_eta),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<1>)
> -};
> +ClosureParam *bsdf_microfacet_beckmann_refraction_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(MicrofacetBeckmannClosure<1>, m_N),
> +           CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_ab),
> +           CLOSURE_FLOAT_PARAM(MicrofacetBeckmannClosure<1>, m_eta),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(MicrofacetBeckmannClosure<1>)
> +       };
> +       return params;
> +}
>
>  CLOSURE_PREPARE(bsdf_microfacet_ggx_prepare,                 MicrofacetGGXClosure<0>)
>  CLOSURE_PREPARE(bsdf_microfacet_ggx_refraction_prepare,      MicrofacetGGXClosure<1>)
>
> Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp  2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/bsdf_oren_nayar.cpp  2012-10-06 16:28:02 UTC (rev 51117)
> @@ -125,12 +125,16 @@
>         }
>  };
>
> -ClosureParam bsdf_oren_nayar_params[] = {
> -       CLOSURE_VECTOR_PARAM(OrenNayarClosure, m_N),
> -       CLOSURE_FLOAT_PARAM(OrenNayarClosure, m_sigma),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(OrenNayarClosure)
> -};
> +ClosureParam *bsdf_oren_nayar_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(OrenNayarClosure, m_N),
> +           CLOSURE_FLOAT_PARAM(OrenNayarClosure, m_sigma),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(OrenNayarClosure)
> +       };
> +       return params;
> +}
>
>  CLOSURE_PREPARE(bsdf_oren_nayar_prepare, OrenNayarClosure)
>
>
> Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp       2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/bsdf_phong.cpp       2012-10-06 16:28:02 UTC (rev 51117)
> @@ -258,18 +258,28 @@
>
>
>
> -ClosureParam bsdf_phong_params[] = {
> -    CLOSURE_VECTOR_PARAM(PhongClosure, m_N),
> -    CLOSURE_FLOAT_PARAM (PhongClosure, m_exponent),
> -    CLOSURE_STRING_KEYPARAM("label"),
> -    CLOSURE_FINISH_PARAM(PhongClosure) };
> +ClosureParam *bsdf_phong_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(PhongClosure, m_N),
> +           CLOSURE_FLOAT_PARAM (PhongClosure, m_exponent),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(PhongClosure)
> +       };
> +       return params;
> +}
>
> -ClosureParam bsdf_phong_ramp_params[] = {
> -    CLOSURE_VECTOR_PARAM     (PhongRampClosure, m_N),
> -    CLOSURE_FLOAT_PARAM      (PhongRampClosure, m_exponent),
> -    CLOSURE_COLOR_ARRAY_PARAM(PhongRampClosure, m_colors, PhongRampClosure::MAXCOLORS),
> -    CLOSURE_STRING_KEYPARAM("label"),
> -    CLOSURE_FINISH_PARAM     (PhongRampClosure) };
> +ClosureParam *bsdf_phong_ramp_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM     (PhongRampClosure, m_N),
> +           CLOSURE_FLOAT_PARAM      (PhongRampClosure, m_exponent),
> +           CLOSURE_COLOR_ARRAY_PARAM(PhongRampClosure, m_colors, PhongRampClosure::MAXCOLORS),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM     (PhongRampClosure)
> +       };
> +       return params;
> +}
>
>  CLOSURE_PREPARE(bsdf_phong_prepare, PhongClosure)
>  CLOSURE_PREPARE(bsdf_phong_ramp_prepare, PhongRampClosure)
>
> Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp  2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/bsdf_reflection.cpp  2012-10-06 16:28:02 UTC (rev 51117)
> @@ -97,11 +97,15 @@
>         }
>  };
>
> -ClosureParam bsdf_reflection_params[] = {
> -       CLOSURE_VECTOR_PARAM(ReflectionClosure, m_N),
> -       CLOSURE_STRING_KEYPARAM("label"),
> -       CLOSURE_FINISH_PARAM(ReflectionClosure)
> -};
> +ClosureParam *bsdf_reflection_params()
> +{
> +       static ClosureParam params[] = {
> +           CLOSURE_VECTOR_PARAM(ReflectionClosure, m_N),
> +           CLOSURE_STRING_KEYPARAM("label"),
> +           CLOSURE_FINISH_PARAM(ReflectionClosure)
> +       };
> +       return params;
> +}
>
>  CLOSURE_PREPARE(bsdf_reflection_prepare, ReflectionClosure)
>
>
> Modified: trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp  2012-10-06 14:35:48 UTC (rev 51116)
> +++ trunk/blender/intern/cycles/kernel/osl/bsdf_refraction.cpp  2012-10-06 16:28:02 UTC (rev 51117)
> @@ -108,12 +108,16 @@
>         }
>  };
>
> -ClosureParam bsdf_refraction_params[] = {
> -       CLOSURE_VECTOR_PARAM(RefractionClosure, m_N),
> -       CLOSURE_FLOAT_PARAM(RefractionClosure, m_eta),
>
> @@ Diff output truncated at 10240 characters. @@
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs


More information about the Bf-committers mailing list