SkPostConfig.h revision 4770a3b7a290ee5e44662b8dfbc0bc9196f00930
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 257fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 267fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * Matrix calculations may be float or double. 277fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * The default is double, as that is faster given our impl uses doubles 287fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * for intermediate calculations. 297fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 305596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#if defined(SK_MSCALAR_IS_DOUBLE) && defined(SK_MSCALAR_IS_FLOAT) 317fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_MSCALAR_IS_DOUBLE and SK_MSCALAR_IS_FLOAT" 325596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#elif !defined(SK_MSCALAR_IS_DOUBLE) && !defined(SK_MSCALAR_IS_FLOAT) 337fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_MSCALAR_IS_DOUBLE 345596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org#endif 355596a69e9f7884e3042bceba071c468dee52aa7fvollick@chromium.org 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN) 377fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_CPU_LENDIAN and SK_CPU_BENDIAN" 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#elif !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN) 397fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN" 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 427fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 437fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * Ensure the port has defined all of SK_X32_SHIFT, or none of them. 447fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_A32_SHIFT 467fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if !defined(SK_R32_SHIFT) || !defined(SK_G32_SHIFT) || !defined(SK_B32_SHIFT) 477fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "all or none of the 32bit SHIFT amounts must be defined" 487fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 507fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(SK_R32_SHIFT) || defined(SK_G32_SHIFT) || defined(SK_B32_SHIFT) 517fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "all or none of the 32bit SHIFT amounts must be defined" 527fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SK_HAS_COMPILER_FEATURE) 567fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(__has_feature) 577fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_HAS_COMPILER_FEATURE(x) __has_feature(x) 587fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 597fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_HAS_COMPILER_FEATURE(x) 0 607fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 6104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 6204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 635ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#if !defined(SK_ATTRIBUTE) 647fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(__clang__) || defined(__GNUC__) 657fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ATTRIBUTE(attr) __attribute__((attr)) 667fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 677fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ATTRIBUTE(attr) 687fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 695ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#endif 705ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com 71cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#if !defined(SK_SUPPORT_GPU) 727fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SUPPORT_GPU 1 73cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com#endif 74cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com 7504423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com/** 7604423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * The clang static analyzer likes to know that when the program is not 7704423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * expected to continue (crash, assertion failure, etc). It will notice that 7804423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * some combination of parameters lead to a function call that does not return. 7904423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * It can then make appropriate assumptions about the parameters in code 8004423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com * executed only if the non-returning function was *not* called. 8104423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com */ 8204423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#if !defined(SkNO_RETURN_HINT) 837fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if SK_HAS_COMPILER_FEATURE(attribute_analyzer_noreturn) 847fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com static inline void SkNO_RETURN_HINT() __attribute__((analyzer_noreturn)); 857fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com static inline void SkNO_RETURN_HINT() {} 867fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 877fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNO_RETURN_HINT() do {} while (false) 887fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 8904423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com#endif 9004423805455de868b1b468cfe4057cb77f74b6b0bsalomon@google.com 91fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#if defined(SK_ZLIB_INCLUDE) && defined(SK_SYSTEM_ZLIB) 927fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# error "cannot define both SK_ZLIB_INCLUDE and SK_SYSTEM_ZLIB" 93fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#elif defined(SK_ZLIB_INCLUDE) || defined(SK_SYSTEM_ZLIB) 947fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_HAS_ZLIB 95fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com#endif 96fffb2f1bda1982d451bc249743b8cc414995d6a8justinlin@google.com 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkNEW 1007fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW(type_name) (new type_name) 1017fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_ARGS(type_name, args) (new type_name args) 1027fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_ARRAY(type_name, count) (new type_name[(count)]) 1037fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_PLACEMENT(buf, type_name) (new (buf) type_name) 1047fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkNEW_PLACEMENT_ARGS(buf, type_name, args) (new (buf) type_name args) 1057fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkDELETE(obj) (delete (obj)) 1067fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SkDELETE_ARRAY(array) (delete[] (array)) 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_CRASH 1107fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if 1 // set to 0 for infinite loop, which can help connecting gdb 1117fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_CRASH() do { SkNO_RETURN_HINT(); *(int *)(uintptr_t)0xbbadbeef = 0; } while (false) 1127fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 1137fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_CRASH() do { SkNO_RETURN_HINT(); } while (true) 1147fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/////////////////////////////////////////////////////////////////////////////// 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1197fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 1207fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * SK_ENABLE_INST_COUNT controlls printing how many reference counted objects 1217fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * are still held on exit. 1227fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * Defaults to 1 in DEBUG and 0 in RELEASE. 1237fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 1244e23068b374023d43c4c725138d523721d975892bsalomon@google.com#ifndef SK_ENABLE_INST_COUNT 1257fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_DEBUG 1262ab1ba055536825552d6b49f0210c4e1531f02f0commit-bot@chromium.org// Only enabled for static builds, because instance counting relies on static 1272ab1ba055536825552d6b49f0210c4e1531f02f0commit-bot@chromium.org// variables in functions defined in header files. 1282ab1ba055536825552d6b49f0210c4e1531f02f0commit-bot@chromium.org# define SK_ENABLE_INST_COUNT !defined(SKIA_DLL) 1297fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 1307fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ENABLE_INST_COUNT 0 1317fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1324e23068b374023d43c4c725138d523721d975892bsalomon@google.com#endif 1334e23068b374023d43c4c725138d523721d975892bsalomon@google.com 1344e23068b374023d43c4c725138d523721d975892bsalomon@google.com/////////////////////////////////////////////////////////////////////////////// 1354e23068b374023d43c4c725138d523721d975892bsalomon@google.com 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_BUILD_FOR_WIN 1377fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef WIN32_LEAN_AND_MEAN 1387fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define WIN32_LEAN_AND_MEAN 1397fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 1407fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1417fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef NOMINMAX 1427fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define NOMINMAX 1437fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define NOMINMAX_WAS_LOCALLY_DEFINED 1447fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1457fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1467fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <windows.h> 1477fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1487fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 1497fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef WIN32_IS_MEAN_WAS_LOCALLY_DEFINED 1507fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef WIN32_LEAN_AND_MEAN 1517fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1527fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef NOMINMAX_WAS_LOCALLY_DEFINED 1537fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef NOMINMAX_WAS_LOCALLY_DEFINED 1547fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef NOMINMAX 1557fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1567fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1577fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_DEBUGBREAK 1587fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_DEBUGBREAK(p) do { if (!(p)) { SkNO_RETURN_HINT(); __debugbreak(); }} while (false) 1597fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1607fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1617fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_A32_SHIFT 1627fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_A32_SHIFT 24 1637fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_R32_SHIFT 16 1647fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_G32_SHIFT 8 1657fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_B32_SHIFT 0 1667fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1677fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 1697fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_DEBUG 1707fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <stdio.h> 1717fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_DEBUGBREAK 1727fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_DEBUGBREAK(cond) do { if (cond) break; \ 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("%s:%d: failed assertion \"%s\"\n", \ 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com __FILE__, __LINE__, #cond); SK_CRASH(); } while (false) 1757fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1767fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1797fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 18027661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * We check to see if the SHIFT value has already been defined. 18127661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * if not, we define it ourself to some default values. We default to OpenGL 18227661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com * order (in memory: r,g,b,a) 18327661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com */ 18427661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#ifndef SK_A32_SHIFT 1857fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_CPU_BENDIAN 1867fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_R32_SHIFT 24 1877fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_G32_SHIFT 16 1887fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_B32_SHIFT 8 1897fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_A32_SHIFT 0 1907fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 1917fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_R32_SHIFT 0 1927fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_G32_SHIFT 8 1937fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_B32_SHIFT 16 1947fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_A32_SHIFT 24 1957fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 19627661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com#endif 19727661181d757145d98f2dc3e02b88ee3fffce9e5bsalomon@google.com 198e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org/** 1992b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com * SkColor has well defined shift values, but SkPMColor is configurable. This 2002b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com * macro is a convenience that returns true if the shift values are equal while 2012b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com * ignoring the machine's endianness. 2022b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com */ 2032b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com#define SK_COLOR_MATCHES_PMCOLOR_BYTE_ORDER \ 2042b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com (SK_A32_SHIFT == 24 && SK_R32_SHIFT == 16 && SK_G32_SHIFT == 8 && SK_B32_SHIFT == 0) 2052b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com 2062b343cc2557aa7921fa8b04bf6800ebf37af186bdjsollen@google.com/** 207e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * SK_PMCOLOR_BYTE_ORDER can be used to query the byte order of SkPMColor at compile time. The 208e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * relationship between the byte order and shift values depends on machine endianness. If the shift 209e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-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 210e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * endian machine and the A channel on a big endian machine. Thus, given those shifts values, 211e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * SK_PMCOLOR_BYTE_ORDER(R,G,B,A) will be true on a little endian machine and 212e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org * SK_PMCOLOR_BYTE_ORDER(A,B,G,R) will be true on a big endian machine. 213e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org */ 214e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org#ifdef SK_CPU_BENDIAN 2157fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PMCOLOR_BYTE_ORDER(C0, C1, C2, C3) \ 216e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org (SK_ ## C3 ## 32_SHIFT == 0 && \ 217e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C2 ## 32_SHIFT == 8 && \ 218e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C1 ## 32_SHIFT == 16 && \ 219e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C0 ## 32_SHIFT == 24) 220e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org#else 2217fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PMCOLOR_BYTE_ORDER(C0, C1, C2, C3) \ 222e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org (SK_ ## C0 ## 32_SHIFT == 0 && \ 223e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C1 ## 32_SHIFT == 8 && \ 224e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C2 ## 32_SHIFT == 16 && \ 225e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org SK_ ## C3 ## 32_SHIFT == 24) 226e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org#endif 227e4657ed7e1f4ae5b1834b398724c718f21589ca3commit-bot@chromium.org 2285c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com////////////////////////////////////////////////////////////////////// 2295c80ea17d4e4a795bfaeb260fc27e952ba471f1dreed@android.com 23001c41a556e0ef0ae2338a1b5ae110a501e1ed0a8reed@google.com// TODO: rebaseline as needed so we can remove this flag entirely. 23101c41a556e0ef0ae2338a1b5ae110a501e1ed0a8reed@google.com// - all platforms have int64_t now 23201c41a556e0ef0ae2338a1b5ae110a501e1ed0a8reed@google.com// - we have slightly different fixed math results because of this check 23301c41a556e0ef0ae2338a1b5ae110a501e1ed0a8reed@google.com// since we don't define this for linux/android 2340e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_MAC) 2357fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SkLONGLONG 23601c41a556e0ef0ae2338a1b5ae110a501e1ed0a8reed@google.com# define SkLONGLONG int64_t 2377fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 2380e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com#endif 2390e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com 2400e6e8cc627242cc7e301401cfe112ba98a008101robertphillips@google.com////////////////////////////////////////////////////////////////////////////////////////////// 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SK_BUILD_FOR_WINCE 2427fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <string.h> 2437fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <stdlib.h> 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 2457fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define _CMNINTRIN_DECLARE_ONLY 2467fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include "cmnintrin.h" 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined SK_DEBUG && defined SK_BUILD_FOR_WIN32 2507fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef free 2517fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef free 2527fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 2537fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# include <crtdbg.h> 2547fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# undef free 2557fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 2567fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifdef SK_DEBUGx 2577fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(SK_SIMULATE_FAILED_MALLOC) && defined(__cplusplus) 2587fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void * operator new( 2597fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com size_t cb, 2607fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nBlockUse, 2617fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com const char * szFileName, 2627fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nLine, 2637fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int foo 2647fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2657fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void * operator new[]( 2667fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com size_t cb, 2677fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nBlockUse, 2687fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com const char * szFileName, 2697fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int nLine, 2707fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int foo 2717fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2727fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void operator delete( 2737fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void *pUserData, 2747fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com int, const char*, int, int 2757fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2767fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void operator delete( 2777fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void *pUserData 2787fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com ); 2797fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com void operator delete[]( void * p ); 2807fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__, 0) 2817fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 2827fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) 2837fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 2847fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define new DEBUG_CLIENTBLOCK 2857fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 2867fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define DEBUG_CLIENTBLOCK 2877fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2901341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com////////////////////////////////////////////////////////////////////// 2911341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com 2921341304449a60713bf9c8ea2e9489f35533f037atomhudson@google.com#ifndef SK_OVERRIDE 2937fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(_MSC_VER) 2947fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE override 2957fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# elif defined(__clang__) 2967fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // Using __attribute__((override)) on clang does not appear to always work. 2977fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // Clang defaults to C++03 and warns about using override. Squelch that. Intentionally no 2987fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // push/pop here so all users of SK_OVERRIDE ignore the warning too. This is like passing 2997fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // -Wno-c++11-extensions, except that GCC won't die (because it won't see this pragma). 3007fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# pragma clang diagnostic ignored "-Wc++11-extensions" 3017fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# 3027fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if __has_feature(cxx_override_control) 3037fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE override 3047fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# elif defined(__has_extension) && __has_extension(cxx_override_control) 3057fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE override 3067fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3077fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3087fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# ifndef SK_OVERRIDE 3097fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_OVERRIDE 3107fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 313d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com////////////////////////////////////////////////////////////////////// 314d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com 3155ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#if !defined(SK_UNUSED) 3167fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_UNUSED SK_ATTRIBUTE(unused) 3175ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com#endif 3185ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com 3194469938e92d779dff05e745559e67907bbf21e78reed@google.com#if !defined(SK_ATTR_DEPRECATED) 3207fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com // FIXME: we ignore msg for now... 3217fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ATTR_DEPRECATED(msg) SK_ATTRIBUTE(deprecated) 3224469938e92d779dff05e745559e67907bbf21e78reed@google.com#endif 3234469938e92d779dff05e745559e67907bbf21e78reed@google.com 3247fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com/** 3257fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * If your judgment is better than the compiler's (i.e. you've profiled it), 3267fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * you can use SK_ALWAYS_INLINE to force inlining. E.g. 3277fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * inline void someMethod() { ... } // may not be inlined 3287fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com * SK_ALWAYS_INLINE void someMethod() { ... } // should always be inlined 3297fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com */ 3301950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com#if !defined(SK_ALWAYS_INLINE) 3311950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# if defined(SK_BUILD_FOR_WIN) 3321950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# define SK_ALWAYS_INLINE __forceinline 3331950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# else 3341950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# define SK_ALWAYS_INLINE SK_ATTRIBUTE(always_inline) inline 3351950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com# endif 3361950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com#endif 3371950d5f58f56f6a0fb5dc5aa3f5caac991f0b2cemtklein@google.com 3385ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com////////////////////////////////////////////////////////////////////// 3395ebbbe53779cfe93741dc66f433107d04da74486bungeman@google.com 340fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org#if defined(__clang__) || defined(__GNUC__) 3417fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PREFETCH(ptr) __builtin_prefetch(ptr) 3427fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_WRITE_PREFETCH(ptr) __builtin_prefetch(ptr, 1) 343fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org#else 3447fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PREFETCH(ptr) 3457fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_WRITE_PREFETCH(ptr) 346fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org#endif 347fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org 348fedf13d73a6d6f1921ce5f449bb6e34e9d8e14e4commit-bot@chromium.org////////////////////////////////////////////////////////////////////// 3497fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com 3503a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_PRINTF_LIKE 3517fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(__clang__) || defined(__GNUC__) 3527fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PRINTF_LIKE(A, B) __attribute__((format(printf, (A), (B)))) 3537fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 3547fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_PRINTF_LIKE(A, B) 3557fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3563a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3573a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3583a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3593a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3603a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#ifndef SK_SIZE_T_SPECIFIER 3617fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# if defined(_MSC_VER) 3627fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SIZE_T_SPECIFIER "%Iu" 3637fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# else 3647fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_SIZE_T_SPECIFIER "%zu" 3657fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# endif 3663a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org#endif 3673a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 3683a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org////////////////////////////////////////////////////////////////////// 3693a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org 370d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#ifndef SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 3717fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com# define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1 372d26147adbbdca85f07dff432025afee0c8614387caryclark@google.com#endif 3737fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com 374d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com////////////////////////////////////////////////////////////////////// 375d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com 376d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com#ifndef SK_ATOMICS_PLATFORM_H 3778e13a159f3a54f761ab80b16377015e5a9077411commit-bot@chromium.org# if defined(_MSC_VER) 378d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# define SK_ATOMICS_PLATFORM_H "../../src/ports/SkAtomics_win.h" 379d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# elif defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) 380d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# define SK_ATOMICS_PLATFORM_H "../../src/ports/SkAtomics_android.h" 381d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# else 382d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# define SK_ATOMICS_PLATFORM_H "../../src/ports/SkAtomics_sync.h" 383d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# endif 384d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com#endif 385d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com 386d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com#ifndef SK_MUTEX_PLATFORM_H 387d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# if defined(SK_BUILD_FOR_WIN) 388d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# define SK_MUTEX_PLATFORM_H "../../src/ports/SkMutex_win.h" 389d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# else 390d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# define SK_MUTEX_PLATFORM_H "../../src/ports/SkMutex_pthread.h" 391d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com# endif 392d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com#endif 393d9947f605a335363b0a0541d6d8cb7a7113ed788bungeman@google.com 3944770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com 3954770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com////////////////////////////////////////////////////////////////////// 3964770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com 3974770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com#if defined(SK_GAMMA_EXPONENT) && defined(SK_GAMMA_SRGB) 3984770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com# error "cannot define both SK_GAMMA_EXPONENT and SK_GAMMA_SRGB" 3994770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com#elif defined(SK_GAMMA_SRGB) 4004770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com# define SK_GAMMA_EXPONENT (0.0f) 4014770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com#elif !defined(SK_GAMMA_EXPONENT) 4024770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com# define SK_GAMMA_EXPONENT (2.2f) 4034770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com#endif 4044770a3b7a290ee5e44662b8dfbc0bc9196f00930bungeman@google.com 4057fd1f50bfb9af23c7c1f7e8450f5a0db67ca5fdcbungeman@google.com#endif // SkPostConfig_DEFINED 406