Fix for copy surface not handling dirty context
BUG=521943 Review URL: https://codereview.chromium.org/1304263003
This commit is contained in:
parent
7f9c9eb91e
commit
1cbdcde911
@ -234,6 +234,15 @@ void GrGpu::clearStencilClip(const SkIRect& rect,
|
||||
this->onClearStencilClip(renderTarget, rect, insideClip);
|
||||
}
|
||||
|
||||
bool GrGpu::copySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) {
|
||||
SkASSERT(dst && src);
|
||||
this->handleDirtyContext();
|
||||
return this->onCopySurface(dst, src, srcRect, dstPoint);
|
||||
}
|
||||
|
||||
bool GrGpu::getReadPixelsInfo(GrSurface* srcSurface, int width, int height, size_t rowBytes,
|
||||
GrPixelConfig readConfig, DrawPreference* drawPreference,
|
||||
ReadPixelTempDrawInfo* tempDrawInfo) {
|
||||
|
@ -294,10 +294,10 @@ public:
|
||||
// take place at the GrDrawTarget level and this function implement faster copy paths. The rect
|
||||
// and point are pre-clipped. The src rect and implied dst rect are guaranteed to be within the
|
||||
// src/dst bounds and non-empty.
|
||||
virtual bool copySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) = 0;
|
||||
bool copySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint);
|
||||
|
||||
struct DrawArgs {
|
||||
DrawArgs(const GrPrimitiveProcessor* primProc,
|
||||
@ -482,6 +482,12 @@ private:
|
||||
// overridden by backend-specific derived class to perform the resolve
|
||||
virtual void onResolveRenderTarget(GrRenderTarget* target) = 0;
|
||||
|
||||
// overridden by backend specific derived class to perform the copy surface
|
||||
virtual bool onCopySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) = 0;
|
||||
|
||||
// width and height may be larger than rt (if underlying API allows it).
|
||||
// Should attach the SB to the RT. Returns false if compatible sb could
|
||||
// not be created.
|
||||
|
@ -197,10 +197,10 @@ public:
|
||||
|
||||
void discard(GrRenderTarget*) override {}
|
||||
|
||||
bool copySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) override { return false; };
|
||||
bool onCopySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) override { return false; };
|
||||
|
||||
bool initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* desc) const override {
|
||||
return false;
|
||||
|
@ -2766,10 +2766,10 @@ bool GrGLGpu::initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* desc)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GrGLGpu::copySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) {
|
||||
bool GrGLGpu::onCopySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) {
|
||||
if (src->asTexture() && dst->asRenderTarget()) {
|
||||
this->copySurfaceAsDraw(dst, src, srcRect, dstPoint);
|
||||
return true;
|
||||
|
@ -91,11 +91,6 @@ public:
|
||||
fHWGeometryState.notifyIndexBufferDelete(id);
|
||||
}
|
||||
|
||||
bool copySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) override;
|
||||
|
||||
void buildProgramDesc(GrProgramDesc*,
|
||||
const GrPrimitiveProcessor&,
|
||||
const GrPipeline&,
|
||||
@ -152,6 +147,11 @@ private:
|
||||
|
||||
void onDraw(const DrawArgs&, const GrNonInstancedVertices&) override;
|
||||
|
||||
bool onCopySurface(GrSurface* dst,
|
||||
GrSurface* src,
|
||||
const SkIRect& srcRect,
|
||||
const SkIPoint& dstPoint) override;
|
||||
|
||||
void clearStencil(GrRenderTarget*) override;
|
||||
|
||||
// GrDrawTarget overrides
|
||||
|
Loading…
Reference in New Issue
Block a user