-
Notifications
You must be signed in to change notification settings - Fork 391
Open
Description
Describe the bug
When using pointcloud_search()
with batched shader execution, the output indices
array is not being filled correctly. It looks a little like OSL thinks the output is a uniform rather than a varying value, but I don't know enough about what is going on under the hood to be sure.
OSL version and dependencies
- OSL branch/version: 1.14.5.1
- OS: Rocky 8.8
- C++ compiler: GCC 11.2.1
- LLVM version: 15.0.7
- OIIO version: 3.0.6.1
To Reproduce
Steps to reproduce the behavior:
oslc search.osl
(source code in section below).testshade -g 16 16 -batched -param file cloud.geo search.oso -o Cout batched.png
testshade -g 16 16 -param file cloud.geo search.oso -o Cout unbatched.png
- Compare
batched.png
tounbatched.png
. The latter has the expected results, and the former does not.
In the above commands, cloud.geo
is testsuite/pointcloud-fold/cloud.geo
from the OSL repo.
Evidence
search.osl
shader search( string file = "", output color Cout = 0 )
{
int indices[1];
// Uncommenting this workaround gives the expected results in batched
// mode. I suspect it works by tricking OSL into realising that `indices`
// is a varying quantity.
// indices[0] = P[0];
if( pointcloud_search( file, P, 1, 1, "index", indices ) )
{
Cout = color( indices[0] / 15.0 );
}
else
{
Cout = color( 1, 0, 0 );
}
}
batched.png :

unbatched.png :

Metadata
Metadata
Assignees
Labels
No labels