Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't try to ReParameter symbols not in the group #1693

Merged
merged 1 commit into from
Jun 9, 2023

Conversation

aconty
Copy link
Contributor

@aconty aconty commented Jun 9, 2023

Sometimes, after optimization, symbols tagged as interactive get removed because they are unused. But ReParameter is failing with errors because it goes looking for the removed symbol to master, which is, of course, not interactive. This patch avoids that so the symbol is not found, and then we just return false.

Description

We found this issue in production because code was being removed, then symbols too, then reparameter failed.
There is no other way to prevent the error than from inside OSL. I'm suggesting this change but any other way to
handle it would work for us.

Checklist:

  • I have read the contribution guidelines.
  • I have previously submitted a Contributor License Agreement.
  • I have updated the documentation, if applicable.
  • I have ensured that the change is tested somewhere in the testsuite (adding new test cases if necessary).
  • My code follows the prevailing code style of this project.

Comment on lines +3216 to +3217
int paramindex = layer->findparam(ustring(paramname),
false /* don't go to master */);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a suggestion:

First, look for it with search_master=false. If that succeeds, we're done.

If that search fails, try again with search_master=true. If that succeeds, then you know it's the case that the parameter did exist, but was optimized away.

I think that in such a case, ReParameter should return true. It's not a failure in the same sense as using a parameter that doesn't exist in the shader, or using a parameter not marked as interactive. It's simply that changing the value of the parameter has no effect on the appearance, so you don't need to communicate the new value to the GPU or whatever. But I still consider that a success in terms of changing the value and being able to get the right picture when you rerender.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remember that I'm simultaneously working on another fix in which if you try to ReParameter something that isn't allowed to vary (say, because not folding it would make something illegal for the GPU), the false it returns can be interpreted by the renderer as "if I want to vary that parameter, I need to re-send the shader group and re-JIT". So I don't want to throw back false failures for harmless things where we can draw the right picture without re-compiling.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, done.

Sometimes, after optimization, symbols tagged as interactive
get removed because they are unused. But ReParameter is failing
with errors because it goes looking for the removed symbol to
master, which is, of course, not interactive. This patch avoids
that so the symbol is not found and we just return false.

Signed-off-by: Alejandro Conty <aconty@imageworks.com>
Copy link
Collaborator

@lgritz lgritz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, merging

@lgritz lgritz merged commit 4e9e640 into AcademySoftwareFoundation:main Jun 9, 2023
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants