[Bf-blender-cvs] SVN commit: /data/svn/repos/bf-blender [61598] trunk/lib/win64_vc12/osl: MSVC 2013 windows x64 OpenShadingLanguage 1.6.9

Martijn Berger martijn.berger at gmail.com
Sun Jan 17 13:12:53 CET 2016


Revision: 61598
          https://developer.blender.org/rBL61598
Author:   juicyfruit
Date:     2016-01-17 12:12:43 +0000 (Sun, 17 Jan 2016)
Log Message:
-----------
MSVC 2013 windows x64 OpenShadingLanguage 1.6.9

Modified Paths:
--------------
    trunk/lib/win64_vc12/osl/build.bat
    trunk/lib/win64_vc12/osl/include/OSL/accum.h
    trunk/lib/win64_vc12/osl/include/OSL/dual.h
    trunk/lib/win64_vc12/osl/include/OSL/dual_vec.h
    trunk/lib/win64_vc12/osl/include/OSL/genclosure.h
    trunk/lib/win64_vc12/osl/include/OSL/llvm_util.h
    trunk/lib/win64_vc12/osl/include/OSL/oslcomp.h
    trunk/lib/win64_vc12/osl/include/OSL/oslconfig.h
    trunk/lib/win64_vc12/osl/include/OSL/oslexec.h
    trunk/lib/win64_vc12/osl/include/OSL/oslversion.h
    trunk/lib/win64_vc12/osl/include/OSL/rendererservices.h
    trunk/lib/win64_vc12/osl/include/OSL/shaderglobals.h
    trunk/lib/win64_vc12/osl/lib/libtestshade.lib
    trunk/lib/win64_vc12/osl/lib/libtestshade_d.lib
    trunk/lib/win64_vc12/osl/lib/oslcomp.lib
    trunk/lib/win64_vc12/osl/lib/oslcomp_d.lib
    trunk/lib/win64_vc12/osl/lib/oslexec.lib
    trunk/lib/win64_vc12/osl/lib/oslexec_d.lib
    trunk/lib/win64_vc12/osl/lib/oslquery.lib
    trunk/lib/win64_vc12/osl/lib/oslquery_d.lib
    trunk/lib/win64_vc12/osl/shaders/emitter.osl
    trunk/lib/win64_vc12/osl/shaders/emitter.oso
    trunk/lib/win64_vc12/osl/shaders/glass.oso
    trunk/lib/win64_vc12/osl/shaders/image.oso
    trunk/lib/win64_vc12/osl/shaders/matte.oso
    trunk/lib/win64_vc12/osl/shaders/metal.oso
    trunk/lib/win64_vc12/osl/shaders/ubersurface.oso

Modified: trunk/lib/win64_vc12/osl/build.bat
===================================================================
--- trunk/lib/win64_vc12/osl/build.bat	2016-01-17 12:04:11 UTC (rev 61597)
+++ trunk/lib/win64_vc12/osl/build.bat	2016-01-17 12:12:43 UTC (rev 61598)
@@ -3,7 +3,8 @@
 
 set LIBDIR=%CD%\..
 set LIBNAME=osl
-set OSL_VERSION=1.5.10
+set OSL_VERSION=1.6.9
+
 set "OSL_SOURCE=https://github.com/imageworks/OpenShadingLanguage/archive/Release-%OSL_VERSION%.zip"
 
 :: create build directory
@@ -35,8 +36,7 @@
 
 
 :Build
-::cd OpenShadingLanguage-Release-%OSL_VERSION%
-cd OpenShadingLanguage-blender-fixes
+cd OpenShadingLanguage-Release-%OSL_VERSION%
 :: create build directory
 rmdir /s build
 mkdir build\windows
@@ -53,8 +53,11 @@
  -DOPENIMAGEIOHOME=%LIBDIR%\OpenImageIO ^
  -DOPENIMAGEIO_LIBRARY=%LIBDIR%\openimageio\lib\OpenImageIO_Util.lib;%LIBDIR%\openimageio\lib\OpenImageIO.lib;%LIBDIR%\png\lib\libpng.lib;%LIBDIR%\jpeg\lib\libjpeg.lib;%LIBDIR%\tiff\lib\libtiff.lib;%LIBDIR%\openexr\lib\Half.lib;%LIBDIR%\openexr\lib\Imath-2_2.lib;%LIBDIR%\openexr\lib\IlmImf-2_2.lib;%LIBDIR%\openexr\lib\Iex-2_2.lib;%LIBDIR%\openexr\lib\IlmThread-2_2.lib ^
  -DBOOST_ROOT=%LIBDIR%\boost ^
+ -DBoost_COMPILER:STRING="-vc120" ^
+ -DBoost_USE_MULTITHREADED=ON ^
  -DBoost_USE_STATIC_LIBS=ON ^
  -DBoost_USE_STATIC_RUNTIME=ON ^
+ -DBOOST_LIBRARYDIR=%LIBDIR%\boost\lib ^
  -DZLIB_INCLUDE_DIR=%LIBDIR%\zlib\include ^
  -DZLIB_LIBRARY=%LIBDIR%\zlib\lib\libz_st.lib ^
  -DFLEX_EXECUTABLE=%LIBDIR%\osl\flex_bison\bin\win_flex.exe ^
@@ -79,8 +82,7 @@
 
 
 :Build_debug
-cd OpenShadingLanguage-blender-fixes
-::cd OpenShadingLanguage-Release-%OSL_VERSION%
+cd OpenShadingLanguage-Release-%OSL_VERSION%
 :: create build directory
 rmdir /s build
 mkdir build\windows_debug

Modified: trunk/lib/win64_vc12/osl/include/OSL/accum.h
===================================================================
--- trunk/lib/win64_vc12/osl/include/OSL/accum.h	2016-01-17 12:04:11 UTC (rev 61597)
+++ trunk/lib/win64_vc12/osl/include/OSL/accum.h	2016-01-17 12:12:43 UTC (rev 61598)
@@ -130,6 +130,11 @@
 
         ~AccumAutomata();
 
+        /// Support the given symbol as event tag on lpe expressions
+        void addEventType(ustring symbol) { m_user_events.push_back(symbol); };
+        /// Support the given symbol as scattering tag on lpe expressions
+        void addScatteringType(ustring symbol) { m_user_scatterings.push_back(symbol); };
+
         /// Add a single rule for rendering outputs
         ///
         ///    \param pattern         The light path expression to be mapped to the new rule
@@ -163,6 +168,10 @@
         DfOptimizedAutomata      m_dfoptautomata;
         // List of rules linked as void * from the automata's states
         std::list<AccumRule>     m_accumrules;
+        // Custom symbols to support on expressions as events
+        std::vector<ustring>     m_user_events;
+        // Custom symbols to support on expressions as scattering
+        std::vector<ustring>     m_user_scatterings;
 };
 
 

Modified: trunk/lib/win64_vc12/osl/include/OSL/dual.h
===================================================================
--- trunk/lib/win64_vc12/osl/include/OSL/dual.h	2016-01-17 12:04:11 UTC (rev 61597)
+++ trunk/lib/win64_vc12/osl/include/OSL/dual.h	2016-01-17 12:12:43 UTC (rev 61598)
@@ -29,6 +29,7 @@
 #pragma once
 
 #include "oslversion.h"
+#include <OpenImageIO/fmath.h>
 OSL_NAMESPACE_ENTER
 
 
@@ -56,7 +57,7 @@
 
     /// Construct a Dual from just a real value (derivs set to 0)
     ///
-    Dual2 (const T &x) : m_val(x), m_dx(T(0)), m_dy(T(0)) { }
+    Dual2 (const T &x) : m_val(x), m_dx(T(0.0)), m_dy(T(0.0)) { }
 
     template <class F>
     Dual2 (const Dual2<F> &x) : m_val(T(x.val())), m_dx(T(x.dx())), m_dy(T(x.dy())) { }
@@ -240,8 +241,14 @@
     return Dual2<T> (a.val()*b, a.dx()*b, a.dy()*b);
 }
 
+template<class T, class S>
+inline Dual2<T> operator* (const S &b, const Dual2<T> &a)
+{
+    return Dual2<T> (a.val()*T(b), a.dx()*T(b), a.dy()*T(b));
+}
 
 
+
 /// Division of duals.
 ///
 template<class T>
@@ -335,117 +342,178 @@
 inline Dual2<T> cos (const Dual2<T> &a)
 {
     T sina, cosa;
-    sina = std::sin (a.val());
-    cosa = std::cos (a.val());
+    OIIO::sincos(a.val(), &sina, &cosa);
     return Dual2<T> (cosa, -sina * a.dx(), -sina * a.dy());
 }
 
+inline Dual2<float> fast_cos(const Dual2<float> &a)
+{
+    float sina, cosa;
+    OIIO::fast_sincos (a.val(), &sina, &cosa);
+    return Dual2<float> (cosa, -sina * a.dx(), -sina * a.dy());
+}
+
 // f(x) = sin(x),  f'(x) = cos(x)
 template<class T>
 inline Dual2<T> sin (const Dual2<T> &a)
 {
     T sina, cosa;
-    sina = std::sin (a.val());
-    cosa = std::cos (a.val());
+    OIIO::sincos(a.val(), &sina, &cosa);
     return Dual2<T> (sina, cosa * a.dx(), cosa * a.dy());
 }
 
+inline Dual2<float> fast_sin(const Dual2<float> &a)
+{
+    float sina, cosa;
+    OIIO::fast_sincos (a.val(), &sina, &cosa);
+    return Dual2<float> (sina, cosa * a.dx(), cosa * a.dy());
+}
+
+template <class T>
+inline void sincos(const Dual2<T> &a, Dual2<T> *sine, Dual2<T> *cosine)
+{
+	T sina, cosa;
+	OIIO::sincos(a.val(), &sina, &cosa);
+	*cosine = Dual2<T> (cosa, -sina * a.dx(), -sina * a.dy());
+	  *sine = Dual2<T> (sina,  cosa * a.dx(),  cosa * a.dy());
+}
+
+inline void fast_sincos(const Dual2<float> &a, Dual2<float> *sine, Dual2<float> *cosine)
+{
+	float sina, cosa;
+	OIIO::fast_sincos(a.val(), &sina, &cosa);
+	*cosine = Dual2<float> (cosa, -sina * a.dx(), -sina * a.dy());
+	  *sine = Dual2<float> (sina,  cosa * a.dx(),  cosa * a.dy());
+}
+
 // f(x) = tan(x), f'(x) = sec^2(x)
 template<class T>
 inline Dual2<T> tan (const Dual2<T> &a)
 {
-   T tana, cosa, sec2a;
-   tana  = std::tan (a.val());
-   cosa  = std::cos (a.val());
-   sec2a = T(1)/(cosa*cosa);
-   return Dual2<T> (tana, sec2a * a.dx(), sec2a * a.dy());
+    T tana  = std::tan (a.val());
+    T cosa  = std::cos (a.val());
+    T sec2a = T(1)/(cosa*cosa);
+    return Dual2<T> (tana, sec2a * a.dx(), sec2a * a.dy());
 }
 
+inline Dual2<float> fast_tan(const Dual2<float> &a)
+{
+    float tana  = OIIO::fast_tan (a.val());
+    float cosa  = OIIO::fast_cos (a.val());
+    float sec2a = 1 / (cosa * cosa);
+    return Dual2<float> (tana, sec2a * a.dx(), sec2a * a.dy());
+}
+
 // f(x) = cosh(x), f'(x) = sinh(x)
 template<class T>
 inline Dual2<T> cosh (const Dual2<T> &a)
 {
-   T cosha, sinha;
-   cosha = std::cosh(a.val());
-   sinha = std::sinh(a.val());
-   return Dual2<T> (cosha, sinha * a.dx(), sinha * a.dy());
+    T cosha = std::cosh(a.val());
+    T sinha = std::sinh(a.val());
+    return Dual2<T> (cosha, sinha * a.dx(), sinha * a.dy());
 }
 
+inline Dual2<float> fast_cosh(const Dual2<float> &a)
+{
+    float cosha = OIIO::fast_cosh(a.val());
+    float sinha = OIIO::fast_sinh(a.val());
+    return Dual2<float> (cosha, sinha * a.dx(), sinha * a.dy());
+}
+
+
 // f(x) = sinh(x), f'(x) = cosh(x)
 template<class T>
 inline Dual2<T> sinh (const Dual2<T> &a)
 {
-   T cosha, sinha;
-   cosha = std::cosh(a.val());
-   sinha = std::sinh(a.val());
-   return Dual2<T> (sinha, cosha * a.dx(), cosha * a.dy());
+    T cosha = std::cosh(a.val());
+    T sinha = std::sinh(a.val());
+    return Dual2<T> (sinha, cosha * a.dx(), cosha * a.dy());
 }
 
+inline Dual2<float> fast_sinh(const Dual2<float> &a)
+{
+    float cosha = OIIO::fast_cosh(a.val());
+    float sinha = OIIO::fast_sinh(a.val());
+    return Dual2<float> (sinha, cosha * a.dx(), cosha * a.dy());
+}
+
 // f(x) = tanh(x), f'(x) = sech^2(x)
 template<class T>
 inline Dual2<T> tanh (const Dual2<T> &a)
 {
-   T cosha, tanha, sech2a;
-   tanha = std::tanh(a.val());
-   cosha = std::cosh(a.val());
-   sech2a = T(1)/(cosha*cosha);
-   return Dual2<T> (tanha, sech2a * a.dx(), sech2a * a.dy());
+    T tanha = std::tanh(a.val());
+    T cosha = std::cosh(a.val());
+    T sech2a = T(1)/(cosha*cosha);
+    return Dual2<T> (tanha, sech2a * a.dx(), sech2a * a.dy());
 }
 
+inline Dual2<float> fast_tanh(const Dual2<float> &a)
+{
+    float tanha = OIIO::fast_tanh(a.val());
+    float cosha = OIIO::fast_cosh(a.val());
+    float sech2a = 1 / (cosha * cosha);
+    return Dual2<float> (tanha, sech2a * a.dx(), sech2a * a.dy());
+}
+
 // f(x) = acos(x), f'(x) = -1/(sqrt(1 - x^2))
 template<class T>
-inline Dual2<T> acos (const Dual2<T> &a)
+inline Dual2<T> safe_acos (const Dual2<T> &a)
 {
-   if (a.val() >= T(1)) 
-      return Dual2<T> (T(0), T(0), T(0));
-   if (a.val() <= T(-1)) 
-      return Dual2<T> (T(M_PI), T(0), T(0));
+    if (a.val() >= T(1))
+        return Dual2<T> (T(0), T(0), T(0));
+    if (a.val() <= T(-1))
+        return Dual2<T> (T(M_PI), T(0), T(0));
+    T arccosa = std::acos (a.val());
+    T denom   = -T(1) / std::sqrt (T(1) - a.val()*a.val());
+    return Dual2<T> (arccosa, denom * a.dx(), denom * a.dy());
+}
 
-   T arccosa, denom;
-   arccosa = std::acos (a.val());
-   denom   = -T(1) / std::sqrt (T(1) - a.val()*a.val());
-
-   return Dual2<T> (arccosa, denom * a.dx(), denom * a.dy());
+inline Dual2<float> fast_acos(const Dual2<float> &a)
+{
+    float arccosa = OIIO::fast_acos(a.val());
+    float denom   = fabsf(a.val()) < 1.0f ? -1.0f / sqrtf(1.0f - a.val() * a.val()) : 0.0f;
+    return Dual2<float> (arccosa, denom * a.dx(), denom * a.dy());
 }
 
 // f(x) = asin(x), f'(x) = 1/(sqrt(1 - x^2))
 template<class T>
-inline Dual2<T> asin (const Dual2<T> &a)
+inline Dual2<T> safe_asin (const Dual2<T> &a)
 {
-   if (a.val() >= T(1)) 
-      return Dual2<T> (T(M_PI/2), T(0), T(0));
-   if (a.val() <= T(-1)) 
-      return Dual2<T> (T(-M_PI/2), T(0), T(0));
+    if (a.val() >= T(1))
+        return Dual2<T> (T(M_PI/2), T(0), T(0));
+    if (a.val() <= T(-1))
+        return Dual2<T> (T(-M_PI/2), T(0), T(0));
 
-   T arcsina, denom;
-   arcsina = std::asin (a.val());
-   denom   = T(1) / std::sqrt (T(1) - a.val()*a.val());
+    T arcsina = std::asin (a.val());
+    T denom   = T(1) / std::sqrt (T(1) - a.val()*a.val());
+    return Dual2<T> (arcsina, denom * a.dx(), denom * a.dy());
+}
 
-   return Dual2<T> (arcsina, denom * a.dx(), denom * a.dy());
+inline Dual2<float> fast_asin(const Dual2<float> &a)
+{
+    float arcsina = OIIO::fast_asin(a.val());
+    float denom   = fabsf(a.val()) < 1.0f ? 1.0f / sqrtf(1.0f - a.val() * a.val()) : 0.0f;
+    return Dual2<float> (arcsina, denom * a.dx(), denom * a.dy());
 }
 
+
 // f(x) = atan(x), f'(x) = 1/(1 + x^2)
 template<class T>
 inline Dual2<T> atan (const Dual2<T> &a)
 {
-   T arctana, denom;
-   arctana = std::atan (a.val());
-   denom   = T(1) / (T(1) + a.val()*a.val());
-

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list