aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu')
-rw-r--r--src/gpu/GrContext.cpp1
-rw-r--r--src/gpu/GrDrawTarget.cpp13
-rw-r--r--src/gpu/GrDrawTarget.h5
-rw-r--r--src/gpu/GrGpu.h2
-rw-r--r--src/gpu/GrTest.cpp2
-rw-r--r--src/gpu/batches/GrBatch.h4
-rw-r--r--src/gpu/batches/GrClearBatch.h2
-rw-r--r--src/gpu/batches/GrCopySurfaceBatch.h1
-rw-r--r--src/gpu/batches/GrDiscardBatch.h1
-rw-r--r--src/gpu/batches/GrDrawBatch.h5
-rw-r--r--src/gpu/batches/GrStencilPathBatch.h1
-rw-r--r--src/gpu/gl/GrGLGpu.cpp173
-rw-r--r--src/gpu/gl/GrGLGpu.h11
13 files changed, 6 insertions, 215 deletions
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index a4887e3350..ad89672f3b 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -88,7 +88,6 @@ void GrContext::initCommon(const GrContextOptions& options) {
GrDrawTarget::Options dtOptions;
dtOptions.fClipBatchToBounds = options.fClipBatchToBounds;
- dtOptions.fDrawBatchBounds = options.fDrawBatchBounds;
fDrawingManager.reset(new GrDrawingManager(this, dtOptions));
// GrBatchFontCache will eventually replace GrFontCache
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 4f91a3cf96..9b7fa31ab0 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -43,8 +43,6 @@ GrDrawTarget::GrDrawTarget(GrRenderTarget* rt, GrGpu* gpu, GrResourceProvider* r
fContext = fGpu->getContext();
fClipMaskManager.reset(new GrClipMaskManager(this, options.fClipBatchToBounds));
- fDrawBatchBounds = options.fDrawBatchBounds;
-
rt->setLastDrawTarget(this);
#ifdef SK_DEBUG
@@ -197,18 +195,7 @@ void GrDrawTarget::prepareBatches(GrBatchFlushState* flushState) {
void GrDrawTarget::drawBatches(GrBatchFlushState* flushState) {
// Draw all the generated geometry.
- SkRandom random;
for (int i = 0; i < fBatches.count(); ++i) {
- if (fDrawBatchBounds) {
- const SkRect& bounds = fBatches[i]->bounds();
- SkIRect ibounds;
- bounds.roundOut(&ibounds);
- // In multi-draw buffer all the batches use the same render target and we won't need to
- // get the batchs bounds.
- if (GrRenderTarget* rt = fBatches[i]->renderTarget()) {
- fGpu->drawDebugWireRect(rt, ibounds, 0xFF000000 | random.nextU());
- }
- }
fBatches[i]->draw(flushState);
}
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h
index dc38b5d6d8..7b0159e5d5 100644
--- a/src/gpu/GrDrawTarget.h
+++ b/src/gpu/GrDrawTarget.h
@@ -45,9 +45,8 @@ class GrDrawTarget final : public SkRefCnt {
public:
/** Options for GrDrawTarget behavior. */
struct Options {
- Options () : fClipBatchToBounds(false), fDrawBatchBounds(false) {}
+ Options () : fClipBatchToBounds(false) {}
bool fClipBatchToBounds;
- bool fDrawBatchBounds;
};
GrDrawTarget(GrRenderTarget*, GrGpu*, GrResourceProvider*, const Options&);
@@ -320,8 +319,6 @@ private:
SkTDArray<GrDrawTarget*> fDependencies;
GrRenderTarget* fRenderTarget;
- bool fDrawBatchBounds;
-
typedef SkRefCnt INHERITED;
};
diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
index d1b0802721..9c36d0555f 100644
--- a/src/gpu/GrGpu.h
+++ b/src/gpu/GrGpu.h
@@ -404,8 +404,6 @@ public:
// clears target's entire stencil buffer to 0
virtual void clearStencil(GrRenderTarget* target) = 0;
- // draws an outline rectangle for debugging/visualization purposes.
- virtual void drawDebugWireRect(GrRenderTarget*, const SkIRect&, GrColor) = 0;
// Determines whether a copy of a texture must be made in order to be compatible with
// a given GrTextureParams. If so, the width, height and filter used for the copy are
diff --git a/src/gpu/GrTest.cpp b/src/gpu/GrTest.cpp
index e7b2ae7699..a3823dd8a2 100644
--- a/src/gpu/GrTest.cpp
+++ b/src/gpu/GrTest.cpp
@@ -284,8 +284,6 @@ public:
return false;
}
- void drawDebugWireRect(GrRenderTarget*, const SkIRect&, GrColor) override {};
-
private:
void onResetContext(uint32_t resetBits) override {}
diff --git a/src/gpu/batches/GrBatch.h b/src/gpu/batches/GrBatch.h
index a66d6ae308..03e396a29c 100644
--- a/src/gpu/batches/GrBatch.h
+++ b/src/gpu/batches/GrBatch.h
@@ -16,7 +16,6 @@
class GrCaps;
class GrBatchFlushState;
-class GrRenderTarget;
/**
* GrBatch is the base class for all Ganesh deferred geometry generators. To facilitate
@@ -114,9 +113,6 @@ public:
/** Used for spewing information about batches when debugging. */
virtual SkString dumpInfo() const = 0;
- /** Can remove this when multi-draw-buffer lands */
- virtual GrRenderTarget* renderTarget() const = 0;
-
protected:
// NOTE, compute some bounds, even if extremely conservative. Do *NOT* setLargest on the bounds
// rect because we outset it for dst copy textures
diff --git a/src/gpu/batches/GrClearBatch.h b/src/gpu/batches/GrClearBatch.h
index c38372c1e2..944485ca7e 100644
--- a/src/gpu/batches/GrClearBatch.h
+++ b/src/gpu/batches/GrClearBatch.h
@@ -28,7 +28,6 @@ public:
const char* name() const override { return "Clear"; }
uint32_t renderTargetUniqueID() const override { return fRenderTarget.get()->getUniqueID(); }
- GrRenderTarget* renderTarget() const override { return fRenderTarget.get(); }
SkString dumpInfo() const override {
SkString string;
@@ -72,7 +71,6 @@ public:
const char* name() const override { return "ClearStencilClip"; }
uint32_t renderTargetUniqueID() const override { return fRenderTarget.get()->getUniqueID(); }
- GrRenderTarget* renderTarget() const override { return fRenderTarget.get(); }
SkString dumpInfo() const override {
SkString string;
diff --git a/src/gpu/batches/GrCopySurfaceBatch.h b/src/gpu/batches/GrCopySurfaceBatch.h
index 7bf8d8d8c2..ed5e77f5b0 100644
--- a/src/gpu/batches/GrCopySurfaceBatch.h
+++ b/src/gpu/batches/GrCopySurfaceBatch.h
@@ -26,7 +26,6 @@ public:
GrRenderTarget* rt = fDst.get()->asRenderTarget();
return rt ? rt->getUniqueID() : 0;
}
- GrRenderTarget* renderTarget() const override { return fDst.get()->asRenderTarget(); }
SkString dumpInfo() const override {
SkString string;
diff --git a/src/gpu/batches/GrDiscardBatch.h b/src/gpu/batches/GrDiscardBatch.h
index 65b6c4bf7d..aa443cf603 100644
--- a/src/gpu/batches/GrDiscardBatch.h
+++ b/src/gpu/batches/GrDiscardBatch.h
@@ -26,7 +26,6 @@ public:
const char* name() const override { return "Discard"; }
uint32_t renderTargetUniqueID() const override { return fRenderTarget.get()->getUniqueID(); }
- GrRenderTarget* renderTarget() const override { return fRenderTarget.get(); }
SkString dumpInfo() const override {
SkString string;
diff --git a/src/gpu/batches/GrDrawBatch.h b/src/gpu/batches/GrDrawBatch.h
index 9401c67501..8e73878981 100644
--- a/src/gpu/batches/GrDrawBatch.h
+++ b/src/gpu/batches/GrDrawBatch.h
@@ -63,11 +63,6 @@ public:
return this->pipeline()->getRenderTarget()->getUniqueID();
}
- GrRenderTarget* renderTarget() const final {
- SkASSERT(fPipelineInstalled);
- return this->pipeline()->getRenderTarget();
- }
-
SkString dumpInfo() const override {
SkString string;
string.appendf("RT: %d\n", this->renderTargetUniqueID());
diff --git a/src/gpu/batches/GrStencilPathBatch.h b/src/gpu/batches/GrStencilPathBatch.h
index 33189c2885..a0dcadb620 100644
--- a/src/gpu/batches/GrStencilPathBatch.h
+++ b/src/gpu/batches/GrStencilPathBatch.h
@@ -31,7 +31,6 @@ public:
const char* name() const override { return "StencilPath"; }
uint32_t renderTargetUniqueID() const override { return fRenderTarget.get()->getUniqueID(); }
- GrRenderTarget* renderTarget() const override { return fRenderTarget.get(); }
SkString dumpInfo() const override {
SkString string;
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 84077a0b74..918bee8f89 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -232,8 +232,8 @@ GrGLGpu::GrGLGpu(GrGLContext* ctx, GrContext* context)
if (this->glCaps().shaderCaps()->pathRenderingSupport()) {
fPathRendering.reset(new GrGLPathRendering(this));
}
+
this->createCopyPrograms();
- fWireRectProgram.fProgram = 0;
}
GrGLGpu::~GrGLGpu() {
@@ -258,19 +258,10 @@ GrGLGpu::~GrGLGpu() {
GL_CALL(DeleteProgram(fCopyPrograms[i].fProgram));
}
}
-
if (0 != fCopyProgramArrayBuffer) {
GL_CALL(DeleteBuffers(1, &fCopyProgramArrayBuffer));
}
- if (0 != fWireRectProgram.fProgram) {
- GL_CALL(DeleteProgram(fWireRectProgram.fProgram));
- }
-
- if (0 != fWireRectArrayBuffer) {
- GL_CALL(DeleteBuffers(1, &fWireRectArrayBuffer));
- }
-
delete fProgramCache;
}
@@ -285,8 +276,6 @@ void GrGLGpu::contextAbandoned() {
for (size_t i = 0; i < SK_ARRAY_COUNT(fCopyPrograms); ++i) {
fCopyPrograms[i].fProgram = 0;
}
- fWireRectProgram.fProgram = 0;
- fWireRectArrayBuffer = 0;
if (this->glCaps().shaderCaps()->pathRenderingSupport()) {
this->glPathRendering()->abandonGpuResources();
}
@@ -3027,6 +3016,7 @@ bool GrGLGpu::onCopySurface(GrSurface* dst,
return false;
}
+
void GrGLGpu::createCopyPrograms() {
for (size_t i = 0; i < SK_ARRAY_COUNT(fCopyPrograms); ++i) {
fCopyPrograms[i].fProgram = 0;
@@ -3047,7 +3037,7 @@ void GrGLGpu::createCopyPrograms() {
GrShaderVar::kVaryingOut_TypeModifier);
GrGLSLShaderVar oFragColor("o_FragColor", kVec4f_GrSLType,
GrShaderVar::kOut_TypeModifier);
-
+
SkString vshaderTxt(version);
aVertex.appendDecl(this->glCaps().glslCaps(), &vshaderTxt);
vshaderTxt.append(";");
@@ -3143,160 +3133,6 @@ void GrGLGpu::createCopyPrograms() {
GR_GL_STATIC_DRAW));
}
-void GrGLGpu::createWireRectProgram() {
- SkASSERT(!fWireRectProgram.fProgram);
- GrGLSLShaderVar uColor("u_color", kVec4f_GrSLType, GrShaderVar::kUniform_TypeModifier);
- GrGLSLShaderVar uRect("u_rect", kVec4f_GrSLType, GrShaderVar::kUniform_TypeModifier);
- GrGLSLShaderVar aVertex("a_vertex", kVec2f_GrSLType, GrShaderVar::kAttribute_TypeModifier);
- const char* version = this->glCaps().glslCaps()->versionDeclString();
-
- // The rect uniform specifies the rectangle in NDC space as a vec4 (left,top,right,bottom). The
- // program is used with a vbo containing the unit square. Vertices are computed from the rect
- // uniform using the 4 vbo vertices.
- SkString vshaderTxt(version);
- aVertex.appendDecl(this->glCaps().glslCaps(), &vshaderTxt);
- vshaderTxt.append(";");
- uRect.appendDecl(this->glCaps().glslCaps(), &vshaderTxt);
- vshaderTxt.append(";");
- vshaderTxt.append(
- "// Wire Rect Program VS\n"
- "void main() {"
- " gl_Position.x = u_rect.x + a_vertex.x * (u_rect.z - u_rect.x);"
- " gl_Position.y = u_rect.y + a_vertex.y * (u_rect.w - u_rect.y);"
- " gl_Position.zw = vec2(0, 1);"
- "}"
- );
-
- GrGLSLShaderVar oFragColor("o_FragColor", kVec4f_GrSLType, GrShaderVar::kOut_TypeModifier);
-
- SkString fshaderTxt(version);
- GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision,
- *this->glCaps().glslCaps(),
- &fshaderTxt);
- uColor.appendDecl(this->glCaps().glslCaps(), &fshaderTxt);
- fshaderTxt.append(";");
- const char* fsOutName;
- if (this->glCaps().glslCaps()->mustDeclareFragmentShaderOutput()) {
- oFragColor.appendDecl(this->glCaps().glslCaps(), &fshaderTxt);
- fshaderTxt.append(";");
- fsOutName = oFragColor.c_str();
- } else {
- fsOutName = "gl_FragColor";
- }
- fshaderTxt.appendf(
- "// Write Rect Program FS\n"
- "void main() {"
- " %s = %s;"
- "}",
- fsOutName,
- uColor.c_str()
- );
-
- GL_CALL_RET(fWireRectProgram.fProgram, CreateProgram());
- const char* str;
- GrGLint length;
-
- str = vshaderTxt.c_str();
- length = SkToInt(vshaderTxt.size());
- GrGLuint vshader = GrGLCompileAndAttachShader(*fGLContext, fWireRectProgram.fProgram,
- GR_GL_VERTEX_SHADER, &str, &length, 1,
- &fStats);
-
- str = fshaderTxt.c_str();
- length = SkToInt(fshaderTxt.size());
- GrGLuint fshader = GrGLCompileAndAttachShader(*fGLContext, fWireRectProgram.fProgram,
- GR_GL_FRAGMENT_SHADER, &str, &length, 1,
- &fStats);
-
- GL_CALL(LinkProgram(fWireRectProgram.fProgram));
-
- GL_CALL_RET(fWireRectProgram.fColorUniform,
- GetUniformLocation(fWireRectProgram.fProgram, "u_color"));
- GL_CALL_RET(fWireRectProgram.fRectUniform,
- GetUniformLocation(fWireRectProgram.fProgram, "u_rect"));
- GL_CALL(BindAttribLocation(fWireRectProgram.fProgram, 0, "a_vertex"));
-
- GL_CALL(DeleteShader(vshader));
- GL_CALL(DeleteShader(fshader));
- GL_CALL(GenBuffers(1, &fWireRectArrayBuffer));
- fHWGeometryState.setVertexBufferID(this, fWireRectArrayBuffer);
- static const GrGLfloat vdata[] = {
- 0, 0,
- 0, 1,
- 1, 1,
- 1, 0,
- };
- GL_ALLOC_CALL(this->glInterface(),
- BufferData(GR_GL_ARRAY_BUFFER,
- (GrGLsizeiptr) sizeof(vdata),
- vdata, // data ptr
- GR_GL_STATIC_DRAW));
-}
-
-void GrGLGpu::drawDebugWireRect(GrRenderTarget* rt, const SkIRect& rect, GrColor color) {
- this->handleDirtyContext();
- if (!fWireRectProgram.fProgram) {
- this->createWireRectProgram();
- }
-
- int w = rt->width();
- int h = rt->height();
-
- // Compute the edges of the rectangle (top,left,right,bottom) in NDC space. Must consider
- // whether the render target is flipped or not.
- GrGLfloat edges[4];
- edges[0] = SkIntToScalar(rect.fLeft) + 0.5f;
- edges[2] = SkIntToScalar(rect.fRight) - 0.5f;
- if (kBottomLeft_GrSurfaceOrigin == rt->origin()) {
- edges[1] = h - (SkIntToScalar(rect.fTop) + 0.5f);
- edges[3] = h - (SkIntToScalar(rect.fBottom) - 0.5f);
- } else {
- edges[1] = SkIntToScalar(rect.fTop) + 0.5f;
- edges[3] = SkIntToScalar(rect.fBottom) - 0.5f;
- }
- edges[0] = 2 * edges[0] / w - 1.0f;
- edges[1] = 2 * edges[1] / h - 1.0f;
- edges[2] = 2 * edges[2] / w - 1.0f;
- edges[3] = 2 * edges[3] / h - 1.0f;
-
- GrGLfloat channels[4];
- static const GrGLfloat scale255 = 1.f / 255.f;
- channels[0] = GrColorUnpackR(color) * scale255;
- channels[1] = GrColorUnpackG(color) * scale255;
- channels[2] = GrColorUnpackB(color) * scale255;
- channels[3] = GrColorUnpackA(color) * scale255;
-
- GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(rt->asRenderTarget());
- this->flushRenderTarget(glRT, &rect);
-
- GL_CALL(UseProgram(fWireRectProgram.fProgram));
- fHWProgramID = fWireRectProgram.fProgram;
-
- fHWGeometryState.setVertexArrayID(this, 0);
-
- GrGLAttribArrayState* attribs =
- fHWGeometryState.bindArrayAndBufferToDraw(this, fWireRectArrayBuffer);
- attribs->set(this, 0, fWireRectArrayBuffer, 2, GR_GL_FLOAT, false, 2 * sizeof(GrGLfloat), 0);
- attribs->disableUnusedArrays(this, 0x1);
-
- GL_CALL(Uniform4fv(fWireRectProgram.fRectUniform, 1, edges));
- GL_CALL(Uniform4fv(fWireRectProgram.fColorUniform, 1, channels));
-
- GrXferProcessor::BlendInfo blendInfo;
- blendInfo.reset();
- this->flushBlend(blendInfo);
- this->flushColorWrite(true);
- this->flushDrawFace(GrPipelineBuilder::kBoth_DrawFace);
- this->flushHWAAState(glRT, false);
- this->disableScissor();
- GrStencilSettings stencil;
- stencil.setDisabled();
- this->flushStencil(stencil);
-
- GL_CALL(DrawArrays(GR_GL_LINE_LOOP, 0, 4));
-}
-
-
void GrGLGpu::copySurfaceAsDraw(GrSurface* dst,
GrSurface* src,
const SkIRect& srcRect,
@@ -3321,7 +3157,8 @@ void GrGLGpu::copySurfaceAsDraw(GrSurface* dst,
GrGLAttribArrayState* attribs =
fHWGeometryState.bindArrayAndBufferToDraw(this, fCopyProgramArrayBuffer);
- attribs->set(this, 0, fCopyProgramArrayBuffer, 2, GR_GL_FLOAT, false, 2 * sizeof(GrGLfloat), 0);
+ attribs->set(this, 0, fCopyProgramArrayBuffer, 2, GR_GL_FLOAT, false,
+ 2 * sizeof(GrGLfloat), 0);
attribs->disableUnusedArrays(this, 0x1);
// dst rect edges in NDC (-1 to 1)
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index d802f08b75..6ec3881b89 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -131,8 +131,6 @@ public:
void resetShaderCacheForTesting() const override;
- void drawDebugWireRect(GrRenderTarget*, const SkIRect&, GrColor) override;
-
private:
GrGLGpu(GrGLContext* ctx, GrContext* context);
@@ -330,8 +328,6 @@ private:
SkAutoTUnref<GrGLContext> fGLContext;
void createCopyPrograms();
- void createWireRectProgram();
- void createUnitRectBuffer();
// GL program-related state
ProgramCache* fProgramCache;
@@ -509,13 +505,6 @@ private:
} fCopyPrograms[2];
GrGLuint fCopyProgramArrayBuffer;
- struct {
- GrGLuint fProgram;
- GrGLint fColorUniform;
- GrGLint fRectUniform;
- } fWireRectProgram;
- GrGLuint fWireRectArrayBuffer;
-
static int TextureTargetToCopyProgramIdx(GrGLenum target) {
if (target == GR_GL_TEXTURE_2D) {
return 0;