EmbarkStudios / rust-gpu

🐉 Making Rust a first-class language and ecosystem for GPU shaders 🚧
https://shader.rs
Apache License 2.0
7.14k stars 247 forks source link

SPIR-V wishlist #17

Open Jasper-Bekkers opened 3 years ago

Jasper-Bekkers commented 3 years ago

Tracking issue for features we think are missing or useful in to have in SPIR-V

Jasper-Bekkers commented 3 years ago

Noticed a few comments other things in the codebase yesterday:

khyperia commented 3 years ago

For the "equivalent of llvm.*", there are a lot of these, those are just the ones that have been hit so far - I've just been JITting them into the codebase. For a reasonably full list, look at this file - for example, llvm.expect.i1 (sym::likely/sym::unlikely), llvm.debugtrap (sym::breakpoint), and so forth. (including llvm.trap (sym::abort), which was already mentioned at the start of this thread)

https://github.com/rust-lang/rust/blob/e88e908e66cd1e6e30d789b37bcd774951d01856/compiler/rustc_codegen_llvm/src/intrinsic.rs

Jasper-Bekkers commented 3 years ago
nhaehnle commented 3 years ago
* Potentially request OpControlBarrier  for non-uniform controlflow (useful for #29)

To clarify, for #29 the thinking is that OpControlBarrier without undefined behavior may be useful. This would be done by making the behavior a guaranteed hang when it's not executed in uniform control flow...

Jasper-Bekkers commented 3 years ago

@khyperia not only is this legal spir-v, it is unspecified what the return value is (like, it's not specified as undefined, it's unspecified)

         %f_ = OpFunction %int None %7
          %9 = OpLabel
          %x = OpVariable %_ptr_Function_int Function
         %12 = OpLoad %int %x
               OpReturnValue %12
               OpFunctionEnd

can we get this fixed in the spec, please? this is equivalent to the glsl

int f() {
    int x; // explicitly uninitialized
    return x;
}