From 38cd82e1946924c229ce904ab8a24f2185e07b1b Mon Sep 17 00:00:00 2001 From: Cosmin Sabou Date: Wed, 5 Aug 2020 04:52:20 +0300 Subject: [PATCH] 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) --- Cargo.lock | 2 - dom/media/test/reftest/reftest.list | 2 +- gfx/layers/apz/test/reftest/reftest.list | 10 +- gfx/tests/reftest/reftest.list | 2 +- gfx/wr/swgl/src/gl.cc | 392 +++++++++--------- gfx/wr/swgl/src/swgl_fns.rs | 1 - gfx/wr/webrender/src/composite.rs | 2 +- gfx/wr/webrender/src/device/gl.rs | 2 +- gfx/wr/webrender/src/frame_builder.rs | 2 +- gfx/wr/webrender/src/gpu_types.rs | 21 +- image/test/reftest/downscaling/reftest.list | 6 +- layout/reftests/async-scrolling/reftest.list | 18 +- layout/reftests/border-image/reftest.list | 8 +- layout/reftests/box-shadow/reftest.list | 2 +- layout/reftests/bugs/reftest.list | 12 +- layout/reftests/css-gradients/reftest.list | 6 +- layout/reftests/css-placeholder/reftest.list | 2 +- layout/reftests/image-element/reftest.list | 2 +- layout/reftests/position-sticky/reftest.list | 8 +- layout/reftests/svg/filters/reftest.list | 2 +- .../svg-integration/clip-path/reftest.list | 2 +- layout/tools/reftest/manifest.jsm | 1 - toolkit/library/gtest/rust/Cargo.toml | 4 +- toolkit/library/rust/Cargo.toml | 4 +- 24 files changed, 254 insertions(+), 259 deletions(-) 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/" }