chore: Updated to firefox 142.0, b=no-bug, c=l10n

This commit is contained in:
Mr. M
2025-08-19 18:15:04 +02:00
parent 850ea775de
commit 6b2f1edf0d
5 changed files with 548 additions and 88 deletions

View File

@@ -34,7 +34,7 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne
### Firefox Versions
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `141.0.3`! 🚀
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `142.0`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 142.0`!
### Contributing

View File

@@ -1 +1 @@
aeeb12ebf5e8312e56bf0126778460f7a5fa607a
784e5dbc4955e29ee7a4e0b88adefdd230f2e9fe

View File

@@ -0,0 +1,545 @@
diff --git a/gfx/webrender_bindings/src/bindings.rs b/gfx/webrender_bindings/src/bindings.rs
index 578c2f80a9db..08823b7fea22 100644
--- a/gfx/webrender_bindings/src/bindings.rs
+++ b/gfx/webrender_bindings/src/bindings.rs
@@ -2144,12 +2144,6 @@ pub extern "C" fn wr_window_new(
}
};
- let enable_dithering = if !software && static_prefs::pref!("gfx.webrender.dithering") {
- true
- } else {
- false
- };
-
let opts = WebRenderOptions {
enable_aa: true,
enable_subpixel_aa,
@@ -2204,7 +2198,6 @@ pub extern "C" fn wr_window_new(
reject_software_rasterizer,
low_quality_pinch_zoom,
max_shared_surface_size,
- enable_dithering,
..Default::default()
};
@@ -4615,11 +4608,8 @@ pub extern "C" fn wr_shaders_new(
device.begin_frame();
- let mut options = WebRenderOptions::default();
- options.enable_dithering = static_prefs::pref!("gfx.webrender.dithering");
-
let gl_type = device.gl().get_type();
- let mut shaders = match Shaders::new(&mut device, gl_type, &options) {
+ let mut shaders = match Shaders::new(&mut device, gl_type, &WebRenderOptions::default()) {
Ok(shaders) => shaders,
Err(e) => {
warn!(" Failed to create a Shaders: {:?}", e);
diff --git a/gfx/wr/glsl-to-cxx/src/hir.rs b/gfx/wr/glsl-to-cxx/src/hir.rs
index 626a3643e6ee..f0bb95d1df38 100644
--- a/gfx/wr/glsl-to-cxx/src/hir.rs
+++ b/gfx/wr/glsl-to-cxx/src/hir.rs
@@ -3964,6 +3964,14 @@ pub fn ast_to_hir(state: &mut State, tu: &syntax::TranslationUnit) -> Translatio
vec![Type::new(Sampler2D), Type::new(Int), Type::new(Float), Type::new(Bool), Type::new(Bool),
Type::new(Vec2), Type::new(Vec2), Type::new(Float)],
);
+ declare_function(
+ state,
+ "swgl_commitDitheredLinearGradientRGBA8",
+ None,
+ Type::new(Void),
+ vec![Type::new(Sampler2D), Type::new(Int), Type::new(Float), Type::new(Bool), Type::new(Bool),
+ Type::new(Vec2), Type::new(Vec2), Type::new(Float), Type::new(Vec4)],
+ );
declare_function(
state,
"swgl_commitRadialGradientRGBA8",
@@ -3972,6 +3980,14 @@ pub fn ast_to_hir(state: &mut State, tu: &syntax::TranslationUnit) -> Translatio
vec![Type::new(Sampler2D), Type::new(Int), Type::new(Float), Type::new(Bool), Type::new(Vec2),
Type::new(Float)],
);
+ declare_function(
+ state,
+ "swgl_commitDitheredRadialGradientRGBA8",
+ None,
+ Type::new(Void),
+ vec![Type::new(Sampler2D), Type::new(Int), Type::new(Float), Type::new(Bool), Type::new(Vec2),
+ Type::new(Float), Type::new(Vec4)],
+ );
declare_function(
state,
"swgl_commitGradientRGBA8",
diff --git a/gfx/wr/swgl/build.rs b/gfx/wr/swgl/build.rs
index fd6ec3fc4726..b8c9ad2ec174 100644
--- a/gfx/wr/swgl/build.rs
+++ b/gfx/wr/swgl/build.rs
@@ -142,6 +142,7 @@ fn main() {
let shader_flags = ShaderFeatureFlags::GL
| ShaderFeatureFlags::DUAL_SOURCE_BLENDING
| ShaderFeatureFlags::ADVANCED_BLEND_EQUATION
+ | ShaderFeatureFlags::DITHERING
| ShaderFeatureFlags::DEBUG;
let mut shaders: Vec<String> = Vec::new();
for (name, features) in get_shader_features(shader_flags) {
diff --git a/gfx/wr/swgl/src/swgl_ext.h b/gfx/wr/swgl/src/swgl_ext.h
index 36b66843f63a..5a517afbe25c 100644
--- a/gfx/wr/swgl/src/swgl_ext.h
+++ b/gfx/wr/swgl/src/swgl_ext.h
@@ -1383,14 +1383,63 @@ static inline WideRGBA8 sampleGradient(sampler2D sampler, int address,
swgl_commitChunk(RGBA8, applyColor(sampleGradient(sampler, address, entry), \
packColor(swgl_OutRGBA, color)))
+static const int8_t ditherNoiseMatrix[] = {
+ -126, 66, -78, 114, -114, 78, -66, 126, 2, -62, 50, -14, 14,
+ -50, 62, -2, -94, 98, -110, 82, -82, 110, -98, 94, 34, -30,
+ 18, -46, 46, -18, 30, -34, -118, 74, -70, 122, -122, 70, -74,
+ 118, 10, -54, 58, -6, 6, -58, 54, -10, -86, 106, -102, 90,
+ -90, 102, -106, 86, 42, -22, 26, -38, 38, -26, 22, -42,
+};
+
+// Values in color should be in the 0..0xFF00 range so that dithering has enough
+// overhead to avoid overflow.
+static inline VectorType<uint16_t, 4 * 4> dither(
+ const VectorType<uint16_t, 4 * 4>* color, ivec4_scalar fragCoord) {
+ VectorType<uint16_t, 4 * 4> ret = *color;
+
+ // This isn't technically proper behaviour, but it's fast. Proper
+ // behaviour would be to do a bounds check on every addition, or to otherwise
+ // recreate that behaviour. Instead, we refuse to dither all 4
+ // pixels if any channel from any one of them would underflow.
+ auto boundsCheck = ret < 126;
+
+ // This is a vectorized or operation on all RGB values (ignores A)
+ auto boundsCheckRGB = SHUFFLE(boundsCheck, boundsCheck, 0, 1, 2, 4, 5, 6, 8,
+ 9, 10, 12, 13, 14, 0, 0, 0, 0);
+ auto boundsCheckRGBReducedV8 =
+ lowHalf(boundsCheckRGB) | highHalf(boundsCheckRGB);
+ auto boundsCheckRGBReducedV4 =
+ lowHalf(boundsCheckRGBReducedV8) | highHalf(boundsCheckRGBReducedV8);
+ auto boundsCheckRGBReducedV2 =
+ lowHalf(boundsCheckRGBReducedV4) | highHalf(boundsCheckRGBReducedV4);
+ if (bit_cast<uint32_t>(boundsCheckRGBReducedV2) != 0) {
+ return ret;
+ }
+
+ const int row = (fragCoord.y & 7) * 8;
+ int8_t n0 = ditherNoiseMatrix[row + ((fragCoord.x + 0) & 7)];
+ int8_t n1 = ditherNoiseMatrix[row + ((fragCoord.x + 1) & 7)];
+ int8_t n2 = ditherNoiseMatrix[row + ((fragCoord.x + 2) & 7)];
+ int8_t n3 = ditherNoiseMatrix[row + ((fragCoord.x + 3) & 7)];
+
+ VectorType<uint16_t, 4 * 4> noiseVector = {
+ uint16_t(n0), uint16_t(n0), uint16_t(n0), 0,
+ uint16_t(n1), uint16_t(n1), uint16_t(n1), 0,
+ uint16_t(n2), uint16_t(n2), uint16_t(n2), 0,
+ uint16_t(n3), uint16_t(n3), uint16_t(n3), 0};
+
+ ret += noiseVector;
+ return ret;
+}
+
// Samples an entire span of a linear gradient by crawling the gradient table
// and looking for consecutive stops that can be merged into a single larger
// gradient, then interpolating between those larger gradients within the span.
-template <bool BLEND>
+template <bool BLEND, bool DITHER>
static bool commitLinearGradient(sampler2D sampler, int address, float size,
bool tileRepeat, bool gradientRepeat, vec2 pos,
const vec2_scalar& scaleDir, float startOffset,
- uint32_t* buf, int span) {
+ uint32_t* buf, int span, vec4 fragCoord) {
assert(sampler->format == TextureFormat::RGBA32F);
assert(address >= 0 && address < int(sampler->height * sampler->stride));
GradientStops* stops = (GradientStops*)&sampler->buf[address];
@@ -1402,6 +1451,11 @@ static bool commitLinearGradient(sampler2D sampler, int address, float size,
if (!isfinite(delta)) {
return false;
}
+
+ // Only incremented in the case of dithering
+ ivec4_scalar currentFragCoord =
+ ivec4_scalar(fragCoord.x.x, fragCoord.y.x, fragCoord.z.x, fragCoord.w.x);
+
// If we have a repeating brush, then the position will be modulo the [0,1)
// interval. Compute coefficients that can be used to quickly evaluate the
// distance to the interval boundary where the offset will wrap.
@@ -1536,7 +1590,14 @@ static bool commitLinearGradient(sampler2D sampler, int address, float size,
// deltas.
int segment = min(remaining, 256 / 4);
for (auto* end = buf + segment * 4; buf < end; buf += 4) {
- commit_blend_span<BLEND>(buf, bit_cast<WideRGBA8>(color >> 8));
+ if (DITHER) {
+ commit_blend_span<BLEND>(
+ buf,
+ bit_cast<WideRGBA8>(dither(&color, currentFragCoord) >> 8));
+ currentFragCoord.x += 4;
+ } else {
+ commit_blend_span<BLEND>(buf, bit_cast<WideRGBA8>(color >> 8));
+ }
color += deltaColor;
}
remaining -= segment;
@@ -1569,7 +1630,20 @@ static bool commitLinearGradient(sampler2D sampler, int address, float size,
// will calculate a table entry for each sample, assuming the samples may
// have different table entries.
Float entry = clamp(offset * size + 1.0f, 0.0f, 1.0f + size);
- commit_blend_span<BLEND>(buf, sampleGradient(sampler, address, entry));
+
+ if (DITHER) {
+ auto gradientSample = static_cast<VectorType<uint16_t, 4 * 4>>(
+ sampleGradient(sampler, address, entry))
+ << 8;
+ commit_blend_span<BLEND>(
+ buf,
+ static_cast<WideRGBA8>(
+ dither(&gradientSample, currentFragCoord) >> 8));
+ currentFragCoord.x += 4;
+ } else {
+ commit_blend_span<BLEND>(
+ buf, static_cast<WideRGBA8>(sampleGradient(sampler, address, entry)));
+ }
span -= 4;
buf += 4;
pos += posStep;
@@ -1589,13 +1663,35 @@ static bool commitLinearGradient(sampler2D sampler, int address, float size,
do { \
bool drawn = false; \
if (blend_key) { \
- drawn = commitLinearGradient<true>( \
+ drawn = commitLinearGradient<true, false>( \
+ sampler, address, size, tileRepeat, gradientRepeat, pos, scaleDir, \
+ startOffset, swgl_OutRGBA8, swgl_SpanLength, \
+ static_cast<vec4>(0x0)); \
+ } else { \
+ drawn = commitLinearGradient<false, false>( \
+ sampler, address, size, tileRepeat, gradientRepeat, pos, scaleDir, \
+ startOffset, swgl_OutRGBA8, swgl_SpanLength, \
+ static_cast<vec4>(0x0)); \
+ } \
+ if (drawn) { \
+ swgl_OutRGBA8 += swgl_SpanLength; \
+ swgl_SpanLength = 0; \
+ } \
+ } while (0)
+
+#define swgl_commitDitheredLinearGradientRGBA8( \
+ sampler, address, size, tileRepeat, gradientRepeat, pos, scaleDir, \
+ startOffset, fragCoord) \
+ do { \
+ bool drawn = false; \
+ if (blend_key) { \
+ drawn = commitLinearGradient<true, true>( \
sampler, address, size, tileRepeat, gradientRepeat, pos, scaleDir, \
- startOffset, swgl_OutRGBA8, swgl_SpanLength); \
+ startOffset, swgl_OutRGBA8, swgl_SpanLength, fragCoord); \
} else { \
- drawn = commitLinearGradient<false>( \
+ drawn = commitLinearGradient<false, true>( \
sampler, address, size, tileRepeat, gradientRepeat, pos, scaleDir, \
- startOffset, swgl_OutRGBA8, swgl_SpanLength); \
+ startOffset, swgl_OutRGBA8, swgl_SpanLength, fragCoord); \
} \
if (drawn) { \
swgl_OutRGBA8 += swgl_SpanLength; \
@@ -1625,10 +1721,10 @@ static ALWAYS_INLINE auto fastLength(V v) {
// and looking for consecutive stops that can be merged into a single larger
// gradient, then interpolating between those larger gradients within the span
// based on the computed position relative to a radius.
-template <bool BLEND>
+template <bool BLEND, bool DITHER>
static bool commitRadialGradient(sampler2D sampler, int address, float size,
bool repeat, vec2 pos, float radius,
- uint32_t* buf, int span) {
+ uint32_t* buf, int span, vec4 fragCoord) {
assert(sampler->format == TextureFormat::RGBA32F);
assert(address >= 0 && address < int(sampler->height * sampler->stride));
GradientStops* stops = (GradientStops*)&sampler->buf[address];
@@ -1658,6 +1754,11 @@ static bool commitRadialGradient(sampler2D sampler, int address, float size,
if (!isfinite(deltaDelta) || !isfinite(radius)) {
return false;
}
+
+ // Only incremented in the case of dithering
+ ivec4_scalar currentFragCoord =
+ ivec4_scalar(fragCoord.x.x, fragCoord.y.x, fragCoord.z.x, fragCoord.w.x);
+
float invDelta, middleT, middleB;
if (deltaDelta > 0) {
invDelta = 1.0f / deltaDelta;
@@ -1778,9 +1879,12 @@ static bool commitRadialGradient(sampler2D sampler, int address, float size,
// Figure out how many chunks are actually inside the merged gradient.
if (t + 4.0f <= endT) {
int inside = int(endT - t) & ~3;
- // Convert start and end colors to BGRA and scale to 0..255 range later.
- auto minColorF = stops[minIndex].startColor.zyxw * 255.0f;
- auto maxColorF = stops[maxIndex].end_color().zyxw * 255.0f;
+ // Convert start and end colors to BGRA and scale to 0..0xFF00 range (for
+ // dithered) and 0..255 range (for non-dithered).
+ auto minColorF =
+ stops[minIndex].startColor.zyxw * (DITHER ? float(0xFF00) : 255.0f);
+ auto maxColorF =
+ stops[maxIndex].end_color().zyxw * (DITHER ? float(0xFF00) : 255.0f);
// Compute the change in color per change in gradient offset.
auto deltaColorF =
(maxColorF - minColorF) * (size / (maxIndex + 1 - minIndex));
@@ -1789,18 +1893,29 @@ static bool commitRadialGradient(sampler2D sampler, int address, float size,
Float colorF =
minColorF - deltaColorF * (startRadius + (minIndex - 1) / size);
// Finally, walk over the span accumulating the position dot product and
- // getting its sqrt as an offset into the color ramp. Since we're already
- // in BGRA format and scaled to 255, we just need to round to an integer
- // and pack down to pixel format.
+ // getting its sqrt as an offset into the color ramp. At this point we
+ // just need to round to an integer and pack down to an 8-bit pixel
+ // format.
for (auto* end = buf + inside; buf < end; buf += 4) {
Float offsetG = fastSqrt<false>(dotPos);
- commit_blend_span<BLEND>(
- buf,
- combine(
- packRGBA8(round_pixel(colorF + deltaColorF * offsetG.x, 1),
- round_pixel(colorF + deltaColorF * offsetG.y, 1)),
- packRGBA8(round_pixel(colorF + deltaColorF * offsetG.z, 1),
- round_pixel(colorF + deltaColorF * offsetG.w, 1))));
+ if (DITHER) {
+ auto color = combine(
+ CONVERT(round_pixel(colorF + deltaColorF * offsetG.x, 1), U16),
+ CONVERT(round_pixel(colorF + deltaColorF * offsetG.y, 1), U16),
+ CONVERT(round_pixel(colorF + deltaColorF * offsetG.z, 1), U16),
+ CONVERT(round_pixel(colorF + deltaColorF * offsetG.w, 1), U16));
+ commit_blend_span<BLEND>(
+ buf, static_cast<WideRGBA8>(
+ dither(&color, currentFragCoord) >> 8));
+ currentFragCoord.x += 4;
+ } else {
+ auto color = combine(
+ packRGBA8(round_pixel(colorF + deltaColorF * offsetG.x, 1),
+ round_pixel(colorF + deltaColorF * offsetG.y, 1)),
+ packRGBA8(round_pixel(colorF + deltaColorF * offsetG.z, 1),
+ round_pixel(colorF + deltaColorF * offsetG.w, 1)));
+ commit_blend_span<BLEND>(buf, color);
+ }
dotPos += dotPosDelta;
dotPosDelta += deltaDelta2;
}
@@ -1837,25 +1952,45 @@ static bool commitRadialGradient(sampler2D sampler, int address, float size,
// swglcommitLinearGradient, but given a varying 2D position scaled to
// gradient-space and a radius at which the distance from the origin maps to the
// start of the gradient table.
-#define swgl_commitRadialGradientRGBA8(sampler, address, size, repeat, pos, \
- radius) \
- do { \
- bool drawn = false; \
- if (blend_key) { \
- drawn = \
- commitRadialGradient<true>(sampler, address, size, repeat, pos, \
- radius, swgl_OutRGBA8, swgl_SpanLength); \
- } else { \
- drawn = \
- commitRadialGradient<false>(sampler, address, size, repeat, pos, \
- radius, swgl_OutRGBA8, swgl_SpanLength); \
- } \
- if (drawn) { \
- swgl_OutRGBA8 += swgl_SpanLength; \
- swgl_SpanLength = 0; \
- } \
+#define swgl_commitRadialGradientRGBA8(sampler, address, size, repeat, pos, \
+ radius) \
+ do { \
+ bool drawn = false; \
+ if (blend_key) { \
+ drawn = commitRadialGradient<true, false>( \
+ sampler, address, size, repeat, pos, radius, swgl_OutRGBA8, \
+ swgl_SpanLength, \
+ static_cast<vec4>(0x0)); \
+ } else { \
+ drawn = commitRadialGradient<false, false>( \
+ sampler, address, size, repeat, pos, radius, swgl_OutRGBA8, \
+ swgl_SpanLength, \
+ static_cast<vec4>(0x0)); \
+ } \
+ if (drawn) { \
+ swgl_OutRGBA8 += swgl_SpanLength; \
+ swgl_SpanLength = 0; \
+ } \
} while (0)
+#define swgl_commitDitheredRadialGradientRGBA8( \
+ sampler, address, size, repeat, pos, radius, fragCoord) \
+ do { \
+ bool drawn = false; \
+ if (blend_key) { \
+ drawn = commitRadialGradient<true, true>( \
+ sampler, address, size, repeat, pos, radius, swgl_OutRGBA8, \
+ swgl_SpanLength, fragCoord); \
+ } else { \
+ drawn = commitRadialGradient<false, true>( \
+ sampler, address, size, repeat, pos, radius, swgl_OutRGBA8, \
+ swgl_SpanLength, fragCoord); \
+ } \
+ if (drawn) { \
+ swgl_OutRGBA8 += swgl_SpanLength; \
+ swgl_SpanLength = 0; \
+ } \
+ } while (0)
// Extension to set a clip mask image to be sampled during blending. The offset
// specifies the positioning of the clip mask image relative to the viewport
// origin. The bounding box specifies the rectangle relative to the clip mask's
diff --git a/gfx/wr/webrender/res/brush_linear_gradient.glsl b/gfx/wr/webrender/res/brush_linear_gradient.glsl
index 235be4b24be8..6f923052ffb1 100644
--- a/gfx/wr/webrender/res/brush_linear_gradient.glsl
+++ b/gfx/wr/webrender/res/brush_linear_gradient.glsl
@@ -87,8 +87,13 @@ void swgl_drawSpanRGBA8() {
return;
}
+#ifdef WR_FEATURE_DITHERING
+ swgl_commitDitheredLinearGradientRGBA8(sGpuBufferF, address, GRADIENT_ENTRIES, true, v_gradient_repeat.x != 0.0,
+ v_pos, v_scale_dir, v_start_offset.x, gl_FragCoord);
+#else
swgl_commitLinearGradientRGBA8(sGpuBufferF, address, GRADIENT_ENTRIES, true, v_gradient_repeat.x != 0.0,
v_pos, v_scale_dir, v_start_offset.x);
+#endif
}
#endif
diff --git a/gfx/wr/webrender/res/cs_radial_gradient.glsl b/gfx/wr/webrender/res/cs_radial_gradient.glsl
index 10919ac6283e..8084d8d47be1 100644
--- a/gfx/wr/webrender/res/cs_radial_gradient.glsl
+++ b/gfx/wr/webrender/res/cs_radial_gradient.glsl
@@ -63,8 +63,14 @@ void swgl_drawSpanRGBA8() {
if (address < 0) {
return;
}
+
+#ifdef WR_FEATURE_DITHERING
+ swgl_commitDitheredRadialGradientRGBA8(sGpuBufferF, address, GRADIENT_ENTRIES, v_gradient_repeat.x != 0.0,
+ v_pos, v_start_radius.x, gl_FragCoord);
+#else
swgl_commitRadialGradientRGBA8(sGpuBufferF, address, GRADIENT_ENTRIES, v_gradient_repeat.x != 0.0,
v_pos, v_start_radius.x);
+#endif
}
#endif
diff --git a/gfx/wr/webrender/res/ps_quad_radial_gradient.glsl b/gfx/wr/webrender/res/ps_quad_radial_gradient.glsl
index 05b4dd2aa8c6..dc83f3c27742 100644
--- a/gfx/wr/webrender/res/ps_quad_radial_gradient.glsl
+++ b/gfx/wr/webrender/res/ps_quad_radial_gradient.glsl
@@ -73,8 +73,14 @@ void swgl_drawSpanRGBA8() {
if (address < 0) {
return;
}
+
+#ifdef WR_FEATURE_DITHERING
+ swgl_commitDitheredRadialGradientRGBA8(sGpuBufferF, address, GRADIENT_ENTRIES, v_gradient_repeat.x != 0.0,
+ v_pos, v_start_radius.x, gl_FragCoord);
+#else
swgl_commitRadialGradientRGBA8(sGpuBufferF, address, GRADIENT_ENTRIES, v_gradient_repeat.x != 0.0,
v_pos, v_start_radius.x);
+#endif
}
#endif
diff --git a/gfx/wr/webrender/src/renderer/init.rs b/gfx/wr/webrender/src/renderer/init.rs
index 7c63798bc644..169d4c7a4437 100644
--- a/gfx/wr/webrender/src/renderer/init.rs
+++ b/gfx/wr/webrender/src/renderer/init.rs
@@ -224,7 +224,7 @@ impl Default for WebRenderOptions {
resource_override_path: None,
use_optimized_shaders: false,
enable_aa: true,
- enable_dithering: false,
+ enable_dithering: true,
debug_flags: DebugFlags::empty(),
max_recorded_profiles: 0,
precache_flags: ShaderPrecacheFlags::empty(),
diff --git a/gfx/wr/webrender/src/renderer/shade.rs b/gfx/wr/webrender/src/renderer/shade.rs
index ed38e7aa24e3..0171cb4092e1 100644
--- a/gfx/wr/webrender/src/renderer/shade.rs
+++ b/gfx/wr/webrender/src/renderer/shade.rs
@@ -873,14 +873,22 @@ impl Shaders {
let ps_quad_radial_gradient = loader.create_shader(
ShaderKind::Primitive,
"ps_quad_radial_gradient",
- &[],
+ if options.enable_dithering {
+ &[DITHERING_FEATURE]
+ } else {
+ &[]
+ },
&shader_list,
)?;
let ps_quad_conic_gradient = loader.create_shader(
ShaderKind::Primitive,
"ps_quad_conic_gradient",
- &[],
+ if options.enable_dithering {
+ &[DITHERING_FEATURE]
+ } else {
+ &[]
+ },
&shader_list,
)?;
@@ -1032,14 +1040,22 @@ impl Shaders {
let cs_radial_gradient = loader.create_shader(
ShaderKind::Cache(VertexArrayKind::RadialGradient),
"cs_radial_gradient",
- &[],
+ if options.enable_dithering {
+ &[DITHERING_FEATURE]
+ } else {
+ &[]
+ },
&shader_list,
)?;
let cs_conic_gradient = loader.create_shader(
ShaderKind::Cache(VertexArrayKind::ConicGradient),
"cs_conic_gradient",
- &[],
+ if options.enable_dithering {
+ &[DITHERING_FEATURE]
+ } else {
+ &[]
+ },
&shader_list,
)?;
diff --git a/gfx/wr/webrender_build/src/shader_features.rs b/gfx/wr/webrender_build/src/shader_features.rs
index 72b82df00228..97247c929609 100644
--- a/gfx/wr/webrender_build/src/shader_features.rs
+++ b/gfx/wr/webrender_build/src/shader_features.rs
@@ -242,9 +242,9 @@ pub fn get_shader_features(flags: ShaderFeatureFlags) -> ShaderFeatures {
shaders.insert("ps_quad_textured", vec![base_prim_features.finish()]);
- shaders.insert("ps_quad_radial_gradient", vec![base_prim_features.finish()]);
+ shaders.insert("ps_quad_radial_gradient", vec![base_prim_features.finish(), if flags.contains(ShaderFeatureFlags::DITHERING) { "DITHERING".to_string() } else { String::new() }]);
- shaders.insert("ps_quad_conic_gradient", vec![base_prim_features.finish()]);
+ shaders.insert("ps_quad_conic_gradient", vec![base_prim_features.finish(), if flags.contains(ShaderFeatureFlags::DITHERING) { "DITHERING".to_string() } else { String::new() }]);
shaders.insert("ps_clear", vec![base_prim_features.finish()]);
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index e21849fa3db4..258e12665ca8 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -8007,13 +8007,6 @@
value: true
mirror: once
-# Enable dithering in hardware WebRender
-- name: gfx.webrender.dithering
- type: bool
- rust: true
- value: false
- mirror: once
-
# Use vsync events generated by hardware
- name: gfx.work-around-driver-bugs
type: bool

View File

@@ -1,85 +0,0 @@
# HG changeset patch
# User Julian Descottes <jdescottes@mozilla.com>
# Date 1751026631 0
# Node ID 12aa50c7b5bdfcc158bf9d3b7901b154e616a83d
# Parent 6f444e37b3afb1a73681525624e04b2964282078
Bug 1974156 - Use macos SDK 15.5 instead of 15.4 which is no longer available r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D255084
diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -228,17 +228,17 @@ with only_when(host_is_osx | target_is_o
option(
"--with-macos-sdk",
env="MACOS_SDK_DIR",
nargs=1,
help="Location of platform SDK to use",
)
def mac_sdk_min_version():
- return "15.4"
+ return "15.5"
@depends(
"--with-macos-sdk",
host,
bootstrap_path(
"MacOSX{}.sdk".format(mac_sdk_min_version()),
when=depends("--with-macos-sdk")(lambda x: not x),
allow_failure=True,
diff --git a/python/mozbuild/mozbuild/test/configure/macos_fake_sdk/SDKSettings.plist b/python/mozbuild/mozbuild/test/configure/macos_fake_sdk/SDKSettings.plist
--- a/python/mozbuild/mozbuild/test/configure/macos_fake_sdk/SDKSettings.plist
+++ b/python/mozbuild/mozbuild/test/configure/macos_fake_sdk/SDKSettings.plist
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Version</key>
- <string>15.4</string>
+ <string>15.5</string>
</dict>
</plist>
diff --git a/taskcluster/kinds/toolchain/macos-sdk.yml b/taskcluster/kinds/toolchain/macos-sdk.yml
--- a/taskcluster/kinds/toolchain/macos-sdk.yml
+++ b/taskcluster/kinds/toolchain/macos-sdk.yml
@@ -38,20 +38,33 @@ macosx64-sdk-15.4:
symbol: TM(sdk15.4)
run:
arguments:
- https://swcdn.apple.com/content/downloads/10/32/082-12052-A_AHPGDY76PT/1a419zaf3vh8o9t3c0usblyr8eystpnsh5/CLTools_macOSNMOS_SDK.pkg
- fd01c70038dbef48bd23fb8b7d18f234910733635f1b44518e71a66d2db92a70180e6a595c6bdd837fa8df7e9b297e570560842e9a6db863840bd051fe69fea5
- Library/Developer/CommandLineTools/SDKs/MacOSX15.4.sdk
toolchain-artifact: project/gecko/mac-sdk/MacOSX15.4.sdk.tar.zst
toolchain-alias:
- - macosx64-sdk
- macosx64-sdk-toolchain
- MacOSX15.4.sdk
+macosx64-sdk-15.5:
+ description: "MacOSX15.5 SDK"
+ treeherder:
+ symbol: TM(sdk15.5)
+ run:
+ arguments:
+ - https://swcdn.apple.com/content/downloads/52/01/082-41241-A_0747ZN8FHV/dectd075r63pppkkzsb75qk61s0lfee22j/CLTools_macOSNMOS_SDK.pkg
+ - fb7c555e823b830279394e52c7d439bd287a9d8b007883fa0595962a240d488b5613f8cc8d1cc9657909de9367417652564f3df66e238a47bbc87244f5205056
+ - Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk
+ toolchain-artifact: project/gecko/mac-sdk/MacOSX15.5.sdk.tar.zst
+ toolchain-alias:
+ - macosx64-sdk
+ - MacOSX15.5.sdk
+
ios-sdk-18.4:
description: "iPhoneOS18.4 SDK"
treeherder:
symbol: TM(ios18.4)
# Because it's using an internal tooltool artifact, it can't be used as a local-toolchain for
# bootstrap. But we still want to use the same script as local-toolchains.
attributes:
local-toolchain: false

View File

@@ -5,7 +5,7 @@
"binaryName": "zen",
"version": {
"product": "firefox",
"version": "141.0.3",
"version": "142.0",
"candidate": "142.0"
},
"buildOptions": {