Rust-GPU / Rust-GPU/rust-gpu

[Migrated] Using `arch::ignore_intersection` causes shader compilation to fail

Offen
#67 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Rust
Sterne
3.4k
Forks
126
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Issue automatically imported from old repo: https://github.com/EmbarkStudios/rust-gpu/issues/1099
Old labels: t: bug
Originally creatd by Steelbirdy on 2023-11-13T21:07:54Z


Expected Behaviour

Shader crate successfully compiles

Example & Steps To Reproduce
#[spirv(any_hit)]
pub fn my_any_hit() {
    let p = Vec3A::ZERO;
    if p.length_squared() < 1e-3 {
        unsafe { spirv_std::arch::ignore_intersection(); }
    }
}
  1. Use the above snippet in a shader crate
  2. Compilation fails

Replacing this with the below snippet causes it to compile.

#[spirv(any_hit)]
pub fn my_any_hit() {
    let p = Vec3A::ZERO;
    if p.length_squared() < 1e-3 {
        my_ignore_intersection();
    }
}

#[inline(never)]
fn my_ignore_intersection() {
    unsafe { spirv_std::arch::ignore_intersection(); }
}

System Info

  • Rust: 1.71.0-nightly (1a5f8bce7 2023-05-26)
  • OS: Windows 11
  • GPU: NVIDIA RTX 3060 Ti

Backtrace

Backtrace

  error: Selection must be structured
           OpBranchConditional %1274 %1275 %1276
    |
    = note: module `C:\Users\Pat\CLionProjects\rayven_gpu2\target\spirv-builder\spirv-unknown-vulkan1.2\release\deps\shader.spv`

  warning: an unknown error occurred
    |
    = note: spirv-opt failed, leaving as unoptimized
    = note: module `C:\Users\Pat\CLionProjects\rayven_gpu2\target\spirv-builder\spirv-unknown-vulkan1.2\release\deps\shader.spv`

  error: error:0:0 - Selection must be structured
           OpBranchConditional %1274 %1275 %1276
    |
    = note: spirv-val failed
    = note: module `C:\Users\Pat\CLionProjects\rayven_gpu2\target\spirv-builder\spirv-unknown-vulkan1.2\release\deps\shader.spv`

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, den Fehler mit dem bereitgestellten any-hit shader snippet zu reproduzieren, und vergleiche es mit der Variante mit Hilfsfunktion. Untersuche das generierte SPIR-V rund um das gemeldete OpBranchConditional und verwende spirv-opt und spirv-val, um zu ermitteln, warum der direkte Aufruf von ignore_intersection eine unstrukturierte Selektion erzeugt. Als abgeschlossen gilt die Aufgabe, wenn das ursprüngliche Snippet kompiliert und die SPIR-V-Validierung besteht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rust
Bereich
compilers, computer-graphics
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

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