4311f01661
- Moves CPU feature detection to its own file. - Cleans up some redundant feature detection scattered around core/ and opts/. - Can now detect a few new CPU features: * F16C -> Intel f16<->f32 instructions, added between AVX and AVX2 * FMA -> Intel FMA instructions, added at the same time as AVX2 * VFP_FP16 -> ARM f16<->f32 instructions, quite common * NEON_FMA -> ARM FMA instructions, also quite common * SSE and SSE3... why not? This new internal API makes it very cheap to do fine-grained runtime CPU feature detection. Redundant calls to SkCpu::Supports() should be eliminated and it's hoistable out of loops. It compiles away entirely when we have the appropriate instructions available at compile time. This means we can call it to guard even a little snippet of 1 or 2 instructions right where needed and let inlining hoist the check (if any at all) up to somewhere that doesn't hurt performance. I've explained how I made this work in the private section of the new header. Once this lands and bakes a bit, I'll start following up with CLs to use it more and to add a bunch of those little 1-2 instruction snippets we've been wanting, e.g. cvtps2ph, cvtph2ps, ptest, pmulld, pmovzxbd, blendvps, pshufb, roundps (for floor) on x86, and vcvt.f32.f16, vcvt.f16.f32 on ARM. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1890483002 CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Committed: https://skia.googlesource.com/skia/+/872ea29357439f05b1f6995dd300fc054733e607 Review URL: https://codereview.chromium.org/1890483002
125 lines
3.5 KiB
Python
125 lines
3.5 KiB
Python
# Copyright 2015 Google Inc.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
# Core Skia library code.
|
|
{
|
|
'targets': [
|
|
{
|
|
'target_name': 'core',
|
|
'product_name': 'skia_core',
|
|
'type': 'static_library',
|
|
'standalone_static_library': 1,
|
|
'msvs_guid': 'B7760B5E-BFA8-486B-ACFD-49E3A6DE8E76',
|
|
|
|
'includes': [
|
|
'core.gypi',
|
|
],
|
|
|
|
'include_dirs': [
|
|
'../include/c',
|
|
'../include/config',
|
|
'../include/core',
|
|
'../include/pathops',
|
|
'../include/ports',
|
|
'../include/private',
|
|
'../include/utils',
|
|
'../include/images',
|
|
'../src/core',
|
|
'../src/sfnt',
|
|
'../src/image',
|
|
'../src/opts',
|
|
'../src/utils',
|
|
],
|
|
'sources': [
|
|
'core.gypi', # Makes the gypi appear in IDEs (but does not modify the build).
|
|
],
|
|
'msvs_disabled_warnings': [4244, 4267,4345, 4390, 4554, 4800],
|
|
'conditions': [
|
|
[ 'skia_os in ["linux", "freebsd", "openbsd", "solaris", "chromeos"]', {
|
|
'link_settings': {
|
|
'libraries': [
|
|
'-lpthread',
|
|
],
|
|
},
|
|
}],
|
|
[ 'skia_os == "mac"', {
|
|
'include_dirs': [
|
|
'../include/utils/mac',
|
|
],
|
|
'sources': [
|
|
'../include/utils/mac/SkCGUtils.h',
|
|
],
|
|
'link_settings': {
|
|
'libraries': [
|
|
'$(SDKROOT)/System/Library/Frameworks/ApplicationServices.framework',
|
|
],
|
|
},
|
|
}],
|
|
[ 'skia_os == "ios"', {
|
|
'include_dirs': [
|
|
'../include/utils/ios',
|
|
],
|
|
'sources': [
|
|
'../include/utils/mac/SkCGUtils.h',
|
|
],
|
|
'link_settings': {
|
|
'libraries': [
|
|
'$(SDKROOT)/System/Library/Frameworks/CoreFoundation.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/CoreGraphics.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/CoreText.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/UIKit.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/QuartzCore.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/OpenGLES.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/ImageIO.framework',
|
|
'$(SDKROOT)/System/Library/Frameworks/MobileCoreServices.framework',
|
|
],
|
|
},
|
|
}],
|
|
[ 'skia_os == "win"', {
|
|
'include_dirs': [
|
|
'config/win',
|
|
],
|
|
}],
|
|
[ 'skia_os == "android"', {
|
|
'dependencies': [
|
|
'android_deps.gyp:cpu_features',
|
|
],
|
|
}],
|
|
['skia_gpu == 1', {
|
|
'include_dirs': [
|
|
'../include/gpu',
|
|
'../src/gpu',
|
|
],
|
|
}],
|
|
],
|
|
'direct_dependent_settings': {
|
|
'include_dirs': [
|
|
'../include/c',
|
|
'../include/config',
|
|
'../include/core',
|
|
'../include/pathops',
|
|
],
|
|
'conditions': [
|
|
[ 'skia_os == "mac"', {
|
|
'include_dirs': [
|
|
'../include/utils/mac',
|
|
],
|
|
}],
|
|
[ 'skia_os == "ios"', {
|
|
'include_dirs': [
|
|
'../include/utils/ios',
|
|
],
|
|
}],
|
|
[ 'skia_os == "win"', {
|
|
'include_dirs': [
|
|
'config/win',
|
|
],
|
|
}],
|
|
],
|
|
},
|
|
},
|
|
],
|
|
}
|