Crate spirv_std

Source
Expand description

§spirv-std

Core functions, traits, and more that make up a “standard library” for SPIR-V for use in rust-gpu.

This crate gives a rust-gpu shader access to the required #![spirv(..)] attribute, as well as povide all kinds of APIs that allows a shader to access GPU resources such as textures and buffers. Optionally, through the use of the "glam" feature, it includes some boilerplate trait implementations to make glam vector types compatible with these APIs.

§Example

Sky shader

Here is a small excerpt to see what a shader would look like. See source for full details of the shader that generates above image.

use spirv_std::spirv;
use glam::{Vec3, Vec4, vec2, vec3};

#[spirv(fragment)]
pub fn main(
    #[spirv(frag_coord)] in_frag_coord: &Vec4,
    #[spirv(push_constant)] constants: &ShaderConstants,
    output: &mut Vec4,
) {
    let frag_coord = vec2(in_frag_coord.x, in_frag_coord.y);
    let mut uv = (frag_coord - 0.5 * vec2(constants.width as f32, constants.height as f32))
        / constants.height as f32;
    uv.y = -uv.y;

    let eye_pos = vec3(0.0, 0.0997, 0.2);
    let sun_pos = vec3(0.0, 75.0, -1000.0);
    let dir = get_ray_dir(uv, eye_pos, sun_pos);

    // evaluate Preetham sky model
    let color = sky(dir, sun_pos);

    *output = tonemap(color).extend(1.0)
}

§Getting started

Check out The rust-gpu Dev Guide for information on how to get started with using it in your projects.

Experiment with rust-gpu shaders in-browser at SHADERed.

Re-exports§

pub extern crate spirv_std_macros as macros;
pub use byte_addressable_buffer::ByteAddressableBuffer;
pub use num_traits;
pub use glam;

Modules§

arch
SPIR-V Instrinics
byte_addressable_buffer
Container for an untyped blob of data.
float
Traits and helper functions related to floats.
image
Image types
integer
Traits related to integers.
memory
Types for handling memory ordering constraints for concurrent memory access.
number
Traits and helper functions related to numbers.
ray_tracing
Ray-tracing data types
scalar
Traits related to scalars.
vector
Traits related to vectors.

Macros§

Image
A macro for creating SPIR-V OpTypeImage types. Always produces a spirv_std::image::Image<...> type.
ray_query
Constructs an uninitialized ray query variable. Using the syntax let (mut)? <name>. Where name is the name of the ray query variable.

Structs§

RuntimeArray
Dynamically-sized arrays in Rust carry around their length as the second half of a tuple. Unfortunately, sometimes SPIR-V provides an unsized array with no way of obtaining its length. Hence, this type represents something very similar to a slice, but with no way of knowing its length.
Sampler
An opaque reference to settings that describe how to access, filter, or sample an image.

Attribute Macros§

spirv
Replaces all (nested) occurrences of the #[spirv(..)] attribute with #[cfg_attr(target_arch="spirv", rust_gpu::spirv(..))].