Skia
2D Graphics Library
SkTypes.h
Go to the documentation of this file.
1 /*
2  * Copyright 2006 The Android Open Source Project
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkTypes_DEFINED
9 #define SkTypes_DEFINED
10 
14 // Pre-SkUserConfig.h setup.
15 
16 // Allows embedders that want to disable macros that take arguments to just
17 // define that symbol to be one of these
18 #define SK_NOTHING_ARG1(arg1)
19 #define SK_NOTHING_ARG2(arg1, arg2)
20 #define SK_NOTHING_ARG3(arg1, arg2, arg3)
21 
22 #if !defined(SK_BUILD_FOR_ANDROID) && !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_WIN) && \
23  !defined(SK_BUILD_FOR_UNIX) && !defined(SK_BUILD_FOR_MAC)
24 
25  #ifdef __APPLE__
26  #include "TargetConditionals.h"
27  #endif
28 
29  #if defined(_WIN32) || defined(__SYMBIAN32__)
30  #define SK_BUILD_FOR_WIN
31  #elif defined(ANDROID) || defined(__ANDROID__)
32  #define SK_BUILD_FOR_ANDROID
33  #elif defined(linux) || defined(__linux) || defined(__FreeBSD__) || \
34  defined(__OpenBSD__) || defined(__sun) || defined(__NetBSD__) || \
35  defined(__DragonFly__) || defined(__Fuchsia__) || \
36  defined(__GLIBC__) || defined(__GNU__) || defined(__unix__)
37  #define SK_BUILD_FOR_UNIX
38  #elif TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
39  #define SK_BUILD_FOR_IOS
40  #else
41  #define SK_BUILD_FOR_MAC
42  #endif
43 
44 #endif
45 
46 #if defined(SK_BUILD_FOR_WIN) && !defined(__clang__)
47  #if !defined(SK_RESTRICT)
48  #define SK_RESTRICT __restrict
49  #endif
50  #if !defined(SK_WARN_UNUSED_RESULT)
51  #define SK_WARN_UNUSED_RESULT
52  #endif
53 #endif
54 
55 #if !defined(SK_RESTRICT)
56  #define SK_RESTRICT __restrict__
57 #endif
58 
59 #if !defined(SK_WARN_UNUSED_RESULT)
60  #define SK_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
61 #endif
62 
63 #if !defined(SK_CPU_BENDIAN) && !defined(SK_CPU_LENDIAN)
64  #if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
65  #define SK_CPU_BENDIAN
66  #elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
67  #define SK_CPU_LENDIAN
68  #elif defined(__sparc) || defined(__sparc__) || \
69  defined(_POWER) || defined(__powerpc__) || \
70  defined(__ppc__) || defined(__hppa) || \
71  defined(__PPC__) || defined(__PPC64__) || \
72  defined(_MIPSEB) || defined(__ARMEB__) || \
73  defined(__s390__) || \
74  (defined(__sh__) && defined(__BIG_ENDIAN__)) || \
75  (defined(__ia64) && defined(__BIG_ENDIAN__))
76  #define SK_CPU_BENDIAN
77  #else
78  #define SK_CPU_LENDIAN
79  #endif
80 #endif
81 
82 #if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
83  #define SK_CPU_X86 1
84 #endif
85 
92 #define SK_CPU_SSE_LEVEL_SSE1 10
93 #define SK_CPU_SSE_LEVEL_SSE2 20
94 #define SK_CPU_SSE_LEVEL_SSE3 30
95 #define SK_CPU_SSE_LEVEL_SSSE3 31
96 #define SK_CPU_SSE_LEVEL_SSE41 41
97 #define SK_CPU_SSE_LEVEL_SSE42 42
98 #define SK_CPU_SSE_LEVEL_AVX 51
99 #define SK_CPU_SSE_LEVEL_AVX2 52
100 #define SK_CPU_SSE_LEVEL_SKX 60
101 
102 // Are we in GCC/Clang?
103 #ifndef SK_CPU_SSE_LEVEL
104  // These checks must be done in descending order to ensure we set the highest
105  // available SSE level.
106  #if defined(__AVX512F__) && defined(__AVX512DQ__) && defined(__AVX512CD__) && \
107  defined(__AVX512BW__) && defined(__AVX512VL__)
108  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SKX
109  #elif defined(__AVX2__)
110  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX2
111  #elif defined(__AVX__)
112  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX
113  #elif defined(__SSE4_2__)
114  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE42
115  #elif defined(__SSE4_1__)
116  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE41
117  #elif defined(__SSSE3__)
118  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSSE3
119  #elif defined(__SSE3__)
120  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE3
121  #elif defined(__SSE2__)
122  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
123  #endif
124 #endif
125 
126 // Are we in VisualStudio?
127 #ifndef SK_CPU_SSE_LEVEL
128  // These checks must be done in descending order to ensure we set the highest
129  // available SSE level. 64-bit intel guarantees at least SSE2 support.
130  #if defined(__AVX512F__) && defined(__AVX512DQ__) && defined(__AVX512CD__) && \
131  defined(__AVX512BW__) && defined(__AVX512VL__)
132  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SKX
133  #elif defined(__AVX2__)
134  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX2
135  #elif defined(__AVX__)
136  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX
137  #elif defined(_M_X64) || defined(_M_AMD64)
138  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
139  #elif defined(_M_IX86_FP)
140  #if _M_IX86_FP >= 2
141  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE2
142  #elif _M_IX86_FP == 1
143  #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE1
144  #endif
145  #endif
146 #endif
147 
148 // ARM defines
149 #if defined(__arm__) && (!defined(__APPLE__) || !TARGET_IPHONE_SIMULATOR)
150  #define SK_CPU_ARM32
151 #elif defined(__aarch64__)
152  #define SK_CPU_ARM64
153 #endif
154 
155 // All 64-bit ARM chips have NEON. Many 32-bit ARM chips do too.
156 #if !defined(SK_ARM_HAS_NEON) && defined(__ARM_NEON)
157  #define SK_ARM_HAS_NEON
158 #endif
159 
160 #if defined(__ARM_FEATURE_CRC32)
161  #define SK_ARM_HAS_CRC32
162 #endif
163 
164 
165 // DLL/.so exports.
166 #if !defined(SKIA_IMPLEMENTATION)
167  #define SKIA_IMPLEMENTATION 0
168 #endif
169 #if !defined(SK_API)
170  #if defined(SKIA_DLL)
171  #if defined(_MSC_VER)
172  #if SKIA_IMPLEMENTATION
173  #define SK_API __declspec(dllexport)
174  #else
175  #define SK_API __declspec(dllimport)
176  #endif
177  #else
178  #define SK_API __attribute__((visibility("default")))
179  #endif
180  #else
181  #define SK_API
182  #endif
183 #endif
184 
185 // SK_SPI is functionally identical to SK_API, but used within src to clarify that it's less stable
186 #if !defined(SK_SPI)
187  #define SK_SPI SK_API
188 #endif
189 
190 // IWYU pragma: begin_exports
191 #if defined (SK_USER_CONFIG_HEADER)
192  #include SK_USER_CONFIG_HEADER
193 #else
194  #include "include/config/SkUserConfig.h"
195 #endif
196 #include <stddef.h>
197 #include <stdint.h>
198 // IWYU pragma: end_exports
199 
200 // Post SkUserConfig.h checks and such.
201 #if !defined(SK_DEBUG) && !defined(SK_RELEASE)
202  #ifdef NDEBUG
203  #define SK_RELEASE
204  #else
205  #define SK_DEBUG
206  #endif
207 #endif
208 
209 #if defined(SK_DEBUG) && defined(SK_RELEASE)
210 # error "cannot define both SK_DEBUG and SK_RELEASE"
211 #elif !defined(SK_DEBUG) && !defined(SK_RELEASE)
212 # error "must define either SK_DEBUG or SK_RELEASE"
213 #endif
214 
215 #if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN)
216 # error "cannot define both SK_CPU_LENDIAN and SK_CPU_BENDIAN"
217 #elif !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN)
218 # error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN"
219 #endif
220 
221 #if defined(SK_CPU_BENDIAN) && !defined(I_ACKNOWLEDGE_SKIA_DOES_NOT_SUPPORT_BIG_ENDIAN)
222  #error "The Skia team is not endian-savvy enough to support big-endian CPUs."
223  #error "If you still want to use Skia,"
224  #error "please define I_ACKNOWLEDGE_SKIA_DOES_NOT_SUPPORT_BIG_ENDIAN."
225 #endif
226 
227 #if !defined(SK_ATTRIBUTE)
228 # if defined(__clang__) || defined(__GNUC__)
229 # define SK_ATTRIBUTE(attr) __attribute__((attr))
230 # else
231 # define SK_ATTRIBUTE(attr)
232 # endif
233 #endif
234 
235 #if !defined(SK_SUPPORT_GPU)
236 # define SK_SUPPORT_GPU 1
237 #endif
238 
239 #if !SK_SUPPORT_GPU
240 # undef SK_GL
241 # undef SK_VULKAN
242 # undef SK_METAL
243 # undef SK_DAWN
244 # undef SK_DIRECT3D
245 #endif
246 
247 #if !defined(SkUNREACHABLE)
248 # if defined(_MSC_VER) && !defined(__clang__)
249 # include <intrin.h>
250 # define FAST_FAIL_INVALID_ARG 5
251 // See https://developercommunity.visualstudio.com/content/problem/1128631/code-flow-doesnt-see-noreturn-with-extern-c.html
252 // for why this is wrapped. Hopefully removable after msvc++ 19.27 is no longer supported.
253 [[noreturn]] static inline void sk_fast_fail() { __fastfail(FAST_FAIL_INVALID_ARG); }
254 # define SkUNREACHABLE sk_fast_fail()
255 # else
256 # define SkUNREACHABLE __builtin_trap()
257 # endif
258 #endif
259 
260 #if defined(SK_BUILD_FOR_GOOGLE3)
261  void SkDebugfForDumpStackTrace(const char* data, void* unused);
262  void DumpStackTrace(int skip_count, void w(const char*, void*), void* arg);
263 # define SK_DUMP_GOOGLE3_STACK() DumpStackTrace(0, SkDebugfForDumpStackTrace, nullptr)
264 #else
265 # define SK_DUMP_GOOGLE3_STACK()
266 #endif
267 
268 #ifndef SK_ABORT
269 # ifdef SK_BUILD_FOR_WIN
270  // This style lets Visual Studio follow errors back to the source file.
271 # define SK_DUMP_LINE_FORMAT "%s(%d)"
272 # else
273 # define SK_DUMP_LINE_FORMAT "%s:%d"
274 # endif
275 # define SK_ABORT(message, ...) \
276  do { \
277  SkDebugf(SK_DUMP_LINE_FORMAT ": fatal error: \"" message "\"\n", \
278  __FILE__, __LINE__, ##__VA_ARGS__); \
279  SK_DUMP_GOOGLE3_STACK(); \
280  sk_abort_no_print(); \
281  } while (false)
282 #endif
283 
284 // If SK_R32_SHIFT is set, we'll use that to choose RGBA or BGRA.
285 // If not, we'll default to RGBA everywhere except BGRA on Windows.
286 #if defined(SK_R32_SHIFT)
287  static_assert(SK_R32_SHIFT == 0 || SK_R32_SHIFT == 16, "");
288 #elif defined(SK_BUILD_FOR_WIN)
289  #define SK_R32_SHIFT 16
290 #else
291  #define SK_R32_SHIFT 0
292 #endif
293 
294 #if defined(SK_B32_SHIFT)
295  static_assert(SK_B32_SHIFT == (16-SK_R32_SHIFT), "");
296 #else
297  #define SK_B32_SHIFT (16-SK_R32_SHIFT)
298 #endif
299 
300 #define SK_G32_SHIFT 8
301 #define SK_A32_SHIFT 24
302 
303 
307 #ifdef SK_CPU_BENDIAN
308 # define SK_PMCOLOR_BYTE_ORDER(C0, C1, C2, C3) \
309  (SK_ ## C3 ## 32_SHIFT == 0 && \
310  SK_ ## C2 ## 32_SHIFT == 8 && \
311  SK_ ## C1 ## 32_SHIFT == 16 && \
312  SK_ ## C0 ## 32_SHIFT == 24)
313 #else
314 # define SK_PMCOLOR_BYTE_ORDER(C0, C1, C2, C3) \
315  (SK_ ## C0 ## 32_SHIFT == 0 && \
316  SK_ ## C1 ## 32_SHIFT == 8 && \
317  SK_ ## C2 ## 32_SHIFT == 16 && \
318  SK_ ## C3 ## 32_SHIFT == 24)
319 #endif
320 
321 #if defined SK_DEBUG && defined SK_BUILD_FOR_WIN
322  #ifdef free
323  #undef free
324  #endif
325  #include <crtdbg.h>
326  #undef free
327 #endif
328 
329 #if !defined(SK_UNUSED)
330 # if !defined(__clang__) && defined(_MSC_VER)
331 # define SK_UNUSED __pragma(warning(suppress:4189))
332 # else
333 # define SK_UNUSED SK_ATTRIBUTE(unused)
334 # endif
335 #endif
336 
343 #if !defined(SK_ALWAYS_INLINE)
344 # if defined(SK_BUILD_FOR_WIN)
345 # define SK_ALWAYS_INLINE __forceinline
346 # else
347 # define SK_ALWAYS_INLINE SK_ATTRIBUTE(always_inline) inline
348 # endif
349 #endif
350 
355 #if !defined(SK_NEVER_INLINE)
356 # if defined(SK_BUILD_FOR_WIN)
357 # define SK_NEVER_INLINE __declspec(noinline)
358 # else
359 # define SK_NEVER_INLINE SK_ATTRIBUTE(noinline)
360 # endif
361 #endif
362 
363 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1
364  #define SK_PREFETCH(ptr) _mm_prefetch(reinterpret_cast<const char*>(ptr), _MM_HINT_T0)
365 #elif defined(__GNUC__)
366  #define SK_PREFETCH(ptr) __builtin_prefetch(ptr)
367 #else
368  #define SK_PREFETCH(ptr)
369 #endif
370 
371 #ifndef SK_PRINTF_LIKE
372 # if defined(__clang__) || defined(__GNUC__)
373 # define SK_PRINTF_LIKE(A, B) __attribute__((format(printf, (A), (B))))
374 # else
375 # define SK_PRINTF_LIKE(A, B)
376 # endif
377 #endif
378 
379 #ifndef SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
380  #define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 0
381 #endif
382 
383 #if !defined(SK_GAMMA_EXPONENT)
384  #define SK_GAMMA_EXPONENT (0.0f) // SRGB
385 #endif
386 
387 #ifndef GR_TEST_UTILS
388 # define GR_TEST_UTILS 0
389 #endif
390 
391 #if defined(SK_HISTOGRAM_ENUMERATION) || \
392  defined(SK_HISTOGRAM_BOOLEAN) || \
393  defined(SK_HISTOGRAM_EXACT_LINEAR) || \
394  defined(SK_HISTOGRAM_MEMORY_KB)
395 # define SK_HISTOGRAMS_ENABLED 1
396 #else
397 # define SK_HISTOGRAMS_ENABLED 0
398 #endif
399 
400 #ifndef SK_HISTOGRAM_BOOLEAN
401 # define SK_HISTOGRAM_BOOLEAN(name, sample)
402 #endif
403 
404 #ifndef SK_HISTOGRAM_ENUMERATION
405 # define SK_HISTOGRAM_ENUMERATION(name, sample, enum_size)
406 #endif
407 
408 #ifndef SK_HISTOGRAM_EXACT_LINEAR
409 # define SK_HISTOGRAM_EXACT_LINEAR(name, sample, value_max)
410 #endif
411 
412 #ifndef SK_HISTOGRAM_MEMORY_KB
413 # define SK_HISTOGRAM_MEMORY_KB(name, sample)
414 #endif
415 
416 #define SK_HISTOGRAM_PERCENTAGE(name, percent_as_int) \
417  SK_HISTOGRAM_EXACT_LINEAR(name, percent_as_int, 101)
418 
419 #ifndef SK_DISABLE_LEGACY_SHADERCONTEXT
420 #define SK_ENABLE_LEGACY_SHADERCONTEXT
421 #endif
422 
423 #ifdef SK_ENABLE_API_AVAILABLE
424 #define SK_API_AVAILABLE API_AVAILABLE
425 #else
426 #define SK_API_AVAILABLE(...)
427 #endif
428 
429 #if defined(SK_BUILD_FOR_LIBFUZZER) || defined(SK_BUILD_FOR_AFL_FUZZ)
430  #define SK_BUILD_FOR_FUZZER
431 #endif
432 
437 [[noreturn]] SK_API extern void sk_abort_no_print(void);
438 
439 #ifndef SkDebugf
440  SK_API void SkDebugf(const char format[], ...);
441 #endif
442 #if defined(SK_BUILD_FOR_LIBFUZZER)
443  SK_API inline void SkDebugf(const char format[], ...) {}
444 #endif
445 
446 // SkASSERT, SkASSERTF and SkASSERT_RELEASE can be used as stand alone assertion expressions, e.g.
447 // uint32_t foo(int x) {
448 // SkASSERT(x > 4);
449 // return x - 4;
450 // }
451 // and are also written to be compatible with constexpr functions:
452 // constexpr uint32_t foo(int x) {
453 // return SkASSERT(x > 4),
454 // x - 4;
455 // }
456 #define SkASSERT_RELEASE(cond) \
457  static_cast<void>( (cond) ? (void)0 : []{ SK_ABORT("assert(%s)", #cond); }() )
458 
459 #ifdef SK_DEBUG
460  #define SkASSERT(cond) SkASSERT_RELEASE(cond)
461  #define SkASSERTF(cond, fmt, ...) static_cast<void>( (cond) ? (void)0 : [&]{ \
462  SkDebugf(fmt"\n", ##__VA_ARGS__); \
463  SK_ABORT("assert(%s)", #cond); \
464  }() )
465  #define SkDEBUGFAIL(message) SK_ABORT("%s", message)
466  #define SkDEBUGFAILF(fmt, ...) SK_ABORT(fmt, ##__VA_ARGS__)
467  #define SkDEBUGCODE(...) __VA_ARGS__
468  #define SkDEBUGF(...) SkDebugf(__VA_ARGS__)
469  #define SkAssertResult(cond) SkASSERT(cond)
470 #else
471  #define SkASSERT(cond) static_cast<void>(0)
472  #define SkASSERTF(cond, fmt, ...) static_cast<void>(0)
473  #define SkDEBUGFAIL(message)
474  #define SkDEBUGFAILF(fmt, ...)
475  #define SkDEBUGCODE(...)
476  #define SkDEBUGF(...)
477 
478  // unlike SkASSERT, this macro executes its condition in the non-debug build.
479  // The if is present so that this can be used with functions marked SK_WARN_UNUSED_RESULT.
480  #define SkAssertResult(cond) if (cond) {} do {} while(false)
481 #endif
482 
484 
488 typedef unsigned U8CPU;
489 
493 typedef unsigned U16CPU;
494 
497 template <typename T> static constexpr bool SkToBool(const T& x) {
498  return 0 != x; // NOLINT(modernize-use-nullptr)
499 }
500 
501 static constexpr int16_t SK_MaxS16 = INT16_MAX;
502 static constexpr int16_t SK_MinS16 = -SK_MaxS16;
503 
504 static constexpr int32_t SK_MaxS32 = INT32_MAX;
505 static constexpr int32_t SK_MinS32 = -SK_MaxS32;
506 static constexpr int32_t SK_NaN32 = INT32_MIN;
507 
508 static constexpr int64_t SK_MaxS64 = INT64_MAX;
509 static constexpr int64_t SK_MinS64 = -SK_MaxS64;
510 
511 static inline constexpr int32_t SkLeftShift(int32_t value, int32_t shift) {
512  return (int32_t) ((uint32_t) value << shift);
513 }
514 
515 static inline constexpr int64_t SkLeftShift(int64_t value, int32_t shift) {
516  return (int64_t) ((uint64_t) value << shift);
517 }
518 
520 
523 template <typename T, size_t N> char (&SkArrayCountHelper(T (&array)[N]))[N];
524 #define SK_ARRAY_COUNT(array) (sizeof(SkArrayCountHelper(array)))
525 
527 
528 template <typename T> static constexpr T SkAlign2(T x) { return (x + 1) >> 1 << 1; }
529 template <typename T> static constexpr T SkAlign4(T x) { return (x + 3) >> 2 << 2; }
530 template <typename T> static constexpr T SkAlign8(T x) { return (x + 7) >> 3 << 3; }
531 
532 template <typename T> static constexpr bool SkIsAlign2(T x) { return 0 == (x & 1); }
533 template <typename T> static constexpr bool SkIsAlign4(T x) { return 0 == (x & 3); }
534 template <typename T> static constexpr bool SkIsAlign8(T x) { return 0 == (x & 7); }
535 
536 template <typename T> static constexpr T SkAlignPtr(T x) {
537  return sizeof(void*) == 8 ? SkAlign8(x) : SkAlign4(x);
538 }
539 template <typename T> static constexpr bool SkIsAlignPtr(T x) {
540  return sizeof(void*) == 8 ? SkIsAlign8(x) : SkIsAlign4(x);
541 }
542 
543 typedef uint32_t SkFourByteTag;
544 static inline constexpr SkFourByteTag SkSetFourByteTag(char a, char b, char c, char d) {
545  return (((uint32_t)a << 24) | ((uint32_t)b << 16) | ((uint32_t)c << 8) | (uint32_t)d);
546 }
547 
549 
552 typedef int32_t SkUnichar;
553 
556 typedef uint16_t SkGlyphID;
557 
561 typedef uint32_t SkMSec;
562 
565 static constexpr SkMSec SK_MSecMax = INT32_MAX;
566 
569 static constexpr uint32_t SK_InvalidGenID = 0;
570 
573 static constexpr uint32_t SK_InvalidUniqueID = 0;
574 
575 static inline int32_t SkAbs32(int32_t value) {
576  SkASSERT(value != SK_NaN32); // The most negative int32_t can't be negated.
577  if (value < 0) {
578  value = -value;
579  }
580  return value;
581 }
582 
583 template <typename T> static inline T SkTAbs(T value) {
584  if (value < 0) {
585  value = -value;
586  }
587  return value;
588 }
589 
591 
594 enum class SkBudgeted : bool {
595  kNo = false,
596  kYes = true
597 };
598 
602 enum class SkBackingFit {
603  kApprox,
604  kExact
605 };
606 
607 #endif
SkIsAlign2
static constexpr bool SkIsAlign2(T x)
Definition: SkTypes.h:532
SkGlyphID
uint16_t SkGlyphID
16 bit unsigned integer to hold a glyph index
Definition: SkTypes.h:556
N
#define N
Definition: skcms.cc:2338
SK_InvalidGenID
static constexpr uint32_t SK_InvalidGenID
The generation IDs in Skia reserve 0 has an invalid marker.
Definition: SkTypes.h:569
SK_MaxS32
static constexpr int32_t SK_MaxS32
Definition: SkTypes.h:504
SkBackingFit
SkBackingFit
Indicates whether a backing store needs to be an exact match or can be larger than is strictly necess...
Definition: SkTypes.h:602
SK_MSecMax
static constexpr SkMSec SK_MSecMax
Maximum representable milliseconds; 24d 20h 31m 23.647s.
Definition: SkTypes.h:565
SkLeftShift
static constexpr int32_t SkLeftShift(int32_t value, int32_t shift)
Definition: SkTypes.h:511
SkSetFourByteTag
static constexpr SkFourByteTag SkSetFourByteTag(char a, char b, char c, char d)
Definition: SkTypes.h:544
SkBackingFit::kExact
@ kExact
SkDebugf
SK_API void SkDebugf(const char format[],...)
SkIsAlign8
static constexpr bool SkIsAlign8(T x)
Definition: SkTypes.h:534
SkAlign4
static constexpr T SkAlign4(T x)
Definition: SkTypes.h:529
SK_MaxS64
static constexpr int64_t SK_MaxS64
Definition: SkTypes.h:508
SkArrayCountHelper
char(& SkArrayCountHelper(T(&array)[N]))[N]
SK_R32_SHIFT
#define SK_R32_SHIFT
Definition: SkTypes.h:291
SkAlign2
static constexpr T SkAlign2(T x)
Definition: SkTypes.h:528
SK_MinS16
static constexpr int16_t SK_MinS16
Definition: SkTypes.h:502
SkIsAlignPtr
static constexpr bool SkIsAlignPtr(T x)
Definition: SkTypes.h:539
SkBackingFit::kApprox
@ kApprox
SK_InvalidUniqueID
static constexpr uint32_t SK_InvalidUniqueID
The unique IDs in Skia reserve 0 has an invalid marker.
Definition: SkTypes.h:573
SkToBool
static constexpr bool SkToBool(const T &x)
Definition: SkTypes.h:497
SkMSec
uint32_t SkMSec
32 bit value to hold a millisecond duration Note that SK_MSecMax is about 25 days.
Definition: SkTypes.h:561
SK_API
#define SK_API
Definition: SkTypes.h:181
SkASSERT
#define SkASSERT(cond)
Definition: SkTypes.h:460
SkAbs32
static int32_t SkAbs32(int32_t value)
Definition: SkTypes.h:575
sk_abort_no_print
SK_API void sk_abort_no_print(void)
Called internally if we hit an unrecoverable error.
U16CPU
unsigned U16CPU
Fast type for unsigned 16 bits.
Definition: SkTypes.h:493
SK_B32_SHIFT
#define SK_B32_SHIFT
Definition: SkTypes.h:297
SkAlign8
static constexpr T SkAlign8(T x)
Definition: SkTypes.h:530
SkUnichar
int32_t SkUnichar
32 bit integer to hold a unicode value
Definition: SkTypes.h:552
SkBudgeted
SkBudgeted
Indicates whether an allocation should count against a cache budget.
Definition: SkTypes.h:594
SkTAbs
static T SkTAbs(T value)
Definition: SkTypes.h:583
SK_MinS64
static constexpr int64_t SK_MinS64
Definition: SkTypes.h:509
SkIsAlign4
static constexpr bool SkIsAlign4(T x)
Definition: SkTypes.h:533
SkFourByteTag
uint32_t SkFourByteTag
Definition: SkTypes.h:543
SK_MaxS16
static constexpr int16_t SK_MaxS16
Definition: SkTypes.h:501
U8CPU
unsigned U8CPU
Fast type for unsigned 8 bits.
Definition: SkTypes.h:488
SkBudgeted::kNo
@ kNo
SkAlignPtr
static constexpr T SkAlignPtr(T x)
Definition: SkTypes.h:536
SK_NaN32
static constexpr int32_t SK_NaN32
Definition: SkTypes.h:506
SK_MinS32
static constexpr int32_t SK_MinS32
Definition: SkTypes.h:505
SkBudgeted::kYes
@ kYes