1
Release 1.3.2 - 19 Jun 2013 (compared to 1.3.1)
2
-----------------------------------------------
3
* fmod(triple,triple,float) was not working properly in Windows.
4
* Nicer debug printing (for developers) when an op doesn't have an
5
associated source line.
6
* Avoid incorrect heap addressing when retrieving a symbol's address.
7
* oslc new gives a compile error when trying to use a function as
8
if it were an ordinary variable.
9
* Fix for a bug where an early 'return' from a shader could lead to
10
output parameters not being properly copied to the inputs of their
11
downstream connections.
12
* Fix bug where filterwidth() didn't properly mark itself as needing
13
derivatives of its argument.
16
Release 1.3.1 - 15 May 2013 (compared to 1.3.0)
17
-----------------------------------------------
18
* The integer versions of min(), max(), and clamp() were not working
20
* Added CMake option 'ENABLERTTI' that enables use of RTTI for sites that
21
must link against an RTTI-enabled LLVM (the default is to assume LLVM
22
is built without RTTI, so we don't use it either).
23
* Work around CMake bug where on some platforms, CMake doesn't define the
24
'NDEBUG' when making the 'RelWithDebInfo' target (which is sometimes
26
* Docs: Eliminated discussion of random(), which was never implemented
27
and we can't think of a good use case.
28
* Add Make/CMake option 'USE_EXTERNAL_PUGIXML' which if set to nonzero
29
will find and use a system-installed PugiXML rather than assuming that
30
it's included in libOpenImageIO. When used, it will also use the
31
environment variable PUGIXML_HOME (if set) as a hint for where to find
32
it, in case it's not in a usual system library directory.
36
Release 1.3.0 - 14 Feb 2013 (compared to 1.2)
37
----------------------------------------------
39
Language, standard libary, and compiler changes (for shader writers):
41
* pointcloud_write() allows shaders to write data and save it as a point
43
* spline now accepts a "constant" interpolation type, which interpolates
45
* isconnected(var) returns true if var is a shader parameter and is
46
connected to an earlier layer. This is helpful in having shader logic
47
that can discern between a connected parameter versus a default.
48
* Whole-array assignment is now supported. That is, if A and B are arrays
49
of the same type and length(A) >= length(B), it is legal to write
50
A=B without needing to write a loop to copy each element separately.
51
* stoi() and stof() convert strings to int or float types, respectively
52
(just like the identically-named functions in C++11). These do properly
53
constant-fold during runtime optimization if their inputs can be deduced.
54
* split() splits a string into tokens and stores them in the elements of an
55
array of strings (and does constant-fold!).
56
* distance(point A, point B, point Q) gives the distance from Q to the
57
line segment joining A and B. This was described by the OSL spec all
58
along, but somehow was not properly implemented.
60
ShadingSystem API changes and new options (for renderer writers):
62
* Default implementation of all the pointcloud_*() functions in
63
RendererServices, if Partio is found at build time.
64
* ShadingSystem attribute "compile_report" controls whether information
65
should be sent to the renderer for each shading group as it compiles.
66
(The default is now to be more silent, set this to nonzero if you want
67
to see the old per-group status messages.)
68
* ShadingSystem attribute "countlayerexecs" adds debugging code to count
69
the total number of shader layer executions (off by default; it slows
70
shader execution down slightly, is only meant for debugging).
71
* Add a parameter to OSLCompiler::compile to specify the path to the
73
* New call: ShadingSystem::LoadMemoryCompiledShader() loads a shader with
74
OSO data from a memory buffer, rather than from a file.
76
Performance improvements:
78
* Reduce instance symbol memory use, lowering OSL-related memory by 1/2-2/3
80
* Identical shader instances within a shader group are automatically
81
merged -- this can have substiantial performance and memory
82
improvements for very complex shader groups that may (inadvertently,
83
for convenience, or as an artifact of certain lookdev tools) have
84
multiple instances with identical input parameters and connections.
85
We have seen some shots that render up to 20% faster with this change.
86
* Better constant-folding for pointcloud_get (if indices are known).
87
* Speed up implementation of exp() for some Linux platform (works around
89
* Speed up of mix() by making it a built-in function (rather than defined
90
in stdosl.h) and doing aggressive constant folding on it. Also some special
91
cases to try to avoid having mix() unnecessarily trigger execution of
92
earlier layers when one or both of its arguments is a connected shader
93
param and the mix value turns out to be 0 or 1.
94
* Runtime optimization now includes constant-folding of getattribute()
95
calls, for those attributes which are scene-wide (such as renderer options
96
that apply to the whole frame).
97
* Improvements in the algorithm that tracks which symbols need to carry
98
derivatives around results in MUCH faster compile times for extremely
100
* Improve bad performance for shaders that call warning() prolifically, by
101
imposing a maximum number of shader warnings that are echoed back to the
102
renderer (controlled by ShadingSystem attribute "max_warnings_per_thread",
103
which defaults to 100; 0 means that there is no maximum).
105
Bug fixes and minor improvements:
107
* Fix incorrect oso output of matrix parameter initialization. (This did
108
not affect shader execution, but could result in oslquery/oslinfo not
109
reporting default matrix parameter values correctly.)
110
* Bug fix: oslinfo didn't print int metadata values properly.
111
* oslc better error checking when calling a variable as if it were a
113
* Parsing of oso files was broken for compiled shaders that had string
114
metadata whose metadata value contained the '}' character.
115
* Pointcloud function bug fixes: now robust to being passed empty filenames,
116
or calling pointcloud_get when count=0.
117
* Fix crash with C preprocessor when #include fails or no shader function
119
* Improve error reporting when parsing oso, especially in improving the
120
error messages when an old renderer tries to load a .oso file created by
121
a "newer" oslc, and the oso contains new instruction opcodes that the
122
older renderer didn't know about.
123
* oslc now gives a helpful error message, rather than hitting an assertion,
124
if you try to index into a non-array or non-component type.
125
* Broken "XYZ" color space transformations because of confusion between
126
"xyz" and "XYZ" names.
127
* oslc: correctly catch errors with integer literals that overflow.
128
* oslc: proper error, rather than assertion, for
129
'closure color * closure color'.
130
* oslc: proper handling of preprocessor errors when stdosl.h is in a path
132
* Fix bugs in the OSL exit() function.
133
* Don't error/warn if metadata name masks a global scope name.
137
* Simplify code generation of binary ops involving closures.
139
Build & test system improvements and developer goodies:
141
* Many, many fixes to enable building and correct running of OSL on
142
Windows. Too many to list individually, let's just say that OSL 1.3
143
builds and runs pretty robustly on Windows, older versions did not.
144
* Remove unused OpenGL and GLEW searching from CMake files.
145
* Fix a variety of compiler warnings, particularly on newer compilers,
146
32 bit platforms, and Windows.
147
* Find LLVM correctly even when using "svn" LLVM versions.
148
* Adjust failure threshold on some tests to account for minor platform
150
* New minimum OIIO version: 1.1.
151
* CMake fixes: Simplify searching for and using IlmBase, and remove
152
unneeded search for OpenEXR.
153
* Find Partio (automatically, or using 'make PARTIO_HOME=...'), and if
154
found, use it to provide default RendererServices implementations of
155
all the pointcloud-related functions.
156
* Make/CMake STOP_ON_WARNING flag (set to 0 or 1) controls whether the
157
build will stop upon any compiler warning (default) or if it should
159
* Fixed bad interaction between weave preprocessor, OIIO::Strutil::format,
161
* Fixes for static linkage of liboslcomp.
162
* Addressed compilation errors on g++ 4.7.2.
163
* Improved logic and error reporting for finding OpenImageIO at build time.
164
* Add support for linking to static LLVM libraries, and for specifying
165
a particular LLVM version to be used.
166
* New BUILDSTATIC option for CMake/Make allows building of static OSL
168
* Fixes to allow OSL to use LLVM 3.2.
169
* Fixes to allow OSL to be compiled by clang 3.2.
170
* Fixes to allow building on Windows with MinGW.
171
* Fix for building from a chroot where the host may be, e.g., 64 bit, but
172
the target is 32 bit.
173
* Minimize cmake output clutter for things that aren't errors, unless
175
* Various fixes to get OSL building and running on FreeBSD.
176
* Cmake/make option USE_LLVM_BITCODE to be able to force LLVM bitcode
177
compilation on or off (defaults to on for Windows, off for Unix/Linux).
180
* Clarify that documentation is licensed under Creative Commons 3.0 BY.
181
* Clean up OSL Spec discussion of built-in material closures.
182
* Overhaul the suggested metadata conventions in the OSL spec (now
183
conforms to the conventions used by Katana).
188
Release 1.2.1 - 6 Nov, 2012 (compared to 1.2.0)
189
-----------------------------------------------
190
* Fix incorrect oso output of matrix parameter initialization. (This did
191
not affect shader execution, but could result in oslquery/oslinfo not
192
reporting default matrix parameter values correctly.)
193
* Build: remove unused OpenGL and GLEW searching from CMake files.
194
* Build: Fix a variety of compiler warnings, particularly on newer compilers,
195
32 bit platforms, and Windows.
196
* Build: Find LLVM correctly even when using "svn" LLVM versions.
197
* Bug fix: oslinfo didn't print int metadata values properly.
200
Release 1.2.0 - Aug 30, 2012 (compared to 1.1)
201
----------------------------------------------
202
Note: this is more or less the production-hardened version of OSL that
203
was used to complete Men in Black 3, The Amazing Spider-Man, and Hotel
207
* New program "testrender" is a tiny ray-tracing renderer that uses OSL
208
for shading. Features are very minimal (only spheres are permitted at
209
this time) and there has been no attention to performance, but it
210
demonstrates how the OSL libraries may be integrated into a working
211
renderer, what interfaces the renderer needs to supply, and how the
212
BSDFs/radiance closures should be evaluated and integrated (including
213
with multiple importance sampling).
214
* shaders/ubersurface.osl is an example of a general purpose surface
217
Language, standard libary, and compiler changes:
218
* texture()/texture3d() support for subimage/face selection by name as
219
well as by numeric index.
220
* getattribute() performs automatic type conversions that mostly
221
correspond to the kind of automatic type casting you would get from
222
ordinary assignments in OSL. For example, getattribute("attrib",mycolor)
223
used to fail if "attrib" turned out to be a float rather than a color;
224
but now it succeeds and copies the float value to all three channels
227
ShadingSystem API changes and new options:
228
* Remove unused 'size' parameter from the register_closure API.
230
Optimization improvements:
231
* Constant-fold pointcloud_search calls when the position is a constant if
232
the search returns few enough results, by doing the query at optimization
233
time and putting the results into new constant arrays.
234
* Matrix parameters initialized by m=matrix(constA,constB,...) now
235
statically initialize, and no longer need to run initialization code
236
each time the shader executes.
238
Bug fixes and minor improvements:
239
* Fix pointcloud_search to optionally take a 'sort' parameter, as
240
originally documented.
241
* Unit tests weren't properly run as part of the testsuite.
242
* Track local+temp memory usage of optimized shaders and consider it an
243
error if a shader needs more than a maximum amount at runtime, set with
244
the "max_local_mem_KB" attribute.
245
* Add pointcloud statistics.
246
* Fix derivative error for sincos() when the inputs have no derivatives but
248
* Bug fix to vector-returning Gabor noise (it could previously generate
249
different values for different platforms).
250
* printf() of closures built from other closures allows for proper
251
recursive printing of the closure tree.
253
Build & test system improvements and developer goodies:
254
* Simplify the namespace scheme.
255
* Remove support for certain old dependencies: OIIO versions < 0.10,
256
LLVM < 3.0, and Boost < 1.40.
257
* Lots of little fixes to solve compiler warnings on various compilers.
258
* Support for newer OSX releases, particularly if /usr/bin/cpp-4.2 is not
260
* Better support for Boost::wave (portable C preprocessor replacement).
261
Build with 'make USE_BOOST_WAVE=1' to force Wave use instead of system
263
* You can select a custom LLVM namespace with 'make LLVM_NAMESPACE=...'.
264
* Symbols that are not part of the OSL public APIs are now hidden from the
265
linker in Linux/OSX if the CMake variable HIDE_SYMBOLS is on.
266
* New Makefile/CMake option LLVM_STATIC can be used to use static LLVM
267
libraries rather than the default dynamic libraries.
268
* Support for LLVM 3.1.
269
* Support for building with Clang 3.1 (lots of warning fixes).
270
* Makefile/CMake variable EXTRA_CPP_DEFINITIONS allows you to inject
271
additional compiler flags that you may need to customize the build for
272
your site or a choice of unusual compiler.
273
* Add support for 'PROFILE=1' builds that are appropriate for use with
278
Release 1.1.0 - Mar 14, 2012 (compared to 1.0.0)
279
------------------------------------------------
280
Language, standard libary, and compiler changes:
281
* Allow closures as parameters to closures.
282
* New constants: M_2PI, M_4PI
283
* Generic noise: noise("noisetype",coords,...)
284
* Gabor noise (anisotropic, automatically antialiased) via noise("gabor").
285
* Fix mod/fmod discrepancy: fmod() now matches C, mod() always returns a
286
positive result like in RSL.
287
* Allow "if (closure): and "if (!closure)" to test if a closure is empty
289
* New optional parameter to trace(): "traceset" allows you to specify a
290
named geometry set for tracing.
292
ShadingSystem API changes and new options:
293
* New "greedyjit" option will optimize & JIT all shader groups up front,
294
concurrently, without locking.
295
* Add a way to name shader groups.
296
* attribute("options",...) lets you set a bunch of options at once.
297
* Options to enable/disable individual optimizations (mostly useful for
300
Optimization improvements:
301
* Allow block alias tracking on non-constants when it's safe.
302
* Track "stale" values to eliminate pointless assignments.
303
* Eliminate redundant "useparam" ops.
304
* Assignments to output parameters that are not connected to any
305
downstream layers are now eliminated.
306
* More aggressive elision of ops that only write to symbols that won't
307
be subsequently used.
308
* More careful identification and removal of parameters (input and output)
309
that are both unused in the shader and not connected downstream.
311
Bug fixes and minor improvements:
312
* Minor blackbody fixes.
313
* Bug fix: don't mark constants as having their derivatives taken.
314
* Clamp splineinverse() for out-of-knot-range x input.
315
* Bug fix: the optimization of "a=b; a=c" was incorrect if c was an
316
alias for a (it incorrectly eliminated the first assignment).
317
* Bug fix: work around LLVM thread safety issues during JIT.
318
* Bug fix: symbol_data() wasn't returning the right address for non-heap
320
* Bug fix: optimization errors related to break, continue, and return not
321
properly marking the next instruction as a new basic block.
322
* Bug fix: luminance() with derivatives didn't work.
323
* Bug fix: in code generation of structure initializers.
324
* Improved error messages from ConnectShaders.
325
* Bug fix: type checking bug could case non-exactly-matching polymorphic
326
functions to coerce a return value even when that was not intended.
327
* Type checking improvements: Make sure point-point is a vector
328
expression, and point+vector & point-vector are point expressions.
330
Build & test system improvements and developer goodies:
331
* testsuite overhauls:
332
- run each test both optimized and not
333
- generate all tests in build, not directly in ./testsuite
334
- greatly simplify the run.py scripts
335
* Much more detailed debugging logs of the optimization process.
336
* Upgrade to clang/llvm 3.0.
337
* Lots of infrastructure to make debugging the optimizer easier.
338
Including new options debug_groupname, debug_layername, only_groupname.
339
* Improved the build system's LLVM-finding logic.
340
* Fix warnings from gcc 4.6.
344
Release 1.0.0 - Oct 12, 2011
345
----------------------------
346
* Modified testshade (and the underlying SimpleRender class) to handle
347
several standard named coordinate systems such as "camera", "screen",
349
* blackbody() and wavelength_color().
350
* New ShadingSystem configuration attribute: "colorspace" lets you explain
351
to OSL what RGB really means (e.g., "Rec709", "sRGB", "NTSC", etc.).
352
The luminance(), blackbody(), wavelength_color, and conversion to/from
353
XYZ now takes this into account correctly.
354
* rotate() (always in spec, never implemented)
358
Release 0.6.2 - Sept 29, 2011
359
-----------------------------
360
* Statistics overhaul -- added optimization stats, eliminated unused ones.
361
* Allow a shader parameter to mask a global built-in function with
362
only a warning, and improve scope conflict errors by pointing out the
363
file and line of the previous definition.
364
* Altered the RendererServices API to add transform_points() method, which
365
allows renderers to support nonlinear transformations (i.e., those that
366
are not expressible as a 4x4 matrix).
367
* Issue a renderer error when unknown coordinate system names are used
368
(can be turned of by setting the new ShadingSystem attribute
369
"unknown_coordsys_error" to false).
370
* New OSL built-in function: splineinverse().
373
Release 0.6.1 - Sept 20, 2011
374
-----------------------------
375
* Be more aggressive in freeing shader instance memory that's no longer
376
needed after optimization and LLVM JIT. This greatly reduces
377
OSL-related memory consumption for scenes with large numbers of very
378
complicated shading networks.
379
* Add Dz() which is helpful for apps that use OSL to shade volumes. At
380
present, we only correctly compute Dz(P), all other Dz() queries
382
* Additional statistics on how many instances and groups compile, and
383
how many are empty after all optimizations are performed.
384
* Make sure all the relevant statistics can be queried via
385
ShadingSystem::getattribute.
388
Release 0.6.0 - Sept 9, 2011
389
----------------------------
390
* ShadeExec API overhaul -- an app using it no longer needs
391
ShadingSystemImpl internal knowledge.
392
* Thread-parallel runtime optimization and LLVM JIT of different shader
394
* Optimizations: runtime constant folding of arraylength and regex_search,
395
new instruction 'arraycopy' will copy an entire array at once.
396
* Renamed patterns.h to oslutil.h.
397
* Do not generate unnecessary code when optional texture parameters are set
398
to their default values.
399
* Restore long-lost ability for layers to run unconditionally (not lazily)
400
if they were marked as "non-lazy" (for example, if they write to globals.
401
* Make the "debugnan" attribute work again -- when turned on, code will
402
be inserted after every op to be sure that no NaN or Inf values are
403
generated, and also verify that shader inputs (globals) don't have NaN
404
or Inf values passed in by the renderer. A similar facility existed a
405
long time ago, but we lost that functionality when we switched from
406
the interpreter to LLVM.
407
* Looks for release versions of LLVM-2.9 (allows using a Macports LLVM
411
Release 0.5.4 - Jul 21, 2011
412
----------------------------
413
* Several fixes related to arrays of structs, and structs containing
415
* Fixed arrays of closures.
416
* Removed support for old LLVM 2.7, nobody seemed to be using it any more.
417
* Changed the definition of dict_find() to return -1 for an invalid
418
dictionary, to distinguish it from 0 meaning that the query failed but
419
the dictionary itself was valid.
420
* Make array parameters safe to convert to constants during runtime
422
* Support derivatives in pointcloud searches.
423
* Fixed several runtime optimizer bugs.
424
* Fixed a bug where environment() calls with an optional "alpha" parameter
425
that has derivatives was overwriting memory.
426
* Fixed code generation bug for a*=b and a/=b.
427
* Automatically initialize all local string variables to NULL, to avoid
428
bad pointers for uninitialized strings.
429
* Bug fix: dict_value() wasn't properly marking its argument as writable.
430
* Automatic range checking of array and component access.
431
* Fix uninitialized derivatives for pointcloud().
432
* Speed up getattribute() calls by caching information about failed
433
getattribute queries in the ShadingContext.
434
* Fix to constant folding of gettextureinfo: a failed lookup should not
435
fold, because we want the error to occur in shader execution, not during
437
* Refactor, clean up, and comment testshade.
438
* oslc now gives an error on non-void functions that fail to return a value.
439
* Fixed implementation of area() that could generate an assertion.
440
* Fix escape sequences in string literals: we were handling it correctly
441
for printf-like format strings, but not other string literals.
442
* break and continue now work properly (just like in C/C++).
443
* You can now return from anywhere in a user function (multiple times if
444
you want), just like C/C++, and are no longer restricted to the only
445
return statement being the last statement of the function.
446
* New include file for shaders: patterns.h. Now, it only includes a handy
447
'wireframe()' function, but will expand for other useful things.
448
* New function: int getmatrix(from,to,M) is like the matrix(from,to)
449
constructor, but returns a success value so a shader can tell if the
450
named coordinate systems failed to be found by the renderer.
453
Release 0.5.3 - Apr 19, 2011
454
----------------------------
455
* Fix missing derivatives for sign() function.
456
* Fix closure color type size (crashes).
457
* Fix bug with environment() when passed "alpha" pointers with derivatives.
458
* Improve error messages for getmessage/setmessage to catch the most
459
common sources of non-deterministic behavior.
460
* Bug fix when constant-folding gettextureinfo().
461
* Fix mismatched prototype for subsurface() closure.
462
* Texture errors encountered in shader constant folding are now properly
463
reported to the renderer.
464
* Allow functions to have array parameters of unspecified length.
465
* Fix subtle bug related to lifetime analysis of variables in loops (led
466
to incorrect optimizations).
469
Release 0.5.2 - Mar 14, 2011
470
----------------------------
472
* Windows: use boost::wave instead of external cpp; various other Windows
474
* texture & environment now take an optional "interp" parameter that
475
overrides the interpolation/filtering method (valid arguments:
476
"smartcubic", "cubic", "linear", "closest").
477
* Bug fixes to getmessage() and its handling of derivatives, which includes
478
a slight RendererServices API change.
1
Release 1.4.0 - 25 November 2013 (compared to 1.3)
2
--------------------------------------------------
4
Language, standard libary, and compiler changes (for shader writers):
6
* Simplex noise: new noise varieties "simplex" and "usimplex" are
7
faster than Perlin noise (and MUCH faster for the 4-D variety),
8
but has a somewhat different appearance. Judge for yourself, use
9
whichever noise suits your purpose.
10
* oslc now catches mismatches between the format string and the types
11
of arguments to format(), printf(), fprintf(), warning(), and error().
12
* oslc now gives a compile error when trying to use a function as
13
if it were an ordinary variable. (1.3.2)
14
* Improvement to oslc function type checking -- allow more nuanced
15
matching of polymorphism based on return types. First we check for
16
identical return types, then we test allowing non-identical spatial
17
triples to match, then finally we allow any return type to match.
18
* New ShadingSystem attribute "debug_uninit", which when set to nonzero
19
tries to detect use of uninitialized variables at runtime. (Off by
20
default because it's very expensive, just use if you are debugging.)
21
* Implemented the OSL aastep() function, which was always described in
22
the docs but never implemented.
23
* The texture lookup functions all take new optional parameters,
24
"missingtexture", (color), "missingalpha", (float), which when supplied
25
will substitute that color and alpha for missing or broken textures,
26
rather than treating it as an error condition.
27
* New gettextureinfo() queries: "datawindow", "displaywindow" (both take
28
an int[4] as destination argument).
30
ShadingSystem API changes and new options (for renderer writers):
32
* New ShadingSystem attribute "renderer_outputs" enumerates the renderer
33
outputs (AOVs) explicitly, so that elision of unused outputs can be done
34
with full understanding of which params will or will not be sued.
35
Beware: if you enable "opt_elide_unconnected_outputs", you MUST pass
36
"renderer_outputs" or your AOVs may be eliminated!
38
Performance improvements:
40
* "Middleman" optimization notices when you have 3 layers A,B,C with
41
connections A.Aout -> B.Bin and B.Bout -> C.Cin, an Bout is simply
42
copied unconditionally from Bin. In this case, Aout is connected
43
directly to Cin, potentially leading to further optimizations, including
44
layer B getting culled entirely.
45
* Layer-to-layer global propagation: Notice cases where an upstream
46
output is guaranteed to be aassigned a global variable (such as N or u)
47
and then alias the downstream parameter to that global (eliminating
48
the connection and possibly culling the upstream layer entirely).
49
* Improve constant propagation from layer to layer (it used to do so only
50
if the output of the earlier layer was never used in the upstream layer;
51
but actually it's ok for it to be read, as long as it's not rewritten).
52
* Runtime constant-folding of cellnoise() calls.
53
* Local variables that are arrays initialized with float, int, or string
54
constants have been greatly optimized. If that's the only time anything
55
is written into the array, it will be turned into a true static constant
56
with no per-shader-invocation initialization or allocation costs.
57
Thus, it is no longer expensive to use a large array of constants as a
58
table... it may look like a per-shade cost to set up the array, but by
59
the time the optimizer gets done with it, it is not.
60
* Improved runtime constant-folding of max/min (now works for the integer
61
case, as well as previously working for the float-based types).
62
* Runtime constant-folding of cos, sin, acos, asin, normalize, inversesqrt,
63
exp, exp2, expm1, log, log2, log10, logb, erf, erfc, radians, degrees.
64
* Optimization that speeds up certain closure manipulations and can
65
cut overhead especially for relatively simple shaders.
66
* New peephole optimizations for two common patterns:
67
(1) add A B C ; sub D A C => [add A B C;] assign D B
68
and the same if the order of add & sub are switched.
69
(2) OP A B... ; assign A C => OP C B... as long as A is not subsequently
70
used and OP fully overwrites A and writes to no other variables.
71
* Constant folding of Dx, Dy, Dz, area, and filterwidth, when passed a
72
constant (the deriv will be 0 in that case).
73
* Substantial multithread speedups by eliminating testing of some shared
75
* Constant folding of add & sub for the mixed float/triple cases.
76
* Speed up closure construction by combining the closure primitive with
77
its (nearly inevitable) multiplication by weight, into a single internal
79
* The OSLQuery library has been sped up by 20x when querying the parameters
84
* Fix 'debugnan' tendency to give false positives for certain assignments
85
to arrays and multi-component variables (colors, points, etc.).
86
* The integer versions of min(), max(), and clamp() were not working
88
* fmod(triple,triple,float) was not working properly in Windows. (1.3.2)
89
* Avoid incorrect heap addressing when retrieving a symbol's address. (1.3.2)
90
* Fix for a bug where an early 'return' from a shader could lead to
91
output parameters not being properly copied to the inputs of their
92
downstream connections. (1.3.2)
93
* Fix bug where filterwidth() didn't properly mark itself as needing
94
derivatives of its argument. (1.3.2)
95
* Bug fix: Was not properly initializing the default values of output
96
params if they were written but never subsequently read.
97
* Better error handling for missing pointclouds.
98
* Fixed improper initialization of arrays of closures.
99
* Fixed constant folding bug for the split() function.
100
* Fixed constant folding bug for pow(x,2.0).
104
* Eliminate use of custom DEBUG preprocessor symbol in favor of the more
105
standard NDEBUG (beware: its sense is reversed).
106
* All references to and vestiges of TBB have been removed.
108
Build & test system improvements and developer goodies:
110
* testshade: --options lets you set arbitrary options to the ShadingSystem
112
* Added CMake option 'ENABLERTTI' that enables use of RTTI for sites that
113
must link against an RTTI-enabled LLVM (the default is to assume LLVM
114
is built without RTTI, so we don't use it either). (1.3.1)
115
* Fix some ambiguity about which variety of shared_ptr we are using --
116
this could produce problems in apps that include the OSL headers but also
117
use different shared_ptr varieties.
118
* Fix a variety of build issues and warnings under Windows.
119
* Work around CMake bug where on some platforms, CMake doesn't define the
120
'NDEBUG' when making the 'RelWithDebInfo' target (which is sometimes
121
used for profiling). (1.3.1)
122
* Add Make/CMake option 'USE_EXTERNAL_PUGIXML' which if set to nonzero
123
will find and use a system-installed PugiXML rather than assuming that
124
it's included in libOpenImageIO. When used, it will also use the
125
environment variable PUGIXML_HOME (if set) as a hint for where to find
126
it, in case it's not in a usual system library directory. (1.3.1)
127
* Nicer debug printing (for developers) when an op doesn't have an
128
associated source line. (1.3.2)
129
* Reorder include directories for building LLVM bitcode so that the
130
openimageio, ilmbase and boost directories are ahead of any system
131
directories given by llvm-config --cxxflags. This avoids the LLVM
132
bitcode getting compiled against different library versions than the
133
rest of the code if multiple versions are installed.
134
* Have debug_groupname and debug_layername apply to LLVM debugging info
136
* Support for LLVM 3.3.
137
* Fix compiler warnings for clang 3.3 and libc++.
138
* CMake files now more carefully quote assembled file paths to more
139
gracefully handle paths with spaces in them.
140
* CMakeLists.txt has been moved to the top level (not in src/) to conform
141
to the usual CMake conventions.
145
* Eliminate references to OSL random() function; it was never
146
implemented and nobody seemed to miss it or have a compelling use
152
Release 1.3.3 - 11 July 2013 (compared to 1.3.2)
153
------------------------------------------------
154
* Fix bug in the implementation of filterwidth() when passed a constant
155
(for which no derivative could be taken).
156
* Changes to support LLVM 3.3.
159
Release 1.3.2 - 19 Jun 2013 (compared to 1.3.1)
160
-----------------------------------------------
161
* fmod(triple,triple,float) was not working properly in Windows.
162
* Nicer debug printing (for developers) when an op doesn't have an
163
associated source line.
164
* Avoid incorrect heap addressing when retrieving a symbol's address.
165
* oslc new gives a compile error when trying to use a function as
166
if it were an ordinary variable.
167
* Fix for a bug where an early 'return' from a shader could lead to
168
output parameters not being properly copied to the inputs of their
169
downstream connections.
170
* Fix bug where filterwidth() didn't properly mark itself as needing
171
derivatives of its argument.
174
Release 1.3.1 - 15 May 2013 (compared to 1.3.0)
175
-----------------------------------------------
176
* The integer versions of min(), max(), and clamp() were not working
178
* Added CMake option 'ENABLERTTI' that enables use of RTTI for sites that
179
must link against an RTTI-enabled LLVM (the default is to assume LLVM
180
is built without RTTI, so we don't use it either).
181
* Work around CMake bug where on some platforms, CMake doesn't define the
182
'NDEBUG' when making the 'RelWithDebInfo' target (which is sometimes
184
* Docs: Eliminated discussion of random(), which was never implemented
185
and we can't think of a good use case.
186
* Add Make/CMake option 'USE_EXTERNAL_PUGIXML' which if set to nonzero
187
will find and use a system-installed PugiXML rather than assuming that
188
it's included in libOpenImageIO. When used, it will also use the
189
environment variable PUGIXML_HOME (if set) as a hint for where to find
190
it, in case it's not in a usual system library directory.
193
Release 1.3.0 - 14 Feb 2013 (compared to 1.2)
194
----------------------------------------------
196
Language, standard libary, and compiler changes (for shader writers):
198
* pointcloud_write() allows shaders to write data and save it as a point
200
* spline now accepts a "constant" interpolation type, which interpolates
202
* isconnected(var) returns true if var is a shader parameter and is
203
connected to an earlier layer. This is helpful in having shader logic
204
that can discern between a connected parameter versus a default.
205
* Whole-array assignment is now supported. That is, if A and B are arrays
206
of the same type and length(A) >= length(B), it is legal to write
207
A=B without needing to write a loop to copy each element separately.
208
* stoi() and stof() convert strings to int or float types, respectively
209
(just like the identically-named functions in C++11). These do properly
210
constant-fold during runtime optimization if their inputs can be deduced.
211
* split() splits a string into tokens and stores them in the elements of an
212
array of strings (and does constant-fold!).
213
* distance(point A, point B, point Q) gives the distance from Q to the
214
line segment joining A and B. This was described by the OSL spec all
215
along, but somehow was not properly implemented.
217
ShadingSystem API changes and new options (for renderer writers):
219
* Default implementation of all the pointcloud_*() functions in
220
RendererServices, if Partio is found at build time.
221
* ShadingSystem attribute "compile_report" controls whether information
222
should be sent to the renderer for each shading group as it compiles.
223
(The default is now to be more silent, set this to nonzero if you want
224
to see the old per-group status messages.)
225
* ShadingSystem attribute "countlayerexecs" adds debugging code to count
226
the total number of shader layer executions (off by default; it slows
227
shader execution down slightly, is only meant for debugging).
228
* Add a parameter to OSLCompiler::compile to specify the path to the
230
* New call: ShadingSystem::LoadMemoryCompiledShader() loads a shader with
231
OSO data from a memory buffer, rather than from a file.
233
Performance improvements:
235
* Reduce instance symbol memory use, lowering OSL-related memory by 1/2-2/3
237
* Identical shader instances within a shader group are automatically
238
merged -- this can have substiantial performance and memory
239
improvements for very complex shader groups that may (inadvertently,
240
for convenience, or as an artifact of certain lookdev tools) have
241
multiple instances with identical input parameters and connections.
242
We have seen some shots that render up to 20% faster with this change.
243
* Better constant-folding for pointcloud_get (if indices are known).
244
* Speed up implementation of exp() for some Linux platform (works around
245
a known glibc issue).
246
* Speed up of mix() by making it a built-in function (rather than defined
247
in stdosl.h) and doing aggressive constant folding on it. Also some special
248
cases to try to avoid having mix() unnecessarily trigger execution of
249
earlier layers when one or both of its arguments is a connected shader
250
param and the mix value turns out to be 0 or 1.
251
* Runtime optimization now includes constant-folding of getattribute()
252
calls, for those attributes which are scene-wide (such as renderer options
253
that apply to the whole frame).
254
* Improvements in the algorithm that tracks which symbols need to carry
255
derivatives around results in MUCH faster compile times for extremely
257
* Improve bad performance for shaders that call warning() prolifically, by
258
imposing a maximum number of shader warnings that are echoed back to the
259
renderer (controlled by ShadingSystem attribute "max_warnings_per_thread",
260
which defaults to 100; 0 means that there is no maximum).
262
Bug fixes and minor improvements:
264
* Fix incorrect oso output of matrix parameter initialization. (This did
265
not affect shader execution, but could result in oslquery/oslinfo not
266
reporting default matrix parameter values correctly.)
267
* Bug fix: oslinfo didn't print int metadata values properly.
268
* oslc better error checking when calling a variable as if it were a
270
* Parsing of oso files was broken for compiled shaders that had string
271
metadata whose metadata value contained the '}' character.
272
* Pointcloud function bug fixes: now robust to being passed empty filenames,
273
or calling pointcloud_get when count=0.
274
* Fix crash with C preprocessor when #include fails or no shader function
276
* Improve error reporting when parsing oso, especially in improving the
277
error messages when an old renderer tries to load a .oso file created by
278
a "newer" oslc, and the oso contains new instruction opcodes that the
279
older renderer didn't know about.
280
* oslc now gives a helpful error message, rather than hitting an assertion,
281
if you try to index into a non-array or non-component type.
282
* Broken "XYZ" color space transformations because of confusion between
283
"xyz" and "XYZ" names.
284
* oslc: correctly catch errors with integer literals that overflow.
285
* oslc: proper error, rather than assertion, for
286
'closure color * closure color'.
287
* oslc: proper handling of preprocessor errors when stdosl.h is in a path
289
* Fix bugs in the OSL exit() function.
290
* Don't error/warn if metadata name masks a global scope name.
294
* Simplify code generation of binary ops involving closures.
296
Build & test system improvements and developer goodies:
298
* Many, many fixes to enable building and correct running of OSL on
299
Windows. Too many to list individually, let's just say that OSL 1.3
300
builds and runs pretty robustly on Windows, older versions did not.
301
* Remove unused OpenGL and GLEW searching from CMake files.
302
* Fix a variety of compiler warnings, particularly on newer compilers,
303
32 bit platforms, and Windows.
304
* Find LLVM correctly even when using "svn" LLVM versions.
305
* Adjust failure threshold on some tests to account for minor platform
307
* New minimum OIIO version: 1.1.
308
* CMake fixes: Simplify searching for and using IlmBase, and remove
309
unneeded search for OpenEXR.
310
* Find Partio (automatically, or using 'make PARTIO_HOME=...'), and if
311
found, use it to provide default RendererServices implementations of
312
all the pointcloud-related functions.
313
* Make/CMake STOP_ON_WARNING flag (set to 0 or 1) controls whether the
314
build will stop upon any compiler warning (default) or if it should
316
* Fixed bad interaction between weave preprocessor, OIIO::Strutil::format,
318
* Fixes for static linkage of liboslcomp.
319
* Addressed compilation errors on g++ 4.7.2.
320
* Improved logic and error reporting for finding OpenImageIO at build time.
321
* Add support for linking to static LLVM libraries, and for specifying
322
a particular LLVM version to be used.
323
* New BUILDSTATIC option for CMake/Make allows building of static OSL
325
* Fixes to allow OSL to use LLVM 3.2.
326
* Fixes to allow OSL to be compiled by clang 3.2.
327
* Fixes to allow building on Windows with MinGW.
328
* Fix for building from a chroot where the host may be, e.g., 64 bit, but
329
the target is 32 bit.
330
* Minimize cmake output clutter for things that aren't errors, unless
332
* Various fixes to get OSL building and running on FreeBSD.
333
* Cmake/make option USE_LLVM_BITCODE to be able to force LLVM bitcode
334
compilation on or off (defaults to on for Windows, off for Unix/Linux).
337
* Clarify that documentation is licensed under Creative Commons 3.0 BY.
338
* Clean up OSL Spec discussion of built-in material closures.
339
* Overhaul the suggested metadata conventions in the OSL spec (now
340
conforms to the conventions used by Katana).
345
Release 1.2.1 - 6 Nov, 2012 (compared to 1.2.0)
346
-----------------------------------------------
347
* Fix incorrect oso output of matrix parameter initialization. (This did
348
not affect shader execution, but could result in oslquery/oslinfo not
349
reporting default matrix parameter values correctly.)
350
* Build: remove unused OpenGL and GLEW searching from CMake files.
351
* Build: Fix a variety of compiler warnings, particularly on newer compilers,
352
32 bit platforms, and Windows.
353
* Build: Find LLVM correctly even when using "svn" LLVM versions.
354
* Bug fix: oslinfo didn't print int metadata values properly.
357
Release 1.2.0 - Aug 30, 2012 (compared to 1.1)
358
----------------------------------------------
359
Note: this is more or less the production-hardened version of OSL that
360
was used to complete Men in Black 3, The Amazing Spider-Man, and Hotel
364
* New program "testrender" is a tiny ray-tracing renderer that uses OSL
365
for shading. Features are very minimal (only spheres are permitted at
366
this time) and there has been no attention to performance, but it
367
demonstrates how the OSL libraries may be integrated into a working
368
renderer, what interfaces the renderer needs to supply, and how the
369
BSDFs/radiance closures should be evaluated and integrated (including
370
with multiple importance sampling).
371
* shaders/ubersurface.osl is an example of a general purpose surface
374
Language, standard libary, and compiler changes:
375
* texture()/texture3d() support for subimage/face selection by name as
376
well as by numeric index.
377
* getattribute() performs automatic type conversions that mostly
378
correspond to the kind of automatic type casting you would get from
379
ordinary assignments in OSL. For example, getattribute("attrib",mycolor)
380
used to fail if "attrib" turned out to be a float rather than a color;
381
but now it succeeds and copies the float value to all three channels
384
ShadingSystem API changes and new options:
385
* Remove unused 'size' parameter from the register_closure API.
387
Optimization improvements:
388
* Constant-fold pointcloud_search calls when the position is a constant if
389
the search returns few enough results, by doing the query at optimization
390
time and putting the results into new constant arrays.
391
* Matrix parameters initialized by m=matrix(constA,constB,...) now
392
statically initialize, and no longer need to run initialization code
393
each time the shader executes.
395
Bug fixes and minor improvements:
396
* Fix pointcloud_search to optionally take a 'sort' parameter, as
397
originally documented.
398
* Unit tests weren't properly run as part of the testsuite.
399
* Track local+temp memory usage of optimized shaders and consider it an
400
error if a shader needs more than a maximum amount at runtime, set with
401
the "max_local_mem_KB" attribute.
402
* Add pointcloud statistics.
403
* Fix derivative error for sincos() when the inputs have no derivatives but
405
* Bug fix to vector-returning Gabor noise (it could previously generate
406
different values for different platforms).
407
* printf() of closures built from other closures allows for proper
408
recursive printing of the closure tree.
410
Build & test system improvements and developer goodies:
411
* Simplify the namespace scheme.
412
* Remove support for certain old dependencies: OIIO versions < 0.10,
413
LLVM < 3.0, and Boost < 1.40.
414
* Lots of little fixes to solve compiler warnings on various compilers.
415
* Support for newer OSX releases, particularly if /usr/bin/cpp-4.2 is not
417
* Better support for Boost::wave (portable C preprocessor replacement).
418
Build with 'make USE_BOOST_WAVE=1' to force Wave use instead of system
420
* You can select a custom LLVM namespace with 'make LLVM_NAMESPACE=...'.
421
* Symbols that are not part of the OSL public APIs are now hidden from the
422
linker in Linux/OSX if the CMake variable HIDE_SYMBOLS is on.
423
* New Makefile/CMake option LLVM_STATIC can be used to use static LLVM
424
libraries rather than the default dynamic libraries.
425
* Support for LLVM 3.1.
426
* Support for building with Clang 3.1 (lots of warning fixes).
427
* Makefile/CMake variable EXTRA_CPP_DEFINITIONS allows you to inject
428
additional compiler flags that you may need to customize the build for
429
your site or a choice of unusual compiler.
430
* Add support for 'PROFILE=1' builds that are appropriate for use with
435
Release 1.1.0 - Mar 14, 2012 (compared to 1.0.0)
436
------------------------------------------------
437
Language, standard libary, and compiler changes:
438
* Allow closures as parameters to closures.
439
* New constants: M_2PI, M_4PI
440
* Generic noise: noise("noisetype",coords,...)
441
* Gabor noise (anisotropic, automatically antialiased) via noise("gabor").
442
* Fix mod/fmod discrepancy: fmod() now matches C, mod() always returns a
443
positive result like in RSL.
444
* Allow "if (closure): and "if (!closure)" to test if a closure is empty
446
* New optional parameter to trace(): "traceset" allows you to specify a
447
named geometry set for tracing.
449
ShadingSystem API changes and new options:
450
* New "greedyjit" option will optimize & JIT all shader groups up front,
451
concurrently, without locking.
452
* Add a way to name shader groups.
453
* attribute("options",...) lets you set a bunch of options at once.
454
* Options to enable/disable individual optimizations (mostly useful for
457
Optimization improvements:
458
* Allow block alias tracking on non-constants when it's safe.
459
* Track "stale" values to eliminate pointless assignments.
460
* Eliminate redundant "useparam" ops.
461
* Assignments to output parameters that are not connected to any
462
downstream layers are now eliminated.
463
* More aggressive elision of ops that only write to symbols that won't
464
be subsequently used.
465
* More careful identification and removal of parameters (input and output)
466
that are both unused in the shader and not connected downstream.
468
Bug fixes and minor improvements:
469
* Minor blackbody fixes.
470
* Bug fix: don't mark constants as having their derivatives taken.
471
* Clamp splineinverse() for out-of-knot-range x input.
472
* Bug fix: the optimization of "a=b; a=c" was incorrect if c was an
473
alias for a (it incorrectly eliminated the first assignment).
474
* Bug fix: work around LLVM thread safety issues during JIT.
475
* Bug fix: symbol_data() wasn't returning the right address for non-heap
477
* Bug fix: optimization errors related to break, continue, and return not
478
properly marking the next instruction as a new basic block.
479
* Bug fix: luminance() with derivatives didn't work.
480
* Bug fix: in code generation of structure initializers.
481
* Improved error messages from ConnectShaders.
482
* Bug fix: type checking bug could case non-exactly-matching polymorphic
483
functions to coerce a return value even when that was not intended.
484
* Type checking improvements: Make sure point-point is a vector
485
expression, and point+vector & point-vector are point expressions.
487
Build & test system improvements and developer goodies:
488
* testsuite overhauls:
489
- run each test both optimized and not
490
- generate all tests in build, not directly in ./testsuite
491
- greatly simplify the run.py scripts
492
* Much more detailed debugging logs of the optimization process.
493
* Upgrade to clang/llvm 3.0.
494
* Lots of infrastructure to make debugging the optimizer easier.
495
Including new options debug_groupname, debug_layername, only_groupname.
496
* Improved the build system's LLVM-finding logic.
497
* Fix warnings from gcc 4.6.
501
Release 1.0.0 - Oct 12, 2011
502
----------------------------
503
* Modified testshade (and the underlying SimpleRender class) to handle
504
several standard named coordinate systems such as "camera", "screen",
506
* blackbody() and wavelength_color().
507
* New ShadingSystem configuration attribute: "colorspace" lets you explain
508
to OSL what RGB really means (e.g., "Rec709", "sRGB", "NTSC", etc.).
509
The luminance(), blackbody(), wavelength_color, and conversion to/from
510
XYZ now takes this into account correctly.
511
* rotate() (always in spec, never implemented)
515
Release 0.6.2 - Sept 29, 2011
516
-----------------------------
517
* Statistics overhaul -- added optimization stats, eliminated unused ones.
518
* Allow a shader parameter to mask a global built-in function with
519
only a warning, and improve scope conflict errors by pointing out the
520
file and line of the previous definition.
521
* Altered the RendererServices API to add transform_points() method, which
522
allows renderers to support nonlinear transformations (i.e., those that
523
are not expressible as a 4x4 matrix).
524
* Issue a renderer error when unknown coordinate system names are used
525
(can be turned of by setting the new ShadingSystem attribute
526
"unknown_coordsys_error" to false).
527
* New OSL built-in function: splineinverse().
530
Release 0.6.1 - Sept 20, 2011
531
-----------------------------
532
* Be more aggressive in freeing shader instance memory that's no longer
533
needed after optimization and LLVM JIT. This greatly reduces
534
OSL-related memory consumption for scenes with large numbers of very
535
complicated shading networks.
536
* Add Dz() which is helpful for apps that use OSL to shade volumes. At
537
present, we only correctly compute Dz(P), all other Dz() queries
539
* Additional statistics on how many instances and groups compile, and
540
how many are empty after all optimizations are performed.
541
* Make sure all the relevant statistics can be queried via
542
ShadingSystem::getattribute.
545
Release 0.6.0 - Sept 9, 2011
546
----------------------------
547
* ShadeExec API overhaul -- an app using it no longer needs
548
ShadingSystemImpl internal knowledge.
549
* Thread-parallel runtime optimization and LLVM JIT of different shader
551
* Optimizations: runtime constant folding of arraylength and regex_search,
552
new instruction 'arraycopy' will copy an entire array at once.
553
* Renamed patterns.h to oslutil.h.
554
* Do not generate unnecessary code when optional texture parameters are set
555
to their default values.
556
* Restore long-lost ability for layers to run unconditionally (not lazily)
557
if they were marked as "non-lazy" (for example, if they write to globals.
558
* Make the "debugnan" attribute work again -- when turned on, code will
559
be inserted after every op to be sure that no NaN or Inf values are
560
generated, and also verify that shader inputs (globals) don't have NaN
561
or Inf values passed in by the renderer. A similar facility existed a
562
long time ago, but we lost that functionality when we switched from
563
the interpreter to LLVM.
564
* Looks for release versions of LLVM-2.9 (allows using a Macports LLVM
568
Release 0.5.4 - Jul 21, 2011
569
----------------------------
570
* Several fixes related to arrays of structs, and structs containing
572
* Fixed arrays of closures.
573
* Removed support for old LLVM 2.7, nobody seemed to be using it any more.
574
* Changed the definition of dict_find() to return -1 for an invalid
575
dictionary, to distinguish it from 0 meaning that the query failed but
576
the dictionary itself was valid.
577
* Make array parameters safe to convert to constants during runtime
579
* Support derivatives in pointcloud searches.
580
* Fixed several runtime optimizer bugs.
581
* Fixed a bug where environment() calls with an optional "alpha" parameter
582
that has derivatives was overwriting memory.
583
* Fixed code generation bug for a*=b and a/=b.
584
* Automatically initialize all local string variables to NULL, to avoid
585
bad pointers for uninitialized strings.
586
* Bug fix: dict_value() wasn't properly marking its argument as writable.
587
* Automatic range checking of array and component access.
588
* Fix uninitialized derivatives for pointcloud().
589
* Speed up getattribute() calls by caching information about failed
590
getattribute queries in the ShadingContext.
591
* Fix to constant folding of gettextureinfo: a failed lookup should not
592
fold, because we want the error to occur in shader execution, not during
594
* Refactor, clean up, and comment testshade.
595
* oslc now gives an error on non-void functions that fail to return a value.
596
* Fixed implementation of area() that could generate an assertion.
597
* Fix escape sequences in string literals: we were handling it correctly
598
for printf-like format strings, but not other string literals.
599
* break and continue now work properly (just like in C/C++).
600
* You can now return from anywhere in a user function (multiple times if
601
you want), just like C/C++, and are no longer restricted to the only
602
return statement being the last statement of the function.
603
* New include file for shaders: patterns.h. Now, it only includes a handy
604
'wireframe()' function, but will expand for other useful things.
605
* New function: int getmatrix(from,to,M) is like the matrix(from,to)
606
constructor, but returns a success value so a shader can tell if the
607
named coordinate systems failed to be found by the renderer.
610
Release 0.5.3 - Apr 19, 2011
611
----------------------------
612
* Fix missing derivatives for sign() function.
613
* Fix closure color type size (crashes).
614
* Fix bug with environment() when passed "alpha" pointers with derivatives.
615
* Improve error messages for getmessage/setmessage to catch the most
616
common sources of non-deterministic behavior.
617
* Bug fix when constant-folding gettextureinfo().
618
* Fix mismatched prototype for subsurface() closure.
619
* Texture errors encountered in shader constant folding are now properly
620
reported to the renderer.
621
* Allow functions to have array parameters of unspecified length.
622
* Fix subtle bug related to lifetime analysis of variables in loops (led
623
to incorrect optimizations).
626
Release 0.5.2 - Mar 14, 2011
627
----------------------------
629
* Windows: use boost::wave instead of external cpp; various other Windows
631
* texture & environment now take an optional "interp" parameter that
632
overrides the interpolation/filtering method (valid arguments:
633
"smartcubic", "cubic", "linear", "closest").
634
* Bug fixes to getmessage() and its handling of derivatives, which includes
635
a slight RendererServices API change.