| Index: src/gpu/GrPath.cpp
|
| diff --git a/src/gpu/GrPath.cpp b/src/gpu/GrPath.cpp
|
| index 3a66865c6e5d3448eaeaefce22db731364340519..e76bdf2466208384ba453e0f21c4a827a4a6e3f1 100644
|
| --- a/src/gpu/GrPath.cpp
|
| +++ b/src/gpu/GrPath.cpp
|
| @@ -7,49 +7,14 @@
|
|
|
| #include "GrPath.h"
|
|
|
| -template<int NumBits> static uint64_t get_top_n_float_bits(float f) {
|
| - char* floatData = reinterpret_cast<char*>(&f);
|
| - uint32_t floatBits = *reinterpret_cast<uint32_t*>(floatData);
|
| - return floatBits >> (32 - NumBits);
|
| -}
|
| -
|
| -void GrPath::ComputeKey(const SkPath& path, const SkStrokeRec& stroke, GrUniqueKey* key) {
|
| - static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain();
|
| - GrUniqueKey::Builder builder(key, kDomain, 3);
|
| - *reinterpret_cast<uint64_t*>(&builder[0]) = ComputeStrokeKey(stroke);
|
| - builder[2] = path.getGenerationID();
|
| -}
|
| -
|
| -uint64_t GrPath::ComputeStrokeKey(const SkStrokeRec& stroke) {
|
| - enum {
|
| - kStyleBits = 2,
|
| - kJoinBits = 2,
|
| - kCapBits = 2,
|
| - kWidthBits = 29,
|
| - kMiterBits = 29,
|
| -
|
| - kJoinShift = kStyleBits,
|
| - kCapShift = kJoinShift + kJoinBits,
|
| - kWidthShift = kCapShift + kCapBits,
|
| - kMiterShift = kWidthShift + kWidthBits,
|
| -
|
| - kBitCount = kMiterShift + kMiterBits
|
| - };
|
| -
|
| - SK_COMPILE_ASSERT(SkStrokeRec::kStyleCount <= (1 << kStyleBits), style_shift_will_be_wrong);
|
| - SK_COMPILE_ASSERT(SkPaint::kJoinCount <= (1 << kJoinBits), cap_shift_will_be_wrong);
|
| - SK_COMPILE_ASSERT(SkPaint::kCapCount <= (1 << kCapBits), miter_shift_will_be_wrong);
|
| - SK_COMPILE_ASSERT(kBitCount == 64, wrong_stroke_key_size);
|
| -
|
| - if (!stroke.needToApply()) {
|
| - return SkStrokeRec::kFill_Style;
|
| +void GrPath::ComputeKey(const SkPath& path, const GrStrokeInfo& stroke, GrUniqueKey* key) {
|
| + static const GrUniqueKey::Domain kPathDomain = GrUniqueKey::GenerateDomain();
|
| + int strokeDataCnt = stroke.computeUniqueKeyFragmentData32Cnt();
|
| + GrUniqueKey::Builder builder(key, kPathDomain, 2 + strokeDataCnt);
|
| + builder[0] = path.getGenerationID();
|
| + builder[1] = path.getFillType();
|
| + if (strokeDataCnt > 0) {
|
| + stroke.asUniqueKeyFragment(&builder[2]);
|
| }
|
| -
|
| - uint64_t key = stroke.getStyle();
|
| - key |= stroke.getJoin() << kJoinShift;
|
| - key |= stroke.getCap() << kCapShift;
|
| - key |= get_top_n_float_bits<kWidthBits>(stroke.getWidth()) << kWidthShift;
|
| - key |= get_top_n_float_bits<kMiterBits>(stroke.getMiter()) << kMiterShift;
|
| -
|
| - return key;
|
| }
|
| +
|
|
|