AcademySoftwareFoundation / AcademySoftwareFoundation/OpenShadingLanguage
Base closure pointer in layer is incorrect when using batched execute
- Lingua principale
- C++
- Stelle
- 2.3k
- Fork
- 414
- Merge medio
- 3g 1h
- PR unite (30g)
- 10
Descrizione
### Problem
Base closure pointer in osl layer points to its parent layer closure when using batched execute while it should actually point to a diffuse closure.
```
void process_bsdf_closure(const ClosureColor* closure) {
const ClosureComponent* comp = closure->as_comp();
const MxLayerParams* srcparams = comp->as();
assert(srcparams->base != closure);
```
[minimal_test_case.zip](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/files/15049651/minimal_test_case.zip)
### Steps to Reproduce
Download the attached minimal sample and issue the following commands:
g++ -DUSE_BATCHED -mavx2 -mfma -mtune=skylake -mf16c -g test2.cpp -loslcomp -loslexec -loslnoise -loslquery -lOpenImageIO -lOpenImageIO_Util
./a.out
parsing mx layer closure
parsing generalized schlick closure
Error: base closure in mx layer points back to currently parsed closure
g++ -mavx2 -mfma -mtune=skylake -mf16c -g test2.cpp -loslcomp -loslexec -loslnoise -loslquery -lOpenImageIO -lOpenImageIO_Util
./a.out
parsing mx layer closure
parsing generalized schlick closure
parsing diffuse closure
Here's .osl shader codes in the .zip:
```
shader layer_test(
color base_color = color(0.8, 0.8, 0.8),
color specular_tint = color(1.0),
float roughness = 0.5,
normal Tangent = normalize(dPdu),
output closure color BSDF = 0)
{
BSDF = base_color * diffuse(N);
color F0 = specular_tint;
color F90 = color(1.0);
BSDF = layer(generalized_schlick_bsdf(N, Tangent, color(1.0), color(0.0), roughness, roughness, F0, F90, 0.0, "ggx"),BSDF);
}
```
```
surface output_surface(closure color Surface = 0)
{
Ci = Surface;
}
```
### Versions
* OSL branch/version: v1.13.8.0
* OS: linux 64-bit 5.10.0-18-amd64
* C++ compiler: g++ 10.2.1
* LLVM version: 11.0.1-2
* OIIO version: v2.5.4.0
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia con il caso di test minimo allegato, in particolare test2.cpp, e riproduci il problema con USE_BATCHED abilitato e senza. Traccia process_bsdf_closure, MxLayerParams e la gestione delle layer closure di osl; il lavoro è concluso quando l’esecuzione batch segnala la diffuse closure come base e l’assertion esistente non fallisce più, mentre l’output non batch rimane corretto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- cpp, linux
- Ambito
- compilers, computer-graphics
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 38/100