AcademySoftwareFoundation / AcademySoftwareFoundation/OpenColorIO
Invalid vector comparisons in HLSL shader code
- 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
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