Add additional information (e.g. colorspace) to the GpuDrawHandler
Bug: b/115613038
Change-Id: I375fc5f1bac13557b35e39658d678c61f70024c8
Reviewed-on: https://skia-review.googlesource.com/c/182900
Commit-Queue: Derek Sollenberger <djsollen@google.com>
Auto-Submit: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/tests/VkDrawableTest.cpp b/tests/VkDrawableTest.cpp
index 3ff2607..35651d6 100644
--- a/tests/VkDrawableTest.cpp
+++ b/tests/VkDrawableTest.cpp
@@ -88,7 +88,8 @@
typedef GpuDrawHandler INHERITED;
};
- typedef void (*DrawProc)(TestDrawable*, const GrVkDrawableInfo&);
+ typedef void (*DrawProc)(TestDrawable*, const SkMatrix&, const SkIRect&,
+ const SkImageInfo&, const GrVkDrawableInfo&);
typedef void (*SubmitProc)(TestDrawable*);
// Exercises the exporting of a secondary command buffer from one GrContext and then importing
@@ -96,11 +97,17 @@
// GrContext.
class DrawHandlerImport : public GpuDrawHandler {
public:
- DrawHandlerImport(TestDrawable* td, DrawProc drawProc, SubmitProc submitProc)
+ DrawHandlerImport(TestDrawable* td, DrawProc drawProc, SubmitProc submitProc,
+ const SkMatrix& matrix,
+ const SkIRect& clipBounds,
+ const SkImageInfo& bufferInfo)
: INHERITED()
, fTestDrawable(td)
, fDrawProc(drawProc)
- , fSubmitProc(submitProc) {}
+ , fSubmitProc(submitProc)
+ , fMatrix(matrix)
+ , fClipBounds(clipBounds)
+ , fBufferInfo(bufferInfo) {}
~DrawHandlerImport() override {
fSubmitProc(fTestDrawable);
}
@@ -109,28 +116,32 @@
GrVkDrawableInfo vkInfo;
SkAssertResult(info.getVkDrawableInfo(&vkInfo));
- fDrawProc(fTestDrawable, vkInfo);
+ fDrawProc(fTestDrawable, fMatrix, fClipBounds, fBufferInfo, vkInfo);
}
private:
- TestDrawable* fTestDrawable;
- DrawProc fDrawProc;
- SubmitProc fSubmitProc;
+ TestDrawable* fTestDrawable;
+ DrawProc fDrawProc;
+ SubmitProc fSubmitProc;
+ const SkMatrix fMatrix;
+ const SkIRect fClipBounds;
+ const SkImageInfo fBufferInfo;
typedef GpuDrawHandler INHERITED;
};
// Helper function to test drawing to a secondary command buffer that we imported into the
// GrContext using a GrVkSecondaryCBDrawContext.
- static void ImportDraw(TestDrawable* td, const GrVkDrawableInfo& info) {
- SkImageInfo imageInfo = SkImageInfo::Make(td->fWidth, td->fHeight, kRGBA_8888_SkColorType,
- kPremul_SkAlphaType);
-
- td->fDrawContext = GrVkSecondaryCBDrawContext::Make(td->fContext, imageInfo, info, nullptr);
+ static void ImportDraw(TestDrawable* td, const SkMatrix& matrix, const SkIRect& clipBounds,
+ const SkImageInfo& bufferInfo, const GrVkDrawableInfo& info) {
+ td->fDrawContext = GrVkSecondaryCBDrawContext::Make(td->fContext, bufferInfo, info, nullptr);
if (!td->fDrawContext) {
return;
}
SkCanvas* canvas = td->fDrawContext->getCanvas();
+ canvas->clipRect(SkRect::Make(clipBounds));
+ canvas->setMatrix(matrix);
+
SkIRect rect = SkIRect::MakeXYWH(td->fWidth/2, 0, td->fWidth/4, td->fHeight);
SkPaint paint;
paint.setColor(SK_ColorRED);
@@ -139,7 +150,7 @@
// Draw to an offscreen target so that we end up with a mix of "real" secondary command
// buffers and the imported secondary command buffer.
sk_sp<SkSurface> surf = SkSurface::MakeRenderTarget(td->fContext, SkBudgeted::kYes,
- imageInfo);
+ bufferInfo);
surf->getCanvas()->clear(SK_ColorRED);
SkRect dstRect = SkRect::MakeXYWH(3*td->fWidth/4, 0, td->fWidth/4, td->fHeight);
@@ -171,13 +182,15 @@
std::unique_ptr<GpuDrawHandler> onSnapGpuDrawHandler(GrBackendApi backendApi,
const SkMatrix& matrix,
- const SkIRect& clipBounds) override {
+ const SkIRect& clipBounds,
+ const SkImageInfo& bufferInfo) override {
if (backendApi != GrBackendApi::kVulkan) {
return nullptr;
}
std::unique_ptr<GpuDrawHandler> draw;
if (fContext) {
- draw.reset(new DrawHandlerImport(this, ImportDraw, ImportSubmitted));
+ draw.reset(new DrawHandlerImport(this, ImportDraw, ImportSubmitted, matrix,
+ clipBounds, bufferInfo));
} else {
draw.reset(new DrawHandlerBasic(fInterface, fWidth, fHeight));
}