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

Side by Side Diff: include/gpu/GrContext.h

Issue 1249543003: Creating functions for uploading a mipmapped texture. (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Fixing merge mistakes Created 5 years, 2 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 | « include/core/SkMipMapLevel.h ('k') | include/gpu/GrSurface.h » ('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 2010 Google Inc. 2 * Copyright 2010 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 #ifndef GrContext_DEFINED 8 #ifndef GrContext_DEFINED
9 #define GrContext_DEFINED 9 #define GrContext_DEFINED
10 10
11 #include "GrClip.h" 11 #include "GrClip.h"
12 #include "GrColor.h" 12 #include "GrColor.h"
13 #include "GrPaint.h" 13 #include "GrPaint.h"
14 #include "GrPathRendererChain.h" 14 #include "GrPathRendererChain.h"
15 #include "GrRenderTarget.h" 15 #include "GrRenderTarget.h"
16 #include "GrTextureProvider.h" 16 #include "GrTextureProvider.h"
17 #include "SkMatrix.h" 17 #include "SkMatrix.h"
18 #include "SkMutex.h" 18 #include "../private/SkMutex.h"
19 #include "SkMipMapLevel.h"
19 #include "SkPathEffect.h" 20 #include "SkPathEffect.h"
21 #include "SkTArray.h"
20 #include "SkTypes.h" 22 #include "SkTypes.h"
21 23
22 struct GrBatchAtlasConfig; 24 struct GrBatchAtlasConfig;
23 class GrBatchFontCache; 25 class GrBatchFontCache;
24 class GrCaps; 26 class GrCaps;
25 struct GrContextOptions; 27 struct GrContextOptions;
26 class GrDrawContext; 28 class GrDrawContext;
27 class GrDrawTarget; 29 class GrDrawTarget;
28 class GrFragmentProcessor; 30 class GrFragmentProcessor;
29 class GrGpu; 31 class GrGpu;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 * rendering quality for the display. Alternatively returns 0 if 170 * rendering quality for the display. Alternatively returns 0 if
169 * MSAA is not supported or recommended to be used by default. 171 * MSAA is not supported or recommended to be used by default.
170 */ 172 */
171 int getRecommendedSampleCount(GrPixelConfig config, SkScalar dpi) const; 173 int getRecommendedSampleCount(GrPixelConfig config, SkScalar dpi) const;
172 174
173 /** 175 /**
174 * Returns a helper object to orchestrate draws. 176 * Returns a helper object to orchestrate draws.
175 * Callers should take a ref if they rely on the GrDrawContext sticking arou nd. 177 * Callers should take a ref if they rely on the GrDrawContext sticking arou nd.
176 * NULL will be returned if the context has been abandoned. 178 * NULL will be returned if the context has been abandoned.
177 * 179 *
180 * @param rt the render target receiving the draws
178 * @param surfaceProps the surface properties (mainly defines text drawing) 181 * @param surfaceProps the surface properties (mainly defines text drawing)
179 * 182 *
180 * @return a draw context 183 * @return a draw context
181 */ 184 */
182 GrDrawContext* drawContext(const SkSurfaceProps* surfaceProps = NULL) { 185 GrDrawContext* drawContext(GrRenderTarget* rt, const SkSurfaceProps* surface Props = NULL) {
bsalomon 2015/10/19 14:56:18 Is this supposed to be showing up in the diff? Loo
183 return fDrawingMgr.drawContext(surfaceProps); 186 return fDrawingMgr.drawContext(rt, surfaceProps);
187 }
188
189 GrTextContext* textContext(const SkSurfaceProps& surfaceProps, GrRenderTarge t* rt) {
190 return fDrawingMgr.textContext(surfaceProps, rt);
184 } 191 }
185 192
186 /////////////////////////////////////////////////////////////////////////// 193 ///////////////////////////////////////////////////////////////////////////
187 // Misc. 194 // Misc.
188 195
189 /** 196 /**
190 * Flags that affect flush() behavior. 197 * Flags that affect flush() behavior.
191 */ 198 */
192 enum FlushBits { 199 enum FlushBits {
193 /** 200 /**
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 uint32_t pixelOpsFlags = 0); 258 uint32_t pixelOpsFlags = 0);
252 259
253 /** 260 /**
254 * Writes a rectangle of pixels to a surface. 261 * Writes a rectangle of pixels to a surface.
255 * @param surface the surface to write to. 262 * @param surface the surface to write to.
256 * @param left left edge of the rectangle to write (inclusive) 263 * @param left left edge of the rectangle to write (inclusive)
257 * @param top top edge of the rectangle to write (inclusive) 264 * @param top top edge of the rectangle to write (inclusive)
258 * @param width width of rectangle to write in pixels. 265 * @param width width of rectangle to write in pixels.
259 * @param height height of rectangle to write in pixels. 266 * @param height height of rectangle to write in pixels.
260 * @param config the pixel config of the source buffer 267 * @param config the pixel config of the source buffer
261 * @param buffer memory to read pixels from 268 * @param texels array of mipmap levels containing texel data to load .
262 * @param rowBytes number of bytes between consecutive rows. Zero 269 * Begins with full-sized palette data for paletted tex tures.
263 * means rows are tightly packed. 270 * For compressed formats it contains the compressed pi xel data.
271 * Otherwise, it contains width*height texels. If the a rray is empty,
272 * texture data is uninitialized.
264 * @param pixelOpsFlags see PixelOpsFlags enum above. 273 * @param pixelOpsFlags see PixelOpsFlags enum above.
274 *
265 * @return true if the write succeeded, false if not. The write can fail bec ause of an 275 * @return true if the write succeeded, false if not. The write can fail bec ause of an
266 * unsupported combination of surface and src configs. 276 * unsupported combination of surface and src configs.
267 */ 277 */
268 bool writeSurfacePixels(GrSurface* surface, 278 bool writeSurfacePixels(GrSurface* surface,
269 int left, int top, int width, int height, 279 int left, int top, int width, int height,
280 GrPixelConfig config, const SkTArray<SkMipMapLevel>& texels,
281 uint32_t pixelOpsFlags = 0);
282
283 /**
284 * This function is a shim which creates a SkTArray<SkMipMapLevel> of size 1 .
285 * It then calls writeSurfacePixels with that SkTArray.
286 *
287 * @param buffer Pointer to the pixel values (optional).
288 * @param rowBytes The number of bytes between rows of the texture. Zero
289 * implies tightly packed rows. For compressed pixel config s, this
290 * field is ignored.
291 */
292 bool writeSurfacePixels(GrSurface* surface,
293 int left, int top, int width, int height,
270 GrPixelConfig config, const void* buffer, 294 GrPixelConfig config, const void* buffer,
271 size_t rowBytes, 295 size_t rowBytes,
272 uint32_t pixelOpsFlags = 0); 296 uint32_t pixelOpsFlags = 0);
273 297
274 /** 298 /**
275 * Copies a rectangle of texels from src to dst. 299 * Copies a rectangle of texels from src to dst.
276 * bounds. 300 * bounds.
277 * @param dst the surface to copy to. 301 * @param dst the surface to copy to.
278 * @param src the surface to copy from. 302 * @param src the surface to copy from.
279 * @param srcRect the rectangle of the src that should be copied. 303 * @param srcRect the rectangle of the src that should be copied.
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 void* fInfo; 427 void* fInfo;
404 }; 428 };
405 429
406 SkTDArray<CleanUpData> fCleanUpData; 430 SkTDArray<CleanUpData> fCleanUpData;
407 431
408 const uint32_t fUniqueID; 432 const uint32_t fUniqueID;
409 433
410 GrContext(); // init must be called after the constructor. 434 GrContext(); // init must be called after the constructor.
411 bool init(GrBackend, GrBackendContext, const GrContextOptions& options); 435 bool init(GrBackend, GrBackendContext, const GrContextOptions& options);
412 436
413 // Currently the DrawingMgr stores a separate GrDrawContext for each 437 // Currently the DrawingMgr creates a separate GrTextContext for each
414 // combination of text drawing options (pixel geometry x DFT use) 438 // combination of text drawing options (pixel geometry x DFT use)
415 // and hands the appropriate one back given the user's request. 439 // and hands the appropriate one back given the DrawContext's request.
416 // All of the GrDrawContexts still land in the same GrDrawTarget! 440 //
441 // It allocates a new GrDrawContext for each GrRenderTarget
442 // but all of them still land in the same GrDrawTarget!
417 // 443 //
418 // In the future this class will allocate a new GrDrawContext for 444 // In the future this class will allocate a new GrDrawContext for
419 // each GrRenderTarget/GrDrawTarget and manage the DAG. 445 // each GrRenderTarget/GrDrawTarget and manage the DAG.
420 class DrawingMgr { 446 class DrawingMgr {
421 public: 447 public:
422 DrawingMgr() : fDrawTarget(NULL) { 448 DrawingMgr() : fDrawTarget(nullptr), fNVPRTextContext(nullptr) {
423 sk_bzero(fDrawContext, sizeof(fDrawContext)); 449 sk_bzero(fTextContexts, sizeof(fTextContexts));
424 } 450 }
425 451
426 ~DrawingMgr(); 452 ~DrawingMgr();
427 453
428 void init(GrContext* context); 454 void init(GrContext* context);
429 455
430 void abandon(); 456 void abandon();
431 bool abandoned() const { return NULL == fDrawTarget; } 457 bool abandoned() const { return NULL == fDrawTarget; }
432 458
433 void purgeResources();
434 void reset(); 459 void reset();
435 void flush(); 460 void flush();
436 461
437 // Callers should take a ref if they rely on the GrDrawContext sticking around. 462 // Callers assume the creation ref of the drawContext!
438 // NULL will be returned if the context has been abandoned. 463 // NULL will be returned if the context has been abandoned.
439 GrDrawContext* drawContext(const SkSurfaceProps* surfaceProps); 464 GrDrawContext* drawContext(GrRenderTarget* rt, const SkSurfaceProps* sur faceProps);
465
466 GrTextContext* textContext(const SkSurfaceProps& props, GrRenderTarget* rt);
440 467
441 private: 468 private:
442 void cleanup(); 469 void cleanup();
443 470
444 friend class GrContext; // for access to fDrawTarget for testing 471 friend class GrContext; // for access to fDrawTarget for testing
445 472
446 static const int kNumPixelGeometries = 5; // The different pixel geometr ies 473 static const int kNumPixelGeometries = 5; // The different pixel geometr ies
447 static const int kNumDFTOptions = 2; // DFT or no DFT 474 static const int kNumDFTOptions = 2; // DFT or no DFT
448 475
449 GrContext* fContext; 476 GrContext* fContext;
450 GrDrawTarget* fDrawTarget; 477 GrDrawTarget* fDrawTarget;
451 478
452 GrDrawContext* fDrawContext[kNumPixelGeometries][kNumDFTOptions]; 479 GrTextContext* fNVPRTextContext;
480 GrTextContext* fTextContexts[kNumPixelGeometries][kNumDFTOptions];
453 }; 481 };
454 482
455 DrawingMgr fDrawingMgr; 483 DrawingMgr fDrawingMgr;
456 484
457 void initMockContext(); 485 void initMockContext();
458 void initCommon(); 486 void initCommon();
459 487
460 /** 488 /**
461 * These functions create premul <-> unpremul effects if it is possible to g enerate a pair 489 * These functions create premul <-> unpremul effects if it is possible to g enerate a pair
462 * of effects that make a readToUPM->writeToPM->readToUPM cycle invariant. O therwise, they 490 * of effects that make a readToUPM->writeToPM->readToUPM cycle invariant. O therwise, they
463 * return NULL. 491 * return NULL.
464 */ 492 */
465 const GrFragmentProcessor* createPMToUPMEffect(GrProcessorDataManager*, GrTe xture*, 493 const GrFragmentProcessor* createPMToUPMEffect(GrTexture*, bool swapRAndB,
466 bool swapRAndB, const SkMatri x&) const; 494 const SkMatrix&) const;
467 const GrFragmentProcessor* createUPMToPMEffect(GrProcessorDataManager*, GrTe xture*, 495 const GrFragmentProcessor* createUPMToPMEffect(GrTexture*, bool swapRAndB,
468 bool swapRAndB, const SkMatri x&) const; 496 const SkMatrix&) const;
469 /** Called before either of the above two functions to determine the appropr iate fragment 497 /** Called before either of the above two functions to determine the appropr iate fragment
470 processors for conversions. This must be called by readSurfacePixels bef or a mutex is taken, 498 processors for conversions. This must be called by readSurfacePixels bef ore a mutex is
471 since testingvPM conversions itself will call readSurfacePixels */ 499 taken, since testingvPM conversions itself will call readSurfacePixels * /
472 void testPMConversionsIfNecessary(uint32_t flags); 500 void testPMConversionsIfNecessary(uint32_t flags);
473 /** Returns true if we've already determined that createPMtoUPMEffect and cr eateUPMToPMEffect 501 /** Returns true if we've already determined that createPMtoUPMEffect and cr eateUPMToPMEffect
474 will fail. In such cases fall back to SW conversion. */ 502 will fail. In such cases fall back to SW conversion. */
475 bool didFailPMUPMConversionTest() const; 503 bool didFailPMUPMConversionTest() const;
476 504
477 /** 505 /**
478 * This callback allows the resource cache to callback into the GrContext 506 * This callback allows the resource cache to callback into the GrContext
479 * when the cache is still over budget after a purge. 507 * when the cache is still over budget after a purge.
480 */ 508 */
481 static void OverBudgetCB(void* data); 509 static void OverBudgetCB(void* data);
482 510
483 /** 511 /**
484 * A callback similar to the above for use by the TextBlobCache 512 * A callback similar to the above for use by the TextBlobCache
485 * TODO move textblob draw calls below context so we can use the call above. 513 * TODO move textblob draw calls below context so we can use the call above.
486 */ 514 */
487 static void TextBlobCacheOverBudgetCB(void* data); 515 static void TextBlobCacheOverBudgetCB(void* data);
488 516
489 typedef SkRefCnt INHERITED; 517 typedef SkRefCnt INHERITED;
490 }; 518 };
491 519
492 #endif 520 #endif
OLDNEW
« no previous file with comments | « include/core/SkMipMapLevel.h ('k') | include/gpu/GrSurface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698