[Migrated] Malformed SPIR-V when compiling a simple loop
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/1076
Old labels: t: bug
Originally creatd by Patryk27 on 2023-06-16T15:19:59Z
Hi,
Compiling this code:
#[spirv(compute(threads(8, 8)))]
pub fn main(#[spirv(descriptor_set = 0, binding = 0)] out: TexRgba32f) {
let mut value = vec3(0.1, 0.2, 0.3);
let mut i = 0;
loop {
if i >= 32 {
break;
}
i += 1;
}
unsafe {
out.write(uvec2(0, 0), value.extend(1.0));
}
}
... will work, but adding a seemingly no-op value = value into that loop:
loop {
value = value;
if i >= 32 {
break;
}
i += 1;
}
... will panic the compiler, saying:
error: malformed SPIR-V (in OpCompositeExtract: undefined ID %4547)
Meta:
rustc 1.71.0-nightly (1a5f8bce7 2023-05-26)
SPIRV-Tools v2023.2 unknown hash, 1980-01-01T00:00:00
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, den Rust-Reproducer mit und ohne das No-op value = value innerhalb der Schleife zu kompilieren; untersuche anschließend das generierte SPIR-V und die Diagnose von OpCompositeExtract. Als abgeschlossen gilt, wenn beide Versionen ohne einen Fehler wegen fehlerhaftem SPIR-V kompiliert werden und eine gültige Ausgabe erzeugen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100