diff options
-rw-r--r-- | gn/tests.gni | 3 | ||||
-rw-r--r-- | include/core/SkSurface.h | 2 | ||||
-rw-r--r-- | include/private/SkDeferredDisplayList.h | 2 | ||||
-rw-r--r-- | include/private/SkSurfaceCharacterization.h | 18 | ||||
-rw-r--r-- | src/core/SkDeferredDisplayListRecorder.cpp | 3 | ||||
-rw-r--r-- | src/image/SkSurface.cpp | 2 | ||||
-rw-r--r-- | src/image/SkSurface_Base.h | 2 | ||||
-rw-r--r-- | src/image/SkSurface_Gpu.cpp | 10 | ||||
-rw-r--r-- | src/image/SkSurface_Gpu.h | 2 | ||||
-rw-r--r-- | tests/DeferredDisplayListTest.cpp | 142 |
10 files changed, 18 insertions, 168 deletions
diff --git a/gn/tests.gni b/gn/tests.gni index eb20aaba0d..23e4f831b9 100644 --- a/gn/tests.gni +++ b/gn/tests.gni @@ -47,9 +47,8 @@ tests_sources = [ "$_tests/CTest.cpp", "$_tests/DashPathEffectTest.cpp", "$_tests/DataRefTest.cpp", - "$_tests/DefaultPathRendererTest.cpp", - "$_tests/DeferredDisplayListTest.cpp", "$_tests/DequeTest.cpp", + "$_tests/DefaultPathRendererTest.cpp", "$_tests/DetermineDomainModeTest.cpp", "$_tests/DeviceLooperTest.cpp", "$_tests/DeviceTest.cpp", diff --git a/include/core/SkSurface.h b/include/core/SkSurface.h index f70db73fe5..a1024039dc 100644 --- a/include/core/SkSurface.h +++ b/include/core/SkSurface.h @@ -362,7 +362,7 @@ public: * The draw will be skipped if the characterization stored in the display list * isn't compatible with this surface. */ - bool draw(SkDeferredDisplayList* deferredDisplayList); + void draw(SkDeferredDisplayList* deferredDisplayList); protected: SkSurface(int width, int height, const SkSurfaceProps* surfaceProps); diff --git a/include/private/SkDeferredDisplayList.h b/include/private/SkDeferredDisplayList.h index b53390d174..c6e67f4dcc 100644 --- a/include/private/SkDeferredDisplayList.h +++ b/include/private/SkDeferredDisplayList.h @@ -32,7 +32,7 @@ public: } // TODO: remove this. It is just scaffolding to get something up & running - bool draw(SkSurface*); + void draw(SkSurface*); private: const SkSurfaceCharacterization fCharacterization; diff --git a/include/private/SkSurfaceCharacterization.h b/include/private/SkSurfaceCharacterization.h index f450b704d9..8b20cacb36 100644 --- a/include/private/SkSurfaceCharacterization.h +++ b/include/private/SkSurfaceCharacterization.h @@ -11,7 +11,6 @@ #include "GrTypes.h" #if SK_SUPPORT_GPU -#include "GrTypesPriv.h" #include "SkSurfaceProps.h" class GrContextThreadSafeProxy; @@ -22,7 +21,7 @@ class SkColorSpace; rendering decisions. When passed into a SkDeferredDisplayListRecorder it will copy the data and pass it on to the SkDeferredDisplayList if/when it is created. Note that both of those objects (the Recorder and the DisplayList) will take a ref on the - GrContextThreadSafeProxy and SkColorSpace objects. + GrContextThreadSafeProxy object. */ class SkSurfaceCharacterization { public: @@ -31,8 +30,7 @@ public: , fWidth(0) , fHeight(0) , fConfig(kUnknown_GrPixelConfig) - , fFSAAType(GrFSAAType::kNone) - , fStencilCnt(0) + , fSampleCnt(0) , fSurfaceProps(0, kUnknown_SkPixelGeometry) { } @@ -47,8 +45,7 @@ public: int width() const { return fWidth; } int height() const { return fHeight; } GrPixelConfig config() const { return fConfig; } - GrFSAAType fsaaType() const { return fFSAAType; } - int stencilCount() const { return fStencilCnt; } + int sampleCount() const { return fSampleCnt; } SkColorSpace* colorSpace() const { return fColorSpace.get(); } sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; } const SkSurfaceProps& surfaceProps()const { return fSurfaceProps; } @@ -60,8 +57,7 @@ private: GrSurfaceOrigin origin, int width, int height, GrPixelConfig config, - GrFSAAType fsaaType, - int stencilCnt, + int sampleCnt, sk_sp<SkColorSpace> colorSpace, const SkSurfaceProps& surfaceProps) { fContextInfo = contextInfo; @@ -69,8 +65,7 @@ private: fWidth = width; fHeight = height; fConfig = config; - fFSAAType = fsaaType; - fStencilCnt = stencilCnt; + fSampleCnt = sampleCnt; fColorSpace = std::move(colorSpace); fSurfaceProps = surfaceProps; } @@ -80,8 +75,7 @@ private: int fWidth; int fHeight; GrPixelConfig fConfig; - GrFSAAType fFSAAType; - int fStencilCnt; + int fSampleCnt; sk_sp<SkColorSpace> fColorSpace; SkSurfaceProps fSurfaceProps; }; diff --git a/src/core/SkDeferredDisplayListRecorder.cpp b/src/core/SkDeferredDisplayListRecorder.cpp index f6981e7535..18e516ab31 100644 --- a/src/core/SkDeferredDisplayListRecorder.cpp +++ b/src/core/SkDeferredDisplayListRecorder.cpp @@ -43,7 +43,6 @@ std::unique_ptr<SkDeferredDisplayList> SkDeferredDisplayListRecorder::detach() { // Placeholder. Ultimately, the SkSurface_Gpu will pass the wrapped opLists to its // renderTargetContext. -bool SkDeferredDisplayList::draw(SkSurface* surface) { +void SkDeferredDisplayList::draw(SkSurface* surface) { surface->getCanvas()->drawImage(fImage.get(), 0, 0); - return true; } diff --git a/src/image/SkSurface.cpp b/src/image/SkSurface.cpp index 9cef76f236..04e16f6281 100644 --- a/src/image/SkSurface.cpp +++ b/src/image/SkSurface.cpp @@ -213,7 +213,7 @@ bool SkSurface::characterize(SkSurfaceCharacterization* characterization) const return asSB(const_cast<SkSurface*>(this))->onCharacterize(characterization); } -bool SkSurface::draw(SkDeferredDisplayList* ddl) { +void SkSurface::draw(SkDeferredDisplayList* ddl) { return asSB(this)->onDraw(ddl); } diff --git a/src/image/SkSurface_Base.h b/src/image/SkSurface_Base.h index b71d4c7043..e05d371cd8 100644 --- a/src/image/SkSurface_Base.h +++ b/src/image/SkSurface_Base.h @@ -95,7 +95,7 @@ public: } virtual bool onCharacterize(SkSurfaceCharacterization*) const { return false; } - virtual bool onDraw(SkDeferredDisplayList*) { return false; } + virtual void onDraw(SkDeferredDisplayList*) { } inline SkCanvas* getCachedCanvas(); inline sk_sp<SkImage> refCachedImage(); diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp index dc1f308512..605f229023 100644 --- a/src/image/SkSurface_Gpu.cpp +++ b/src/image/SkSurface_Gpu.cpp @@ -165,7 +165,7 @@ bool SkSurface_Gpu::onCharacterize(SkSurfaceCharacterization* data) const { GrContext* ctx = fDevice->context(); data->set(ctx->threadSafeProxy(), rtc->origin(), rtc->width(), rtc->height(), - rtc->colorSpaceInfo().config(), rtc->fsaaType(), rtc->numStencilSamples(), + rtc->colorSpaceInfo().config(), rtc->numColorSamples(), rtc->colorSpaceInfo().refColorSpace(), this->props()); return true; @@ -178,19 +178,19 @@ bool SkSurface_Gpu::isCompatible(const SkSurfaceCharacterization& data) const { return data.contextInfo() && data.contextInfo()->matches(ctx) && data.origin() == rtc->origin() && data.width() == rtc->width() && data.height() == rtc->height() && data.config() == rtc->colorSpaceInfo().config() && - data.fsaaType() == rtc->fsaaType() && data.stencilCount() == rtc->numStencilSamples() && + data.sampleCount() == rtc->numColorSamples() && SkColorSpace::Equals(data.colorSpace(), rtc->colorSpaceInfo().colorSpace()) && data.surfaceProps() == rtc->surfaceProps(); } -bool SkSurface_Gpu::onDraw(SkDeferredDisplayList* dl) { +void SkSurface_Gpu::onDraw(SkDeferredDisplayList* dl) { if (!this->isCompatible(dl->characterization())) { - return false; + return; } // Ultimately need to pass opLists from the DeferredDisplayList on to the // SkGpuDevice's renderTargetContext. - return dl->draw(this); + dl->draw(this); } diff --git a/src/image/SkSurface_Gpu.h b/src/image/SkSurface_Gpu.h index cb21771aa9..c95966370c 100644 --- a/src/image/SkSurface_Gpu.h +++ b/src/image/SkSurface_Gpu.h @@ -31,7 +31,7 @@ public: bool onWait(int numSemaphores, const GrBackendSemaphore* waitSemaphores) override; bool onCharacterize(SkSurfaceCharacterization*) const override; bool isCompatible(const SkSurfaceCharacterization&) const; - bool onDraw(SkDeferredDisplayList*) override; + void onDraw(SkDeferredDisplayList*) override; SkGpuDevice* getDevice() { return fDevice.get(); } diff --git a/tests/DeferredDisplayListTest.cpp b/tests/DeferredDisplayListTest.cpp deleted file mode 100644 index b6839afa1a..0000000000 --- a/tests/DeferredDisplayListTest.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "SkTypes.h" - -#if SK_SUPPORT_GPU - -#include "SkCanvas.h" -#include "SkDeferredDisplayListRecorder.h" -#include "SkGpuDevice.h" -#include "SkSurface.h" -#include "SkSurface_Gpu.h" -#include "SkSurfaceCharacterization.h" -#include "SkSurfaceProps.h" -#include "Test.h" - -class SurfaceParameters { -public: - static const int kNumParams = 8; - static const int kSampleCount = 5; - - SurfaceParameters() - : fWidth(64) - , fHeight(64) - , fOrigin(kTopLeft_GrSurfaceOrigin) - , fColorType(kRGBA_8888_SkColorType) - , fColorSpace(SkColorSpace::MakeSRGB()) - , fSampleCount(0) - , fSurfaceProps(0x0, kUnknown_SkPixelGeometry) { - } - - int sampleCount() const { return fSampleCount; } - - // Modify the SurfaceParameters in just one way - void modify(int i) { - switch (i) { - case 0: - fWidth = 63; - break; - case 1: - fHeight = 63; - break; - case 2: - fOrigin = kBottomLeft_GrSurfaceOrigin; - break; - case 3: - fColorType = kRGBA_F16_SkColorType; - break; - case 4: - fColorSpace = SkColorSpace::MakeSRGBLinear(); - break; - case kSampleCount: - fSampleCount = 4; - break; - case 6: - fSurfaceProps = SkSurfaceProps(0x0, kRGB_H_SkPixelGeometry); - break; - case 7: - fSurfaceProps = SkSurfaceProps(SkSurfaceProps::kUseDeviceIndependentFonts_Flag, - kUnknown_SkPixelGeometry); - break; - } - } - - // Create the surface with the current set of parameters - sk_sp<SkSurface> make(GrContext* context) const { - // Note that Ganesh doesn't make use of the SkImageInfo's alphaType - SkImageInfo ii = SkImageInfo::Make(fWidth, fHeight, fColorType, - kPremul_SkAlphaType, fColorSpace); - - return SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, ii, fSampleCount, - fOrigin, &fSurfaceProps); - } - -private: - int fWidth; - int fHeight; - GrSurfaceOrigin fOrigin; - SkColorType fColorType; - sk_sp<SkColorSpace> fColorSpace; - int fSampleCount; - SkSurfaceProps fSurfaceProps; -}; - -// This tests SkSurfaceCharacterization/SkSurface compatibility -DEF_GPUTEST_FOR_ALL_CONTEXTS(SkSurfaceCharacterization, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - - std::unique_ptr<SkDeferredDisplayList> ddl; - - // First, create a DDL using the stock SkSurface parameters - { - SurfaceParameters params; - - sk_sp<SkSurface> s = params.make(context); - if (!s) { - return; - } - - SkSurfaceCharacterization c; - SkAssertResult(s->characterize(&c)); - - SkDeferredDisplayListRecorder r(c); - SkCanvas* canvas = r.getCanvas(); - canvas->drawRect(SkRect::MakeXYWH(10, 10, 10, 10), SkPaint()); - ddl = r.detach(); - - REPORTER_ASSERT(reporter, s->draw(ddl.get())); - } - - // Then, alter each parameter in turn and check that the DDL & surface are incompatible - for (int i = 0; i < SurfaceParameters::kNumParams; ++i) { - SurfaceParameters params; - params.modify(i); - - sk_sp<SkSurface> s = params.make(context); - if (!s) { - continue; - } - - if (SurfaceParameters::kSampleCount == i) { - SkSurface_Gpu* gpuSurf = static_cast<SkSurface_Gpu*>(s.get()); - - int supportedSampleCount = context->caps()->getSampleCount( - params.sampleCount(), - gpuSurf->getDevice()->accessRenderTargetContext()->asRenderTargetProxy()->config()); - if (0 == supportedSampleCount) { - // If changing the sample count won't result in a different - // surface characterization, skip this step - continue; - } - } - - REPORTER_ASSERT(reporter, !s->draw(ddl.get())); - } -} - -#endif |