EmbarkStudios / rust-gpu

🐉 Making Rust a first-class language and ecosystem for GPU shaders 🚧

Home Page:https://shader.rs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ray tracing position fetch support

atynagano opened this issue · comments

    use core::arch::asm;
    use spirv_std::glam::Vec3;

    #[spirv_std::macros::gpu_only]
    pub fn get_positions() -> [Vec3; 3] {
        unsafe {
            let mut result: [Vec3; 3] = Default::default();
            asm! {
                "%f32 = OpTypeFloat 32",
                "%f32x3 = OpTypeVector %f32 3",
                // OpTypeArray in asm! is not supported yet
                // "%f32x3x3 = OpTypeArray %f32x3 3",
                "%f32x3x3 = OpTypeMatrix %f32x3 3",
                "%ptr_f32x3x3 = OpTypePointer Generic %f32x3x3",
                "%positions = OpVariable %ptr_f32x3x3 Input",
                "OpDecorate %positions BuiltIn HitTriangleVertexPositionsKHR",
                "%result = OpLoad %f32x3x3 %positions",
                "OpStore {result} %result",
                result = in(reg) &mut result,
            }
            result
        }
    }

I tried the above code and got the error message error: unknown BuiltIn HitTriangleVertexPositionsKHR. So I think rspirv needs to support it first.
(I am not familiar with spirv so this code may be wrong to begin with.)

Seems supported in version 0.12.