aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/private/GrSurfaceProxy.h2
-rw-r--r--src/gpu/GrOpList.cpp6
-rw-r--r--src/gpu/GrSurfaceProxy.cpp13
-rw-r--r--src/gpu/effects/GrYUVtoRGBEffect.cpp13
-rw-r--r--src/gpu/effects/GrYUVtoRGBEffect.fp14
-rw-r--r--src/gpu/effects/GrYUVtoRGBEffect.h1
-rw-r--r--src/image/SkImage_Gpu.cpp6
7 files changed, 45 insertions, 10 deletions
diff --git a/include/private/GrSurfaceProxy.h b/include/private/GrSurfaceProxy.h
index d69a294194..327ceb13a9 100644
--- a/include/private/GrSurfaceProxy.h
+++ b/include/private/GrSurfaceProxy.h
@@ -430,7 +430,7 @@ protected:
void assign(sk_sp<GrSurface> surface);
sk_sp<GrSurface> createSurfaceImpl(GrResourceProvider*, int sampleCnt, bool needsStencil,
- GrSurfaceDescFlags descFlags, GrMipMapped) const;
+ GrSurfaceDescFlags, GrMipMapped) const;
bool instantiateImpl(GrResourceProvider* resourceProvider, int sampleCnt, bool needsStencil,
GrSurfaceDescFlags descFlags, GrMipMapped, const GrUniqueKey*);
diff --git a/src/gpu/GrOpList.cpp b/src/gpu/GrOpList.cpp
index 313c38f14c..c724ea9ba4 100644
--- a/src/gpu/GrOpList.cpp
+++ b/src/gpu/GrOpList.cpp
@@ -145,8 +145,10 @@ static const char* op_to_name(GrLoadOp op) {
void GrOpList::dump(bool printDependencies) const {
SkDebugf("--------------------------------------------------------------\n");
- SkDebugf("opListID: %d -> proxyID: %d\n", fUniqueID,
- fTarget.get() ? fTarget.get()->uniqueID().asUInt() : -1);
+ SkDebugf("opListID: %d - proxyID: %d - surfaceID: %d\n", fUniqueID,
+ fTarget.get() ? fTarget.get()->uniqueID().asUInt() : -1,
+ fTarget.get() && fTarget.get()->priv().peekSurface()
+ ? fTarget.get()->priv().peekSurface()->uniqueID().asUInt() : -1);
SkDebugf("ColorLoadOp: %s %x StencilLoadOp: %s\n",
op_to_name(fColorLoadOp),
GrLoadOp::kClear == fColorLoadOp ? fLoadClearColor : 0x0,
diff --git a/src/gpu/GrSurfaceProxy.cpp b/src/gpu/GrSurfaceProxy.cpp
index 81ad5840ed..9e79ead801 100644
--- a/src/gpu/GrSurfaceProxy.cpp
+++ b/src/gpu/GrSurfaceProxy.cpp
@@ -115,10 +115,10 @@ bool GrSurfaceProxyPriv::AttachStencilIfNeeded(GrResourceProvider* resourceProvi
return true;
}
-sk_sp<GrSurface> GrSurfaceProxy::createSurfaceImpl(
- GrResourceProvider* resourceProvider,
- int sampleCnt, bool needsStencil,
- GrSurfaceDescFlags descFlags, GrMipMapped mipMapped) const {
+sk_sp<GrSurface> GrSurfaceProxy::createSurfaceImpl(GrResourceProvider* resourceProvider,
+ int sampleCnt, bool needsStencil,
+ GrSurfaceDescFlags descFlags,
+ GrMipMapped mipMapped) const {
SkASSERT(GrSurfaceProxy::LazyState::kNot == this->lazyInstantiationState());
SkASSERT(!fTarget);
GrSurfaceDesc desc;
@@ -132,7 +132,10 @@ sk_sp<GrSurface> GrSurfaceProxy::createSurfaceImpl(
desc.fSampleCnt = sampleCnt;
GrResourceProvider::Flags resourceProviderFlags = GrResourceProvider::kNone_Flag;
- if (fSurfaceFlags & GrInternalSurfaceFlags::kNoPendingIO) {
+ if (fSurfaceFlags & GrInternalSurfaceFlags::kNoPendingIO ||
+ resourceProvider->explicitlyAllocateGPUResources()) {
+ // The explicit resource allocator requires that any resources it pulls out of the
+ // cache have no pending IO.
resourceProviderFlags = GrResourceProvider::kNoPendingIO_Flag;
}
diff --git a/src/gpu/effects/GrYUVtoRGBEffect.cpp b/src/gpu/effects/GrYUVtoRGBEffect.cpp
index 55e7902739..905445e852 100644
--- a/src/gpu/effects/GrYUVtoRGBEffect.cpp
+++ b/src/gpu/effects/GrYUVtoRGBEffect.cpp
@@ -60,6 +60,19 @@ std::unique_ptr<GrFragmentProcessor> GrYUVtoRGBEffect::Make(sk_sp<GrTextureProxy
std::move(yProxy), yTransform, std::move(uProxy), uTransform, std::move(vProxy),
vTransform, mat, nv12, GrSamplerState(GrSamplerState::WrapMode::kClamp, uvFilterMode)));
}
+
+SkString GrYUVtoRGBEffect::dumpInfo() const {
+ SkString str;
+ str.appendf("Y: %d %d U: %d %d V: %d %d\n",
+ fYSampler.proxy()->uniqueID().asUInt(),
+ fYSampler.proxy()->underlyingUniqueID().asUInt(),
+ fUSampler.proxy()->uniqueID().asUInt(),
+ fUSampler.proxy()->underlyingUniqueID().asUInt(),
+ fVSampler.proxy()->uniqueID().asUInt(),
+ fVSampler.proxy()->underlyingUniqueID().asUInt());
+
+ return str;
+}
#include "glsl/GrGLSLFragmentProcessor.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
#include "glsl/GrGLSLProgramBuilder.h"
diff --git a/src/gpu/effects/GrYUVtoRGBEffect.fp b/src/gpu/effects/GrYUVtoRGBEffect.fp
index e49fedae71..453800dd1b 100644
--- a/src/gpu/effects/GrYUVtoRGBEffect.fp
+++ b/src/gpu/effects/GrYUVtoRGBEffect.fp
@@ -41,6 +41,7 @@ layout(key) in bool nv12;
sk_sp<GrTextureProxy> uProxy,
sk_sp<GrTextureProxy> vProxy,
SkYUVColorSpace colorSpace, bool nv12);
+ SkString dumpInfo() const override;
}
@cpp {
@@ -105,6 +106,19 @@ layout(key) in bool nv12;
GrSamplerState(GrSamplerState::WrapMode::kClamp,
uvFilterMode)));
}
+
+ SkString GrYUVtoRGBEffect::dumpInfo() const {
+ SkString str;
+ str.appendf("Y: %d %d U: %d %d V: %d %d\n",
+ fYSampler.proxy()->uniqueID().asUInt(),
+ fYSampler.proxy()->underlyingUniqueID().asUInt(),
+ fUSampler.proxy()->uniqueID().asUInt(),
+ fUSampler.proxy()->underlyingUniqueID().asUInt(),
+ fVSampler.proxy()->uniqueID().asUInt(),
+ fVSampler.proxy()->underlyingUniqueID().asUInt());
+
+ return str;
+ }
}
void main() {
diff --git a/src/gpu/effects/GrYUVtoRGBEffect.h b/src/gpu/effects/GrYUVtoRGBEffect.h
index 3d44285bfe..6cc468edc0 100644
--- a/src/gpu/effects/GrYUVtoRGBEffect.h
+++ b/src/gpu/effects/GrYUVtoRGBEffect.h
@@ -19,6 +19,7 @@ public:
sk_sp<GrTextureProxy> uProxy,
sk_sp<GrTextureProxy> vProxy,
SkYUVColorSpace colorSpace, bool nv12);
+ SkString dumpInfo() const override;
SkMatrix44 ySamplerTransform() const { return fYSamplerTransform; }
SkMatrix44 uSamplerTransform() const { return fUSamplerTransform; }
SkMatrix44 vSamplerTransform() const { return fVSamplerTransform; }
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 4ecfb22402..1dea80659a 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -425,8 +425,8 @@ sk_sp<SkImage> SkImage_Gpu::MakeFromYUVATexturesCopyImpl(GrContext* ctx,
paint.setPorterDuffXPFactory(SkBlendMode::kSrc);
// TODO: Modify the fragment processor to sample from different channel instead of taking nv12
// bool.
- paint.addColorFragmentProcessor(
- GrYUVtoRGBEffect::Make(yProxy, uProxy, vProxy, colorSpace, nv12));
+ paint.addColorFragmentProcessor(GrYUVtoRGBEffect::Make(std::move(yProxy), std::move(uProxy),
+ std::move(vProxy), colorSpace, nv12));
const SkRect rect = SkRect::MakeIWH(width, height);
@@ -435,6 +435,8 @@ sk_sp<SkImage> SkImage_Gpu::MakeFromYUVATexturesCopyImpl(GrContext* ctx,
if (!renderTargetContext->asSurfaceProxy()) {
return nullptr;
}
+
+ // DDL TODO: in the promise image version we must not flush here
ctx->contextPriv().flushSurfaceWrites(renderTargetContext->asSurfaceProxy());
// MDB: this call is okay bc we know 'renderTargetContext' was exact