AcademySoftwareFoundation / AcademySoftwareFoundation/OpenColorIO

Invalid vector comparisons in HLSL shader code

Offen
#2,108 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
C++
Sterne
2.1k
Forks
503
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

In some cases OCIO generates invalid HLSL code like this:
`if ( gamma != float3(1., 1., 1.) )`

This fails compilation with the following error:
`error X3019: if statement conditional expressions must evaluate to a scalar`

The correct code should be:
`if ( any( gamma != float3(1., 1., 1.) ) )`

This is essentially the same issue as #1810 but for HLSL. There's already a fix in `GpuShaderText::vectorCompareExpression()` but it's only for Metal.

Can be reproduced using the OCIO config shipped with recent Blender versions, with some of the AgX looks. In our case we're creating a LegacyViewingPipeline containing a DisplayViewTransform and a looks override, similarly to the ociodisplay app.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit GpuShaderText::vectorCompareExpression() und vergleiche die bestehende Metal-spezifische Behandlung mit der HLSL-Generierung. Reproduziere das Problem mithilfe der OCIO-Konfiguration, die mit aktuellen Blender-Versionen ausgeliefert wird, und einem AgX look. Überprüfe anschließend, dass generierte HLSL-Vektorvergleiche erfolgreich kompiliert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
cpp
Bereich
computer-graphics
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.