diff --git a/webrender/res/cs_text_run.glsl b/webrender/res/cs_text_run.glsl index 3aa698ed29..b6ff2eead6 100644 --- a/webrender/res/cs_text_run.glsl +++ b/webrender/res/cs_text_run.glsl @@ -18,10 +18,11 @@ void main(void) { int glyph_index = prim.user_data0; int resource_address = prim.user_data1; + int subpx_dir = prim.user_data2; Glyph glyph = fetch_glyph(prim.specific_prim_address, glyph_index, - text.subpx_dir); + subpx_dir); GlyphResource res = fetch_glyph_resource(resource_address); diff --git a/webrender/res/prim_shared.glsl b/webrender/res/prim_shared.glsl index 6f68882033..83f5324124 100644 --- a/webrender/res/prim_shared.glsl +++ b/webrender/res/prim_shared.glsl @@ -733,12 +733,11 @@ struct TextRun { vec4 color; vec4 bg_color; vec2 offset; - int subpx_dir; }; TextRun fetch_text_run(int address) { vec4 data[3] = fetch_from_resource_cache_3(address); - return TextRun(data[0], data[1], data[2].xy, int(data[2].z)); + return TextRun(data[0], data[1], data[2].xy); } struct Image { diff --git a/webrender/res/ps_text_run.glsl b/webrender/res/ps_text_run.glsl index 83e8605583..43018f6605 100644 --- a/webrender/res/ps_text_run.glsl +++ b/webrender/res/ps_text_run.glsl @@ -59,17 +59,7 @@ void main(void) { int glyph_index = prim.user_data0; int resource_address = prim.user_data1; - - int subpx_dir; - switch (uMode) { - case MODE_BITMAP: - case MODE_COLOR_BITMAP: - subpx_dir = SUBPX_DIR_NONE; - break; - default: - subpx_dir = text.subpx_dir; - break; - } + int subpx_dir = prim.user_data2; Glyph glyph = fetch_glyph(prim.specific_prim_address, glyph_index, diff --git a/webrender/src/prim_store.rs b/webrender/src/prim_store.rs index 818dbb45d4..2925616202 100644 --- a/webrender/src/prim_store.rs +++ b/webrender/src/prim_store.rs @@ -820,7 +820,7 @@ impl TextRunPrimitiveCpu { request.push([ self.offset.x, self.offset.y, - self.font.subpx_dir.limit_by(self.font.render_mode) as u32 as f32, + 0.0, 0.0, ]); request.extend_from_slice(&self.glyph_gpu_blocks); diff --git a/webrender/src/tiling.rs b/webrender/src/tiling.rs index 979736dde5..b29384cf44 100644 --- a/webrender/src/tiling.rs +++ b/webrender/src/tiling.rs @@ -7,7 +7,7 @@ use api::{DeviceIntRect, DeviceIntSize, device_length, DeviceUintPoint, DeviceUi use api::{DocumentLayer, ExternalImageType, FilterOp}; use api::{ImageFormat, ImageRendering}; use api::{LayerRect, MixBlendMode, PipelineId}; -use api::{TileOffset, YuvColorSpace, YuvFormat}; +use api::{SubpixelDirection, TileOffset, YuvColorSpace, YuvFormat}; use api::{LayerToWorldTransform, WorldPixel}; use border::{BorderCornerInstance, BorderCornerSide}; use clip::{ClipSource, ClipStore}; @@ -600,6 +600,11 @@ fn add_to_batch( GlyphFormat::Bitmap | GlyphFormat::ColorBitmap => BlendMode::PremultipliedAlpha, }; + let subpx_dir = match glyph_format { + GlyphFormat::Bitmap | + GlyphFormat::ColorBitmap => SubpixelDirection::None, + _ => text_cpu.font.subpx_dir.limit_by(text_cpu.font.render_mode), + }; let key = BatchKey::new(kind, blend_mode, textures); let batch = batch_list.get_suitable_batch(key, item_bounding_rect); @@ -608,7 +613,7 @@ fn add_to_batch( batch.push(base_instance.build( glyph.index_in_text_run, glyph.uv_rect_address.as_int(), - 0, + subpx_dir as u32 as i32, )); } }, @@ -1556,16 +1561,22 @@ impl RenderTarget for ColorRenderTarget { &text.glyph_keys, &mut self.glyph_fetch_buffer, gpu_cache, - |texture_id, _glyph_format, glyphs| { + |texture_id, glyph_format, glyphs| { let batch = text_run_cache_prims .entry(texture_id) .or_insert(Vec::new()); + let subpx_dir = match glyph_format { + GlyphFormat::Bitmap | + GlyphFormat::ColorBitmap => SubpixelDirection::None, + _ => text.font.subpx_dir.limit_by(text.font.render_mode), + }; + for glyph in glyphs { batch.push(instance.build( glyph.index_in_text_run, glyph.uv_rect_address.as_int(), - 0 + subpx_dir as u32 as i32, )); } },