[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