Update DDL test harness to use GrDirectContexts
Before I start updating this to support relocatable DDLs I felt I
should clean it up a bit.
Change-Id: I640d15a40164b33c4c2d7378e37d39fe7d3ff313
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/300926
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/tools/DDLPromiseImageHelper.cpp b/tools/DDLPromiseImageHelper.cpp
index e17dd1a..8c9ddb1 100644
--- a/tools/DDLPromiseImageHelper.cpp
+++ b/tools/DDLPromiseImageHelper.cpp
@@ -12,7 +12,7 @@
#include "include/core/SkSerialProcs.h"
#include "include/core/SkYUVAIndex.h"
#include "include/core/SkYUVASizeInfo.h"
-#include "include/gpu/GrContext.h"
+#include "include/gpu/GrDirectContext.h"
#include "src/core/SkCachedData.h"
#include "src/core/SkMipMap.h"
#include "src/core/SkTaskGroup.h"
@@ -88,6 +88,15 @@
fPromiseImageTexture = SkPromiseImageTexture::Make(backendTexture);
}
+void PromiseImageCallbackContext::destroyBackendTexture() {
+ SkASSERT(!fPromiseImageTexture || fPromiseImageTexture->unique());
+
+ if (fPromiseImageTexture) {
+ fContext->deleteBackendTexture(fPromiseImageTexture->backendTexture());
+ }
+ fPromiseImageTexture = nullptr;
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
sk_sp<SkData> DDLPromiseImageHelper::deflateSKP(const SkPicture* inputPicture) {
@@ -106,7 +115,7 @@
return inputPicture->serialize(&procs);
}
-static GrBackendTexture create_yuva_texture(GrContext* context, const SkPixmap& pm,
+static GrBackendTexture create_yuva_texture(GrDirectContext* direct, const SkPixmap& pm,
const SkYUVAIndex yuvaIndices[4], int texIndex) {
SkASSERT(texIndex >= 0 && texIndex <= 3);
@@ -125,12 +134,12 @@
auto markFinished = [](void* context) {
*(bool*)context = true;
};
- auto beTex = context->createBackendTexture(&pm, 1, GrRenderable::kNo, GrProtected::kNo,
- markFinished, &finishedBECreate);
+ auto beTex = direct->createBackendTexture(&pm, 1, GrRenderable::kNo, GrProtected::kNo,
+ markFinished, &finishedBECreate);
if (beTex.isValid()) {
- context->submit();
+ direct->submit();
while (!finishedBECreate) {
- context->checkAsyncWorkCompletion();
+ direct->checkAsyncWorkCompletion();
}
}
return beTex;
@@ -141,10 +150,8 @@
* a single promise image.
* For YUV textures this will result in up to 4 actual textures.
*/
-void DDLPromiseImageHelper::CreateBETexturesForPromiseImage(GrContext* context,
+void DDLPromiseImageHelper::CreateBETexturesForPromiseImage(GrDirectContext* direct,
PromiseImageInfo* info) {
- SkASSERT(context->asDirectContext());
-
if (info->isYUV()) {
int numPixmaps;
SkAssertResult(SkYUVAIndex::AreValidIndices(info->yuvaIndices(), &numPixmaps));
@@ -155,7 +162,7 @@
SkASSERT(callbackContext);
// DDL TODO: what should we do with mipmapped YUV images
- callbackContext->setBackendTexture(create_yuva_texture(context, yuvPixmap,
+ callbackContext->setBackendTexture(create_yuva_texture(direct, yuvPixmap,
info->yuvaIndices(), j));
SkASSERT(callbackContext->promiseImageTexture());
}
@@ -172,23 +179,21 @@
auto markFinished = [](void* context) {
*(bool*)context = true;
};
- auto backendTex = context->createBackendTexture(mipLevels.get(), info->numMipLevels(),
- GrRenderable::kNo, GrProtected::kNo,
- markFinished, &finishedBECreate);
+ auto backendTex = direct->createBackendTexture(mipLevels.get(), info->numMipLevels(),
+ GrRenderable::kNo, GrProtected::kNo,
+ markFinished, &finishedBECreate);
SkASSERT(backendTex.isValid());
- context->submit();
+ direct->submit();
while (!finishedBECreate) {
- context->checkAsyncWorkCompletion();
+ direct->checkAsyncWorkCompletion();
}
callbackContext->setBackendTexture(backendTex);
}
}
-void DDLPromiseImageHelper::DeleteBETexturesForPromiseImage(GrContext* context,
+void DDLPromiseImageHelper::DeleteBETexturesForPromiseImage(GrDirectContext* direct,
PromiseImageInfo* info) {
- SkASSERT(context->asDirectContext());
-
if (info->isYUV()) {
int numPixmaps;
SkAssertResult(SkYUVAIndex::AreValidIndices(info->yuvaIndices(), &numPixmaps));
@@ -211,8 +216,8 @@
}
}
-void DDLPromiseImageHelper::createCallbackContexts(GrContext* context) {
- const GrCaps* caps = context->priv().caps();
+void DDLPromiseImageHelper::createCallbackContexts(GrDirectContext* direct) {
+ const GrCaps* caps = direct->priv().caps();
const int maxDimension = caps->maxTextureSize();
for (int i = 0; i < fImageInfo.count(); ++i) {
@@ -225,11 +230,11 @@
for (int j = 0; j < numPixmaps; ++j) {
const SkPixmap& yuvPixmap = info.yuvPixmap(j);
- GrBackendFormat backendFormat = context->defaultBackendFormat(yuvPixmap.colorType(),
- GrRenderable::kNo);
+ GrBackendFormat backendFormat = direct->defaultBackendFormat(yuvPixmap.colorType(),
+ GrRenderable::kNo);
sk_sp<PromiseImageCallbackContext> callbackContext(
- new PromiseImageCallbackContext(context, backendFormat));
+ new PromiseImageCallbackContext(direct, backendFormat));
info.setCallbackContext(j, std::move(callbackContext));
}
@@ -242,48 +247,44 @@
continue;
}
- GrBackendFormat backendFormat = context->defaultBackendFormat(baseLevel.colorType(),
- GrRenderable::kNo);
+ GrBackendFormat backendFormat = direct->defaultBackendFormat(baseLevel.colorType(),
+ GrRenderable::kNo);
if (!caps->isFormatTexturable(backendFormat)) {
continue;
}
sk_sp<PromiseImageCallbackContext> callbackContext(
- new PromiseImageCallbackContext(context, backendFormat));
+ new PromiseImageCallbackContext(direct, backendFormat));
info.setCallbackContext(0, std::move(callbackContext));
}
}
}
-void DDLPromiseImageHelper::uploadAllToGPU(SkTaskGroup* taskGroup, GrContext* context) {
- SkASSERT(context->asDirectContext());
-
+void DDLPromiseImageHelper::uploadAllToGPU(SkTaskGroup* taskGroup, GrDirectContext* direct) {
if (taskGroup) {
for (int i = 0; i < fImageInfo.count(); ++i) {
PromiseImageInfo* info = &fImageInfo[i];
- taskGroup->add([context, info]() { CreateBETexturesForPromiseImage(context, info); });
+ taskGroup->add([direct, info]() { CreateBETexturesForPromiseImage(direct, info); });
}
} else {
for (int i = 0; i < fImageInfo.count(); ++i) {
- CreateBETexturesForPromiseImage(context, &fImageInfo[i]);
+ CreateBETexturesForPromiseImage(direct, &fImageInfo[i]);
}
}
}
-void DDLPromiseImageHelper::deleteAllFromGPU(SkTaskGroup* taskGroup, GrContext* context) {
- SkASSERT(context->asDirectContext());
-
+void DDLPromiseImageHelper::deleteAllFromGPU(SkTaskGroup* taskGroup, GrDirectContext* direct) {
if (taskGroup) {
for (int i = 0; i < fImageInfo.count(); ++i) {
PromiseImageInfo* info = &fImageInfo[i];
- taskGroup->add([context, info]() { DeleteBETexturesForPromiseImage(context, info); });
+ taskGroup->add([direct, info]() { DeleteBETexturesForPromiseImage(direct, info); });
}
} else {
for (int i = 0; i < fImageInfo.count(); ++i) {
- DeleteBETexturesForPromiseImage(context, &fImageInfo[i]);
+ DeleteBETexturesForPromiseImage(direct, &fImageInfo[i]);
}
}
}