diff --git a/Cargo.lock b/Cargo.lock index 72dc385ce834..41930defe674 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", ] diff --git a/dom/media/test/reftest/reftest.list b/dom/media/test/reftest/reftest.list index c23f5940d108..63b69cb1661e 100644 --- a/dom/media/test/reftest/reftest.list +++ b/dom/media/test/reftest/reftest.list @@ -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 diff --git a/gfx/layers/apz/test/reftest/reftest.list b/gfx/layers/apz/test/reftest/reftest.list index 4eaa966cdf28..0c4f5fd5c8b9 100644 --- a/gfx/layers/apz/test/reftest/reftest.list +++ b/gfx/layers/apz/test/reftest/reftest.list @@ -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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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 diff --git a/gfx/tests/reftest/reftest.list b/gfx/tests/reftest/reftest.list index 52199268d91d..a79c68a2f0bf 100644 --- a/gfx/tests/reftest/reftest.list +++ b/gfx/tests/reftest/reftest.list @@ -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 diff --git a/gfx/wr/swgl/src/gl.cc b/gfx/wr/swgl/src/gl.cc index 0cd9e038689a..2ae439097d8f 100644 --- a/gfx/wr/swgl/src/gl.cc +++ b/gfx/wr/swgl/src/gl.cc @@ -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 - void on_erase(T*, ...) {} - template - void on_erase(T* o, decltype(&T::on_erase)) { + template void on_erase(T*, ...) {} + template 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(va, src), - load_attrib_scalar(va, src + va.stride), - load_attrib_scalar( - va, src + va.stride * 2 + (count > 3 ? va.stride : 0)), - load_attrib_scalar(va, src + va.stride * 2)}; + attrib = (T){ + load_attrib_scalar(va, src), + load_attrib_scalar(va, src + va.stride), + load_attrib_scalar(va, src + va.stride * 2 + + (count > 3 ? va.stride : 0)), + load_attrib_scalar(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 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.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.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 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, &ctx->scissor); clear_buffer(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(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(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(buf); commit_output(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(buf, depth, span, [=] { return z; }); + draw_span(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(buf, depth, span, [=] { return z; }); + draw_span(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(nump, p_clip, interp_clip, colortex, layer, - depthtex, clipRect); + draw_perspective_spans(nump, p_clip, interp_clip, colortex, + layer, depthtex, clipRect); } else if (colortex.internal_format == GL_R8) { - draw_perspective_spans(nump, p_clip, interp_clip, colortex, layer, - depthtex, clipRect); + draw_perspective_spans(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 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); diff --git a/gfx/wr/swgl/src/swgl_fns.rs b/gfx/wr/swgl/src/swgl_fns.rs index 0d3c7747ad0e..47041a9d2479 100644 --- a/gfx/wr/swgl/src/swgl_fns.rs +++ b/gfx/wr/swgl/src/swgl_fns.rs @@ -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), }; diff --git a/gfx/wr/webrender/src/composite.rs b/gfx/wr/webrender/src/composite.rs index b4e36b68d60f..c9a08851b266 100644 --- a/gfx/wr/webrender/src/composite.rs +++ b/gfx/wr/webrender/src/composite.rs @@ -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, diff --git a/gfx/wr/webrender/src/device/gl.rs b/gfx/wr/webrender/src/device/gl.rs index 5bb78b0f436a..8a5ee7439c3a 100644 --- a/gfx/wr/webrender/src/device/gl.rs +++ b/gfx/wr/webrender/src/device/gl.rs @@ -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), ); } diff --git a/gfx/wr/webrender/src/frame_builder.rs b/gfx/wr/webrender/src/frame_builder.rs index 0d28126f33c9..a4fa2e2b871c 100644 --- a/gfx/wr/webrender/src/frame_builder.rs +++ b/gfx/wr/webrender/src/frame_builder.rs @@ -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; diff --git a/gfx/wr/webrender/src/gpu_types.rs b/gfx/wr/webrender/src/gpu_types.rs index a51faee1ed2d..8e85b4dff062 100644 --- a/gfx/wr/webrender/src/gpu_types.rs +++ b/gfx/wr/webrender/src/gpu_types.rs @@ -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 } diff --git a/image/test/reftest/downscaling/reftest.list b/image/test/reftest/downscaling/reftest.list index c5e4a17aa87e..8665c70e38d4 100644 --- a/image/test/reftest/downscaling/reftest.list +++ b/image/test/reftest/downscaling/reftest.list @@ -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 diff --git a/layout/reftests/async-scrolling/reftest.list b/layout/reftests/async-scrolling/reftest.list index 389fed5051f4..2b752a6ca31b 100644 --- a/layout/reftests/async-scrolling/reftest.list +++ b/layout/reftests/async-scrolling/reftest.list @@ -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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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 diff --git a/layout/reftests/border-image/reftest.list b/layout/reftests/border-image/reftest.list index c71ca3fd8a00..03c44efa0122 100644 --- a/layout/reftests/border-image/reftest.list +++ b/layout/reftests/border-image/reftest.list @@ -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 diff --git a/layout/reftests/box-shadow/reftest.list b/layout/reftests/box-shadow/reftest.list index df17ba523b36..a97fa2aba29c 100644 --- a/layout/reftests/box-shadow/reftest.list +++ b/layout/reftests/box-shadow/reftest.list @@ -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. diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list index 0d8efc4cd813..475ad15f516a 100644 --- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -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 diff --git a/layout/reftests/css-gradients/reftest.list b/layout/reftests/css-gradients/reftest.list index 63905106570d..7972bc3aca98 100644 --- a/layout/reftests/css-gradients/reftest.list +++ b/layout/reftests/css-gradients/reftest.list @@ -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&>kWidget&&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 diff --git a/layout/reftests/css-placeholder/reftest.list b/layout/reftests/css-placeholder/reftest.list index c8862a03d36d..20b65919e202 100644 --- a/layout/reftests/css-placeholder/reftest.list +++ b/layout/reftests/css-placeholder/reftest.list @@ -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 diff --git a/layout/reftests/image-element/reftest.list b/layout/reftests/image-element/reftest.list index a9c006b1d1e1..4800010a1d5f 100644 --- a/layout/reftests/image-element/reftest.list +++ b/layout/reftests/image-element/reftest.list @@ -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 diff --git a/layout/reftests/position-sticky/reftest.list b/layout/reftests/position-sticky/reftest.list index 25f7f79b510b..6a843f052271 100644 --- a/layout/reftests/position-sticky/reftest.list +++ b/layout/reftests/position-sticky/reftest.list @@ -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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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&>kWidget,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 diff --git a/layout/reftests/svg/filters/reftest.list b/layout/reftests/svg/filters/reftest.list index 4d411b61da9a..fe4b2444a8e8 100644 --- a/layout/reftests/svg/filters/reftest.list +++ b/layout/reftests/svg/filters/reftest.list @@ -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 diff --git a/layout/reftests/svg/svg-integration/clip-path/reftest.list b/layout/reftests/svg/svg-integration/clip-path/reftest.list index aa84bff74200..c035b14a4323 100644 --- a/layout/reftests/svg/svg-integration/clip-path/reftest.list +++ b/layout/reftests/svg/svg-integration/clip-path/reftest.list @@ -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&>kWidget&&!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&>kWidget,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 diff --git a/layout/tools/reftest/manifest.jsm b/layout/tools/reftest/manifest.jsm index 46390bc1ab5d..4682bb02a648 100644 --- a/layout/tools/reftest/manifest.jsm +++ b/layout/tools/reftest/manifest.jsm @@ -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"); diff --git a/toolkit/library/gtest/rust/Cargo.toml b/toolkit/library/gtest/rust/Cargo.toml index 600956ce4817..b4cf736ad534 100644 --- a/toolkit/library/gtest/rust/Cargo.toml +++ b/toolkit/library/gtest/rust/Cargo.toml @@ -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" diff --git a/toolkit/library/rust/Cargo.toml b/toolkit/library/rust/Cargo.toml index 1dd8d566e2da..4187a0030891 100644 --- a/toolkit/library/rust/Cargo.toml +++ b/toolkit/library/rust/Cargo.toml @@ -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/" }