AcademySoftwareFoundation / AcademySoftwareFoundation/OpenShadingLanguage

Base closure pointer in layer is incorrect when using batched execute

Aperta
#1,801 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
batch shading bug shading system
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.