Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 201 lines (180 sloc) 9.64 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
Release 1.1.0 - Mar 14, 2011 (compared to 1.0.0)
------------------------------------------------
Language, standard libary, and compiler changes:
* Allow closures as parameters to closures.
* New constants: M_2PI, M_4PI
* Generic noise: noise("noisetype",coords,...)
* Gabor noise (anisotropic, automatically antialiased) via noise("gabor").
* Fix mod/fmod discrepancy: fmod() now matches C, mod() always returns a
  positive result like in RSL.
* Allow "if (closure): and "if (!closure)" to test if a closure is empty
  or not.
* New optional parameter to trace(): "traceset" allows you to specify a
  named geometry set for tracing.

ShadingSystem API changes and new options:
* New "greedyjit" option will optimize & JIT all shader groups up front,
  concurrently, without locking.
* Add a way to name shader groups.
* attribute("options",...) lets you set a bunch of options at once.
* Options to enable/disable individual optimizations (mostly useful for
  debugging)

Optimization improvements:
* Allow block alias tracking on non-constants when it's safe.
* Track "stale" values to eliminate pointless assignments.
* Eliminate redundant "useparam" ops.
* Assignments to output parameters that are not connected to any
  downstream layers are now eliminated.
* More aggressive elision of ops that only write to symbols that won't
  be subsequently used.
* More careful identification and removal of parameters (input and output)
  that are both unused in the shader and not connected downstream.

Bug fixes and minor improvements:
* Minor blackbody fixes.
* Bug fix: don't mark constants as having their derivatives taken.
* Clamp splineinverse() for out-of-knot-range x input.
* Bug fix: the optimization of "a=b; a=c" was incorrect if c was an
  alias for a (it incorrectly eliminated the first assignment).
* Bug fix: work around LLVM thread safety issues during JIT.
* Bug fix: symbol_data() wasn't returning the right address for non-heap
  parameters.
* Bug fix: optimization errors related to break, continue, and return not
  properly marking the next instruction as a new basic block.
* Bug fix: luminance() with derivatives didn't work.
* Bug fix: in code generation of structure initializers.
* Improved error messages from ConnectShaders.
* Bug fix: type checking bug could case non-exactly-matching polymorphic
  functions to coerce a return value even when that was not intended.
* Type checking improvements: Make sure point-point is a vector
  expression, and point+vector & point-vector are point expressions.

Build & test system improvements and developer goodies:
* testsuite overhauls:
    - run each test both optimized and not
    - generate all tests in build, not directly in ./testsuite
    - greatly simplify the run.py scripts
* Much more detailed debugging logs of the optimization process.
* Upgrade to clang/llvm 3.0.
* Lots of infrastructure to make debugging the optimizer easier.
  Including new options debug_groupname, debug_layername, only_groupname.
* Improved the build system's LLVM-finding logic.
* Fix warnings from gcc 4.6.



Release 1.0.0 - Oct 12, 2011
----------------------------
* Modified testshade (and the underlying SimpleRender class) to handle
  several standard named coordinate systems such as "camera", "screen",
  "NDC", "raster."
* blackbody() and wavelength_color().
* New ShadingSystem configuration attribute: "colorspace" lets you explain
  to OSL what RGB really means (e.g., "Rec709", "sRGB", "NTSC", etc.).
  The luminance(), blackbody(), wavelength_color, and conversion to/from
  XYZ now takes this into account correctly.
* rotate() (always in spec, never implemented)



Release 0.6.2 - Sept 29, 2011
-----------------------------
* Statistics overhaul -- added optimization stats, eliminated unused ones.
* Allow a shader parameter to mask a global built-in function with
  only a warning, and improve scope conflict errors by pointing out the
  file and line of the previous definition.
* Altered the RendererServices API to add transform_points() method, which
  allows renderers to support nonlinear transformations (i.e., those that
  are not expressible as a 4x4 matrix).
* Issue a renderer error when unknown coordinate system names are used
  (can be turned of by setting the new ShadingSystem attribute
  "unknown_coordsys_error" to false).
* New OSL built-in function: splineinverse().


Release 0.6.1 - Sept 20, 2011
-----------------------------
* Be more aggressive in freeing shader instance memory that's no longer
  needed after optimization and LLVM JIT. This greatly reduces
  OSL-related memory consumption for scenes with large numbers of very
  complicated shading networks.
* Add Dz() which is helpful for apps that use OSL to shade volumes. At
  present, we only correctly compute Dz(P), all other Dz() queries
  return 0.
* Additional statistics on how many instances and groups compile, and
  how many are empty after all optimizations are performed.
* Make sure all the relevant statistics can be queried via
  ShadingSystem::getattribute.


Release 0.6.0 - Sept 9, 2011
----------------------------
* ShadeExec API overhaul -- an app using it no longer needs
  ShadingSystemImpl internal knowledge.
* Thread-parallel runtime optimization and LLVM JIT of different shader
  groups.
* Optimizations: runtime constant folding of arraylength and regex_search,
  new instruction 'arraycopy' will copy an entire array at once.
* Renamed patterns.h to oslutil.h.
* Do not generate unnecessary code when optional texture parameters are set
  to their default values.
* Restore long-lost ability for layers to run unconditionally (not lazily)
  if they were marked as "non-lazy" (for example, if they write to globals.
* Make the "debugnan" attribute work again -- when turned on, code will
  be inserted after every op to be sure that no NaN or Inf values are
  generated, and also verify that shader inputs (globals) don't have NaN
  or Inf values passed in by the renderer. A similar facility existed a
  long time ago, but we lost that functionality when we switched from
  the interpreter to LLVM.
* Looks for release versions of LLVM-2.9 (allows using a Macports LLVM
  installation).


Release 0.5.4 - Jul 21, 2011
----------------------------
* Several fixes related to arrays of structs, and structs containing
  other structs.
* Fixed arrays of closures.
* Removed support for old LLVM 2.7, nobody seemed to be using it any more.
* Changed the definition of dict_find() to return -1 for an invalid
  dictionary, to distinguish it from 0 meaning that the query failed but
  the dictionary itself was valid.
* Make array parameters safe to convert to constants during runtime
  optimization.
* Support derivatives in pointcloud searches.
* Fixed several runtime optimizer bugs.
* Fixed a bug where environment() calls with an optional "alpha" parameter
  that has derivatives was overwriting memory.
* Fixed code generation bug for a*=b and a/=b.
* Automatically initialize all local string variables to NULL, to avoid
  bad pointers for uninitialized strings.
* Bug fix: dict_value() wasn't properly marking its argument as writable.
* Automatic range checking of array and component access.
* Fix uninitialized derivatives for pointcloud().
* Speed up getattribute() calls by caching information about failed
  getattribute queries in the ShadingContext.
* Fix to constant folding of gettextureinfo: a failed lookup should not
  fold, because we want the error to occur in shader execution, not during
  optimization.
* Refactor, clean up, and comment testshade.
* oslc now gives an error on non-void functions that fail to return a value.
* Fixed implementation of area() that could generate an assertion.
* Fix escape sequences in string literals: we were handling it correctly
  for printf-like format strings, but not other string literals.
* break and continue now work properly (just like in C/C++).
* You can now return from anywhere in a user function (multiple times if
  you want), just like C/C++, and are no longer restricted to the only
  return statement being the last statement of the function.
* New include file for shaders: patterns.h. Now, it only includes a handy
  'wireframe()' function, but will expand for other useful things.
* New function: int getmatrix(from,to,M) is like the matrix(from,to)
  constructor, but returns a success value so a shader can tell if the
  named coordinate systems failed to be found by the renderer.


Release 0.5.3 - Apr 19, 2011
----------------------------
* Fix missing derivatives for sign() function.
* Fix closure color type size (crashes).
* Fix bug with environment() when passed "alpha" pointers with derivatives.
* Improve error messages for getmessage/setmessage to catch the most
  common sources of non-deterministic behavior.
* Bug fix when constant-folding gettextureinfo().
* Fix mismatched prototype for subsurface() closure.
* Texture errors encountered in shader constant folding are now properly
  reported to the renderer.
* Allow functions to have array parameters of unspecified length.
* Fix subtle bug related to lifetime analysis of variables in loops (led
  to incorrect optimizations).


Release 0.5.2 - Mar 14, 2011
----------------------------

* Windows: use boost::wave instead of external cpp; various other Windows
  compilation fixes.
* texture & environment now take an optional "interp" parameter that
  overrides the interpolation/filtering method (valid arguments:
  "smartcubic", "cubic", "linear", "closest").
* Bug fixes to getmessage() and its handling of derivatives, which includes
  a slight RendererServices API change.
Something went wrong with that request. Please try again.