imageworks/OpenShadingLanguage — pull request #373 by lgritz (2014-05-30 22:46:36+00:00)
Title: Eliminate redundant get_userdata within a shading network.

Geometric (interpolated) parameters are retrieved by calls to RendererServices::get_userdata, and are done so separately (and potentially redundantly) for every shader in the group that requires the same named variable. This is potentially very wasteful.

In this patch, we augment the group data with slots for every unique userdata that may be queried by the shader group, and an array of flags detailing whether each has yet been retrieved. This serves to ensure that the expensive call to get_userdata is called at most once per shader group invocation (rather than once per layer that references it).