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; |
} |
+ |