SkPostConfig.h revision 7fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdc
18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkPostConfig_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkPostConfig_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_WINCE) 127fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_BUILD_FOR_WIN 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_DEBUG) && defined(SK_RELEASE) 167fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_DEBUG and SK_RELEASE" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_DEBUG) && !defined(SK_RELEASE) 187fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "must define either SK_DEBUG or SK_RELEASE" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 217fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com#if defined(SK_SUPPORT_UNITTEST) && !defined(SK_DEBUG) 227fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "can't have unittests without debug" 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_SCALAR_IS_FIXED) && defined(SK_SCALAR_IS_FLOAT) 267fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_SCALAR_IS_FIXED and SK_SCALAR_IS_FLOAT" 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_SCALAR_IS_FIXED) && !defined(SK_SCALAR_IS_FLOAT) 287fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SCALAR_IS_FLOAT 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 317fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 327fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * Matrix calculations may be float or double. 337fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * The default is double, as that is faster given our impl uses doubles 347fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * for intermediate calculations. 357fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 365596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#if defined(SK_MSCALAR_IS_DOUBLE) && defined(SK_MSCALAR_IS_FLOAT) 377fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_MSCALAR_IS_DOUBLE and SK_MSCALAR_IS_FLOAT" 385596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#elif !defined(SK_MSCALAR_IS_DOUBLE) && !defined(SK_MSCALAR_IS_FLOAT) 397fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_MSCALAR_IS_DOUBLE 405596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#endif 415596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN) 437fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_CPU_LENDIAN and SK_CPU_BENDIAN" 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN) 457fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN" 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 487fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 497fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * Ensure the port has defined all of SK_X32_SHIFT, or none of them. 507fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_A32_SHIFT 527fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if !defined(SK_R32_SHIFT) || !defined(SK_G32_SHIFT) || !defined(SK_B32_SHIFT) 537fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "all or none of the 32bit SHIFT amounts must be defined" 547fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 567fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(SK_R32_SHIFT) || defined(SK_G32_SHIFT) || defined(SK_B32_SHIFT) 577fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "all or none of the 32bit SHIFT amounts must be defined" 587fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 6104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SK_HAS_COMPILER_FEATURE) 627fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(__has_feature) 637fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_HAS_COMPILER_FEATURE(x) __has_feature(x) 647fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 657fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_HAS_COMPILER_FEATURE(x) 0 667fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 6704423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 6804423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 695ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#if !defined(SK_ATTRIBUTE) 707fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(__clang__) || defined(__GNUC__) 717fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ATTRIBUTE(attr) __attribute__((attr)) 727fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 737fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ATTRIBUTE(attr) 747fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 755ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#endif 765ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com 77cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#if !defined(SK_SUPPORT_GPU) 787fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SUPPORT_GPU 1 79cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#endif 80cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com 8104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com/** 8204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * The clang static analyzer likes to know that when the program is not 8304423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * expected to continue (crash, assertion failure, etc). It will notice that 8404423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * some combination of parameters lead to a function call that does not return. 8504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * It can then make appropriate assumptions about the parameters in code 8604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * executed only if the non-returning function was *not* called. 8704423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com */ 8804423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SkNO_RETURN_HINT) 897fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if SK_HAS_COMPILER_FEATURE(attribute_analyzer_noreturn) 907fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com static inline void SkNO_RETURN_HINT() __attribute__((analyzer_noreturn)); 917fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com static inline void SkNO_RETURN_HINT() {} 927fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 937fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNO_RETURN_HINT() do {} while (false) 947fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 9504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 9604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 97fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#if defined(SK_ZLIB_INCLUDE) && defined(SK_SYSTEM_ZLIB) 987fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_ZLIB_INCLUDE and SK_SYSTEM_ZLIB" 99fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#elif defined(SK_ZLIB_INCLUDE) || defined(SK_SYSTEM_ZLIB) 1007fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_HAS_ZLIB 101fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#endif 102fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkNEW 1067fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW(type_name) (new type_name) 1077fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_ARGS(type_name, args) (new type_name args) 1087fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_ARRAY(type_name, count) (new type_name[(count)]) 1097fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_PLACEMENT(buf, type_name) (new (buf) type_name) 1107fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_PLACEMENT_ARGS(buf, type_name, args) (new (buf) type_name args) 1117fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkDELETE(obj) (delete (obj)) 1127fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkDELETE_ARRAY(array) (delete[] (array)) 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_CRASH 1167fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if 1 // set to 0 for infinite loop, which can help connecting gdb 1177fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_CRASH() do { SkNO_RETURN_HINT(); *(int *)(uintptr_t)0xbbadbeef = 0; } while (false) 1187fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 1197fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_CRASH() do { SkNO_RETURN_HINT(); } while (true) 1207fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1257fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 1267fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * SK_ENABLE_INST_COUNT controlls printing how many reference counted objects 1277fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * are still held on exit. 1287fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * Defaults to 1 in DEBUG and 0 in RELEASE. 1297fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * FIXME: currently always 0, since it fails if multiple threads run at once 1307fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * (see skbug.com/1219 ). 1317fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 1324e23068b374023d43c4c725138d523721d975892bsalomon@google.com#ifndef SK_ENABLE_INST_COUNT 1337fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_DEBUG 1347fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ENABLE_INST_COUNT 0 1357fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 1367fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ENABLE_INST_COUNT 0 1377fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1384e23068b374023d43c4c725138d523721d975892bsalomon@google.com#endif 1394e23068b374023d43c4c725138d523721d975892bsalomon@google.com 1404e23068b374023d43c4c725138d523721d975892bsalomon@google.com/////////////////////////////////////////////////////////////////////////////// 1414e23068b374023d43c4c725138d523721d975892bsalomon@google.com 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_SOFTWARE_FLOAT) && defined(SK_SCALAR_IS_FLOAT) 1437fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // if this is defined, we convert floats to 2s compliment ints for compares. 1447fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_SCALAR_SLOW_COMPARES 1457fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SCALAR_SLOW_COMPARES 1467fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1477fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_USE_FLOATBITS 1487fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_USE_FLOATBITS 1497fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_BUILD_FOR_WIN 1537fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef WIN32_LEAN_AND_MEAN 1547fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define WIN32_LEAN_AND_MEAN 1557fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 1567fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1577fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef NOMINMAX 1587fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define NOMINMAX 1597fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define NOMINMAX_WAS_LOCALLY_DEFINED 1607fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1617fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1627fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <windows.h> 1637fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1647fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 1657fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 1667fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef WIN32_LEAN_AND_MEAN 1677fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1687fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef NOMINMAX_WAS_LOCALLY_DEFINED 1697fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef NOMINMAX_WAS_LOCALLY_DEFINED 1707fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef NOMINMAX 1717fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1727fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1737fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_DEBUGBREAK 1747fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_DEBUGBREAK(p) do { if (!(p)) { SkNO_RETURN_HINT(); __debugbreak(); }} while (false) 1757fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1767fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1777fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_A32_SHIFT 1787fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_A32_SHIFT 24 1797fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_R32_SHIFT 16 1807fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_G32_SHIFT 8 1817fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_B32_SHIFT 0 1827fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1837fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 1857fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_DEBUG 1867fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <stdio.h> 1877fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_DEBUGBREAK 1887fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_DEBUGBREAK(cond) do { if (cond) break; \ 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("%s:%d: failed assertion \"%s\"\n", \ 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com __FILE__, __LINE__, #cond); SK_CRASH(); } while (false) 1917fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1927fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1957fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 19627661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * We check to see if the SHIFT value has already been defined. 19727661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * if not, we define it ourself to some default values. We default to OpenGL 19827661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * order (in memory: r,g,b,a) 19927661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com */ 20027661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#ifndef SK_A32_SHIFT 2017fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_CPU_BENDIAN 2027fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_R32_SHIFT 24 2037fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_G32_SHIFT 16 2047fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_B32_SHIFT 8 2057fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_A32_SHIFT 0 2067fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 2077fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_R32_SHIFT 0 2087fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_G32_SHIFT 8 2097fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_B32_SHIFT 16 2107fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_A32_SHIFT 24 2117fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 21227661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#endif 21327661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com 214e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org/** 2152b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com * SkColor has well defined shift values, but SkPMColor is configurable. This 2162b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com * macro is a convenience that returns true if the shift values are equal while 2172b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com * ignoring the machine's endianness. 2182b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com */ 2192b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com#define SK_COLOR_MATCHES_PMCOLOR_BYTE_ORDER \ 2202b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com (SK_A32_SHIFT == 24 && SK_R32_SHIFT == 16 && SK_G32_SHIFT == 8 && SK_B32_SHIFT == 0) 2212b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com 2222b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com/** 223e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * SK_PMCOLOR_BYTE_ORDER can be used to query the byte order of SkPMColor at compile time. The 224e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * relationship between the byte order and shift values depends on machine endianness. If the shift 225e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * order is R=0, G=8, B=16, A=24 then ((char*)&pmcolor)[0] will produce the R channel on a little 226e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * endian machine and the A channel on a big endian machine. Thus, given those shifts values, 227e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * SK_PMCOLOR_BYTE_ORDER(R,G,B,A) will be true on a little endian machine and 228e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * SK_PMCOLOR_BYTE_ORDER(A,B,G,R) will be true on a big endian machine. 229e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org */ 230e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org#ifdef SK_CPU_BENDIAN 2317fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PMCOLOR_BYTE_ORDER(C0, C1, C2, C3) \ 232e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org (SK_ ## C3 ## 32_SHIFT == 0 && \ 233e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C2 ## 32_SHIFT == 8 && \ 234e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C1 ## 32_SHIFT == 16 && \ 235e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C0 ## 32_SHIFT == 24) 236e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org#else 2377fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PMCOLOR_BYTE_ORDER(C0, C1, C2, C3) \ 238e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org (SK_ ## C0 ## 32_SHIFT == 0 && \ 239e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C1 ## 32_SHIFT == 8 && \ 240e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C2 ## 32_SHIFT == 16 && \ 241e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C3 ## 32_SHIFT == 24) 242e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org#endif 243e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org 2445c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com////////////////////////////////////////////////////////////////////// 2455c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com 2460e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_MAC) 2477fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SkLONGLONG 2487fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_BUILD_FOR_WIN32 2497fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkLONGLONG __int64 2507fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 2517fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkLONGLONG long long 2527fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 2537fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 2540e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com#endif 2550e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com 2560e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com////////////////////////////////////////////////////////////////////////////////////////////// 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_BUILD_FOR_WINCE 2587fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <string.h> 2597fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <stdlib.h> 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2617fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define _CMNINTRIN_DECLARE_ONLY 2627fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include "cmnintrin.h" 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined SK_DEBUG && defined SK_BUILD_FOR_WIN32 2667fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef free 2677fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef free 2687fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 2697fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <crtdbg.h> 2707fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef free 2717fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 2727fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_DEBUGx 2737fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(SK_SIMULATE_FAILED_MALLOC) && defined(__cplusplus) 2747fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void * operator new( 2757fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com size_t cb, 2767fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nBlockUse, 2777fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com const char * szFileName, 2787fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nLine, 2797fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int foo 2807fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2817fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void * operator new[]( 2827fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com size_t cb, 2837fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nBlockUse, 2847fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com const char * szFileName, 2857fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nLine, 2867fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int foo 2877fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2887fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void operator delete( 2897fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void *pUserData, 2907fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int, const char*, int, int 2917fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2927fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void operator delete( 2937fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void *pUserData 2947fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2957fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void operator delete[]( void * p ); 2967fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__, 0) 2977fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 2987fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) 2997fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3007fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define new DEBUG_CLIENTBLOCK 3017fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 3027fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define DEBUG_CLIENTBLOCK 3037fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3061341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com////////////////////////////////////////////////////////////////////// 3071341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 3081341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com#ifndef SK_OVERRIDE 3097fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(_MSC_VER) 3107fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE override 3117fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# elif defined(__clang__) 3127fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // Using __attribute__((override)) on clang does not appear to always work. 3137fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // Clang defaults to C++03 and warns about using override. Squelch that. Intentionally no 3147fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // push/pop here so all users of SK_OVERRIDE ignore the warning too. This is like passing 3157fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // -Wno-c++11-extensions, except that GCC won't die (because it won't see this pragma). 3167fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# pragma clang diagnostic ignored "-Wc++11-extensions" 3177fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 3187fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if __has_feature(cxx_override_control) 3197fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE override 3207fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# elif defined(__has_extension) && __has_extension(cxx_override_control) 3217fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE override 3227fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3237fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3247fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_OVERRIDE 3257fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE 3267fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 329d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com////////////////////////////////////////////////////////////////////// 330d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 3315ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#if !defined(SK_UNUSED) 3327fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_UNUSED SK_ATTRIBUTE(unused) 3335ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#endif 3345ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com 3354469938e92d779dff05e745559e67907bbf21e78reed@google.com#if !defined(SK_ATTR_DEPRECATED) 3367fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // FIXME: we ignore msg for now... 3377fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ATTR_DEPRECATED(msg) SK_ATTRIBUTE(deprecated) 3384469938e92d779dff05e745559e67907bbf21e78reed@google.com#endif 3394469938e92d779dff05e745559e67907bbf21e78reed@google.com 3407fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 3417fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * If your judgment is better than the compiler's (i.e. you've profiled it), 3427fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * you can use SK_ALWAYS_INLINE to force inlining. E.g. 3437fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * inline void someMethod() { ... } // may not be inlined 3447fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * SK_ALWAYS_INLINE void someMethod() { ... } // should always be inlined 3457fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 3461950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com#if !defined(SK_ALWAYS_INLINE) 3471950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# if defined(SK_BUILD_FOR_WIN) 3481950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# define SK_ALWAYS_INLINE __forceinline 3491950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# else 3501950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# define SK_ALWAYS_INLINE SK_ATTRIBUTE(always_inline) inline 3511950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# endif 3521950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com#endif 3531950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com 3545ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com////////////////////////////////////////////////////////////////////// 3555ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com 356fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org#if defined(__clang__) || defined(__GNUC__) 3577fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PREFETCH(ptr) __builtin_prefetch(ptr) 3587fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_WRITE_PREFETCH(ptr) __builtin_prefetch(ptr, 1) 359fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org#else 3607fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PREFETCH(ptr) 3617fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_WRITE_PREFETCH(ptr) 362fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org#endif 363fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org 364fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org////////////////////////////////////////////////////////////////////// 3657fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com 3663a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_PRINTF_LIKE 3677fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(__clang__) || defined(__GNUC__) 3687fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PRINTF_LIKE(A, B) __attribute__((format(printf, (A), (B)))) 3697fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 3707fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PRINTF_LIKE(A, B) 3717fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3723a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3733a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3743a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3753a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3763a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_SIZE_T_SPECIFIER 3777fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(_MSC_VER) 3787fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SIZE_T_SPECIFIER "%Iu" 3797fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 3807fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SIZE_T_SPECIFIER "%zu" 3817fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3823a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3833a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3843a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3853a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 386d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#ifndef SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 3877fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1 388d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#endif 3897fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com 3907fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com#endif // SkPostConfig_DEFINED 391