1 /*
2  * Copyright 2016 Google Inc.
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 SkPM4f_DEFINED
9 #define SkPM4f_DEFINED
10 
11 #include "SkColorPriv.h"
12 
13 /*
14  *  The float values are 0...1 premultiplied
15  */
16 struct SkPM4f {
17     enum {
18         A = SK_A32_SHIFT/8,
19         R = SK_R32_SHIFT/8,
20         G = SK_G32_SHIFT/8,
21         B = SK_B32_SHIFT/8,
22     };
23     float fVec[4];
24 
aSkPM4f25     float a() const { return fVec[A]; }
26 
27     SkColor4f unpremul() const;
28 
29     static SkPM4f FromPMColor(SkPMColor);
30 
31     // half-float routines
32     void toF16(uint16_t[4]) const;
33     uint64_t toF16() const; // 4 float16 values packed into uint64_t
34     static SkPM4f FromF16(const uint16_t[4]);
35 
36 #ifdef SK_DEBUG
37     void assertIsUnit() const;
38 #else
assertIsUnitSkPM4f39     void assertIsUnit() const {}
40 #endif
41 };
42 
43 typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst);
44 
45 
46 #endif
47