Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: src/gpu/GrPath.cpp

Issue 1116123003: Improve caching of dashed paths in GrStencilAndCoverPathRenderer (Closed) Base URL: https://skia.googlesource.com/skia.git@dashing-nvpr-01
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrPath.h ('k') | src/gpu/GrPathRange.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
+
« no previous file with comments | « src/gpu/GrPath.h ('k') | src/gpu/GrPathRange.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698