Backed out 8 changesets (bug 1656813) for reftest failures on bipbop_300_215kbps.mp4.lastframe.html.

Backed out changeset 92e0209dc7f1 (bug 1656813)
Backed out changeset 1b3842f2ca27 (bug 1656813)
Backed out changeset efed1b35fe47 (bug 1656813)
Backed out changeset d1c313ebe358 (bug 1656813)
Backed out changeset 4d6a3bf61345 (bug 1656813)
Backed out changeset 060254b3ad73 (bug 1656813)
Backed out changeset 37e5e5e6593a (bug 1656813)
Backed out changeset 12c0e9554a5f (bug 1656813)
This commit is contained in:
Cosmin Sabou 2020-08-05 04:52:20 +03:00
parent abfa3262b8
commit 38cd82e194
24 changed files with 254 additions and 259 deletions

2
Cargo.lock generated
View File

@ -1883,7 +1883,6 @@ dependencies = [
"mozglue-static",
"mozilla-central-workspace-hack",
"stylo_tests",
"swgl",
]
[[package]]
@ -1896,7 +1895,6 @@ dependencies = [
"mozglue-static",
"mp4parse-gtest",
"nsstring-gtest",
"swgl",
"xpcom-gtest",
]

View File

@ -1,6 +1,6 @@
skip-if(Android) fuzzy-if(OSX,0-68,0-76800) fuzzy-if(winWidget,0-62,0-76799) fuzzy-if(gtkWidget&&layersGPUAccelerated,0-70,0-600) HTTP(..) == short.mp4.firstframe.html short.mp4.firstframe-ref.html
skip-if(Android) fuzzy-if(OSX,0-60,0-76797) fuzzy-if(winWidget,0-60,0-76797) fuzzy-if(gtkWidget&&layersGPUAccelerated,0-60,0-1800) HTTP(..) == short.mp4.lastframe.html short.mp4.lastframe-ref.html
skip-if(Android) skip-if(winWidget) fuzzy-if(gtkWidget&&layersGPUAccelerated,0-56,0-4281) fuzzy-if(OSX,55-55,4173-4173) HTTP(..) == bipbop_300_215kbps.mp4.lastframe.html bipbop_300_215kbps.mp4.lastframe-ref.html
skip-if(Android) skip-if(winWidget) fuzzy-if(gtkWidget&&layersGPUAccelerated,0-55,0-4281) fuzzy-if(OSX,55-80,4173-4417) HTTP(..) == bipbop_300_215kbps.mp4.lastframe.html bipbop_300_215kbps.mp4.lastframe-ref.html
skip-if(Android) fuzzy-if(OSX,0-25,0-175921) fuzzy-if(winWidget,0-71,0-179198) fuzzy-if((/^Windows\x20NT\x2010\.0/.test(http.oscpu))&&(/^aarch64-msvc/.test(xulRuntime.XPCOMABI)),0-255,0-179500) HTTP(..) == gizmo.mp4.seek.html gizmo.mp4.55thframe-ref.html
skip-if(Android) fuzzy-if((/^Windows\x20NT\x2010\.0/.test(http.oscpu))&&(/^aarch64-msvc/.test(xulRuntime.XPCOMABI)),0-136,0-427680) == vtt_update_display_after_removed_cue.html vtt_update_display_after_removed_cue_ref.html
skip-if(Android) fuzzy-if(winWidget,0-170,0-170) == vtt_overlapping_time.html vtt_overlapping_time-ref.html

View File

@ -3,11 +3,11 @@
# First make sure that we are actually drawing scrollbars
skip-if(!asyncPan) pref(apz.allow_zooming,true) != async-scrollbar-1-v.html about:blank
skip-if(!asyncPan) pref(apz.allow_zooming,true) != async-scrollbar-1-v-ref.html about:blank
fuzzy-if(Android,0-1,0-2) fuzzy-if(webrender&&gtkWidget,7-8,24-32) fuzzy-if(webrender&&cocoaWidget,23-23,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-v.html async-scrollbar-1-v-ref.html
fuzzy-if(Android,0-4,0-5) fuzzy-if(webrender&&gtkWidget,28-28,30-32) fuzzy-if(webrender&&cocoaWidget,22-22,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-h.html async-scrollbar-1-h-ref.html
fuzzy-if(Android,0-6,0-6) fuzzy-if(webrender&&gtkWidget,2-2,19-20) fuzzy-if(webrender&&cocoaWidget,18-18,79-79) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-vh.html async-scrollbar-1-vh-ref.html
fuzzy-if(Android,0-1,0-2) fuzzy-if(webrender&&gtkWidget,7-8,24-32) fuzzy-if(webrender&&cocoaWidget,23-23,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-v-rtl.html async-scrollbar-1-v-rtl-ref.html
fuzzy-if(Android,0-14,0-5) fuzzy-if(webrender&&gtkWidget,28-28,30-32) fuzzy-if(webrender&&cocoaWidget,22-22,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-h-rtl.html async-scrollbar-1-h-rtl-ref.html
fuzzy-if(Android,0-1,0-2) fuzzy-if(webrender&&gtkWidget,7-7,24-24) fuzzy-if(webrender&&cocoaWidget,23-23,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-v.html async-scrollbar-1-v-ref.html
fuzzy-if(Android,0-4,0-5) fuzzy-if(webrender&&gtkWidget,28-28,32-32) fuzzy-if(webrender&&cocoaWidget,22-22,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-h.html async-scrollbar-1-h-ref.html
fuzzy-if(Android,0-6,0-6) fuzzy-if(webrender&&gtkWidget,2-2,19-19) fuzzy-if(webrender&&cocoaWidget,18-18,79-79) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-vh.html async-scrollbar-1-vh-ref.html
fuzzy-if(Android,0-1,0-2) fuzzy-if(webrender&&gtkWidget,7-7,24-24) fuzzy-if(webrender&&cocoaWidget,23-23,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-v-rtl.html async-scrollbar-1-v-rtl-ref.html
fuzzy-if(Android,0-14,0-5) fuzzy-if(webrender&&gtkWidget,28-28,32-32) fuzzy-if(webrender&&cocoaWidget,22-22,44-44) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-h-rtl.html async-scrollbar-1-h-rtl-ref.html
fuzzy-if(Android,0-8,0-8) fuzzy-if(webrender&&gtkWidget,13-13,32-32) fuzzy-if(webrender&&cocoaWidget,18-18,43-43) skip-if(!asyncPan) pref(apz.allow_zooming,true) == async-scrollbar-1-vh-rtl.html async-scrollbar-1-vh-rtl-ref.html
# Different async zoom levels. Since the scrollthumb gets async-scaled in the

View File

@ -14,7 +14,7 @@ fuzzy(0-100,0-30) == 1149923.html 1149923-ref.html # use fuzzy due to few distor
== 1444904.html 1444904-ref.html
fuzzy-if(winWidget&&webrender,90-95,1000-1100) == 1451168.html 1451168-ref.html
== 1461313.html 1461313-ref.html
fuzzy(5-32,21908-26621) fuzzy-if(webrender,4-5,868-1039) == 1463802.html 1463802-ref.html
fuzzy(5-32,21908-26621) fuzzy-if(webrender,5-5,868-1039) == 1463802.html 1463802-ref.html
fuzzy(0-11,0-4) == 1474722.html 1474722-ref.html
== 1501195.html 1501195-ref.html
== 1519754.html 1519754-ref.html

View File

@ -301,13 +301,13 @@ struct Texture {
set_stride();
assert(new_stride >= buf_stride);
buf = (char*)new_buf;
buf = (char *)new_buf;
buf_size = 0;
buf_stride = new_stride;
}
bool allocate(bool force = false, int min_width = 0, int min_height = 0) {
assert(!locked); // Locked textures shouldn't be reallocated
assert(!locked); // Locked textures shouldn't be reallocated
// Check if there is either no buffer currently or if we forced validation
// of the buffer size because some dimension might have changed.
if ((!buf || force) && should_free()) {
@ -339,7 +339,7 @@ struct Texture {
}
void cleanup() {
assert(!locked); // Locked textures shouldn't be destroyed
assert(!locked); // Locked textures shouldn't be destroyed
if (buf && should_free()) {
free(buf);
buf = nullptr;
@ -398,26 +398,27 @@ struct Program {
FragmentShaderImpl* frag_impl = nullptr;
bool deleted = false;
~Program() { delete impl; }
~Program() {
delete impl;
}
};
// clang-format off
// for GL defines to fully expand
#define CONCAT_KEY(prefix, x, y, z, w, ...) prefix##x##y##z##w
#define BLEND_KEY(...) CONCAT_KEY(BLEND_, __VA_ARGS__, 0, 0)
#define FOR_EACH_BLEND_KEY(macro) \
macro(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA) \
macro(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, 0, 0) \
macro(GL_ZERO, GL_ONE_MINUS_SRC_COLOR, 0, 0) \
macro(GL_ZERO, GL_ONE_MINUS_SRC_COLOR, GL_ZERO, GL_ONE) \
macro(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA, 0, 0) \
macro(GL_ZERO, GL_SRC_COLOR, 0, 0) macro(GL_ONE, GL_ONE, 0, 0) \
macro(GL_ONE, GL_ONE, GL_ONE, GL_ONE_MINUS_SRC_ALPHA) \
macro(GL_ONE, GL_ZERO, 0, 0) \
macro(GL_ONE_MINUS_DST_ALPHA, GL_ONE, GL_ZERO, GL_ONE) \
macro(GL_CONSTANT_COLOR, GL_ONE_MINUS_SRC_COLOR, 0, 0) \
#define FOR_EACH_BLEND_KEY(macro) \
macro(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE) \
macro(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, 0, 0) \
macro(GL_ZERO, GL_ONE_MINUS_SRC_COLOR, 0, 0) \
macro(GL_ZERO, GL_ONE_MINUS_SRC_COLOR, GL_ZERO, GL_ONE) \
macro(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA, 0, 0) \
macro(GL_ZERO, GL_SRC_COLOR, 0, 0) \
macro(GL_ONE, GL_ONE, 0, 0) \
macro(GL_ONE, GL_ONE, GL_ONE, GL_ONE_MINUS_SRC_ALPHA) \
macro(GL_ONE, GL_ZERO, 0, 0) \
macro(GL_ONE_MINUS_DST_ALPHA, GL_ONE, GL_ZERO, GL_ONE) \
macro(GL_CONSTANT_COLOR, GL_ONE_MINUS_SRC_COLOR, 0, 0) \
macro(GL_ONE, GL_ONE_MINUS_SRC1_COLOR, 0, 0)
// clang-format on
#define DEFINE_BLEND_KEY(...) BLEND_KEY(__VA_ARGS__),
enum BlendKey : uint8_t {
@ -487,10 +488,8 @@ struct ObjectStore {
O* find(size_t i) const { return i < size ? objects[i] : nullptr; }
template <typename T>
void on_erase(T*, ...) {}
template <typename T>
void on_erase(T* o, decltype(&T::on_erase)) {
template <typename T> void on_erase(T*, ...) {}
template <typename T> void on_erase(T* o, decltype(&T::on_erase)) {
o->on_erase();
}
@ -657,12 +656,9 @@ static inline void init_sampler(S* s, Texture& t) {
s->height = t.height;
s->stride = t.stride();
int bpp = t.bpp();
if (bpp >= 4)
s->stride /= 4;
else if (bpp == 2)
s->stride /= 2;
else
assert(bpp == 1);
if (bpp >= 4) s->stride /= 4;
else if (bpp == 2) s->stride /= 2;
else assert(bpp == 1);
// Use uint32_t* for easier sampling, but need to cast to uint8_t* or
// uint16_t* for formats with bpp < 4.
s->buf = (uint32_t*)t.buf;
@ -776,11 +772,13 @@ void load_attrib(T& attrib, VertexAttrib& va, uint32_t start, int instance,
if (!count) return;
assert(count == 3 || count == 4);
char* src = (char*)va.buf + va.stride * start + va.offset;
attrib = (T){load_attrib_scalar<scalar_type>(va, src),
load_attrib_scalar<scalar_type>(va, src + va.stride),
load_attrib_scalar<scalar_type>(
va, src + va.stride * 2 + (count > 3 ? va.stride : 0)),
load_attrib_scalar<scalar_type>(va, src + va.stride * 2)};
attrib = (T){
load_attrib_scalar<scalar_type>(va, src),
load_attrib_scalar<scalar_type>(va, src + va.stride),
load_attrib_scalar<scalar_type>(va, src + va.stride * 2 +
(count > 3 ? va.stride : 0)),
load_attrib_scalar<scalar_type>(va, src + va.stride * 2)
};
}
}
@ -1336,10 +1334,10 @@ void TexStorage3D(GLenum target, GLint levels, GLenum internal_format,
t.allocate(changed);
}
static void set_tex_storage(Texture& t, GLenum internal_format, GLsizei width,
GLsizei height, void* buf = nullptr,
GLsizei stride = 0, GLsizei min_width = 0,
GLsizei min_height = 0) {
static void set_tex_storage(Texture& t, GLenum internal_format,
GLsizei width, GLsizei height,
void* buf = nullptr, GLsizei stride = 0,
GLsizei min_width = 0, GLsizei min_height = 0) {
internal_format = remap_internal_format(internal_format);
bool changed = false;
if (t.width != width || t.height != height || t.depth != 0 ||
@ -1377,7 +1375,7 @@ GLenum internal_format_for_data(GLenum format, GLenum ty) {
if (format == GL_RED && ty == GL_UNSIGNED_BYTE) {
return GL_R8;
} else if ((format == GL_RGBA || format == GL_BGRA) &&
(ty == GL_UNSIGNED_BYTE || ty == GL_UNSIGNED_INT_8_8_8_8_REV)) {
ty == GL_UNSIGNED_BYTE) {
return GL_RGBA8;
} else if (format == GL_RGBA && ty == GL_FLOAT) {
return GL_RGBA32F;
@ -1435,10 +1433,7 @@ static void* get_pixel_unpack_buffer_data(void* data) {
void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum ty,
void* data) {
if (level != 0) {
assert(false);
return;
}
if (level != 0) { assert(false); return; }
data = get_pixel_unpack_buffer_data(data);
if (!data) return;
Texture& t = ctx->textures[ctx->get_binding(target)];
@ -1469,10 +1464,7 @@ void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
void TexImage2D(GLenum target, GLint level, GLint internal_format,
GLsizei width, GLsizei height, GLint border, GLenum format,
GLenum ty, void* data) {
if (level != 0) {
assert(false);
return;
}
if (level != 0) { assert(false); return; }
assert(border == 0);
TexStorage2D(target, 1, internal_format, width, height);
TexSubImage2D(target, 0, 0, 0, width, height, format, ty, data);
@ -1481,10 +1473,7 @@ void TexImage2D(GLenum target, GLint level, GLint internal_format,
void TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLenum ty, void* data) {
if (level != 0) {
assert(false);
return;
}
if (level != 0) { assert(false); return; }
data = get_pixel_unpack_buffer_data(data);
if (!data) return;
Texture& t = ctx->textures[ctx->get_binding(target)];
@ -1493,7 +1482,8 @@ void TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei row_length =
ctx->unpack_row_length != 0 ? ctx->unpack_row_length : width;
if (format == GL_BGRA) {
assert(ty == GL_UNSIGNED_BYTE || ty == GL_UNSIGNED_INT_8_8_8_8_REV);
assert(ty == GL_UNSIGNED_BYTE ||
ty == GL_UNSIGNED_INT_8_8_8_8_REV);
assert(t.internal_format == GL_RGBA8);
} else {
assert(t.internal_format == internal_format_for_data(format, ty));
@ -1522,10 +1512,7 @@ void TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
void TexImage3D(GLenum target, GLint level, GLint internal_format,
GLsizei width, GLsizei height, GLsizei depth, GLint border,
GLenum format, GLenum ty, void* data) {
if (level != 0) {
assert(false);
return;
}
if (level != 0) { assert(false); return; }
assert(border == 0);
TexStorage3D(target, 1, internal_format, width, height, depth);
TexSubImage3D(target, 0, 0, 0, 0, width, height, depth, format, ty, data);
@ -1705,8 +1692,7 @@ void VertexAttribDivisor(GLuint index, GLuint divisor) {
va.divisor = divisor;
}
void BufferData(GLenum target, GLsizeiptr size, void* data,
UNUSED GLenum usage) {
void BufferData(GLenum target, GLsizeiptr size, void* data, UNUSED GLenum usage) {
Buffer& b = ctx->buffers[ctx->get_binding(target)];
if (b.allocate(size)) {
ctx->validate_vertex_array = true;
@ -1839,7 +1825,9 @@ static inline uint32_t clear_chunk(uint16_t value) {
return uint32_t(value) | (uint32_t(value) << 16);
}
static inline uint32_t clear_chunk(uint32_t value) { return value; }
static inline uint32_t clear_chunk(uint32_t value) {
return value;
}
template <typename T>
static inline void clear_row(T* buf, size_t len, T value, uint32_t chunk) {
@ -1942,8 +1930,8 @@ static void force_clear(Texture& t, const IntRect* skip = nullptr) {
int count = __builtin_ctz(mask);
if (count > 0) {
clear_buffer<T>(t, t.clear_val, 0,
IntRect{0, start, t.width, start + count}, skip_start,
skip_end);
IntRect{0, start, t.width, start + count},
skip_start, skip_end);
t.delay_clear -= count;
start += count;
mask >>= count;
@ -1955,8 +1943,8 @@ static void force_clear(Texture& t, const IntRect* skip = nullptr) {
int count = (i + 1) * 32 - start;
if (count > 0) {
clear_buffer<T>(t, t.clear_val, 0,
IntRect{0, start, t.width, start + count}, skip_start,
skip_end);
IntRect{0, start, t.width, start + count},
skip_start, skip_end);
t.delay_clear -= count;
}
}
@ -1994,9 +1982,9 @@ static inline bool clear_requires_scissor(Texture& t) {
// potentially punt to a delayed clear, if applicable.
template <typename T>
static void request_clear(Texture& t, int layer, T value) {
// If the clear would require a scissor, force clear anything outside
// the scissor, and then immediately clear anything inside the scissor.
if (clear_requires_scissor(t)) {
// If the clear would require a scissor, force clear anything outside
// the scissor, and then immediately clear anything inside the scissor.
if (clear_requires_scissor(t)) {
force_clear<T>(t, &ctx->scissor);
clear_buffer<T>(t, value, layer);
} else if (t.depth > 1) {
@ -2049,8 +2037,8 @@ void SetTextureBuffer(GLuint texid, GLenum internal_format, GLsizei width,
GLsizei height, GLsizei stride, void* buf,
GLsizei min_width, GLsizei min_height) {
Texture& t = ctx->textures[texid];
set_tex_storage(t, internal_format, width, height, buf, stride, min_width,
min_height);
set_tex_storage(t, internal_format, width, height, buf, stride,
min_width, min_height);
}
GLenum CheckFramebufferStatus(GLenum target) {
@ -2147,9 +2135,9 @@ void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
void CopyImageSubData(GLuint srcName, GLenum srcTarget, UNUSED GLint srcLevel,
GLint srcX, GLint srcY, GLint srcZ, GLuint dstName,
GLenum dstTarget, UNUSED GLint dstLevel, GLint dstX,
GLint dstY, GLint dstZ, GLsizei srcWidth,
GLsizei srcHeight, GLsizei srcDepth) {
GLenum dstTarget, UNUSED GLint dstLevel, GLint dstX, GLint dstY,
GLint dstZ, GLsizei srcWidth, GLsizei srcHeight,
GLsizei srcDepth) {
assert(srcLevel == 0 && dstLevel == 0);
if (srcTarget == GL_RENDERBUFFER) {
Renderbuffer& rb = ctx->renderbuffers[srcName];
@ -2191,9 +2179,9 @@ void CopyImageSubData(GLuint srcName, GLenum srcTarget, UNUSED GLint srcLevel,
}
}
void CopyTexSubImage3D(GLenum target, UNUSED GLint level, GLint xoffset,
GLint yoffset, GLint zoffset, GLint x, GLint y,
GLsizei width, GLsizei height) {
void CopyTexSubImage3D(GLenum target, UNUSED GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLint x, GLint y, GLsizei width,
GLsizei height) {
assert(level == 0);
Framebuffer* fb = get_framebuffer(GL_READ_FRAMEBUFFER);
if (!fb) return;
@ -2202,9 +2190,8 @@ void CopyTexSubImage3D(GLenum target, UNUSED GLint level, GLint xoffset,
zoffset, width, height, 1);
}
void CopyTexSubImage2D(GLenum target, UNUSED GLint level, GLint xoffset,
GLint yoffset, GLint x, GLint y, GLsizei width,
GLsizei height) {
void CopyTexSubImage2D(GLenum target, UNUSED GLint level, GLint xoffset, GLint yoffset,
GLint x, GLint y, GLsizei width, GLsizei height) {
assert(level == 0);
Framebuffer* fb = get_framebuffer(GL_READ_FRAMEBUFFER);
if (!fb) return;
@ -2475,11 +2462,11 @@ static inline WideRGBA8 blend_pixels_RGBA8(PackedRGBA8 pdst, WideRGBA8 src) {
switch (blend_key) {
case BLEND_KEY_NONE:
return src;
case BLEND_KEY(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE,
GL_ONE_MINUS_SRC_ALPHA):
// dst + src.a*(src.rgb1 - dst)
case BLEND_KEY(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE):
// dst + src.a*(src.rgb1 - dst.rgb0)
// use addlow for signed overflow
return addlow(dst, muldiv255(alphas(src), (src | ALPHA_OPAQUE) - dst));
return addlow(dst,
muldiv255(alphas(src), (src | ALPHA_OPAQUE) - (dst & RGB_MASK)));
case BLEND_KEY(GL_ONE, GL_ONE_MINUS_SRC_ALPHA):
return src + dst - muldiv255(dst, alphas(src));
case BLEND_KEY(GL_ZERO, GL_ONE_MINUS_SRC_COLOR):
@ -2502,8 +2489,8 @@ static inline WideRGBA8 blend_pixels_RGBA8(PackedRGBA8 pdst, WideRGBA8 src) {
case BLEND_KEY(GL_CONSTANT_COLOR, GL_ONE_MINUS_SRC_COLOR):
// src*k + (1-src)*dst = src*k + dst - src*dst = dst + src*(k - dst)
// use addlow for signed overflow
return addlow(
dst, muldiv255(src, combine(ctx->blendcolor, ctx->blendcolor) - dst));
return addlow(dst,
muldiv255(src, combine(ctx->blendcolor, ctx->blendcolor) - dst));
case BLEND_KEY(GL_ONE, GL_ONE_MINUS_SRC1_COLOR): {
WideRGBA8 secondary =
pack_pixels_RGBA8(fragment_shader->gl_SecondaryFragColor);
@ -2544,7 +2531,9 @@ static inline PackedRGBA8 span_mask(uint32_t*, int span) {
return span_mask_RGBA8(span);
}
static inline WideR8 pack_pixels_R8(Float c) { return packR8(round_pixel(c)); }
static inline WideR8 pack_pixels_R8(Float c) {
return packR8(round_pixel(c));
}
static inline WideR8 pack_pixels_R8() {
return pack_pixels_R8(fragment_shader->gl_FragColor.x);
@ -2697,15 +2686,14 @@ UNUSED static inline void commit_solid_span(uint8_t* buf, PackedR8 r, int len) {
}
}
#define DISPATCH_DRAW_SPAN(self, buf, len) \
do { \
int drawn = self->draw_span(buf, len); \
if (drawn) self->step_interp_inputs(drawn >> 2); \
for (buf += drawn; drawn < len; drawn += 4, buf += 4) { \
run(self); \
commit_span(buf, pack_span(buf)); \
} \
} while (0)
#define DISPATCH_DRAW_SPAN(self, buf, len) do { \
int drawn = self->draw_span(buf, len); \
if (drawn) self->step_interp_inputs(drawn >> 2); \
for (buf += drawn; drawn < len; drawn += 4, buf += 4) { \
run(self); \
commit_span(buf, pack_span(buf)); \
} \
} while (0)
#include "texture.h"
@ -2716,9 +2704,9 @@ UNUSED static inline void commit_solid_span(uint8_t* buf, PackedR8 r, int len) {
#pragma GCC diagnostic ignored "-Wunused-variable"
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
#ifdef __clang__
# pragma GCC diagnostic ignored "-Wunused-private-field"
#pragma GCC diagnostic ignored "-Wunused-private-field"
#else
# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#endif
#include "load_shader.h"
#pragma GCC diagnostic pop
@ -2770,7 +2758,7 @@ static inline void draw_depth_span(uint16_t z, P* buf, uint16_t* depth,
ZMask8 zmask;
// Process depth in 8-pixel chunks.
switch (check_depth8<FUNC, MASK>(z, depth, zmask)) {
case 0: // All pixels failed the depth test.
case 0: // All pixels failed the depth test.
if (len) {
// Flush out passed pixels.
fragment_shader->draw_span(buf - len, len);
@ -2779,7 +2767,7 @@ static inline void draw_depth_span(uint16_t z, P* buf, uint16_t* depth,
// Accumulate 2 skipped chunks.
skip += 2;
break;
case -1: // All pixels passed the depth test.
case -1: // All pixels passed the depth test.
if (skip) {
// Flushed out any skipped chunks.
fragment_shader->skip(skip);
@ -2788,7 +2776,7 @@ static inline void draw_depth_span(uint16_t z, P* buf, uint16_t* depth,
// Accumulate 8 passed pixels.
len += 8;
break;
default: // Mixture of pass and fail results.
default: // Mixture of pass and fail results.
if (len) {
// Flush out any passed pixels.
fragment_shader->draw_span(buf - len, len);
@ -2821,11 +2809,11 @@ static inline void draw_depth_span(uint16_t z, P* buf, uint16_t* depth,
ZMask8 zmask;
// Process depth in 8-pixel chunks.
switch (check_depth8<FUNC, MASK>(z, depth, zmask)) {
case 0: // All pixels failed the depth test.
case 0: // All pixels failed the depth test.
// Accumulate 2 skipped chunks.
skip += 2;
break;
case -1: // All pixels passed the depth test.
case -1: // All pixels passed the depth test.
if (skip) {
// Flush out any skipped chunks.
fragment_shader->skip(skip);
@ -2835,7 +2823,7 @@ static inline void draw_depth_span(uint16_t z, P* buf, uint16_t* depth,
commit_output<false, false>(buf);
commit_output<false, false>(buf + 4);
break;
default: // Mixture of pass and fail results.
default: // Mixture of pass and fail results.
if (skip) {
// Flush out any skipped chunks.
fragment_shader->skip(skip);
@ -2954,39 +2942,41 @@ static inline void draw_quad_spans(int nump, Point2D p[4], uint16_t z,
r1i = prev;
}
// Load the points from the indices.
l0 = p[l0i]; // Start of left edge
r0 = p[r0i]; // End of left edge
l1 = p[l1i]; // Start of right edge
r1 = p[r1i]; // End of right edge
l0 = p[l0i]; // Start of left edge
r0 = p[r0i]; // End of left edge
l1 = p[l1i]; // Start of right edge
r1 = p[r1i]; // End of right edge
// debugf("l0: %d(%f,%f), r0: %d(%f,%f) -> l1: %d(%f,%f), r1:
// %d(%f,%f)\n", l0i, l0.x, l0.y, r0i, r0.x, r0.y, l1i, l1.x, l1.y, r1i,
// r1.x, r1.y);
}
struct Edge {
struct Edge
{
float yScale;
float xSlope;
float x;
Interpolants interpSlope;
Interpolants interp;
Edge(float y, const Point2D& p0, const Point2D& p1, const Interpolants& i0,
const Interpolants& i1)
: // Inverse Y scale for slope calculations. Avoid divide on 0-length
// edge. Later checks below ensure that Y <= p1.y, or otherwise we
// don't use this edge. We just need to guard against Y == p1.y ==
// p0.y. In that case, Y - p0.y == 0 and will cancel out the slopes
// below, except if yScale is Inf for some reason (or worse, NaN),
// which 1/(p1.y-p0.y) might produce if we don't bound it.
yScale(1.0f / max(p1.y - p0.y, 1.0f / 256)),
// Calculate dX/dY slope
xSlope((p1.x - p0.x) * yScale),
// Initialize current X based on Y and slope
x(p0.x + (y - p0.y) * xSlope),
// Calculate change in interpolants per change in Y
interpSlope((i1 - i0) * yScale),
// Initialize current interpolants based on Y and slope
interp(i0 + (y - p0.y) * interpSlope) {}
Edge(float y, const Point2D& p0, const Point2D& p1,
const Interpolants& i0, const Interpolants& i1) :
// Inverse Y scale for slope calculations. Avoid divide on 0-length edge.
// Later checks below ensure that Y <= p1.y, or otherwise we don't use
// this edge. We just need to guard against Y == p1.y == p0.y. In that
// case, Y - p0.y == 0 and will cancel out the slopes below, except if
// yScale is Inf for some reason (or worse, NaN), which 1/(p1.y-p0.y)
// might produce if we don't bound it.
yScale(1.0f / max(p1.y - p0.y, 1.0f / 256)),
// Calculate dX/dY slope
xSlope((p1.x - p0.x) * yScale),
// Initialize current X based on Y and slope
x(p0.x + (y - p0.y) * xSlope),
// Calculate change in interpolants per change in Y
interpSlope((i1 - i0) * yScale),
// Initialize current interpolants based on Y and slope
interp(i0 + (y - p0.y) * interpSlope)
{}
void nextRow() {
// step current X and interpolants to next row from slope
@ -3012,35 +3002,31 @@ static inline void draw_quad_spans(int nump, Point2D p[4], uint16_t z,
if (y > checkY) {
// If we're outside the clip rect, we're done.
if (y > clipRect.y1) break;
// Helper to find the next non-duplicate vertex that doesn't loop back.
#define STEP_EDGE(e0i, e0, e1i, e1, STEP_POINT, end) \
for (;;) { \
/* Set new start of edge to be end of old edge */ \
e0i = e1i; \
e0 = e1; \
/* Set new end of edge to next point */ \
e1i = STEP_POINT(e1i); \
e1 = p[e1i]; \
/* If the edge is descending, use it. */ \
if (e1.y > e0.y) break; \
/* If the edge is ascending or crossed the end, we're done. */ \
if (e1.y < e0.y || e0i == end) return; \
/* Otherwise, it's a duplicate, so keep searching. */ \
}
// Helper to find the next non-duplicate vertex that doesn't loop back.
#define STEP_EDGE(e0i, e0, e1i, e1, STEP_POINT, end) \
for (;;) { \
/* Set new start of edge to be end of old edge */ \
e0i = e1i; \
e0 = e1; \
/* Set new end of edge to next point */ \
e1i = STEP_POINT(e1i); \
e1 = p[e1i]; \
/* If the edge is descending, use it. */ \
if (e1.y > e0.y) break; \
/* If the edge is ascending or crossed the end, we're done. */ \
if (e1.y < e0.y || e0i == end) return; \
/* Otherwise, it's a duplicate, so keep searching. */ \
}
// Check if Y advanced past the end of the left edge
if (y > l1.y) {
// Step to next left edge past Y and reset edge interpolants.
do {
STEP_EDGE(l0i, l0, l1i, l1, NEXT_POINT, r1i);
} while (y > l1.y);
do { STEP_EDGE(l0i, l0, l1i, l1, NEXT_POINT, r1i); } while (y > l1.y);
left = Edge(y, l0, l1, interp_outs[l0i], interp_outs[l1i]);
}
// Check if Y advanced past the end of the right edge
if (y > r1.y) {
// Step to next right edge past Y and reset edge interpolants.
do {
STEP_EDGE(r0i, r0, r1i, r1, PREV_POINT, l1i);
} while (y > r1.y);
do { STEP_EDGE(r0i, r0, r1i, r1, PREV_POINT, l1i); } while (y > r1.y);
right = Edge(y, r0, r1, interp_outs[r0i], interp_outs[r1i]);
}
// Reset check condition for next time around.
@ -3177,11 +3163,11 @@ static inline void draw_quad_spans(int nump, Point2D p[4], uint16_t z,
span &= 3;
}
}
draw_span<false, false>(buf, depth, span, [=] { return z; });
draw_span<false, false>(buf, depth, span, [=]{ return z; });
} else {
// If discard is used, then use slower fallbacks. This should be rare.
// Just needs to work, doesn't need to be too fast yet...
draw_span<true, false>(buf, depth, span, [=] { return z; });
draw_span<true, false>(buf, depth, span, [=]{ return z; });
}
}
next_span:
@ -3245,13 +3231,14 @@ static inline void draw_perspective_spans(int nump, Point3D* p,
l1i = NEXT_POINT(l0i);
// End of right edge is prev point after right edge start.
r1i = PREV_POINT(r0i);
l0 = p[l0i]; // Start of left edge
r0 = p[r0i]; // End of left edge
l1 = p[l1i]; // Start of right edge
r1 = p[r1i]; // End of right edge
l0 = p[l0i]; // Start of left edge
r0 = p[r0i]; // End of left edge
l1 = p[l1i]; // Start of right edge
r1 = p[r1i]; // End of right edge
}
struct Edge {
struct Edge
{
float yScale;
// Current coordinates for edge. Where in the 2D case of draw_quad_spans,
// it is enough to just track the X coordinate as we advance along the rows,
@ -3262,22 +3249,22 @@ static inline void draw_perspective_spans(int nump, Point3D* p,
Interpolants interpSlope;
Interpolants interp;
Edge(float y, const Point3D& p0, const Point3D& p1, const Interpolants& i0,
const Interpolants& i1)
: // Inverse Y scale for slope calculations. Avoid divide on 0-length
// edge.
yScale(1.0f / max(p1.y - p0.y, 1.0f / 256)),
// Calculate dX/dY slope
pSlope((p1 - p0) * yScale),
// Initialize current coords based on Y and slope
p(p0 + (y - p0.y) * pSlope),
// Crucially, these interpolants must be scaled by the point's 1/w
// value, which allows linear interpolation in a perspective-correct
// manner. This will be canceled out inside the fragment shader later.
// Calculate change in interpolants per change in Y
interpSlope((i1 * p1.w - i0 * p0.w) * yScale),
// Initialize current interpolants based on Y and slope
interp(i0 * p0.w + (y - p0.y) * interpSlope) {}
Edge(float y, const Point3D& p0, const Point3D& p1,
const Interpolants& i0, const Interpolants& i1) :
// Inverse Y scale for slope calculations. Avoid divide on 0-length edge.
yScale(1.0f / max(p1.y - p0.y, 1.0f / 256)),
// Calculate dX/dY slope
pSlope((p1 - p0) * yScale),
// Initialize current coords based on Y and slope
p(p0 + (y - p0.y) * pSlope),
// Crucially, these interpolants must be scaled by the point's 1/w value,
// which allows linear interpolation in a perspective-correct manner.
// This will be canceled out inside the fragment shader later.
// Calculate change in interpolants per change in Y
interpSlope((i1 * p1.w - i0 * p0.w) * yScale),
// Initialize current interpolants based on Y and slope
interp(i0 * p0.w + (y - p0.y) * interpSlope)
{}
float x() const { return p.x; }
vec2_scalar zw() const { return {p.z, p.w}; }
@ -3309,17 +3296,13 @@ static inline void draw_perspective_spans(int nump, Point3D* p,
// Check if Y advanced past the end of the left edge
if (y > l1.y) {
// Step to next left edge past Y and reset edge interpolants.
do {
STEP_EDGE(l0i, l0, l1i, l1, NEXT_POINT, r1i);
} while (y > l1.y);
do { STEP_EDGE(l0i, l0, l1i, l1, NEXT_POINT, r1i); } while (y > l1.y);
left = Edge(y, l0, l1, interp_outs[l0i], interp_outs[l1i]);
}
// Check if Y advanced past the end of the right edge
if (y > r1.y) {
// Step to next right edge past Y and reset edge interpolants.
do {
STEP_EDGE(r0i, r0, r1i, r1, PREV_POINT, l1i);
} while (y > r1.y);
do { STEP_EDGE(r0i, r0, r1i, r1, PREV_POINT, l1i); } while (y > r1.y);
right = Edge(y, r0, r1, interp_outs[r0i], interp_outs[r1i]);
}
// Reset check condition for next time around.
@ -3498,11 +3481,11 @@ static inline void draw_perspective_clipped(int nump, Point3D* p_clip,
// Finally draw perspective-correct spans for the polygon.
if (colortex.internal_format == GL_RGBA8) {
draw_perspective_spans<uint32_t>(nump, p_clip, interp_clip, colortex, layer,
depthtex, clipRect);
draw_perspective_spans<uint32_t>(nump, p_clip, interp_clip, colortex,
layer, depthtex, clipRect);
} else if (colortex.internal_format == GL_R8) {
draw_perspective_spans<uint8_t>(nump, p_clip, interp_clip, colortex, layer,
depthtex, clipRect);
draw_perspective_spans<uint8_t>(nump, p_clip, interp_clip, colortex,
layer, depthtex, clipRect);
} else {
assert(false);
}
@ -3519,31 +3502,37 @@ static inline void draw_perspective_clipped(int nump, Point3D* p_clip,
// by W again to produce the final correct attribute value for each fragment.
// This process is expensive and should be avoided if possible for primitive
// batches that are known ahead of time to not need perspective-correction.
static void draw_perspective(int nump, Interpolants interp_outs[4],
Texture& colortex, int layer, Texture& depthtex) {
static void draw_perspective(int nump,
Interpolants interp_outs[4],
Texture& colortex, int layer,
Texture& depthtex) {
// Convert output of vertex shader to screen space.
vec4 pos = vertex_shader->gl_Position;
vec3_scalar scale =
vec3_scalar(ctx->viewport.width(), ctx->viewport.height(), 1) * 0.5f;
vec3_scalar(ctx->viewport.width(), ctx->viewport.height(), 1) * 0.5f;
vec3_scalar offset =
vec3_scalar(ctx->viewport.x0, ctx->viewport.y0, 0.0f) + scale;
vec3_scalar(ctx->viewport.x0, ctx->viewport.y0, 0.0f) + scale;
if (test_none(pos.z <= -pos.w || pos.z >= pos.w)) {
// No points cross the near or far planes, so no clipping required.
// Just divide coords by W and convert to viewport.
Float w = 1.0f / pos.w;
vec3 screen = pos.sel(X, Y, Z) * w * scale + offset;
Point3D p[4] = {{screen.x.x, screen.y.x, screen.z.x, w.x},
{screen.x.y, screen.y.y, screen.z.y, w.y},
{screen.x.z, screen.y.z, screen.z.z, w.z},
{screen.x.w, screen.y.w, screen.z.w, w.w}};
Point3D p[4] = {
{screen.x.x, screen.y.x, screen.z.x, w.x},
{screen.x.y, screen.y.y, screen.z.y, w.y},
{screen.x.z, screen.y.z, screen.z.z, w.z},
{screen.x.w, screen.y.w, screen.z.w, w.w}
};
draw_perspective_clipped(nump, p, interp_outs, colortex, layer, depthtex);
} else {
// Points cross the near or far planes, so we need to clip.
// Start with the original 3 or 4 points...
Point3D p[4] = {{pos.x.x, pos.y.x, pos.z.x, pos.w.x},
{pos.x.y, pos.y.y, pos.z.y, pos.w.y},
{pos.x.z, pos.y.z, pos.z.z, pos.w.z},
{pos.x.w, pos.y.w, pos.z.w, pos.w.w}};
Point3D p[4] = {
{pos.x.x, pos.y.x, pos.z.x, pos.w.x},
{pos.x.y, pos.y.y, pos.z.y, pos.w.y},
{pos.x.z, pos.y.z, pos.z.z, pos.w.z},
{pos.x.w, pos.y.w, pos.z.w, pos.w.w}
};
// Clipping can expand the points by 1 for each of 6 view frustum planes.
Point3D p_clip[4 + 6];
Interpolants interp_clip[4 + 6];
@ -3609,9 +3598,10 @@ static void draw_quad(int nump, Texture& colortex, int layer,
// Convert output of vertex shader to screen space.
// Divide coords by W and convert to viewport.
float w = 1.0f / pos.w.x;
vec2 screen = (pos.sel(X, Y) * w + 1) * 0.5f *
vec2_scalar(ctx->viewport.width(), ctx->viewport.height()) +
vec2_scalar(ctx->viewport.x0, ctx->viewport.y0);
vec2 screen =
(pos.sel(X, Y) * w + 1) * 0.5f *
vec2_scalar(ctx->viewport.width(), ctx->viewport.height()) +
vec2_scalar(ctx->viewport.x0, ctx->viewport.y0);
Point2D p[4] = {{screen.x.x, screen.y.x},
{screen.x.y, screen.y.y},
{screen.x.z, screen.y.z},
@ -3673,7 +3663,8 @@ static inline void draw_elements(GLsizei count, GLsizei instancecount,
Texture& depthtex) {
assert((offset & (sizeof(INDEX) - 1)) == 0);
INDEX* indices = (INDEX*)(indices_buf.buf + offset);
count = min(count, (GLsizei)((indices_buf.size - offset) / sizeof(INDEX)));
count = min(count,
(GLsizei)((indices_buf.size - offset) / sizeof(INDEX)));
// Triangles must be indexed at offsets 0, 1, 2.
// Quads must be successive triangles indexed at offsets 0, 1, 2, 2, 1, 3.
if (count == 6 && indices[1] == indices[0] + 1 &&
@ -3782,7 +3773,7 @@ void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type,
#endif
}
} // extern "C"
} // extern "C"
template <typename P>
static inline void scale_row(P* dst, int dstWidth, const P* src, int srcWidth,
@ -3809,8 +3800,8 @@ static void scale_blit(Texture& srctex, const IntRect& srcReq, int srcZ,
IntRect dstBounds = dsttex.sample_bounds(dstReq, invertY);
// Compute valid source bounds
// Scale source to dest, rounding inward to avoid sampling outside source
IntRect srcBounds = srctex.sample_bounds(srcReq).scale(
srcWidth, srcHeight, dstWidth, dstHeight, true);
IntRect srcBounds = srctex.sample_bounds(srcReq)
.scale(srcWidth, srcHeight, dstWidth, dstHeight, true);
// Limit dest sampling bounds to overlap source bounds
dstBounds.intersect(srcBounds);
// Check if sampling bounds are empty
@ -3818,8 +3809,8 @@ static void scale_blit(Texture& srctex, const IntRect& srcReq, int srcZ,
return;
}
// Compute final source bounds from clamped dest sampling bounds
srcBounds =
IntRect(dstBounds).scale(dstWidth, dstHeight, srcWidth, srcHeight);
srcBounds = IntRect(dstBounds)
.scale(dstWidth, dstHeight, srcWidth, srcHeight);
// Calculate source and dest pointers from clamped offsets
int bpp = srctex.bpp();
int srcStride = srctex.stride();
@ -3916,7 +3907,8 @@ static void linear_blit(Texture& srctex, const IntRect& srcReq, int srcZ,
Texture& dsttex, const IntRect& dstReq, int dstZ,
bool invertY) {
assert(srctex.internal_format == GL_RGBA8 ||
srctex.internal_format == GL_R8 || srctex.internal_format == GL_RG8);
srctex.internal_format == GL_R8 ||
srctex.internal_format == GL_RG8);
// Compute valid dest bounds
IntRect dstBounds = dsttex.sample_bounds(dstReq, invertY);
// Check if sampling bounds are empty
@ -3950,7 +3942,8 @@ static void linear_blit(Texture& srctex, const IntRect& srcReq, int srcZ,
for (int rows = dstBounds.height(); rows > 0; rows--) {
switch (bpp) {
case 1:
linear_row((uint8_t*)dest, span, srcUV, srcDUV.x, srcZOffset, &sampler);
linear_row((uint8_t*)dest, span, srcUV, srcDUV.x, srcZOffset,
&sampler);
break;
case 2:
linear_row((uint16_t*)dest, span, srcUV, srcDUV.x, srcZOffset,
@ -4005,7 +3998,8 @@ void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
prepare_texture(srctex);
prepare_texture(dsttex, &dstReq);
if (!srcReq.same_size(dstReq) && filter == GL_LINEAR &&
(srctex.internal_format == GL_RGBA8 || srctex.internal_format == GL_R8 ||
(srctex.internal_format == GL_RGBA8 ||
srctex.internal_format == GL_R8 ||
srctex.internal_format == GL_RG8)) {
linear_blit(srctex, srcReq, srcfb->layer, dsttex, dstReq, dstfb->layer,
invertY);

View File

@ -418,7 +418,6 @@ fn calculate_length(width: GLsizei, height: GLsizei, format: GLenum, pixel_type:
UNSIGNED_SHORT => 2,
SHORT => 2,
FLOAT => 4,
UNSIGNED_INT_8_8_8_8_REV => 1,
_ => panic!("unsupported pixel_type for read_pixels: {:?}", pixel_type),
};

View File

@ -466,7 +466,7 @@ impl CompositeState {
opaque_tiles: Vec::new(),
alpha_tiles: Vec::new(),
clear_tiles: Vec::new(),
z_generator: ZBufferIdGenerator::new(max_depth_ids),
z_generator: ZBufferIdGenerator::new(0, max_depth_ids),
dirty_rects_are_valid,
compositor_kind,
picture_caching_is_enabled,

View File

@ -3532,7 +3532,7 @@ impl Device {
pub fn set_blend_mode_alpha(&mut self) {
self.set_blend_factors(
(gl::SRC_ALPHA, gl::ONE_MINUS_SRC_ALPHA),
(gl::ONE, gl::ONE_MINUS_SRC_ALPHA),
(gl::ONE, gl::ONE),
);
}

View File

@ -579,7 +579,7 @@ impl FrameBuilder {
);
// Used to generated a unique z-buffer value per primitive.
let mut z_generator = ZBufferIdGenerator::new(scene.config.max_depth_ids);
let mut z_generator = ZBufferIdGenerator::new(layer, scene.config.max_depth_ids);
let use_dual_source_blending = scene.config.dual_source_blending_is_enabled &&
scene.config.dual_source_blending_is_supported;

View File

@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use api::{AlphaType, PremultipliedColorF, YuvFormat, YuvColorSpace};
use api::{AlphaType, DocumentLayer, PremultipliedColorF, YuvFormat, YuvColorSpace};
use api::EdgeAaSegmentMask;
use api::units::*;
use crate::spatial_tree::{SpatialTree, ROOT_SPATIAL_NODE_INDEX, SpatialNodeIndex};
@ -25,6 +25,10 @@ pub const VECS_PER_TRANSFORM: usize = 8;
#[cfg_attr(feature = "replay", derive(Deserialize))]
pub struct ZBufferId(pub i32);
const MAX_DOCUMENT_LAYERS : i8 = 1 << 3;
const MAX_DOCUMENT_LAYER_VALUE : i8 = MAX_DOCUMENT_LAYERS / 2 - 1;
const MIN_DOCUMENT_LAYER_VALUE : i8 = -MAX_DOCUMENT_LAYERS / 2;
impl ZBufferId {
pub fn invalid() -> Self {
ZBufferId(i32::MAX)
@ -35,21 +39,26 @@ impl ZBufferId {
#[cfg_attr(feature = "capture", derive(Serialize))]
#[cfg_attr(feature = "replay", derive(Deserialize))]
pub struct ZBufferIdGenerator {
base: i32,
next: i32,
max_depth_ids: i32,
max_items_per_document_layer: i32,
}
impl ZBufferIdGenerator {
pub fn new(max_depth_ids: i32) -> Self {
pub fn new(layer: DocumentLayer, max_depth_ids: i32) -> Self {
debug_assert!(layer >= MIN_DOCUMENT_LAYER_VALUE);
debug_assert!(layer <= MAX_DOCUMENT_LAYER_VALUE);
let max_items_per_document_layer = max_depth_ids / MAX_DOCUMENT_LAYERS as i32;
ZBufferIdGenerator {
base: layer as i32 * max_items_per_document_layer,
next: 0,
max_depth_ids,
max_items_per_document_layer,
}
}
pub fn next(&mut self) -> ZBufferId {
debug_assert!(self.next < self.max_depth_ids);
let id = ZBufferId(self.next);
debug_assert!(self.next < self.max_items_per_document_layer);
let id = ZBufferId(self.next + self.base);
self.next += 1;
id
}

View File

@ -96,7 +96,7 @@ fuzzy(0-17,0-3221) fuzzy-if(gtkWidget&&!webrender,4-4,2616-2616) fuzzy-if(gtkWid
# Non-transparent and transparent ICO images
== downscale-16px.html?ff-0RGB.ico downscale-16px.html?ff-0RGB.png
fuzzy(0-1,0-1) fuzzy-if(gtkWidget&&webrender&&swgl,1-1,1-1) == downscale-16px.html?ff-ARGB.ico downscale-16px.html?ff-ARGB.png
fuzzy(0-1,0-1) == downscale-16px.html?ff-ARGB.ico downscale-16px.html?ff-ARGB.png
# Upside-down (negative height) BMP
== downscale-8px.html?top-to-bottom-16x16-24bpp.bmp downscale-8px.html?bmp-size-16x16-24bpp.png
@ -178,14 +178,14 @@ fuzzy(0-20,0-999) != downscale-2f.html?205,53,bottom about:blank
# Skip on WinXP with skia content
# Skip on Android because it runs reftests via http, and moz-icon isn't
# accessible from http/https origins anymore.
fuzzy(0-53,0-6391) fuzzy-if(gtkWidget&&webrender,19-19,5502-5568) fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) skip-if(Android) == downscale-moz-icon-1.html downscale-moz-icon-1-ref.html # gtkWidget Bug 1592059
fuzzy(0-53,0-6391) fuzzy-if(gtkWidget&&webrender,19-19,5502-5534) fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) skip-if(Android) == downscale-moz-icon-1.html downscale-moz-icon-1-ref.html # gtkWidget Bug 1592059
== downscale-png.html?16,16,interlaced downscale-png.html?16,16,normal
== downscale-png.html?24,24,interlaced downscale-png.html?24,24,normal
# Non-transparent and transparent ICO images
fuzzy(0-1,0-3) == downscale-16px.html?ff-0RGB.ico downscale-16px.html?ff-0RGB.png
fuzzy(0-3,0-32) fuzzy-if(gtkWidget&&webrender&&swgl,3-3,33-33) == downscale-16px.html?ff-ARGB.ico downscale-16px.html?ff-ARGB.png
fuzzy(0-3,0-32) == downscale-16px.html?ff-ARGB.ico downscale-16px.html?ff-ARGB.png
# Upside-down (negative height) BMP
== downscale-8px.html?top-to-bottom-16x16-24bpp.bmp downscale-8px.html?bmp-size-16x16-24bpp.png

View File

@ -55,27 +55,27 @@ fuzzy-if(Android,0-6,0-4) skip == offscreen-clipped-blendmode-3.html offscreen-c
fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&&gtkWidget,34-34,32-32) fuzzy-if(webrender&&cocoaWidget,7-7,37-37) skip-if(!asyncPan) == offscreen-clipped-blendmode-4.html offscreen-clipped-blendmode-ref.html # Bug 1604338
fuzzy-if(Android,0-7,0-1600) fuzzy-if(webrender&&gtkWidget,1-1,10-20) fuzzy-if(webrender&&cocoaWidget,1-1,19-19) skip-if(!asyncPan) == perspective-scrolling-1.html perspective-scrolling-1-ref.html # Bug 1604338
fuzzy-if(Android,0-7,0-4) skip-if(!asyncPan) == perspective-scrolling-2.html perspective-scrolling-2-ref.html
fuzzy-if(Android,0-19,0-4) fuzzy-if(webrender&&gtkWidget,13-13,28-32) fuzzy-if(webrender&&cocoaWidget,13-13,39-39) skip-if(!asyncPan) == perspective-scrolling-3.html perspective-scrolling-3-ref.html # Bug 1604338
fuzzy-if(Android,0-7,0-4) fuzzy-if(webrender&&gtkWidget,29-30,32-32) fuzzy-if(webrender&&cocoaWidget,20-20,40-40) skip-if(!asyncPan) == perspective-scrolling-4.html perspective-scrolling-4-ref.html # Bug 1604338
fuzzy-if(Android,0-19,0-4) fuzzy-if(webrender&&gtkWidget,13-13,32-32) fuzzy-if(webrender&&cocoaWidget,13-13,39-39) skip-if(!asyncPan) == perspective-scrolling-3.html perspective-scrolling-3-ref.html # Bug 1604338
fuzzy-if(Android,0-7,0-4) fuzzy-if(webrender&&gtkWidget,29-29,32-32) fuzzy-if(webrender&&cocoaWidget,20-20,40-40) skip-if(!asyncPan) == perspective-scrolling-4.html perspective-scrolling-4-ref.html # Bug 1604338
skip-if(!asyncPan) == perspective-scrolling-5.html perspective-scrolling-5-ref.html
pref(apz.disable_for_scroll_linked_effects,true) skip-if(!asyncPan) == disable-apz-for-sle-pages.html disable-apz-for-sle-pages-ref.html
fuzzy-if(browserIsRemote&&d2d,0-1,0-22) skip-if(!asyncPan) fuzzy-if(geckoview,2-2,242-242) skip-if(geckoview&&debug) == background-blend-mode-1.html background-blend-mode-1-ref.html # bug 1558286 for GV
skip-if(Android||!asyncPan) != opaque-fractional-displayport-1.html about:blank
skip-if(Android||!asyncPan) != opaque-fractional-displayport-2.html about:blank
fuzzy-if(Android,0-19,0-4) fuzzy-if(webrender&&gtkWidget,19-19,32-32) fuzzy-if(webrender&&cocoaWidget,22-22,44-44) skip-if(!asyncPan) == fixed-pos-scrolled-clip-1.html fixed-pos-scrolled-clip-1-ref.html # Bug 1604338
fuzzy-if(Android,0-44,0-10) fuzzy-if(webrender&&gtkWidget,26-26,60-64) fuzzy-if(webrender&&cocoaWidget,13-13,76-76) skip-if(!asyncPan) == fixed-pos-scrolled-clip-2.html fixed-pos-scrolled-clip-2-ref.html # Bug 1604338
fuzzy-if(Android,0-6,0-8) fuzzy-if(webrender&&gtkWidget,28-28,56-60) fuzzy-if(webrender&&cocoaWidget,19-19,72-72) skip-if(!asyncPan) == fixed-pos-scrolled-clip-3.html fixed-pos-scrolled-clip-3-ref.html # Bug 1604338
fuzzy-if(Android,0-6,0-8) fuzzy-if(webrender&&gtkWidget,28-28,56-60) fuzzy-if(webrender&&cocoaWidget,19-19,72-72) skip-if(!asyncPan) == fixed-pos-scrolled-clip-4.html fixed-pos-scrolled-clip-4-ref.html # Bug 1604338
fuzzy-if(Android,0-44,0-10) fuzzy-if(webrender&&gtkWidget,26-26,64-64) fuzzy-if(webrender&&cocoaWidget,13-13,76-76) skip-if(!asyncPan) == fixed-pos-scrolled-clip-2.html fixed-pos-scrolled-clip-2-ref.html # Bug 1604338
fuzzy-if(Android,0-6,0-8) fuzzy-if(webrender&&gtkWidget,28-28,60-60) fuzzy-if(webrender&&cocoaWidget,19-19,72-72) skip-if(!asyncPan) == fixed-pos-scrolled-clip-3.html fixed-pos-scrolled-clip-3-ref.html # Bug 1604338
fuzzy-if(Android,0-6,0-8) fuzzy-if(webrender&&gtkWidget,28-28,60-60) fuzzy-if(webrender&&cocoaWidget,19-19,72-72) skip-if(!asyncPan) == fixed-pos-scrolled-clip-4.html fixed-pos-scrolled-clip-4-ref.html # Bug 1604338
skip-if(!asyncPan) == fixed-pos-scrolled-clip-5.html fixed-pos-scrolled-clip-5-ref.html
skip-if(!asyncPan) == position-sticky-bug1434250.html position-sticky-bug1434250-ref.html
fuzzy-if(Android,0-8,0-4) fuzzy-if(webrender&&gtkWidget,25-25,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) skip-if(!asyncPan) == position-sticky-scrolled-clip-1.html position-sticky-scrolled-clip-1-ref.html # Bug 1604338
fuzzy-if(Android,0-6,0-4) skip == position-sticky-scrolled-clip-2.html position-sticky-scrolled-clip-2-ref.html # bug ?????? - incorrectly applying clip to sticky contents
fuzzy-if(Android,0-8,0-27) fuzzy-if(webrender&&cocoaWidget,11-11,39-39) skip-if(!asyncPan) == curtain-effect-1.html curtain-effect-1-ref.html
fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&&gtkWidget,15-15,28-32) fuzzy-if(webrender&&cocoaWidget,9-9,37-37) skip-if(!asyncPan) == transformed-1.html transformed-1-ref.html # Bug 1604338
fuzzy-if(Android&&!webrender,2-2,4-4) fuzzy-if(Android&&webrender,7-7,4-4) fuzzy-if(webrender&&gtkWidget,4-5,27-28) fuzzy-if(webrender&&cocoaWidget,6-6,37-37) skip-if(!asyncPan) == position-sticky-transformed-in-scrollframe-1.html position-sticky-transformed-in-scrollframe-1-ref.html # Bug 1604338
fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&&gtkWidget,15-15,32-32) fuzzy-if(webrender&&cocoaWidget,9-9,37-37) skip-if(!asyncPan) == transformed-1.html transformed-1-ref.html # Bug 1604338
fuzzy-if(Android&&!webrender,2-2,4-4) fuzzy-if(Android&&webrender,7-7,4-4) fuzzy-if(webrender&&gtkWidget,5-5,28-28) fuzzy-if(webrender&&cocoaWidget,6-6,37-37) skip-if(!asyncPan) == position-sticky-transformed-in-scrollframe-1.html position-sticky-transformed-in-scrollframe-1-ref.html # Bug 1604338
fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,10-10,4-4) fuzzy-if(webrender&&gtkWidget,20-20,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) skip-if(!asyncPan) == position-sticky-transformed-in-scrollframe-2.html position-sticky-transformed-in-scrollframe-2-ref.html # Bug 1604338
fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,13-13,4-4) fuzzy-if(webrender&&gtkWidget,26-27,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) skip-if(!asyncPan) == position-sticky-in-transformed-scrollframe-1.html position-sticky-in-transformed-scrollframe-ref.html # Bug 1604338
fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,13-13,4-4) fuzzy-if(webrender&&gtkWidget,26-27,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) skip-if(!asyncPan) == position-sticky-in-transformed-scrollframe-2.html position-sticky-in-transformed-scrollframe-ref.html # Bug 1604338
fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,13-13,4-4) fuzzy-if(webrender&&gtkWidget,27-27,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) skip-if(!asyncPan) == position-sticky-in-transformed-scrollframe-1.html position-sticky-in-transformed-scrollframe-ref.html # Bug 1604338
fuzzy-if(Android&&!webrender,3-3,4-4) fuzzy-if(Android&&webrender,13-13,4-4) fuzzy-if(webrender&&gtkWidget,27-27,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) skip-if(!asyncPan) == position-sticky-in-transformed-scrollframe-2.html position-sticky-in-transformed-scrollframe-ref.html # Bug 1604338
# for the following tests, we want to disable the low-precision buffer
# as it will expand the displayport beyond what the test specifies in

View File

@ -43,7 +43,7 @@ fuzzy-if(asyncPan&&!layersGPUAccelerated,0-140,0-514) fuzzy-if(winWidget,0-144,0
# border images with gradients
fuzzy-if(webrender&&!geckoview,1-3,784-1804) == border-image-linear-gradient.html border-image-linear-gradient-ref.html
fuzzy(0-1,0-98) fuzzy-if(skiaContent,0-1,0-350) fuzzy-if(webrender&&!geckoview,1-3,1086-37537) == border-image-linear-gradient-slice-1.html border-image-linear-gradient-slice-1-ref.html
fuzzy(0-1,0-98) fuzzy-if(skiaContent,0-1,0-350) fuzzy-if(webrender&&!geckoview,1-3,1087-37537) == border-image-linear-gradient-slice-1.html border-image-linear-gradient-slice-1-ref.html
fuzzy(0-1,0-515) fuzzy-if(OSX,0-1,0-10595) fuzzy-if(webrender&&!geckoview,1-3,272-25136) == border-image-linear-gradient-slice-2.html border-image-linear-gradient-slice-2-ref.html
fuzzy-if(skiaContent,0-1,0-2500) fuzzy-if(webrender&&!geckoview,1-3,2500-86037) == border-image-linear-gradient-slice-fill-1.html border-image-linear-gradient-slice-fill-1-ref.html
fuzzy(0-1,0-649) fuzzy-if(OSX,0-1,0-25771) fuzzy-if(skiaContent&&!Android,0-1,0-546) fuzzy-if(Android,0-1,0-6093) fuzzy-if(webrender&&!geckoview,1-3,480-57480) == border-image-linear-gradient-slice-fill-2.html border-image-linear-gradient-slice-fill-2-ref.html
@ -52,9 +52,9 @@ fuzzy(0-2,0-60590) fuzzy-if(Android,0-4,0-18022) fuzzy-if(OSX,0-1,0-15000) fuzzy
fuzzy(0-2,0-26758) fuzzy-if(OSX,0-1,0-6000) fuzzy-if(webrender&&!geckoview,1-3,3964-26758) == border-image-linear-gradient-outset.html border-image-linear-gradient-outset-ref.html
fuzzy(0-1,0-12) fuzzy-if(skiaContent,0-1,0-400) fuzzy-if(webrender&&!geckoview,1-3,1397-26872) == border-image-linear-gradient-repeat-repeat-1.html border-image-linear-gradient-repeat-repeat-1-ref.html
fuzzy(0-1,0-13) fuzzy-if(skiaContent,0-1,0-300) fuzzy-if(webrender&&!geckoview,1-3,1400-27131) == border-image-linear-gradient-repeat-round-1.html border-image-linear-gradient-repeat-round-1-ref.html
fuzzy-if(Android,0-1,0-1894) fuzzy-if(webrender&&!geckoview,1-2,3163-67805) == border-image-linear-gradient-repeat-repeat-2.html border-image-linear-gradient-repeat-repeat-2-ref.html
fuzzy(0-1,0-2000) fuzzy-if(webrender&&!geckoview,1-2,3249-9500) == border-image-linear-gradient-repeat-round-2.html border-image-linear-gradient-repeat-round-2-ref.html
fuzzy(0-1,0-8533) fuzzy-if(webrender&&!geckoview,1-3,3188-9500) == border-image-linear-gradient-repeat-repeat-3.html border-image-linear-gradient-repeat-repeat-3-ref.html
fuzzy-if(Android,0-1,0-1894) fuzzy-if(webrender&&!geckoview,1-2,3100-67805) == border-image-linear-gradient-repeat-repeat-2.html border-image-linear-gradient-repeat-repeat-2-ref.html
fuzzy(0-1,0-2000) fuzzy-if(webrender&&!geckoview,1-2,3296-9500) == border-image-linear-gradient-repeat-round-2.html border-image-linear-gradient-repeat-round-2-ref.html
fuzzy(0-1,0-8533) fuzzy-if(webrender&&!geckoview,1-3,3300-9500) == border-image-linear-gradient-repeat-repeat-3.html border-image-linear-gradient-repeat-repeat-3-ref.html
fuzzy(0-3,0-107563) fuzzy-if(webrender&&!geckoview,1-3,43500-107563) == border-image-linear-gradient-repeat-round-3.html border-image-linear-gradient-repeat-round-3-ref.html
fuzzy-if(webrender,0-1,0-2096) == border-image-radial-gradient.html border-image-radial-gradient-ref.html

View File

@ -29,7 +29,7 @@ fuzzy(0-2,0-440) == boxshadow-skiprect.html boxshadow-skiprect-ref.html
fuzzy(0-3,0-500) fuzzy-if(d2d,0-2,0-1080) == boxshadow-border-radius-int.html boxshadow-border-radius-int-ref.html
== boxshadow-inset-neg-spread.html about:blank
== boxshadow-inset-neg-spread2.html boxshadow-inset-neg-spread2-ref.html
fuzzy(0-26,0-3610) fuzzy-if(d2d,0-26,0-5910) fuzzy-if(webrender,4-6,4172-4350) == boxshadow-rotated.html boxshadow-rotated-ref.html # Bug 1211264
fuzzy(0-26,0-3610) fuzzy-if(d2d,0-26,0-5910) fuzzy-if(webrender,4-6,4184-4350) == boxshadow-rotated.html boxshadow-rotated-ref.html # Bug 1211264
== boxshadow-inset-large-border-radius.html boxshadow-inset-large-border-radius-ref.html
# fuzzy due to blur going inside, but as long as it's essentially black instead of a light gray its ok.

View File

@ -1180,7 +1180,7 @@ fails-if(Android||cocoaWidget||winWidget) == chrome://reftest/content/bugs/45614
fuzzy-if(Android,0-11,0-41) fuzzy-if(winWidget||gtkWidget,0-4,0-6) fuzzy-if(d2d,0-16,0-95) fuzzy-if(skiaContent,0-42,0-154) fuzzy-if(webrender,56-60,449-570) == 456219-1a.html 456219-1-ref.html # bug 1128229
fuzzy-if(Android,0-11,0-41) fuzzy-if(winWidget||gtkWidget,0-4,0-6) fuzzy-if(d2d,0-16,0-99) fuzzy-if(skiaContent,0-42,0-154) fuzzy-if(webrender,56-60,449-570) == 456219-1b.html 456219-1-ref.html # bug 1128229
fuzzy-if(Android,0-11,0-41) fuzzy-if(winWidget||gtkWidget,0-4,0-6) fuzzy-if(d2d,0-16,0-99) fuzzy-if(skiaContent,0-42,0-154) fuzzy-if(webrender,56-60,449-497) fuzzy-if(geckoview&&webrender&&device,60-60,1014-4421) == 456219-1c.html 456219-1-ref.html # bug 1128229
fuzzy-if(skiaContent,0-1,0-45) fuzzy-if(webrender,8-9,8-8) == 456219-2.html 456219-2-ref.html
fuzzy-if(skiaContent,0-1,0-45) fuzzy-if(webrender,9-9,8-8) == 456219-2.html 456219-2-ref.html
== 456330-1.gif 456330-1-ref.png
== 456484-1.html 456484-1-ref.html
== 457398-1.html 457398-1-ref.html
@ -1214,7 +1214,7 @@ fuzzy-if(skiaContent||webrender,0-1,0-31200) == 461512-1.html 461512-1-ref.html
== 462844-3.html 462844-ref.html
== 462844-4.html 462844-ref.html
== 463204-1.html 463204-1-ref.html
fuzzy-if(webrender,16-16,3391-4020) == chrome://reftest/content/bugs/463217-1.xhtml chrome://reftest/content/bugs/463217-1-ref.xhtml
fuzzy-if(webrender,16-16,3392-4020) == chrome://reftest/content/bugs/463217-1.xhtml chrome://reftest/content/bugs/463217-1-ref.xhtml
== 463952-1.html 463952-1-ref.html
== 464811-1.html 464811-1-ref.html
== 465574-1.html 465574-1-ref.html # bug 421436
@ -1718,7 +1718,7 @@ fuzzy-if(true,0-17,0-5886) fuzzy-if(skiaContent,0-9,0-5894) fuzzy-if(geckoview&&
== 776443-1.html 776443-1-ref.html
== 776443-2.html 776443-2-ref.html
== 786254-1.html 786254-1-ref.html
fails-if(gtkWidget&&webrender&&swgl) == 787947-1.html 787947-1-ref.html # Bug 1656817
== 787947-1.html 787947-1-ref.html
== 796847-1.svg 796847-1-ref.svg
fuzzy(0-40,0-875) fuzzy-if(skiaContent,0-1,0-2500) == 797797-1.html 797797-1-ref.html # 'opacity:N' and rgba(,,,N) text don't match precisely
fuzzy(0-40,0-850) fuzzy-if(skiaContent,0-2,0-2310) == 797797-2.html 797797-2-ref.html # 'opacity:N' and rgba(,,,N) text don't match precisely
@ -1785,7 +1785,7 @@ fuzzy-if(skiaContent,0-1,0-5) == 956513-1.svg 956513-1-ref.svg
== 957770-1.svg 957770-1-ref.svg
== 960277-1.html 960277-1-ref.html
fuzzy-if(skiaContent,0-1,0-80) == 961887-1.html 961887-1-ref.html
fuzzy-if(gtkWidget&&webrender&&swgl,1-1,22-22) == 961887-2.html 961887-2-ref.html
== 961887-2.html 961887-2-ref.html
== 961887-3.html 961887-3-ref.html
pref(layout.css.overflow-clip-box.enabled,true) fuzzy(0-50,0-145) fuzzy-if(asyncPan&&!layersGPUAccelerated,0-102,0-3712) fuzzy-if(webrender,0-255,0-180) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 966992-1.html 966992-1-ref.html # Bug 1392106
== 966510-1.html 966510-1-ref.html
@ -1838,7 +1838,7 @@ fails-if(webrender) == 1059498-3.html 1059498-1-ref.html # WebRender: see bug 14
== 1069716-1.html 1069716-1-ref.html
skip-if(geckoview&&!webrender) == 1078262-1.html about:blank # bug 1656792
test-pref(layout.testing.overlay-scrollbars.always-visible,false) == 1081072-1.html 1081072-1-ref.html
fuzzy-if(webrender,63-64,359-845) == 1081185-1.html 1081185-1-ref.html
fuzzy-if(webrender,63-64,407-845) == 1081185-1.html 1081185-1-ref.html
== 1097437-1.html 1097437-1-ref.html
== 1103258-1.html 1103258-1-ref.html # assertion crash test with layers culling test
== 1105137-1.html 1105137-1-ref.html
@ -1973,7 +1973,7 @@ fuzzy-if(Android,0-27,0-874) fuzzy-if(!Android,0-14,0-43) == 1313772.xhtml 13137
fuzzy(0-3,0-320000) == 1315113-1.html 1315113-1-ref.html
fuzzy(0-3,0-20000) == 1315113-2.html 1315113-2-ref.html
== 1315632-1.html 1315632-1-ref.html
fuzzy(0-2,0-40000) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),0-13,0-40000) fuzzy-if(gtkWidget&&webrender&&swgl,7-7,410-410) == 1316719-1a.html 1316719-1-ref.html
fuzzy(0-2,0-40000) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),0-13,0-40000) == 1316719-1a.html 1316719-1-ref.html
fuzzy(0-13,0-40000) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),0-13,0-40000) == 1316719-1b.html 1316719-1-ref.html
fuzzy(0-13,0-40000) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),0-13,0-40000) == 1316719-1c.html 1316719-1-ref.html
!= 1318769-1.html 1318769-1-ref.html

View File

@ -15,7 +15,7 @@ fuzzy(0-1,0-800000) == linear-flipped-1.html linear-flipped-1-ref.html
== linear-repeat-1e.html linear-repeat-1-ref.html
== linear-repeat-1f.html linear-repeat-1-ref.html
fails-if(d2d&&!webrender) == linear-repeat-1g.html linear-repeat-1-ref.html # bug 582236
fuzzy-if(skiaContent,0-1,0-500) fuzzy-if(webrender&&winWidget,0-2,0-100) fuzzy-if(webrender&&gtkWidget&&swgl,1-1,7600-7600) == linear-rotated-1.html linear-rotated-1-ref.html
fuzzy-if(skiaContent,0-1,0-500) fuzzy-if(webrender&&winWidget,0-2,0-100) == linear-rotated-1.html linear-rotated-1-ref.html
fuzzy-if(winWidget,0-1,0-37800) fuzzy-if(skiaContent,0-1,0-45000) == linear-size-1a.html linear-size-1-ref.html
== linear-stops-1a.html linear-stops-1-ref.html
== linear-stops-1b.html linear-stops-1-ref.html
@ -47,8 +47,8 @@ fuzzy-if(Android,0-8,0-771) == radial-shape-farthest-corner-1a.html radial-shape
fails-if(gtkWidget&&/x86_64-/.test(xulRuntime.XPCOMABI)) fuzzy(0-1,0-1622) fuzzy-if(cocoaWidget,0-2,0-41281) fuzzy-if(Android,0-8,0-1091) fuzzy-if(skiaContent,0-2,0-500) == radial-shape-farthest-corner-1b.html radial-shape-farthest-corner-1-ref.html
fuzzy-if(Android,0-17,0-13320) == radial-shape-farthest-side-1a.html radial-shape-farthest-side-1-ref.html
fuzzy-if(Android,0-17,0-13320) == radial-shape-farthest-side-1b.html radial-shape-farthest-side-1-ref.html
fuzzy-if(webrender,0-2,0-26) == radial-size-1a.html radial-size-1-ref.html
fuzzy-if(webrender,0-1,0-26) == radial-size-1b.html radial-size-1-ref.html
fuzzy-if(webrender,0-2,0-12) == radial-size-1a.html radial-size-1-ref.html
fuzzy-if(webrender,0-1,0-15) == radial-size-1b.html radial-size-1-ref.html
fuzzy-if(Android,0-4,0-248) == radial-zero-length-1a.html radial-zero-length-1-ref.html
fuzzy-if(Android,0-4,0-248) == radial-zero-length-1b.html radial-zero-length-1-ref.html
fuzzy-if(Android,0-4,0-248) == radial-zero-length-1c.html radial-zero-length-1-ref.html

View File

@ -2,6 +2,6 @@ include input/reftest.list
include textarea/reftest.list
fuzzy-if(skiaContent,0-1,0-4) == css-restrictions.html css-restrictions-ref.html
fuzzy-if(gtkWidget,255-255,1376-1881) == css-simple-styling.html css-simple-styling-ref.html # gtkWidget, Bug 1600749
fuzzy-if(gtkWidget,255-255,1376-1869) == css-simple-styling.html css-simple-styling-ref.html # gtkWidget, Bug 1600749
!= css-background.html css-background-ref.html
fuzzy-if(skiaContent,0-1,0-180) == ignore-pseudo-class.html ignore-pseudo-class-ref.html

View File

@ -12,7 +12,7 @@ fuzzy-if(webrender&&winWidget,117-129,47-54) == element-paint-simple.html elemen
== element-paint-recursion.html element-paint-recursion-ref.html
== element-paint-continuation.html element-paint-continuation-ref.html
== element-paint-transform-01.html element-paint-transform-01-ref.html
random-if(d2d) fuzzy-if(webrender,255-255,39-42) == element-paint-transform-02.html element-paint-transform-02-ref.html # bug 587133
random-if(d2d) fuzzy-if(webrender,255-255,39-39) == element-paint-transform-02.html element-paint-transform-02-ref.html # bug 587133
fuzzy-if(d2d&&/^Windows\x20NT\x206\.1/.test(http.oscpu),0-16,0-90) == element-paint-background-size-01.html element-paint-background-size-01-ref.html
== element-paint-background-size-02.html element-paint-background-size-02-ref.html
fuzzy-if(skiaContent,0-255,0-4) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == element-paint-transform-repeated.html element-paint-transform-repeated-ref.html # Bug 1475907

View File

@ -40,7 +40,7 @@ fuzzy-if(Android,0-4,0-810) == containing-block-1.html containing-block-1-ref.ht
== inline-1.html inline-1-ref.html
== inline-2.html inline-2-ref.html
fuzzy-if(OSX,0-99,0-210) == inline-3.html inline-3-ref.html
skip-if(!asyncPan) fuzzy-if(gtkWidget&&webrender&&swgl,1-1,3-3) == inline-4.html inline-4-ref.html
skip-if(!asyncPan) == inline-4.html inline-4-ref.html
== column-contain-1a.html column-contain-1-ref.html
== column-contain-1b.html column-contain-1-ref.html
== column-contain-2.html column-contain-2-ref.html
@ -50,6 +50,6 @@ fuzzy-if(Android,0-8,0-630) fuzzy-if(OSX,0-1,0-11) fuzzy-if(skiaContent,0-1,0-22
== block-in-inline-continuations.html block-in-inline-continuations-ref.html
== iframe-1.html iframe-1-ref.html
== transformed-1.html transformed-1-ref.html
fuzzy-if(Android,0-4,0-4) fuzzy-if(webrender&&gtkWidget,16-17,28-32) fuzzy-if(webrender&&cocoaWidget,8-8,37-37) skip-if(!asyncPan) == transformed-2.html transformed-2-ref.html # Bug 1604644
skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&&gtkWidget,29-30,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) == nested-sticky-1.html nested-sticky-1-ref.html # Bug 1604644
skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&&gtkWidget,29-30,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),0-4,0-104) == nested-sticky-2.html nested-sticky-2-ref.html # Bug 1604644
fuzzy-if(Android,0-4,0-4) fuzzy-if(webrender&&gtkWidget,17-17,32-32) fuzzy-if(webrender&&cocoaWidget,8-8,37-37) skip-if(!asyncPan) == transformed-2.html transformed-2-ref.html # Bug 1604644
skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&&gtkWidget,30-30,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) == nested-sticky-1.html nested-sticky-1-ref.html # Bug 1604644
skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&&gtkWidget,30-30,32-32) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),0-4,0-104) == nested-sticky-2.html nested-sticky-2-ref.html # Bug 1604644

View File

@ -108,7 +108,7 @@ fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),0-2,0-25) fuzzy-if(webrender
== feFlood-color-01.svg pass.svg
fuzzy-if(webrender,20-21,5622-5646) == feGaussianBlur-alpha-01.svg feGaussianBlur-alpha-01-ref.svg
fuzzy-if(webrender,20-21,5624-5646) == feGaussianBlur-alpha-01.svg feGaussianBlur-alpha-01-ref.svg
== feMorphology-radius-negative-01.svg pass.svg
== feMorphology-radius-negative-02.svg pass.svg

View File

@ -14,7 +14,7 @@
== clip-path-polygon-010.html clip-path-stripes-001-ref.html
== clip-path-polygon-011.html clip-path-stripes-001-ref.html
== clip-path-polygon-012.html clip-path-stripes-001-ref.html
fuzzy-if(skiaContent,0-1,0-20) fuzzy-if(webrender&&gtkWidget&&!swgl,8-8,20-20) fails-if(webrender&&!gtkWidget) == clip-path-polygon-013.html clip-path-stripes-003-ref.html
fuzzy-if(skiaContent,0-1,0-20) fuzzy-if(webrender&&gtkWidget,8-8,20-20) fails-if(webrender&&!gtkWidget) == clip-path-polygon-013.html clip-path-stripes-003-ref.html
fuzzy-if(webrender,35-70,699-715) == clip-path-circle-001.html clip-path-circle-001-ref.html
fuzzy-if(webrender,35-70,699-715) == clip-path-circle-002.html clip-path-circle-001-ref.html

View File

@ -503,7 +503,6 @@ function BuildConditionSandbox(aURL) {
sandbox.advancedLayers =
g.windowUtils.usingAdvancedLayers == true;
sandbox.layerChecksEnabled = !sandbox.webrender;
sandbox.swgl = sandbox.webrender && prefs.getBoolPref("gfx.webrender.software", false);
sandbox.retainedDisplayList =
prefs.getBoolPref("layout.display-list.retain");

View File

@ -43,10 +43,8 @@ nsstring-gtest = { path = "../../../../xpcom/rust/gtest/nsstring" }
xpcom-gtest = { path = "../../../../xpcom/rust/gtest/xpcom" }
gkrust-shared = { path = "../../rust/shared" }
gecko-fuzz-targets = { path = "../../../../tools/fuzzing/rust", optional = true }
# Workarounds for https://github.com/rust-lang/rust/issues/58393
# Workaround for https://github.com/rust-lang/rust/issues/58393
mozglue-static = { path = "../../../../mozglue/static/rust" }
swgl = { path = "../../../../gfx/wr/swgl" }
[lib]
path = "lib.rs"

View File

@ -40,10 +40,8 @@ with_dbus = ["gkrust-shared/with_dbus"]
[dependencies]
gkrust-shared = { path = "shared" }
mozilla-central-workspace-hack = { path = "../../../build/workspace-hack" }
# Workarounds for https://github.com/rust-lang/rust/issues/58393
# Workaround for https://github.com/rust-lang/rust/issues/58393
mozglue-static = { path = "../../../mozglue/static/rust" }
swgl = { path = "../../../gfx/wr/swgl" }
[dev-dependencies]
stylo_tests = { path = "../../../servo/ports/geckolib/tests/" }