[Migrated] Using `arch::ignore_intersection` causes shader compilation to fail
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(); }
}
}
- Use the above snippet in a shader crate
- 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
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 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