aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2014-11-12 17:59:59 +0000
committerTorne (Richard Coles) <torne@google.com>2014-11-12 17:59:59 +0000
commitf084d3b1bf483951552ffe3f4b9456162668b3aa (patch)
treee1f00dc6b6871c026b149e4b447078e87b86546e
parentf0c28ffd134adacbe21ed5706a453c183511468a (diff)
parent91910327136cc116c7adceab25ff9b8bcae60be5 (diff)
downloadskia-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.cpp8
-rw-r--r--dm/DMGpuGMTask.cpp8
-rw-r--r--dm/DMGpuSupport.h2
-rw-r--r--include/gpu/GrColor.h6
-rw-r--r--include/gpu/gl/GrGLFunctions.h1
-rw-r--r--src/gpu/GrAAHairLinePathRenderer.cpp14
-rw-r--r--src/gpu/GrAARectRenderer.cpp37
-rw-r--r--src/gpu/gl/GrGLProgram.cpp3
-rw-r--r--tools/flags/SkCommonFlags.cpp2
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");