AcademySoftwareFoundation / AcademySoftwareFoundation/OpenShadingLanguage
[BUG] Bad output indices from `pointcloud_search()` with batched shading
- 主要言語
- C++
- スター
- 2.3k
- フォーク
- 414
- 平均マージ
- 3日 1時間
- マージ済み PR(30日)
- 10
説明
**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:
1. `oslc search.osl` (source code in section below).
2. `testshade -g 16 16 -batched -param file cloud.geo search.oso -o Cout batched.png`
3. `testshade -g 16 16 -param file cloud.geo search.oso -o Cout unbatched.png`
4. Compare `batched.png` to `unbatched.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 :
コントリビューションガイド
調査の方向性
示されている oslc と testshade コマンドを testsuite/pointcloud-fold/cloud.geo に対して実行し、バッチ処理と非バッチ処理の出力を比較します。エントリポイント pointcloud_search から開始し、バッチ実行中に出力インデックス配列がどのように処理されるかを追跡します。workaround なしで batched.png が期待される非バッチ結果と一致すれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cpp
- 領域
- computer-graphics
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 40/100