summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2020-04-17 11:34:25 +0200
committerLuboš Luňák <l.lunak@collabora.com>2020-04-20 11:16:01 +0200
commit647499ef8151d9383983f89230a970edcb44b5bb (patch)
tree83c9dfc573b80aeb8eef5307e0838833a1e74707 /external
parent68531e459e7a922319e6bfe8b7a5282ba0320182 (diff)
prefer building Skia with Clang if possible (tdf#131697)
I.e. try to find and use Clang even if the default compiler is something else. Skia is optimized to be built with Clang(-cl) and in CPU-based raster mode some operations are several times slower if built with something else (e.g. fmax/fmin do not get optimized to inline assembly). It is enough to select Clang to be installed in the MSVS installer. At this point it unclear how to handle release binaries, if it should work this way and enforced, or maybe Clang could be used for building everything, or maybe some other way. Change-Id: I6b95a0f2d5cbf176942d9e01136990b14be6dba8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92415 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'external')
-rw-r--r--external/skia/Library_skia.mk3
-rw-r--r--external/skia/UnpackedTarball_skia.mk2
-rw-r--r--external/skia/fix-sse.patch.123
-rw-r--r--external/skia/msvc-vectorcall-sse.patch.125
4 files changed, 26 insertions, 27 deletions
diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk
index 747556f2b0e6..bc653786bf4b 100644
--- a/external/skia/Library_skia.mk
+++ b/external/skia/Library_skia.mk
@@ -13,7 +13,8 @@ $(eval $(call gb_Library_set_warnings_disabled,skia))
$(eval $(call gb_Library_use_unpacked,skia,skia))
-$(eval $(call gb_Library_set_precompiled_header,skia,external/skia/inc/pch/precompiled_skia))
+$(eval $(call gb_Library_use_clang,skia))
+$(eval $(call gb_Library_set_clang_precompiled_header,skia,external/skia/inc/pch/precompiled_skia))
$(eval $(call gb_Library_add_defs,skia,\
-DSKIA_IMPLEMENTATION=1 \
diff --git a/external/skia/UnpackedTarball_skia.mk b/external/skia/UnpackedTarball_skia.mk
index 82fdbc433ece..e0841e432daa 100644
--- a/external/skia/UnpackedTarball_skia.mk
+++ b/external/skia/UnpackedTarball_skia.mk
@@ -23,7 +23,7 @@ skia_patches := \
Wdeprecated-copy-dtor.patch.0 \
fix-msvc.patch.1 \
fix-gcc-x86.patch.1 \
- msvc-vectorcall-sse.patch.1 \
+ fix-sse.patch.1 \
clang11-flax-vector-conversion.patch.0 \
clang-attributes-warning.patch.1 \
fontconfig-get-typeface.patch.0 \
diff --git a/external/skia/fix-sse.patch.1 b/external/skia/fix-sse.patch.1
new file mode 100644
index 000000000000..8a731725e488
--- /dev/null
+++ b/external/skia/fix-sse.patch.1
@@ -0,0 +1,23 @@
+--- a/src/opts/SkRasterPipeline_opts.h
++++ b/src/opts/SkRasterPipeline_opts.h
+@@ -1047,7 +1047,7 @@ static const size_t N = sizeof(F) / sizeof(float);
+ // TODO: crashes during compilation :(
+ #define ABI __attribute__((sysv_abi))
+ #define JUMPER_NARROW_STAGES 0
+-#elif defined(_MSC_VER)
++#elif defined(_MSC_VER) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
+ // Even if not vectorized, this lets us pass {r,g,b,a} as registers,
+ // instead of {b,a} on the stack. Narrow stages work best for __vectorcall.
+ #define ABI __vectorcall
+--- a/include/private/SkVx.h
++++ b/include/private/SkVx.h
+@@ -515,9 +515,6 @@ static inline Vec<N,uint8_t> approx_scale(const Vec<N,uint8_t>& x, const Vec<N,u
+ static inline Vec<4,float> rcp(const Vec<4,float>& x) {
+ return bit_pun<Vec<4,float>>(_mm_rcp_ps(bit_pun<__m128>(x)));
+ }
+- static inline Vec<4,int> lrint(const Vec<4,float>& x) {
+- return bit_pun<Vec<4,int>>(_mm_cvtps_epi32(bit_pun<__m128>(x)));
+- }
+
+ static inline Vec<2,float> sqrt(const Vec<2,float>& x) {
+ return shuffle<0,1>( sqrt(shuffle<0,1,0,1>(x)));
diff --git a/external/skia/msvc-vectorcall-sse.patch.1 b/external/skia/msvc-vectorcall-sse.patch.1
deleted file mode 100644
index f06dca41cff3..000000000000
--- a/external/skia/msvc-vectorcall-sse.patch.1
+++ /dev/null
@@ -1,25 +0,0 @@
-From 9a75d6249ed5c5eff36d70db2a9b87000437fc09 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= <l.lunak@centrum.cz>
-Date: Mon, 13 Jan 2020 14:34:12 +0100
-Subject: [PATCH] MSVC's __vectorcall does not work with /arch:SSE
-
----
- src/opts/SkRasterPipeline_opts.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h
-index 692530828f..7f2b473d82 100644
---- a/src/opts/SkRasterPipeline_opts.h
-+++ b/src/opts/SkRasterPipeline_opts.h
-@@ -1047,7 +1047,7 @@ static const size_t N = sizeof(F) / sizeof(float);
- // TODO: crashes during compilation :(
- #define ABI __attribute__((sysv_abi))
- #define JUMPER_NARROW_STAGES 0
--#elif defined(_MSC_VER)
-+#elif defined(_MSC_VER) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
- // Even if not vectorized, this lets us pass {r,g,b,a} as registers,
- // instead of {b,a} on the stack. Narrow stages work best for __vectorcall.
- #define ABI __vectorcall
---
-2.16.4
-