~jesterking/blender/win32libs

« back to all changes in this revision

Viewing changes to osl/CHANGES

  • Committer: dingto
  • Date: 2013-12-06 17:01:28 UTC
  • Revision ID: svn-v4:954f8c5b-7b00-dc11-b283-0030488c597c:trunk/lib/windows:61249
MSVC 2008 x86
* Update OSL to 1.4.0 and OIIO to 1.3.9.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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.
14
 
 
15
 
 
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
19
 
  properly.
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
25
 
  used for profiling).
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.
33
 
 
34
 
 
35
 
 
36
 
Release 1.3.0 - 14 Feb 2013 (compared to 1.2)
37
 
----------------------------------------------
38
 
 
39
 
Language, standard libary, and compiler changes (for shader writers):
40
 
 
41
 
* pointcloud_write() allows shaders to write data and save it as a point
42
 
  cloud.
43
 
* spline now accepts a "constant" interpolation type, which interpolates
44
 
  with discrete steps.
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.
59
 
 
60
 
ShadingSystem API changes and new options (for renderer writers):
61
 
 
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
72
 
  stdosl.h file.
73
 
* New call: ShadingSystem::LoadMemoryCompiledShader() loads a shader with
74
 
  OSO data from a memory buffer, rather than from a file.
75
 
 
76
 
Performance improvements:
77
 
 
78
 
* Reduce instance symbol memory use, lowering OSL-related memory by 1/2-2/3
79
 
  for large scenes.
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
88
 
  a known glibc issue).
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
99
 
  complex shaders.
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).
104
 
 
105
 
Bug fixes and minor improvements:
106
 
 
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
112
 
  function.
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
118
 
  is defined.
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 
131
 
  containing spaces.
132
 
* Fix bugs in the OSL exit() function.
133
 
* Don't error/warn if metadata name masks a global scope name.
134
 
 
135
 
Under the hood:
136
 
 
137
 
* Simplify code generation of binary ops involving closures.
138
 
 
139
 
Build & test system improvements and developer goodies:
140
 
 
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
149
 
  differences.
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
158
 
  keep going (=0).
159
 
* Fixed bad interaction between weave preprocessor, OIIO::Strutil::format,
160
 
  and gcc 4.7.2.
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 
167
 
  libraries.
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
174
 
  VERBOSE=1.
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).
178
 
 
179
 
Documentation:
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).
184
 
 
185
 
 
186
 
 
187
 
 
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.
198
 
 
199
 
 
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
204
 
Transylvania.
205
 
 
206
 
New tools/utilities:
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
215
 
  shader.
216
 
 
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
225
 
  of mycolor.
226
 
 
227
 
ShadingSystem API changes and new options:
228
 
* Remove unused 'size' parameter from the register_closure API.
229
 
 
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.
237
 
 
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
247
 
  the outputs do.
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.
252
 
 
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
259
 
  found.
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
262
 
  cpp.
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
274
 
  a profile.
275
 
 
276
 
 
277
 
 
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
288
 
  or not.
289
 
* New optional parameter to trace(): "traceset" allows you to specify a
290
 
  named geometry set for tracing.
291
 
 
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
298
 
  debugging)
299
 
 
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.
310
 
 
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
319
 
  parameters.
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.
329
 
 
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.
341
 
 
342
 
 
343
 
 
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",
348
 
  "NDC", "raster."
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)
355
 
 
356
 
 
357
 
 
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().
371
 
 
372
 
 
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
381
 
  return 0.
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.
386
 
 
387
 
 
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
393
 
  groups.
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 
408
 
  installation).
409
 
 
410
 
 
411
 
Release 0.5.4 - Jul 21, 2011
412
 
----------------------------
413
 
* Several fixes related to arrays of structs, and structs containing
414
 
  other structs.
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
421
 
  optimization.
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
436
 
  optimization.
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.
451
 
 
452
 
 
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).
467
 
 
468
 
 
469
 
Release 0.5.2 - Mar 14, 2011
470
 
----------------------------
471
 
 
472
 
* Windows: use boost::wave instead of external cpp; various other Windows
473
 
  compilation fixes.
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.
479
 
 
480
 
 
481
 
 
 
1
Release 1.4.0 - 25 November 2013 (compared to 1.3)
 
2
--------------------------------------------------
 
3
 
 
4
Language, standard libary, and compiler changes (for shader writers):
 
5
 
 
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).
 
29
 
 
30
ShadingSystem API changes and new options (for renderer writers):
 
31
 
 
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!
 
37
 
 
38
Performance improvements:
 
39
 
 
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
 
74
  variables.
 
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
 
78
  operation.
 
79
* The OSLQuery library has been sped up by 20x when querying the parameters
 
80
  of large shaders.
 
81
 
 
82
Bug fixes:
 
83
 
 
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
 
87
  properly. (1.3.1)
 
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).
 
101
 
 
102
Under the hood:
 
103
 
 
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.
 
107
 
 
108
Build & test system improvements and developer goodies:
 
109
 
 
110
* testshade: --options lets you set arbitrary options to the ShadingSystem
 
111
  for test runs.
 
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
 
135
  as well.
 
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.
 
142
 
 
143
Documentation:
 
144
 
 
145
* Eliminate references to OSL random() function; it was never
 
146
  implemented and nobody seemed to miss it or have a compelling use
 
147
  case. (1.3.1)
 
148
 
 
149
 
 
150
 
 
151
 
 
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.
 
157
 
 
158
 
 
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.
 
172
 
 
173
 
 
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
 
177
  properly.
 
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
 
183
  used for profiling).
 
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.
 
191
 
 
192
 
 
193
Release 1.3.0 - 14 Feb 2013 (compared to 1.2)
 
194
----------------------------------------------
 
195
 
 
196
Language, standard libary, and compiler changes (for shader writers):
 
197
 
 
198
* pointcloud_write() allows shaders to write data and save it as a point
 
199
  cloud.
 
200
* spline now accepts a "constant" interpolation type, which interpolates
 
201
  with discrete steps.
 
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.
 
216
 
 
217
ShadingSystem API changes and new options (for renderer writers):
 
218
 
 
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
 
229
  stdosl.h file.
 
230
* New call: ShadingSystem::LoadMemoryCompiledShader() loads a shader with
 
231
  OSO data from a memory buffer, rather than from a file.
 
232
 
 
233
Performance improvements:
 
234
 
 
235
* Reduce instance symbol memory use, lowering OSL-related memory by 1/2-2/3
 
236
  for large scenes.
 
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
 
256
  complex shaders.
 
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).
 
261
 
 
262
Bug fixes and minor improvements:
 
263
 
 
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
 
269
  function.
 
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
 
275
  is defined.
 
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 
 
288
  containing spaces.
 
289
* Fix bugs in the OSL exit() function.
 
290
* Don't error/warn if metadata name masks a global scope name.
 
291
 
 
292
Under the hood:
 
293
 
 
294
* Simplify code generation of binary ops involving closures.
 
295
 
 
296
Build & test system improvements and developer goodies:
 
297
 
 
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
 
306
  differences.
 
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
 
315
  keep going (=0).
 
316
* Fixed bad interaction between weave preprocessor, OIIO::Strutil::format,
 
317
  and gcc 4.7.2.
 
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 
 
324
  libraries.
 
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
 
331
  VERBOSE=1.
 
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).
 
335
 
 
336
Documentation:
 
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).
 
341
 
 
342
 
 
343
 
 
344
 
 
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.
 
355
 
 
356
 
 
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
 
361
Transylvania.
 
362
 
 
363
New tools/utilities:
 
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
 
372
  shader.
 
373
 
 
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
 
382
  of mycolor.
 
383
 
 
384
ShadingSystem API changes and new options:
 
385
* Remove unused 'size' parameter from the register_closure API.
 
386
 
 
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.
 
394
 
 
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
 
404
  the outputs do.
 
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.
 
409
 
 
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
 
416
  found.
 
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
 
419
  cpp.
 
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
 
431
  a profile.
 
432
 
 
433
 
 
434
 
 
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
 
445
  or not.
 
446
* New optional parameter to trace(): "traceset" allows you to specify a
 
447
  named geometry set for tracing.
 
448
 
 
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
 
455
  debugging)
 
456
 
 
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.
 
467
 
 
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
 
476
  parameters.
 
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.
 
486
 
 
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.
 
498
 
 
499
 
 
500
 
 
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",
 
505
  "NDC", "raster."
 
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)
 
512
 
 
513
 
 
514
 
 
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().
 
528
 
 
529
 
 
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
 
538
  return 0.
 
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.
 
543
 
 
544
 
 
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
 
550
  groups.
 
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 
 
565
  installation).
 
566
 
 
567
 
 
568
Release 0.5.4 - Jul 21, 2011
 
569
----------------------------
 
570
* Several fixes related to arrays of structs, and structs containing
 
571
  other structs.
 
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
 
578
  optimization.
 
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
 
593
  optimization.
 
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.
 
608
 
 
609
 
 
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).
 
624
 
 
625
 
 
626
Release 0.5.2 - Mar 14, 2011
 
627
----------------------------
 
628
 
 
629
* Windows: use boost::wave instead of external cpp; various other Windows
 
630
  compilation fixes.
 
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.
 
636
 
 
637
 
 
638