From 39d98fa617cf23f5c47d6d61badf4c1e5c5490bc Mon Sep 17 00:00:00 2001 From: Christian Legnitto Date: Sat, 16 Aug 2025 17:37:47 -0700 Subject: [PATCH] Update rust shaders to work with latest upstream main --- .../rust/computeparticles/particle.comp.spv | Bin 3548 -> 3844 bytes .../rust/computeparticles/particle/src/lib.rs | 47 ++++++++++++------ shaders/rust/offscreen/mirror/src/lib.rs | 26 +++++++--- shaders/rust/offscreen/phong.vert.spv | Bin 10156 -> 10136 bytes shaders/rust/offscreen/phong/src/lib.rs | 23 ++++++--- shaders/rust/offscreen/quad/src/lib.rs | 11 ++-- 6 files changed, 74 insertions(+), 33 deletions(-) diff --git a/shaders/rust/computeparticles/particle.comp.spv b/shaders/rust/computeparticles/particle.comp.spv index 7081dc34750d3763fe1625f9fe64a1846e6ab1ea..3218503ac1104e14705ebbc37df9790472758031 100644 GIT binary patch literal 3844 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 n`W^fbPP2CHk7f;hn6FNIO}(_^^7xy&`D{DiJ^Y Vec2 { #[spirv(compute(threads(256, 1, 1)))] pub fn main_cs( #[spirv(global_invocation_id)] global_id: UVec3, - #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] particles: &mut [Particle], - #[spirv(uniform, descriptor_set = 0, binding = 1)] ubo: &Ubo, + #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] particles_in: &[Particle], + #[spirv(storage_buffer, descriptor_set = 0, binding = 1)] particles_out: &mut [Particle], + #[spirv(uniform, descriptor_set = 0, binding = 2)] ubo: &Ubo, ) { let index = global_id.x; if index >= ubo.particle_count as u32 { @@ -48,8 +53,9 @@ pub fn main_cs( } let idx = index as usize; - let mut vel = particles[idx].vel; - let mut pos = particles[idx].pos; + let mut vel = particles_in[idx].vel; + let mut pos = particles_in[idx].pos; + let g_pos = particles_in[idx].gradient_pos; let dest_pos = vec2(ubo.dest_x, ubo.dest_y); @@ -62,13 +68,13 @@ pub fn main_cs( if pos.x < -1.0 || pos.x > 1.0 || pos.y < -1.0 || pos.y > 1.0 { vel = (-vel * 0.1) + attraction(pos, dest_pos) * 12.0; } else { - particles[idx].pos = pos; + particles_out[idx].pos = pos; } - particles[idx].vel = vel; - particles[idx].gradient_pos.x += 0.02 * ubo.delta_t; - if particles[idx].gradient_pos.x > 1.0 { - particles[idx].gradient_pos.x -= 1.0; + particles_out[idx].vel = vel; + particles_out[idx].gradient_pos.x = g_pos.x + 0.02 * ubo.delta_t; + if particles_out[idx].gradient_pos.x > 1.0 { + particles_out[idx].gradient_pos.x -= 1.0; } } @@ -92,11 +98,22 @@ pub fn main_fs( _in_color: Vec4, in_gradient_pos: f32, #[spirv(point_coord)] point_coord: Vec2, - #[spirv(descriptor_set = 0, binding = 0)] sampler_color_map: &SampledImage, - #[spirv(descriptor_set = 0, binding = 1)] sampler_gradient_ramp: &SampledImage, + #[spirv(descriptor_set = 0, binding = 0)] sampler_color_map: &SampledImage< + Image!(2D, type=f32, sampled), + >, + #[spirv(descriptor_set = 0, binding = 1)] sampler_gradient_ramp: &SampledImage< + Image!(2D, type=f32, sampled), + >, out_frag_color: &mut Vec4, ) { - let color = sampler_gradient_ramp.sample(vec2(in_gradient_pos, 0.0)).truncate(); + let color = sampler_gradient_ramp + .sample(vec2(in_gradient_pos, 0.0)) + .truncate(); let tex_color = sampler_color_map.sample(point_coord).truncate(); - *out_frag_color = vec4(tex_color.x * color.x, tex_color.y * color.y, tex_color.z * color.z, 1.0); -} \ No newline at end of file + *out_frag_color = vec4( + tex_color.x * color.x, + tex_color.y * color.y, + tex_color.z * color.z, + 1.0, + ); +} diff --git a/shaders/rust/offscreen/mirror/src/lib.rs b/shaders/rust/offscreen/mirror/src/lib.rs index 6fd5b0978..f3c08adf5 100644 --- a/shaders/rust/offscreen/mirror/src/lib.rs +++ b/shaders/rust/offscreen/mirror/src/lib.rs @@ -1,8 +1,11 @@ #![cfg_attr(target_arch = "spirv", no_std)] #![allow(clippy::missing_safety_doc)] -use spirv_std::{spirv, glam::{vec2, vec4, Mat4, Vec3, Vec4}, Image}; use spirv_std::image::SampledImage; +use spirv_std::{ + glam::{vec2, vec4, Mat4, Vec3, Vec4}, + spirv, Image, +}; #[repr(C)] #[derive(Copy, Clone)] @@ -28,22 +31,29 @@ pub fn main_vs( pub fn main_fs( in_pos: Vec4, #[spirv(front_facing)] front_facing: bool, - #[spirv(descriptor_set = 0, binding = 1)] sampler_color: &SampledImage, + #[spirv(descriptor_set = 0, binding = 1)] sampler_color: &SampledImage< + Image!(2D, type=f32, sampled), + >, out_frag_color: &mut Vec4, ) { - let tmp = vec4(1.0 / in_pos.w, 1.0 / in_pos.w, 1.0 / in_pos.w, 1.0 / in_pos.w); + let tmp = vec4( + 1.0 / in_pos.w, + 1.0 / in_pos.w, + 1.0 / in_pos.w, + 1.0 / in_pos.w, + ); let proj_coord = in_pos * tmp; - + // Scale and bias let proj_coord = proj_coord + vec4(1.0, 1.0, 1.0, 1.0); let proj_coord = proj_coord * vec4(0.5, 0.5, 0.5, 0.5); - + // Slow single pass blur // For demonstration purposes only const BLUR_SIZE: f32 = 1.0 / 512.0; - + *out_frag_color = vec4(0.0, 0.0, 0.0, 1.0); - + if front_facing { // Only render mirrored scene on front facing (upper) side of mirror surface let mut reflection = vec4(0.0, 0.0, 0.0, 0.0); @@ -56,4 +66,4 @@ pub fn main_fs( } *out_frag_color = *out_frag_color + reflection; } -} \ No newline at end of file +} diff --git a/shaders/rust/offscreen/phong.vert.spv b/shaders/rust/offscreen/phong.vert.spv index 2a01ae6bfbb95dcdd20e43a07239704fdadb3944..a91b0d2f16e88673c9127710a33f6cb4c9f19f95 100644 GIT binary patch literal 10136 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 literal 10156 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 diff --git a/shaders/rust/offscreen/phong/src/lib.rs b/shaders/rust/offscreen/phong/src/lib.rs index 1b153f988..b3d874402 100644 --- a/shaders/rust/offscreen/phong/src/lib.rs +++ b/shaders/rust/offscreen/phong/src/lib.rs @@ -1,7 +1,11 @@ #![cfg_attr(target_arch = "spirv", no_std)] #![allow(clippy::missing_safety_doc)] -use spirv_std::{spirv, glam::{vec4, Mat4, Vec3, Vec4}, num_traits::Float}; +use spirv_std::{ + glam::{vec4, Mat4, Vec3, Vec4}, + num_traits::Float, + spirv, +}; #[repr(C)] #[derive(Copy, Clone)] @@ -31,9 +35,9 @@ pub fn main_vs( let eye_pos = ubo.view * ubo.model * vec4(in_pos.x, in_pos.y, in_pos.z, 1.0); *out_eye_pos = eye_pos.truncate(); *out_light_vec = (ubo.light_pos.truncate() - *out_eye_pos).normalize(); - + // Clip against reflection plane - let clip_plane = vec4(0.0, -1.0, 0.0, 0.0); + let clip_plane = vec4(0.0, 0.0, 0.0, 0.0); clip_distance[0] = vec4(in_pos.x, in_pos.y, in_pos.z, 1.0).dot(clip_plane); } @@ -47,16 +51,21 @@ pub fn main_fs( ) { let eye = (-in_eye_pos).normalize(); let reflected = (-in_light_vec).reflect(in_normal).normalize(); - + let i_ambient = vec4(0.1, 0.1, 0.1, 1.0); - let i_diffuse = vec4(in_normal.dot(in_light_vec).max(0.0), in_normal.dot(in_light_vec).max(0.0), in_normal.dot(in_light_vec).max(0.0), in_normal.dot(in_light_vec).max(0.0)); + let i_diffuse = vec4( + in_normal.dot(in_light_vec).max(0.0), + in_normal.dot(in_light_vec).max(0.0), + in_normal.dot(in_light_vec).max(0.0), + in_normal.dot(in_light_vec).max(0.0), + ); let specular = 0.75; let mut i_specular = vec4(0.0, 0.0, 0.0, 0.0); if in_eye_pos.dot(in_normal) < 0.0 { let spec_factor = reflected.dot(eye).max(0.0).powf(16.0) * specular; i_specular = vec4(0.5, 0.5, 0.5, 1.0) * spec_factor; } - + let color_vec4 = vec4(in_color.x, in_color.y, in_color.z, 1.0); *out_frag_color = (i_ambient + i_diffuse) * color_vec4 + i_specular; -} \ No newline at end of file +} diff --git a/shaders/rust/offscreen/quad/src/lib.rs b/shaders/rust/offscreen/quad/src/lib.rs index a03751315..b48917239 100644 --- a/shaders/rust/offscreen/quad/src/lib.rs +++ b/shaders/rust/offscreen/quad/src/lib.rs @@ -1,8 +1,11 @@ #![cfg_attr(target_arch = "spirv", no_std)] #![allow(clippy::missing_safety_doc)] -use spirv_std::{spirv, glam::{vec2, vec4, Vec2, Vec4}, Image}; use spirv_std::image::SampledImage; +use spirv_std::{ + glam::{vec2, vec4, Vec2, Vec4}, + spirv, Image, +}; #[spirv(vertex)] pub fn main_vs( @@ -19,8 +22,10 @@ pub fn main_vs( #[spirv(fragment)] pub fn main_fs( in_uv: Vec2, - #[spirv(descriptor_set = 0, binding = 1)] sampler_color: &SampledImage, + #[spirv(descriptor_set = 0, binding = 1)] sampler_color: &SampledImage< + Image!(2D, type=f32, sampled), + >, out_frag_color: &mut Vec4, ) { *out_frag_color = sampler_color.sample(in_uv); -} \ No newline at end of file +}