OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 // This is a GPU-backend specific test. | 8 // This is a GPU-backend specific test. |
9 | 9 |
10 #include "Test.h" | 10 #include "Test.h" |
11 | 11 |
12 #if SK_SUPPORT_GPU | 12 #if SK_SUPPORT_GPU |
13 #include "GrGpu.h" | 13 #include "GrGpu.h" |
14 #include "GrSurfaceProxy.h" | 14 #include "GrSurfaceProxy.h" |
15 #include "GrTextureProxy.h" | 15 #include "GrTextureProxy.h" |
16 #include "GrRenderTargetProxy.h" | 16 #include "GrRenderTargetProxy.h" |
17 | 17 |
| 18 // Check that the surface proxy's member vars are set as expected |
18 static void check_surface(skiatest::Reporter* reporter, | 19 static void check_surface(skiatest::Reporter* reporter, |
19 GrSurfaceProxy* proxy, | 20 GrSurfaceProxy* proxy, |
20 GrSurfaceOrigin origin, | 21 GrSurfaceOrigin origin, |
21 int width, int height, | 22 int width, int height, |
22 GrPixelConfig config) { | 23 GrPixelConfig config, |
| 24 uint32_t uniqueID) { |
23 REPORTER_ASSERT(reporter, proxy->origin() == origin); | 25 REPORTER_ASSERT(reporter, proxy->origin() == origin); |
24 REPORTER_ASSERT(reporter, proxy->width() == width); | 26 REPORTER_ASSERT(reporter, proxy->width() == width); |
25 REPORTER_ASSERT(reporter, proxy->height() == height); | 27 REPORTER_ASSERT(reporter, proxy->height() == height); |
26 REPORTER_ASSERT(reporter, proxy->config() == config); | 28 REPORTER_ASSERT(reporter, proxy->config() == config); |
| 29 if (SK_InvalidUniqueID != uniqueID) { |
| 30 REPORTER_ASSERT(reporter, proxy->getUniqueID() == uniqueID); |
| 31 } |
27 } | 32 } |
28 | 33 |
29 static void check_rendertarget(skiatest::Reporter* reporter, | 34 static void check_rendertarget(skiatest::Reporter* reporter, |
30 GrTextureProvider* provider, | 35 GrTextureProvider* provider, |
31 GrRenderTargetProxy* rtProxy, | 36 GrRenderTargetProxy* rtProxy, |
32 SkBackingFit fit) { | 37 SkBackingFit fit) { |
33 REPORTER_ASSERT(reporter, rtProxy->asTextureProxy() == nullptr); // for now | 38 REPORTER_ASSERT(reporter, rtProxy->asTextureProxy() == nullptr); // for now |
34 REPORTER_ASSERT(reporter, rtProxy->asRenderTargetProxy() == rtProxy); | 39 REPORTER_ASSERT(reporter, rtProxy->asRenderTargetProxy() == rtProxy); |
35 | 40 |
36 GrRenderTarget* rt = rtProxy->instantiate(provider); | 41 GrRenderTarget* rt = rtProxy->instantiate(provider); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 REPORTER_ASSERT(reporter, tex->width() == texProxy->width()); | 75 REPORTER_ASSERT(reporter, tex->width() == texProxy->width()); |
71 REPORTER_ASSERT(reporter, tex->height() == texProxy->height()); | 76 REPORTER_ASSERT(reporter, tex->height() == texProxy->height()); |
72 } else { | 77 } else { |
73 REPORTER_ASSERT(reporter, tex->width() >= texProxy->width()); | 78 REPORTER_ASSERT(reporter, tex->width() >= texProxy->width()); |
74 REPORTER_ASSERT(reporter, tex->height() >= texProxy->height()); | 79 REPORTER_ASSERT(reporter, tex->height() >= texProxy->height()); |
75 } | 80 } |
76 REPORTER_ASSERT(reporter, tex->config() == texProxy->config()); | 81 REPORTER_ASSERT(reporter, tex->config() == texProxy->config()); |
77 } | 82 } |
78 | 83 |
79 | 84 |
80 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AllocedProxyTest, reporter, ctxInfo) { | 85 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DeferredProxyTest, reporter, ctxInfo) { |
81 GrTextureProvider* provider = ctxInfo.grContext()->textureProvider(); | 86 GrTextureProvider* provider = ctxInfo.grContext()->textureProvider(); |
82 | 87 |
83 for (auto origin : { kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin }
) { | 88 for (auto origin : { kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin }
) { |
84 for (auto widthHeight : { 100, 128 }) { | 89 for (auto widthHeight : { 100, 128 }) { |
85 for (auto config : { kAlpha_8_GrPixelConfig, kRGBA_8888_GrPixelConfi
g }) { | 90 for (auto config : { kAlpha_8_GrPixelConfig, kRGBA_8888_GrPixelConfi
g }) { |
86 for (auto fit : { SkBackingFit::kExact, SkBackingFit::kApprox })
{ | 91 for (auto fit : { SkBackingFit::kExact, SkBackingFit::kApprox })
{ |
87 for (auto budgeted : { SkBudgeted::kYes, SkBudgeted::kNo })
{ | 92 for (auto budgeted : { SkBudgeted::kYes, SkBudgeted::kNo })
{ |
88 for (auto numSamples : { 0, 4}) { | 93 for (auto numSamples : { 0, 4}) { |
89 bool renderable = ctxInfo.grContext()->caps()->isCon
figRenderable( | 94 bool renderable = ctxInfo.grContext()->caps()->isCon
figRenderable( |
90 config, nu
mSamples > 0) && | 95 config, nu
mSamples > 0) && |
91 numSamples <= ctxInfo.grContext()->caps()->max
ColorSampleCount(); | 96 numSamples <= ctxInfo.grContext()->caps()->max
ColorSampleCount(); |
92 | 97 |
93 GrSurfaceDesc desc; | 98 GrSurfaceDesc desc; |
94 desc.fOrigin = origin; | 99 desc.fOrigin = origin; |
95 desc.fWidth = widthHeight; | 100 desc.fWidth = widthHeight; |
96 desc.fHeight = widthHeight; | 101 desc.fHeight = widthHeight; |
97 desc.fConfig = config; | 102 desc.fConfig = config; |
98 desc.fSampleCnt = numSamples; | 103 desc.fSampleCnt = numSamples; |
99 | 104 |
100 if (renderable) { | 105 if (renderable) { |
101 sk_sp<GrRenderTargetProxy> rtProxy(GrRenderTarge
tProxy::Make( | 106 sk_sp<GrRenderTargetProxy> rtProxy(GrRenderTarge
tProxy::Make( |
102 *ctxInfo.grC
ontext()->caps(), | 107 *ctxInfo.grC
ontext()->caps(), |
103 desc, | 108 desc, |
104 fit, | 109 fit, |
105 budgeted)); | 110 budgeted)); |
106 check_surface(reporter, rtProxy.get(), origin, | 111 check_surface(reporter, rtProxy.get(), origin, |
107 widthHeight, widthHeight, config); | 112 widthHeight, widthHeight, config,
SK_InvalidUniqueID); |
108 check_rendertarget(reporter, provider, rtProxy.g
et(), fit); | 113 check_rendertarget(reporter, provider, rtProxy.g
et(), fit); |
109 } | 114 } |
110 | 115 |
111 desc.fSampleCnt = 0; | 116 desc.fSampleCnt = 0; |
112 | 117 |
113 sk_sp<GrTextureProxy> texProxy(GrTextureProxy::Make(
desc, | 118 sk_sp<GrTextureProxy> texProxy(GrTextureProxy::Make(
desc, |
114
fit, | 119
fit, |
115
budgeted)); | 120
budgeted)); |
116 check_surface(reporter, texProxy.get(), origin, | 121 check_surface(reporter, texProxy.get(), origin, |
117 widthHeight, widthHeight, config); | 122 widthHeight, widthHeight, config, SK_I
nvalidUniqueID); |
118 check_texture(reporter, provider, texProxy.get(), fi
t); | 123 check_texture(reporter, provider, texProxy.get(), fi
t); |
119 } | 124 } |
120 } | 125 } |
121 } | 126 } |
122 } | 127 } |
123 } | 128 } |
124 } | 129 } |
125 } | 130 } |
126 | 131 |
127 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { | 132 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { |
(...skipping 27 matching lines...) Expand all Loading... |
155 backendDesc.fRenderTargetHandle = 0; | 160 backendDesc.fRenderTargetHandle = 0; |
156 | 161 |
157 GrGpu* gpu = ctxInfo.grContext()->getGpu(); | 162 GrGpu* gpu = ctxInfo.grContext()->getGpu(); |
158 sk_sp<GrRenderTarget> defaultFBO( | 163 sk_sp<GrRenderTarget> defaultFBO( |
159 gpu->wrapBackendRenderTarget(backendDesc, kBorrow_Gr
WrapOwnership)); | 164 gpu->wrapBackendRenderTarget(backendDesc, kBorrow_Gr
WrapOwnership)); |
160 SkASSERT(!defaultFBO->renderTargetPriv().supportsWindowR
ectangles()); | 165 SkASSERT(!defaultFBO->renderTargetPriv().supportsWindowR
ectangles()); |
161 | 166 |
162 sk_sp<GrRenderTargetProxy> rtProxy( | 167 sk_sp<GrRenderTargetProxy> rtProxy( |
163 GrRenderTargetProxy::Make(caps, defaultFBO)); | 168 GrRenderTargetProxy::Make(caps, defaultFBO)); |
164 check_surface(reporter, rtProxy.get(), origin, | 169 check_surface(reporter, rtProxy.get(), origin, |
165 kWidthHeight, kWidthHeight, config); | 170 kWidthHeight, kWidthHeight, config, defaul
tFBO->getUniqueID()); |
166 check_rendertarget(reporter, provider, rtProxy.get(), Sk
BackingFit::kExact); | 171 check_rendertarget(reporter, provider, rtProxy.get(), Sk
BackingFit::kExact); |
167 } | 172 } |
168 | 173 |
169 sk_sp<GrTexture> tex; | 174 sk_sp<GrTexture> tex; |
170 | 175 |
171 // Internal offscreen render target. | 176 // Internal offscreen render target. |
172 if (renderable) { | 177 if (renderable) { |
173 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 178 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
174 tex.reset(provider->createTexture(desc, budgeted)); | 179 tex.reset(provider->createTexture(desc, budgeted)); |
175 sk_sp<GrRenderTarget> rt(sk_ref_sp(tex->asRenderTarget()
)); | 180 sk_sp<GrRenderTarget> rt(sk_ref_sp(tex->asRenderTarget()
)); |
176 SkASSERT(caps.maxWindowRectangles() <= 0 || | 181 SkASSERT(caps.maxWindowRectangles() <= 0 || |
177 rt->renderTargetPriv().supportsWindowRectangles(
)); | 182 rt->renderTargetPriv().supportsWindowRectangles(
)); |
178 | 183 |
179 sk_sp<GrRenderTargetProxy> rtProxy(GrRenderTargetProxy::
Make(caps, rt)); | 184 sk_sp<GrRenderTargetProxy> rtProxy(GrRenderTargetProxy::
Make(caps, rt)); |
180 check_surface(reporter, rtProxy.get(), origin, | 185 check_surface(reporter, rtProxy.get(), origin, |
181 kWidthHeight, kWidthHeight, config); | 186 kWidthHeight, kWidthHeight, config, rt->ge
tUniqueID()); |
182 check_rendertarget(reporter, provider, rtProxy.get(), Sk
BackingFit::kExact); | 187 check_rendertarget(reporter, provider, rtProxy.get(), Sk
BackingFit::kExact); |
183 } | 188 } |
184 | 189 |
185 if (!tex) { | 190 if (!tex) { |
186 SkASSERT(kNone_GrSurfaceFlags == desc.fFlags ); | 191 SkASSERT(kNone_GrSurfaceFlags == desc.fFlags ); |
187 desc.fSampleCnt = 0; | 192 desc.fSampleCnt = 0; |
188 tex.reset(provider->createTexture(desc, budgeted)); | 193 tex.reset(provider->createTexture(desc, budgeted)); |
189 } | 194 } |
190 | 195 |
191 sk_sp<GrTextureProxy> texProxy(GrTextureProxy::Make(tex)); | 196 sk_sp<GrTextureProxy> texProxy(GrTextureProxy::Make(tex)); |
192 check_surface(reporter, texProxy.get(), origin, | 197 check_surface(reporter, texProxy.get(), origin, |
193 kWidthHeight, kWidthHeight, config); | 198 kWidthHeight, kWidthHeight, config, tex->getUn
iqueID()); |
194 check_texture(reporter, provider, texProxy.get(), SkBackingF
it::kExact); | 199 check_texture(reporter, provider, texProxy.get(), SkBackingF
it::kExact); |
195 } | 200 } |
196 } | 201 } |
197 } | 202 } |
198 } | 203 } |
199 } | 204 } |
200 | 205 |
201 #endif | 206 #endif |
OLD | NEW |