From d457eef099174105104e9678206671ef93358bce Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Thu, 8 Feb 2024 06:08:04 -0800 Subject: [PATCH] blade: fix path rasterization (#7546) There were mistakes in the blending mode, primitive topology, and the equation. ![gpui-text-selection](https://github.com/zed-industries/zed/assets/107301/13f1285e-1338-4c87-b1bb-7e426606f939) Release Notes: - N/A --- crates/gpui/src/platform/linux/blade_renderer.rs | 4 ++-- crates/gpui/src/platform/linux/shaders.wgsl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/gpui/src/platform/linux/blade_renderer.rs b/crates/gpui/src/platform/linux/blade_renderer.rs index 128b918ef7811fb1d89c91d9f09312a8fc41d9bc..665cedb88f343e94e1cc74040323053a4e2c757d 100644 --- a/crates/gpui/src/platform/linux/blade_renderer.rs +++ b/crates/gpui/src/platform/linux/blade_renderer.rs @@ -145,14 +145,14 @@ impl BladePipelines { data_layouts: &[&ShaderPathRasterizationData::layout()], vertex: shader.at("vs_path_rasterization"), primitive: gpu::PrimitiveState { - topology: gpu::PrimitiveTopology::TriangleStrip, + topology: gpu::PrimitiveTopology::TriangleList, ..Default::default() }, depth_stencil: None, fragment: shader.at("fs_path_rasterization"), color_targets: &[gpu::ColorTargetState { format: PATH_TEXTURE_FORMAT, - blend: Some(gpu::BlendState::ALPHA_BLENDING), + blend: Some(gpu::BlendState::ADDITIVE), write_mask: gpu::ColorWrites::default(), }], }), diff --git a/crates/gpui/src/platform/linux/shaders.wgsl b/crates/gpui/src/platform/linux/shaders.wgsl index 8a9fd31e964135e9a50f7298ee9e1abdf42a16dc..0f117b1eabdf2091674a00b81182b8e2e4535068 100644 --- a/crates/gpui/src/platform/linux/shaders.wgsl +++ b/crates/gpui/src/platform/linux/shaders.wgsl @@ -365,7 +365,7 @@ fn fs_path_rasterization(input: PathRasterizationVarying) -> @location(0) f32 { return 0.0; } - let gradient = 2.0 * input.st_position * vec2(dx.x, dy.x) - vec2(dx.y, dy.y); + let gradient = 2.0 * input.st_position.xx * vec2(dx.x, dy.x) - vec2(dx.y, dy.y); let f = input.st_position.x * input.st_position.x - input.st_position.y; let distance = f / length(gradient); return saturate(0.5 - distance);