diff options
author | Torne (Richard Coles) <torne@google.com> | 2014-11-12 17:59:59 +0000 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2014-11-12 17:59:59 +0000 |
commit | f084d3b1bf483951552ffe3f4b9456162668b3aa (patch) | |
tree | e1f00dc6b6871c026b149e4b447078e87b86546e | |
parent | f0c28ffd134adacbe21ed5706a453c183511468a (diff) | |
parent | 91910327136cc116c7adceab25ff9b8bcae60be5 (diff) | |
download | skia-master-soong.tar.gz |
Merge from Chromium at DEPS revision 03655fd3f6d7android-m-previewmaster-soong
This commit was generated by merge_to_master.py.
Change-Id: Ie3534127d293667c60fda23f2204c721422200b1
-rw-r--r-- | bench/nanobench.cpp | 8 | ||||
-rw-r--r-- | dm/DMGpuGMTask.cpp | 8 | ||||
-rw-r--r-- | dm/DMGpuSupport.h | 2 | ||||
-rw-r--r-- | include/gpu/GrColor.h | 6 | ||||
-rw-r--r-- | include/gpu/gl/GrGLFunctions.h | 1 | ||||
-rw-r--r-- | src/gpu/GrAAHairLinePathRenderer.cpp | 14 | ||||
-rw-r--r-- | src/gpu/GrAARectRenderer.cpp | 37 | ||||
-rw-r--r-- | src/gpu/gl/GrGLProgram.cpp | 3 | ||||
-rw-r--r-- | tools/flags/SkCommonFlags.cpp | 2 |
9 files changed, 49 insertions, 32 deletions
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp index 31b69fa6e..aade59054 100644 --- a/bench/nanobench.cpp +++ b/bench/nanobench.cpp @@ -125,7 +125,8 @@ static int detect_forever_loops(int loops) { static int clamp_loops(int loops) { if (loops < 1) { - SkDebugf("ERROR: clamping loops from %d to 1.\n", loops); + SkDebugf("ERROR: clamping loops from %d to 1. " + "There's probably something wrong with the bench.\n", loops); return 1; } if (loops > FLAGS_maxLoops) { @@ -228,6 +229,11 @@ static int gpu_bench(SkGLContext* gl, loops = 1; double elapsed = 0; do { + if (1<<30 == loops) { + // We're about to wrap. Something's wrong with the bench. + loops = 0; + break; + } loops *= 2; // If the GPU lets frames lag at all, we need to make sure we're timing // _this_ round, not still timing last round. We force this by looping diff --git a/dm/DMGpuGMTask.cpp b/dm/DMGpuGMTask.cpp index fb170a26b..2890483f5 100644 --- a/dm/DMGpuGMTask.cpp +++ b/dm/DMGpuGMTask.cpp @@ -22,6 +22,8 @@ GpuGMTask::GpuGMTask(const char* config, , fSampleCount(sampleCount) {} +static bool gAlreadyWarned[GrContextFactory::kGLContextTypeCnt][kGrGLStandardCnt]; + void GpuGMTask::draw(GrContextFactory* grFactory) { SkImageInfo info = SkImageInfo::Make(SkScalarCeilToInt(fGM->width()), SkScalarCeilToInt(fGM->height()), @@ -30,7 +32,11 @@ void GpuGMTask::draw(GrContextFactory* grFactory) { SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, fGpuAPI, info, fSampleCount)); if (!surface) { - this->fail("Could not create context for the config and the api."); + if (!gAlreadyWarned[fContextType][fGpuAPI]) { + SkDebugf("FYI: couldn't create GPU context, type %d API %d. Will skip.\n", + fContextType, fGpuAPI); + gAlreadyWarned[fContextType][fGpuAPI] = true; + } return; } SkCanvas* canvas = surface->getCanvas(); diff --git a/dm/DMGpuSupport.h b/dm/DMGpuSupport.h index af6270dfc..90b0ea55c 100644 --- a/dm/DMGpuSupport.h +++ b/dm/DMGpuSupport.h @@ -36,6 +36,7 @@ enum GrGLStandard { kGL_GrGLStandard, kGLES_GrGLStandard }; +static const int kGrGLStandardCnt = 3; class GrContextFactory { public: @@ -47,6 +48,7 @@ public: kNVPR_GLContextType = 0, kNative_GLContextType = 0, kNull_GLContextType = 0; + static const int kGLContextTypeCnt = 1; void destroyContexts() {} void abandonContexts() {} diff --git a/include/gpu/GrColor.h b/include/gpu/GrColor.h index 4ab709b4f..3470c88fe 100644 --- a/include/gpu/GrColor.h +++ b/include/gpu/GrColor.h @@ -88,6 +88,12 @@ static inline void GrColorToRGBAFloat(GrColor color, float rgba[4]) { rgba[3] = GrColorUnpackA(color) * ONE_OVER_255; } +/** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */ +static inline float GrNormalizeByteToFloat(uint8_t value) { + static const float ONE_OVER_255 = 1.f / 255.f; + return value * ONE_OVER_255; +} + /** Determines whether the color is opaque or not. */ static inline bool GrColorIsOpaque(GrColor color) { return (color & (0xFFU << GrColor_SHIFT_A)) == (0xFFU << GrColor_SHIFT_A); diff --git a/include/gpu/gl/GrGLFunctions.h b/include/gpu/gl/GrGLFunctions.h index dd6208501..0b7beb601 100644 --- a/include/gpu/gl/GrGLFunctions.h +++ b/include/gpu/gl/GrGLFunctions.h @@ -22,6 +22,7 @@ enum GrGLStandard { kGL_GrGLStandard, kGLES_GrGLStandard, }; +static const int kGrGLStandardCnt = 3; /////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/GrAAHairLinePathRenderer.cpp b/src/gpu/GrAAHairLinePathRenderer.cpp index 0ffbc9dbc..2e9c82c8a 100644 --- a/src/gpu/GrAAHairLinePathRenderer.cpp +++ b/src/gpu/GrAAHairLinePathRenderer.cpp @@ -423,7 +423,7 @@ int generate_lines_and_quads(const SkPath& path, struct LineVertex { SkPoint fPos; - GrColor fCoverage; + float fCoverage; }; struct BezierVertex { @@ -594,7 +594,7 @@ void add_quads(const SkPoint p[3], void add_line(const SkPoint p[2], const SkMatrix* toSrc, - GrColor coverage, + uint8_t coverage, LineVertex** vert) { const SkPoint& a = p[0]; const SkPoint& b = p[1]; @@ -607,10 +607,12 @@ void add_line(const SkPoint p[2], ortho.fX = 2.0f * vec.fY; ortho.fY = -2.0f * vec.fX; + float floatCoverage = GrNormalizeByteToFloat(coverage); + (*vert)[0].fPos = a; - (*vert)[0].fCoverage = coverage; + (*vert)[0].fCoverage = floatCoverage; (*vert)[1].fPos = b; - (*vert)[1].fCoverage = coverage; + (*vert)[1].fCoverage = floatCoverage; (*vert)[2].fPos = a - vec + ortho; (*vert)[2].fCoverage = 0; (*vert)[3].fPos = b + vec + ortho; @@ -650,7 +652,7 @@ extern const GrVertexAttrib gHairlineBezierAttribs[] = { // position + coverage extern const GrVertexAttrib gHairlineLineAttribs[] = { {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}, - {kUByte_GrVertexAttribType, sizeof(SkPoint), kCoverage_GrVertexAttribBinding}, + {kFloat_GrVertexAttribType, sizeof(SkPoint), kCoverage_GrVertexAttribBinding}, }; }; @@ -686,7 +688,7 @@ bool GrAAHairLinePathRenderer::createLineGeom(const SkPath& path, } devBounds->set(lines.begin(), lines.count()); for (int i = 0; i < lineCnt; ++i) { - add_line(&lines[2*i], toSrc, drawState->getCoverageColor(), &verts); + add_line(&lines[2*i], toSrc, drawState->getCoverage(), &verts); } // All the verts computed by add_line are within sqrt(1^2 + 0.5^2) of the end points. static const SkScalar kSqrtOfOneAndAQuarter = 1.118f; diff --git a/src/gpu/GrAARectRenderer.cpp b/src/gpu/GrAARectRenderer.cpp index 6843acad7..ead4ea16a 100644 --- a/src/gpu/GrAARectRenderer.cpp +++ b/src/gpu/GrAARectRenderer.cpp @@ -265,7 +265,7 @@ namespace { extern const GrVertexAttrib gAARectAttribs[] = { {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}, {kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVertexAttribBinding}, - {kUByte_GrVertexAttribType, sizeof(SkPoint) + sizeof(SkColor), kCoverage_GrVertexAttribBinding}, + {kFloat_GrVertexAttribType, sizeof(SkPoint) + sizeof(SkColor), kCoverage_GrVertexAttribBinding}, }; // Should the coverage be multiplied into the color attrib or use a separate attrib. @@ -280,7 +280,8 @@ static CoverageAttribType set_rect_attribs(GrDrawState* drawState) { drawState->setVertexAttribs<gAARectAttribs>(2, sizeof(SkPoint) + sizeof(SkColor)); return kUseColor_CoverageAttribType; } else { - drawState->setVertexAttribs<gAARectAttribs>(3, sizeof(SkPoint) + 2 * sizeof(SkColor)); + drawState->setVertexAttribs<gAARectAttribs>(3, sizeof(SkPoint) + sizeof(SkColor) + + sizeof(float)); return kUseCoverage_CoverageAttribType; } } @@ -512,7 +513,7 @@ void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target, for (int i = 0; i < 4; ++i) { if (kUseCoverage_CoverageAttribType == covAttribType) { *reinterpret_cast<GrColor*>(verts + i * vstride) = color; - *reinterpret_cast<GrColor*>(verts + i * vstride + sizeof(GrColor)) = 0; + *reinterpret_cast<float*>(verts + i * vstride + sizeof(GrColor)) = 0; } else { *reinterpret_cast<GrColor*>(verts + i * vstride) = 0; } @@ -526,19 +527,17 @@ void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target, scale = 0xff; } - GrColor innerCoverage; - if (kUseCoverage_CoverageAttribType == covAttribType) { - innerCoverage = GrColorPackRGBA(scale, scale, scale, scale); - } else { - innerCoverage = (0xff == scale) ? color : SkAlphaMulQ(color, scale); - } verts += 4 * vstride; + + float innerCoverage = GrNormalizeByteToFloat(scale); + GrColor scaledColor = (0xff == scale) ? color : SkAlphaMulQ(color, scale); + for (int i = 0; i < 4; ++i) { if (kUseCoverage_CoverageAttribType == covAttribType) { *reinterpret_cast<GrColor*>(verts + i * vstride) = color; - *reinterpret_cast<GrColor*>(verts + i * vstride + sizeof(GrColor)) = innerCoverage; + *reinterpret_cast<float*>(verts + i * vstride + sizeof(GrColor)) = innerCoverage; } else { - *reinterpret_cast<GrColor*>(verts + i * vstride) = innerCoverage; + *reinterpret_cast<GrColor*>(verts + i * vstride) = scaledColor; } } @@ -850,7 +849,7 @@ void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target, for (int i = 0; i < outerVertexNum; ++i) { if (kUseCoverage_CoverageAttribType == covAttribType) { *reinterpret_cast<GrColor*>(verts + i * vstride) = color; - *reinterpret_cast<GrColor*>(verts + i * vstride + sizeof(GrColor)) = 0; + *reinterpret_cast<float*>(verts + i * vstride + sizeof(GrColor)) = 0; } else { *reinterpret_cast<GrColor*>(verts + i * vstride) = 0; } @@ -865,20 +864,16 @@ void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target, scale = 0xff; } - verts += outerVertexNum * vstride; - GrColor innerCoverage; - if (kUseCoverage_CoverageAttribType == covAttribType) { - innerCoverage = GrColorPackRGBA(scale, scale, scale, scale); - } else { - innerCoverage = (0xff == scale) ? color : SkAlphaMulQ(color, scale); - } + float innerCoverage = GrNormalizeByteToFloat(scale); + GrColor scaledColor = (0xff == scale) ? color : SkAlphaMulQ(color, scale); + verts += outerVertexNum * vstride; for (int i = 0; i < outerVertexNum + innerVertexNum; ++i) { if (kUseCoverage_CoverageAttribType == covAttribType) { *reinterpret_cast<GrColor*>(verts + i * vstride) = color; - *reinterpret_cast<GrColor*>(verts + i * vstride + sizeof(GrColor)) = innerCoverage; + *reinterpret_cast<float*>(verts + i * vstride + sizeof(GrColor)) = innerCoverage; } else { - *reinterpret_cast<GrColor*>(verts + i * vstride) = innerCoverage; + *reinterpret_cast<GrColor*>(verts + i * vstride) = scaledColor; } } diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index 319dcceff..3456a424d 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -232,8 +232,7 @@ void GrGLProgram::setCoverage(const GrOptDrawState& optState, uint8_t coverage) case GrProgramDesc::kUniform_ColorInput: if (fCoverage != coverage) { // OpenGL ES doesn't support unsigned byte varieties of glUniform - static const float ONE_OVER_255 = 1.f / 255.f; - GrGLfloat c = coverage * ONE_OVER_255; + GrGLfloat c = GrNormalizeByteToFloat(coverage); fProgramDataManager.set1f(fBuiltinUniformHandles.fCoverageUni, c); fCoverage = coverage; } diff --git a/tools/flags/SkCommonFlags.cpp b/tools/flags/SkCommonFlags.cpp index 99d05c15f..4d329c5f3 100644 --- a/tools/flags/SkCommonFlags.cpp +++ b/tools/flags/SkCommonFlags.cpp @@ -7,7 +7,7 @@ #include "SkCommonFlags.h" -DEFINE_string(config, "565 8888 pdf gpu nonrendering angle", +DEFINE_string(config, "565 8888 pdf gpu nonrendering angle nvprmsaa4", "Options: 565 8888 pdf gpu nonrendering msaa4 msaa16 nvprmsaa4 nvprmsaa16 " "gpunull gpudebug angle mesa"); |