From 11964dc731fd08c679f1a59d7d8ab78bfc478dd1 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Mon, 5 Feb 2024 22:50:25 -0800 Subject: [PATCH] blade: cull mask support for sprites --- Cargo.lock | 3 +-- crates/gpui/Cargo.toml | 4 ++-- crates/gpui/src/platform/linux/shaders.wgsl | 9 +++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b1b221dda4c136867babaf04f0733ff893c1123..817eca20f6c4176c42f64331c39acb0fe9ead170 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -937,7 +937,6 @@ dependencies = [ [[package]] name = "blade-graphics" version = "0.3.0" -source = "git+https://github.com/kvark/blade?rev=62eb18d312f720a5aac8f508fe223146a24fc7f0#62eb18d312f720a5aac8f508fe223146a24fc7f0" dependencies = [ "ash", "ash-window", @@ -967,7 +966,7 @@ dependencies = [ [[package]] name = "blade-macros" version = "0.2.1" -source = "git+https://github.com/kvark/blade?rev=62eb18d312f720a5aac8f508fe223146a24fc7f0#62eb18d312f720a5aac8f508fe223146a24fc7f0" +source = "git+https://github.com/kvark/blade?rev=f35bc605154e210ab6190291235889b6ddad73f1#f35bc605154e210ab6190291235889b6ddad73f1" dependencies = [ "proc-macro2", "quote", diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index 2ba8a1f6f027a3f654a7ca3b68604b4038395d98..864ed76935e763cf80a7e78050be701ae8b9b0df 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -99,6 +99,6 @@ flume = "0.11" xcb = { version = "1.3", features = ["as-raw-xcb-connection"] } as-raw-xcb-connection = "1" #TODO: use these on all platforms -blade-graphics = { git = "https://github.com/kvark/blade", rev = "62eb18d312f720a5aac8f508fe223146a24fc7f0" } -blade-macros = { git = "https://github.com/kvark/blade", rev = "62eb18d312f720a5aac8f508fe223146a24fc7f0" } +blade-graphics = { git = "https://github.com/kvark/blade", rev = "f35bc605154e210ab6190291235889b6ddad73f1" } +blade-macros = { git = "https://github.com/kvark/blade", rev = "f35bc605154e210ab6190291235889b6ddad73f1" } bytemuck = "1" diff --git a/crates/gpui/src/platform/linux/shaders.wgsl b/crates/gpui/src/platform/linux/shaders.wgsl index 58dd3265bf9be24a3836cda13f24215d1e19c749..8a9fd31e964135e9a50f7298ee9e1abdf42a16dc 100644 --- a/crates/gpui/src/platform/linux/shaders.wgsl +++ b/crates/gpui/src/platform/linux/shaders.wgsl @@ -504,6 +504,10 @@ fn vs_mono_sprite(@builtin(vertex_index) vertex_id: u32, @builtin(instance_index @fragment fn fs_mono_sprite(input: MonoSpriteVarying) -> @location(0) vec4 { let sample = textureSample(t_sprite, s_sprite, input.tile_position).r; + // Alpha clip after using the derivatives. + if (any(input.clip_distances < vec4(0.0))) { + return vec4(0.0); + } return input.color * vec4(1.0, 1.0, 1.0, sample); } @@ -545,6 +549,11 @@ fn vs_poly_sprite(@builtin(vertex_index) vertex_id: u32, @builtin(instance_index @fragment fn fs_poly_sprite(input: PolySpriteVarying) -> @location(0) vec4 { let sample = textureSample(t_sprite, s_sprite, input.tile_position); + // Alpha clip after using the derivatives. + if (any(input.clip_distances < vec4(0.0))) { + return vec4(0.0); + } + let sprite = b_poly_sprites[input.sprite_id]; let distance = quad_sdf(input.position.xy, sprite.bounds, sprite.corner_radii);