aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/ProxyTest.cpp
diff options
context:
space:
mode:
authorGravatar csmartdalton <csmartdalton@google.com>2016-08-10 11:09:07 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-10 11:09:07 -0700
commitf9635999a4aa8810d04e8ef04594a9fbcc061e3d (patch)
tree07e43ef173ca41adc6ceec7ade2f1dd2669cfbf6 /tests/ProxyTest.cpp
parent4ab47e087ecfc82f070cbbaef4d9eb562d3fd163 (diff)
Add flag for window rectangles to GrRenderTarget
Adds a flag to GrRenderTarget that indicates whether it can be used with window rectangles. Also attempts to clean up some of the mixed samples API. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2225303002 Review-Url: https://codereview.chromium.org/2225303002
Diffstat (limited to 'tests/ProxyTest.cpp')
-rw-r--r--tests/ProxyTest.cpp36
1 files changed, 32 insertions, 4 deletions
diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp
index 2ed4591a72..45d3945c7f 100644
--- a/tests/ProxyTest.cpp
+++ b/tests/ProxyTest.cpp
@@ -10,6 +10,7 @@
#include "Test.h"
#if SK_SUPPORT_GPU
+#include "GrGpu.h"
#include "GrSurfaceProxy.h"
#include "GrTextureProxy.h"
#include "GrRenderTargetProxy.h"
@@ -50,7 +51,8 @@ static void check_rendertarget(skiatest::Reporter* reporter,
rtProxy->isStencilBufferMultisampled());
REPORTER_ASSERT(reporter, rt->numColorSamples() == rtProxy->numColorSamples());
REPORTER_ASSERT(reporter, rt->numStencilSamples() == rtProxy->numStencilSamples());
- REPORTER_ASSERT(reporter, rt->hasMixedSamples() == rtProxy->hasMixedSamples());
+ REPORTER_ASSERT(reporter, rt->isMixedSampled() == rtProxy->isMixedSampled());
+ REPORTER_ASSERT(reporter, rt->renderTargetPriv().flags() == rtProxy->testingOnly_getFlags());
}
static void check_texture(skiatest::Reporter* reporter,
@@ -124,6 +126,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AllocedProxyTest, reporter, ctxInfo) {
DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
GrTextureProvider* provider = ctxInfo.grContext()->textureProvider();
+ const GrCaps& caps = *ctxInfo.grContext()->caps();
static const int kWidthHeight = 100;
@@ -131,8 +134,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
for (auto config : { kAlpha_8_GrPixelConfig, kRGBA_8888_GrPixelConfig }) {
for (auto budgeted : { SkBudgeted::kYes, SkBudgeted::kNo }) {
for (auto numSamples: { 0, 4}) {
- bool renderable = ctxInfo.grContext()->caps()->isConfigRenderable(
- config, numSamples > 0);
+ bool renderable = caps.isConfigRenderable(config, numSamples > 0);
GrSurfaceDesc desc;
desc.fOrigin = origin;
@@ -141,14 +143,40 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) {
desc.fConfig = config;
desc.fSampleCnt = numSamples;
+ // External on-screen render target.
+ if (renderable && kOpenGL_GrBackend == ctxInfo.backend()) {
+ GrBackendRenderTargetDesc backendDesc;
+ backendDesc.fWidth = kWidthHeight;
+ backendDesc.fHeight = kWidthHeight;
+ backendDesc.fConfig = config;
+ backendDesc.fOrigin = origin;
+ backendDesc.fSampleCnt = numSamples;
+ backendDesc.fStencilBits = 8;
+ backendDesc.fRenderTargetHandle = 0;
+
+ GrGpu* gpu = ctxInfo.grContext()->getGpu();
+ sk_sp<GrRenderTarget> defaultFBO(
+ gpu->wrapBackendRenderTarget(backendDesc, kBorrow_GrWrapOwnership));
+ SkASSERT(!defaultFBO->renderTargetPriv().supportsWindowRectangles());
+
+ sk_sp<GrRenderTargetProxy> rtProxy(
+ GrRenderTargetProxy::Make(caps, defaultFBO));
+ check_surface(reporter, rtProxy.get(), origin,
+ kWidthHeight, kWidthHeight, config);
+ check_rendertarget(reporter, provider, rtProxy.get(), SkBackingFit::kExact);
+ }
+
sk_sp<GrTexture> tex;
+ // Internal offscreen render target.
if (renderable) {
desc.fFlags = kRenderTarget_GrSurfaceFlag;
tex.reset(provider->createTexture(desc, budgeted));
sk_sp<GrRenderTarget> rt(sk_ref_sp(tex->asRenderTarget()));
+ SkASSERT(caps.maxWindowRectangles() <= 0 ||
+ rt->renderTargetPriv().supportsWindowRectangles());
- sk_sp<GrRenderTargetProxy> rtProxy(GrRenderTargetProxy::Make(rt));
+ sk_sp<GrRenderTargetProxy> rtProxy(GrRenderTargetProxy::Make(caps, rt));
check_surface(reporter, rtProxy.get(), origin,
kWidthHeight, kWidthHeight, config);
check_rendertarget(reporter, provider, rtProxy.get(), SkBackingFit::kExact);