From 625d2bdd241c09ff9d0ae394ba91565fa48455ec Mon Sep 17 00:00:00 2001 From: Jeremy Leibs Date: Fri, 14 Apr 2023 17:58:21 -0400 Subject: [PATCH] Revert "Implement billinear filtering of textures (#1850)" (#1859) This reverts commit d33dab6e7a33f82ab2513058d0f85744e3ce6ef4. --- crates/re_renderer/shader/rectangle.wgsl | 66 ++----------------- crates/re_renderer/src/renderer/rectangles.rs | 18 +---- crates/re_viewer/src/ui/view_tensor/ui.rs | 45 +++++++------ 3 files changed, 32 insertions(+), 97 deletions(-) diff --git a/crates/re_renderer/shader/rectangle.wgsl b/crates/re_renderer/shader/rectangle.wgsl index 0bfdd52fc8cd..2bf5f5517624 100644 --- a/crates/re_renderer/shader/rectangle.wgsl +++ b/crates/re_renderer/shader/rectangle.wgsl @@ -16,9 +16,6 @@ const COLOR_MAPPER_OFF = 1u; const COLOR_MAPPER_FUNCTION = 2u; const COLOR_MAPPER_TEXTURE = 3u; -const FILTER_NEAREST = 1u; -const FILTER_BILINEAR = 2u; - struct UniformBuffer { /// Top left corner position in world space. top_left_corner_position: Vec3, @@ -51,9 +48,6 @@ struct UniformBuffer { /// Exponent to raise the normalized texture value. /// Inverse brightness. gamma: f32, - - minification_filter: u32, - magnification_filter: u32, }; @group(1) @binding(0) @@ -96,18 +90,6 @@ fn vs_main(@builtin(vertex_index) v_idx: u32) -> VertexOut { return out; } -fn is_magnifying(pixel_coord: Vec2) -> bool { - return fwidth(pixel_coord.x) < 1.0; -} - -fn tex_filter(pixel_coord: Vec2) -> u32 { - if is_magnifying(pixel_coord) { - return rect_info.magnification_filter; - } else { - return rect_info.minification_filter; - } -} - @fragment fn fs_main(in: VertexOut) -> @location(0) Vec4 { // Sample the main texture: @@ -116,50 +98,14 @@ fn fs_main(in: VertexOut) -> @location(0) Vec4 { // TODO(emilk): support mipmaps sampled_value = textureSampleLevel(texture_float_filterable, texture_sampler, in.texcoord, 0.0); } else if rect_info.sample_type == SAMPLE_TYPE_FLOAT_NOFILTER { - let coord = in.texcoord * Vec2(textureDimensions(texture_float).xy); - if tex_filter(coord) == FILTER_NEAREST { - // nearest - sampled_value = textureLoad(texture_float, IVec2(coord + vec2(0.5)), 0); - } else { - // bilinear - let v00 = textureLoad(texture_float, IVec2(coord) + IVec2(0, 0), 0); - let v01 = textureLoad(texture_float, IVec2(coord) + IVec2(0, 1), 0); - let v10 = textureLoad(texture_float, IVec2(coord) + IVec2(1, 0), 0); - let v11 = textureLoad(texture_float, IVec2(coord) + IVec2(1, 1), 0); - let top = mix(v00, v10, fract(coord.x)); - let bottom = mix(v01, v11, fract(coord.x)); - sampled_value = mix(top, bottom, fract(coord.y)); - } + let icoords = IVec2(in.texcoord * Vec2(textureDimensions(texture_float).xy)); + sampled_value = Vec4(textureLoad(texture_float, icoords, 0)); } else if rect_info.sample_type == SAMPLE_TYPE_SINT_NOFILTER { - let coord = in.texcoord * Vec2(textureDimensions(texture_sint).xy); - if tex_filter(coord) == FILTER_NEAREST { - // nearest - sampled_value = Vec4(textureLoad(texture_sint, IVec2(coord + vec2(0.5)), 0)); - } else { - // bilinear - let v00 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(0, 0), 0)); - let v01 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(0, 1), 0)); - let v10 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(1, 0), 0)); - let v11 = Vec4(textureLoad(texture_sint, IVec2(coord) + IVec2(1, 1), 0)); - let top = mix(v00, v10, fract(coord.x)); - let bottom = mix(v01, v11, fract(coord.x)); - sampled_value = mix(top, bottom, fract(coord.y)); - } + let icoords = IVec2(in.texcoord * Vec2(textureDimensions(texture_sint).xy)); + sampled_value = Vec4(textureLoad(texture_sint, icoords, 0)); } else if rect_info.sample_type == SAMPLE_TYPE_UINT_NOFILTER { - let coord = in.texcoord * Vec2(textureDimensions(texture_uint).xy); - if tex_filter(coord) == FILTER_NEAREST { - // nearest - sampled_value = Vec4(textureLoad(texture_uint, IVec2(coord + vec2(0.5)), 0)); - } else { - // bilinear - let v00 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(0, 0), 0)); - let v01 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(0, 1), 0)); - let v10 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(1, 0), 0)); - let v11 = Vec4(textureLoad(texture_uint, IVec2(coord) + IVec2(1, 1), 0)); - let top = mix(v00, v10, fract(coord.x)); - let bottom = mix(v01, v11, fract(coord.x)); - sampled_value = mix(top, bottom, fract(coord.y)); - } + let icoords = IVec2(in.texcoord * Vec2(textureDimensions(texture_uint).xy)); + sampled_value = Vec4(textureLoad(texture_uint, icoords, 0)); } else { return ERROR_RGBA; // unknown sample type } diff --git a/crates/re_renderer/src/renderer/rectangles.rs b/crates/re_renderer/src/renderer/rectangles.rs index c511e4d76177..d002c73fea6c 100644 --- a/crates/re_renderer/src/renderer/rectangles.rs +++ b/crates/re_renderer/src/renderer/rectangles.rs @@ -192,9 +192,6 @@ mod gpu_data { const COLOR_MAPPER_FUNCTION: u32 = 2; const COLOR_MAPPER_TEXTURE: u32 = 3; - const FILTER_NEAREST: u32 = 1; - const FILTER_BILINEAR: u32 = 2; - #[repr(C, align(256))] #[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable)] pub struct UniformBuffer { @@ -216,8 +213,7 @@ mod gpu_data { color_mapper: u32, gamma: f32, - minification_filter: u32, - magnification_filter: u32, + _row_padding: [u32; 2], _end_padding: [wgpu_buffer_types::PaddingRow; 16 - 6], } @@ -279,15 +275,6 @@ mod gpu_data { } } - let minification_filter = match rectangle.texture_filter_minification { - super::TextureFilterMin::Linear => FILTER_BILINEAR, - super::TextureFilterMin::Nearest => FILTER_NEAREST, - }; - let magnification_filter = match rectangle.texture_filter_magnification { - super::TextureFilterMag::Linear => FILTER_BILINEAR, - super::TextureFilterMag::Nearest => FILTER_NEAREST, - }; - Ok(Self { top_left_corner_position: rectangle.top_left_corner_position.into(), colormap_function, @@ -300,8 +287,7 @@ mod gpu_data { range_min_max: (*range).into(), color_mapper: color_mapper_int, gamma: *gamma, - minification_filter, - magnification_filter, + _row_padding: Default::default(), _end_padding: Default::default(), }) } diff --git a/crates/re_viewer/src/ui/view_tensor/ui.rs b/crates/re_viewer/src/ui/view_tensor/ui.rs index 2dc7a000d715..d32024fd6f01 100644 --- a/crates/re_viewer/src/ui/view_tensor/ui.rs +++ b/crates/re_viewer/src/ui/view_tensor/ui.rs @@ -426,29 +426,32 @@ impl TextureSettings { }); ui.end_row(); - re_ui - .grid_left_hand_label(ui, "Filtering") - .on_hover_text("Filtering to use when magnifying"); - - fn tf_to_string(tf: egui::TextureFilter) -> &'static str { - match tf { - egui::TextureFilter::Nearest => "Nearest", - egui::TextureFilter::Linear => "Linear", + // TODO(#1612): support texture filtering again + if false { + re_ui + .grid_left_hand_label(ui, "Filtering") + .on_hover_text("Filtering to use when magnifying"); + + fn tf_to_string(tf: egui::TextureFilter) -> &'static str { + match tf { + egui::TextureFilter::Nearest => "Nearest", + egui::TextureFilter::Linear => "Linear", + } } - } - egui::ComboBox::from_id_source("texture_filter") - .selected_text(tf_to_string(options.magnification)) - .show_ui(ui, |ui| { - ui.style_mut().wrap = Some(false); - ui.set_min_width(64.0); + egui::ComboBox::from_id_source("texture_filter") + .selected_text(tf_to_string(options.magnification)) + .show_ui(ui, |ui| { + ui.style_mut().wrap = Some(false); + ui.set_min_width(64.0); - let mut selectable_value = |ui: &mut egui::Ui, e| { - ui.selectable_value(&mut options.magnification, e, tf_to_string(e)) - }; - selectable_value(ui, egui::TextureFilter::Nearest); - selectable_value(ui, egui::TextureFilter::Linear); - }); - ui.end_row(); + let mut selectable_value = |ui: &mut egui::Ui, e| { + ui.selectable_value(&mut options.magnification, e, tf_to_string(e)) + }; + selectable_value(ui, egui::TextureFilter::Linear); + selectable_value(ui, egui::TextureFilter::Nearest); + }); + ui.end_row(); + } } }