diff options
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/GrContext.cpp | 1 | ||||
-rw-r--r-- | src/gpu/GrDrawTarget.cpp | 13 | ||||
-rw-r--r-- | src/gpu/GrDrawTarget.h | 5 | ||||
-rw-r--r-- | src/gpu/GrGpu.h | 2 | ||||
-rw-r--r-- | src/gpu/GrTest.cpp | 2 | ||||
-rw-r--r-- | src/gpu/batches/GrBatch.h | 4 | ||||
-rw-r--r-- | src/gpu/batches/GrClearBatch.h | 2 | ||||
-rw-r--r-- | src/gpu/batches/GrCopySurfaceBatch.h | 1 | ||||
-rw-r--r-- | src/gpu/batches/GrDiscardBatch.h | 1 | ||||
-rw-r--r-- | src/gpu/batches/GrDrawBatch.h | 5 | ||||
-rw-r--r-- | src/gpu/batches/GrStencilPathBatch.h | 1 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 173 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.h | 11 |
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; |