Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/image/SkImage_Gpu.cpp

Issue 1734043002: Revert of Move Budgeted enum out of SkSurface, use in GrTextureProvider (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/image/SkImage_Gpu.h ('k') | src/image/SkSurface.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 #include "GrCaps.h" 8 #include "GrCaps.h"
9 #include "GrContext.h" 9 #include "GrContext.h"
10 #include "GrDrawContext.h" 10 #include "GrDrawContext.h"
11 #include "GrImageIDTextureAdjuster.h" 11 #include "GrImageIDTextureAdjuster.h"
12 #include "effects/GrYUVEffect.h" 12 #include "effects/GrYUVEffect.h"
13 #include "SkCanvas.h" 13 #include "SkCanvas.h"
14 #include "SkBitmapCache.h" 14 #include "SkBitmapCache.h"
15 #include "SkGpuDevice.h" 15 #include "SkGpuDevice.h"
16 #include "SkGrPixelRef.h" 16 #include "SkGrPixelRef.h"
17 #include "SkGrPriv.h" 17 #include "SkGrPriv.h"
18 #include "SkImageFilter.h" 18 #include "SkImageFilter.h"
19 #include "SkImage_Gpu.h" 19 #include "SkImage_Gpu.h"
20 #include "SkPixelRef.h" 20 #include "SkPixelRef.h"
21 21
22 SkImage_Gpu::SkImage_Gpu(int w, int h, uint32_t uniqueID, SkAlphaType at, GrText ure* tex, 22 SkImage_Gpu::SkImage_Gpu(int w, int h, uint32_t uniqueID, SkAlphaType at, GrText ure* tex,
23 SkBudgeted budgeted) 23 SkSurface::Budgeted budgeted)
24 : INHERITED(w, h, uniqueID) 24 : INHERITED(w, h, uniqueID)
25 , fTexture(SkRef(tex)) 25 , fTexture(SkRef(tex))
26 , fAlphaType(at) 26 , fAlphaType(at)
27 , fBudgeted(budgeted) 27 , fBudgeted(budgeted)
28 , fAddedRasterVersionToCache(false) 28 , fAddedRasterVersionToCache(false)
29 { 29 {
30 SkASSERT(tex->width() == w); 30 SkASSERT(tex->width() == w);
31 SkASSERT(tex->height() == h); 31 SkASSERT(tex->height() == h);
32 } 32 }
33 33
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 } 133 }
134 return true; 134 return true;
135 } 135 }
136 136
137 SkImage* SkImage_Gpu::onNewSubset(const SkIRect& subset) const { 137 SkImage* SkImage_Gpu::onNewSubset(const SkIRect& subset) const {
138 GrContext* ctx = fTexture->getContext(); 138 GrContext* ctx = fTexture->getContext();
139 GrSurfaceDesc desc = fTexture->desc(); 139 GrSurfaceDesc desc = fTexture->desc();
140 desc.fWidth = subset.width(); 140 desc.fWidth = subset.width();
141 desc.fHeight = subset.height(); 141 desc.fHeight = subset.height();
142 142
143 GrTexture* subTx = ctx->textureProvider()->createTexture(desc, fBudgeted); 143 GrTexture* subTx = ctx->textureProvider()->createTexture(desc,
144 SkSurface::kYes_Bud geted == fBudgeted);
144 if (!subTx) { 145 if (!subTx) {
145 return nullptr; 146 return nullptr;
146 } 147 }
147 ctx->copySurface(subTx, fTexture, subset, SkIPoint::Make(0, 0)); 148 ctx->copySurface(subTx, fTexture, subset, SkIPoint::Make(0, 0));
148 return new SkImage_Gpu(desc.fWidth, desc.fHeight, kNeedNewImageUniqueID, fAl phaType, subTx, 149 return new SkImage_Gpu(desc.fWidth, desc.fHeight, kNeedNewImageUniqueID, fAl phaType, subTx,
149 fBudgeted); 150 fBudgeted);
150 } 151 }
151 152
152 //////////////////////////////////////////////////////////////////////////////// /////////////////// 153 //////////////////////////////////////////////////////////////////////////////// ///////////////////
153 154
154 static SkImage* new_wrapped_texture_common(GrContext* ctx, const GrBackendTextur eDesc& desc, 155 static SkImage* new_wrapped_texture_common(GrContext* ctx, const GrBackendTextur eDesc& desc,
155 SkAlphaType at, GrWrapOwnership owner ship, 156 SkAlphaType at, GrWrapOwnership owner ship,
156 SkImage::TextureReleaseProc releasePr oc, 157 SkImage::TextureReleaseProc releasePr oc,
157 SkImage::ReleaseContext releaseCtx) { 158 SkImage::ReleaseContext releaseCtx) {
158 if (desc.fWidth <= 0 || desc.fHeight <= 0) { 159 if (desc.fWidth <= 0 || desc.fHeight <= 0) {
159 return nullptr; 160 return nullptr;
160 } 161 }
161 SkAutoTUnref<GrTexture> tex(ctx->textureProvider()->wrapBackendTexture(desc, ownership)); 162 SkAutoTUnref<GrTexture> tex(ctx->textureProvider()->wrapBackendTexture(desc, ownership));
162 if (!tex) { 163 if (!tex) {
163 return nullptr; 164 return nullptr;
164 } 165 }
165 if (releaseProc) { 166 if (releaseProc) {
166 tex->setRelease(releaseProc, releaseCtx); 167 tex->setRelease(releaseProc, releaseCtx);
167 } 168 }
168 169
169 const SkBudgeted budgeted = SkBudgeted::kNo; 170 const SkSurface::Budgeted budgeted = SkSurface::kNo_Budgeted;
170 return new SkImage_Gpu(desc.fWidth, desc.fHeight, kNeedNewImageUniqueID, at, tex, budgeted); 171 return new SkImage_Gpu(desc.fWidth, desc.fHeight, kNeedNewImageUniqueID, at, tex, budgeted);
171 } 172 }
172 173
173 SkImage* SkImage::NewFromTexture(GrContext* ctx, const GrBackendTextureDesc& des c, SkAlphaType at, 174 SkImage* SkImage::NewFromTexture(GrContext* ctx, const GrBackendTextureDesc& des c, SkAlphaType at,
174 TextureReleaseProc releaseP, ReleaseContext rel easeC) { 175 TextureReleaseProc releaseP, ReleaseContext rel easeC) {
175 return new_wrapped_texture_common(ctx, desc, at, kBorrow_GrWrapOwnership, re leaseP, releaseC); 176 return new_wrapped_texture_common(ctx, desc, at, kBorrow_GrWrapOwnership, re leaseP, releaseC);
176 } 177 }
177 178
178 SkImage* SkImage::NewFromAdoptedTexture(GrContext* ctx, const GrBackendTextureDe sc& desc, 179 SkImage* SkImage::NewFromAdoptedTexture(GrContext* ctx, const GrBackendTextureDe sc& desc,
179 SkAlphaType at) { 180 SkAlphaType at) {
180 return new_wrapped_texture_common(ctx, desc, at, kAdopt_GrWrapOwnership, nul lptr, nullptr); 181 return new_wrapped_texture_common(ctx, desc, at, kAdopt_GrWrapOwnership, nul lptr, nullptr);
181 } 182 }
182 183
183 SkImage* SkImage::NewFromTextureCopy(GrContext* ctx, const GrBackendTextureDesc& desc, 184 SkImage* SkImage::NewFromTextureCopy(GrContext* ctx, const GrBackendTextureDesc& desc,
184 SkAlphaType at) { 185 SkAlphaType at) {
185 if (desc.fWidth <= 0 || desc.fHeight <= 0) { 186 if (desc.fWidth <= 0 || desc.fHeight <= 0) {
186 return nullptr; 187 return nullptr;
187 } 188 }
188 189
189 SkAutoTUnref<GrTexture> src(ctx->textureProvider()->wrapBackendTexture( 190 SkAutoTUnref<GrTexture> src(ctx->textureProvider()->wrapBackendTexture(
190 desc, kBorrow_GrWrapOwnership)); 191 desc, kBorrow_GrWrapOwnership));
191 if (!src) { 192 if (!src) {
192 return nullptr; 193 return nullptr;
193 } 194 }
194 195
195 SkAutoTUnref<GrTexture> dst(GrDeepCopyTexture(src, SkBudgeted::kYes)); 196 const bool isBudgeted = true;
197 SkAutoTUnref<GrTexture> dst(GrDeepCopyTexture(src, isBudgeted));
196 if (!dst) { 198 if (!dst) {
197 return nullptr; 199 return nullptr;
198 } 200 }
199 201
202 const SkSurface::Budgeted budgeted = SkSurface::kYes_Budgeted;
200 return new SkImage_Gpu(desc.fWidth, desc.fHeight, kNeedNewImageUniqueID, at, dst, 203 return new SkImage_Gpu(desc.fWidth, desc.fHeight, kNeedNewImageUniqueID, at, dst,
201 SkBudgeted::kYes); 204 budgeted);
202 } 205 }
203 206
204 SkImage* SkImage::NewFromYUVTexturesCopy(GrContext* ctx , SkYUVColorSpace colorS pace, 207 SkImage* SkImage::NewFromYUVTexturesCopy(GrContext* ctx , SkYUVColorSpace colorS pace,
205 const GrBackendObject yuvTextureHandles [3], 208 const GrBackendObject yuvTextureHandles [3],
206 const SkISize yuvSizes[3], 209 const SkISize yuvSizes[3],
207 GrSurfaceOrigin origin) { 210 GrSurfaceOrigin origin) {
208 const SkBudgeted budgeted = SkBudgeted::kYes; 211 const SkSurface::Budgeted budgeted = SkSurface::kYes_Budgeted;
209 212
210 if (yuvSizes[0].fWidth <= 0 || yuvSizes[0].fHeight <= 0 || 213 if (yuvSizes[0].fWidth <= 0 || yuvSizes[0].fHeight <= 0 ||
211 yuvSizes[1].fWidth <= 0 || yuvSizes[1].fHeight <= 0 || 214 yuvSizes[1].fWidth <= 0 || yuvSizes[1].fHeight <= 0 ||
212 yuvSizes[2].fWidth <= 0 || yuvSizes[2].fHeight <= 0) { 215 yuvSizes[2].fWidth <= 0 || yuvSizes[2].fHeight <= 0) {
213 return nullptr; 216 return nullptr;
214 } 217 }
215 static const GrPixelConfig kConfig = kAlpha_8_GrPixelConfig; 218 static const GrPixelConfig kConfig = kAlpha_8_GrPixelConfig;
216 GrBackendTextureDesc yDesc; 219 GrBackendTextureDesc yDesc;
217 yDesc.fConfig = kConfig; 220 yDesc.fConfig = kConfig;
218 yDesc.fOrigin = origin; 221 yDesc.fOrigin = origin;
(...skipping 30 matching lines...) Expand all
249 252
250 GrSurfaceDesc dstDesc; 253 GrSurfaceDesc dstDesc;
251 // Needs to be a render target in order to draw to it for the yuv->rgb conve rsion. 254 // Needs to be a render target in order to draw to it for the yuv->rgb conve rsion.
252 dstDesc.fFlags = kRenderTarget_GrSurfaceFlag; 255 dstDesc.fFlags = kRenderTarget_GrSurfaceFlag;
253 dstDesc.fOrigin = origin; 256 dstDesc.fOrigin = origin;
254 dstDesc.fWidth = yuvSizes[0].fWidth; 257 dstDesc.fWidth = yuvSizes[0].fWidth;
255 dstDesc.fHeight = yuvSizes[0].fHeight; 258 dstDesc.fHeight = yuvSizes[0].fHeight;
256 dstDesc.fConfig = kRGBA_8888_GrPixelConfig; 259 dstDesc.fConfig = kRGBA_8888_GrPixelConfig;
257 dstDesc.fSampleCnt = 0; 260 dstDesc.fSampleCnt = 0;
258 261
259 SkAutoTUnref<GrTexture> dst(ctx->textureProvider()->createTexture(dstDesc, S kBudgeted::kYes)); 262 SkAutoTUnref<GrTexture> dst(ctx->textureProvider()->createTexture(dstDesc, t rue));
260 if (!dst) { 263 if (!dst) {
261 return nullptr; 264 return nullptr;
262 } 265 }
263 266
264 GrPaint paint; 267 GrPaint paint;
265 paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); 268 paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode);
266 paint.addColorFragmentProcessor(GrYUVEffect::CreateYUVToRGB(yTex, uTex, vTex , yuvSizes, 269 paint.addColorFragmentProcessor(GrYUVEffect::CreateYUVToRGB(yTex, uTex, vTex , yuvSizes,
267 colorSpace))->un ref(); 270 colorSpace))->un ref();
268 271
269 const SkRect rect = SkRect::MakeWH(SkIntToScalar(dstDesc.fWidth), 272 const SkRect rect = SkRect::MakeWH(SkIntToScalar(dstDesc.fWidth),
270 SkIntToScalar(dstDesc.fHeight)); 273 SkIntToScalar(dstDesc.fHeight));
271 SkAutoTUnref<GrDrawContext> drawContext(ctx->drawContext(dst->asRenderTarget ())); 274 SkAutoTUnref<GrDrawContext> drawContext(ctx->drawContext(dst->asRenderTarget ()));
272 if (!drawContext) { 275 if (!drawContext) {
273 return nullptr; 276 return nullptr;
274 } 277 }
275 278
276 drawContext->drawRect(GrClip::WideOpen(), paint, SkMatrix::I(), rect); 279 drawContext->drawRect(GrClip::WideOpen(), paint, SkMatrix::I(), rect);
277 ctx->flushSurfaceWrites(dst); 280 ctx->flushSurfaceWrites(dst);
278 return new SkImage_Gpu(dstDesc.fWidth, dstDesc.fHeight, kNeedNewImageUniqueI D, 281 return new SkImage_Gpu(dstDesc.fWidth, dstDesc.fHeight, kNeedNewImageUniqueI D,
279 kOpaque_SkAlphaType, dst, budgeted); 282 kOpaque_SkAlphaType, dst, budgeted);
280 } 283 }
281 284
282 static SkImage* create_image_from_maker(GrTextureMaker* maker, SkAlphaType at, u int32_t id) { 285 static SkImage* create_image_from_maker(GrTextureMaker* maker, SkAlphaType at, u int32_t id) {
283 SkAutoTUnref<GrTexture> texture(maker->refTextureForParams(GrTextureParams:: ClampNoFilter())); 286 SkAutoTUnref<GrTexture> texture(maker->refTextureForParams(GrTextureParams:: ClampNoFilter()));
284 if (!texture) { 287 if (!texture) {
285 return nullptr; 288 return nullptr;
286 } 289 }
287 return new SkImage_Gpu(texture->width(), texture->height(), id, at, texture, 290 return new SkImage_Gpu(texture->width(), texture->height(), id, at, texture,
288 SkBudgeted::kNo); 291 SkSurface::kNo_Budgeted);
289 } 292 }
290 293
291 SkImage* SkImage::newTextureImage(GrContext *context) const { 294 SkImage* SkImage::newTextureImage(GrContext *context) const {
292 if (!context) { 295 if (!context) {
293 return nullptr; 296 return nullptr;
294 } 297 }
295 if (GrTexture* peek = as_IB(this)->peekTexture()) { 298 if (GrTexture* peek = as_IB(this)->peekTexture()) {
296 return peek->getContext() == context ? SkRef(const_cast<SkImage*>(this)) : nullptr; 299 return peek->getContext() == context ? SkRef(const_cast<SkImage*>(this)) : nullptr;
297 } 300 }
298 // No way to check whether a image is premul or not? 301 // No way to check whether a image is premul or not?
299 SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaTyp e; 302 SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaTyp e;
300 303
301 if (SkImageCacherator* cacher = as_IB(this)->peekCacherator()) { 304 if (SkImageCacherator* cacher = as_IB(this)->peekCacherator()) {
302 GrImageTextureMaker maker(context, cacher, this, kDisallow_CachingHint); 305 GrImageTextureMaker maker(context, cacher, this, kDisallow_CachingHint);
303 return create_image_from_maker(&maker, at, this->uniqueID()); 306 return create_image_from_maker(&maker, at, this->uniqueID());
304 } 307 }
305 SkBitmap bmp; 308 SkBitmap bmp;
306 if (!this->asLegacyBitmap(&bmp, kRO_LegacyBitmapMode)) { 309 if (!this->asLegacyBitmap(&bmp, kRO_LegacyBitmapMode)) {
307 return nullptr; 310 return nullptr;
308 } 311 }
309 GrBitmapTextureMaker maker(context, bmp); 312 GrBitmapTextureMaker maker(context, bmp);
310 return create_image_from_maker(&maker, at, this->uniqueID()); 313 return create_image_from_maker(&maker, at, this->uniqueID());
311 } 314 }
312 315
313 //////////////////////////////////////////////////////////////////////////////// /////////////////// 316 //////////////////////////////////////////////////////////////////////////////// ///////////////////
314 317
315 GrTexture* GrDeepCopyTexture(GrTexture* src, SkBudgeted budgeted) { 318 GrTexture* GrDeepCopyTexture(GrTexture* src, bool budgeted) {
316 GrContext* ctx = src->getContext(); 319 GrContext* ctx = src->getContext();
317 320
318 GrSurfaceDesc desc = src->desc(); 321 GrSurfaceDesc desc = src->desc();
319 GrTexture* dst = ctx->textureProvider()->createTexture(desc, budgeted, nullp tr, 0); 322 GrTexture* dst = ctx->textureProvider()->createTexture(desc, budgeted, nullp tr, 0);
320 if (!dst) { 323 if (!dst) {
321 return nullptr; 324 return nullptr;
322 } 325 }
323 326
324 const SkIRect srcR = SkIRect::MakeWH(desc.fWidth, desc.fHeight); 327 const SkIRect srcR = SkIRect::MakeWH(desc.fWidth, desc.fHeight);
325 const SkIPoint dstP = SkIPoint::Make(0, 0); 328 const SkIPoint dstP = SkIPoint::Make(0, 0);
326 ctx->copySurface(dst, src, srcR, dstP); 329 ctx->copySurface(dst, src, srcR, dstP);
327 ctx->flushSurfaceWrites(dst); 330 ctx->flushSurfaceWrites(dst);
328 return dst; 331 return dst;
329 } 332 }
330 333
OLDNEW
« no previous file with comments | « src/image/SkImage_Gpu.h ('k') | src/image/SkSurface.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698