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.
🚨 BREAKING 🚨
As of 0.4.0-alpha.16
, your shaders will require a different preamble. See this migration guide for more information.
Example
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;
Modules
Macros
OpTypeImage
types. Always produces a
spirv_std::image::Image<...>
type.let (mut)? <name>
. Where name
is the name of the ray query variable.Structs
Attribute Macros
#[spirv(..)]
attribute with
#[cfg_attr(target_arch="spirv", rust_gpu::spirv(..))]
.