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

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

Issue 1776693002: Add deferred texture upload API. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase on sk_skp Created 4 years, 9 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/SkPixmap.h ('k') | src/core/SkPixmap.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 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 "GrCaps.h" 11 #include "GrCaps.h"
12 #include "GrClip.h" 12 #include "GrClip.h"
13 #include "GrColor.h" 13 #include "GrColor.h"
14 #include "GrPaint.h" 14 #include "GrPaint.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 "SkPathEffect.h" 18 #include "SkPathEffect.h"
19 #include "SkTypes.h" 19 #include "SkTypes.h"
20 #include "../private/GrAuditTrail.h" 20 #include "../private/GrAuditTrail.h"
21 #include "../private/GrSingleOwner.h" 21 #include "../private/GrSingleOwner.h"
22 #include "../private/SkMutex.h" 22 #include "../private/SkMutex.h"
23 23
24 struct GrBatchAtlasConfig; 24 struct GrBatchAtlasConfig;
25 class GrBatchFontCache; 25 class GrBatchFontCache;
26 struct GrContextOptions; 26 struct GrContextOptions;
27 class GrContextThreadSafeProxy;
27 class GrDrawingManager; 28 class GrDrawingManager;
28 class GrDrawContext; 29 class GrDrawContext;
29 class GrDrawTarget; 30 class GrDrawTarget;
30 class GrFragmentProcessor; 31 class GrFragmentProcessor;
31 class GrGpu; 32 class GrGpu;
32 class GrIndexBuffer; 33 class GrIndexBuffer;
33 class GrLayerCache; 34 class GrLayerCache;
34 class GrOvalRenderer; 35 class GrOvalRenderer;
35 class GrPath; 36 class GrPath;
36 class GrPipelineBuilder; 37 class GrPipelineBuilder;
(...skipping 17 matching lines...) Expand all
54 static GrContext* Create(GrBackend, GrBackendContext, const GrContextOptions & options); 55 static GrContext* Create(GrBackend, GrBackendContext, const GrContextOptions & options);
55 static GrContext* Create(GrBackend, GrBackendContext); 56 static GrContext* Create(GrBackend, GrBackendContext);
56 57
57 /** 58 /**
58 * Only defined in test apps. 59 * Only defined in test apps.
59 */ 60 */
60 static GrContext* CreateMockContext(); 61 static GrContext* CreateMockContext();
61 62
62 virtual ~GrContext(); 63 virtual ~GrContext();
63 64
65 GrContextThreadSafeProxy* threadSafeProxy();
66
64 /** 67 /**
65 * The GrContext normally assumes that no outsider is setting state 68 * The GrContext normally assumes that no outsider is setting state
66 * within the underlying 3D API's context/device/whatever. This call informs 69 * within the underlying 3D API's context/device/whatever. This call informs
67 * the context that the state was modified and it should resend. Shouldn't 70 * the context that the state was modified and it should resend. Shouldn't
68 * be called frequently for good performance. 71 * be called frequently for good performance.
69 * The flag bits, state, is dpendent on which backend is used by the 72 * The flag bits, state, is dpendent on which backend is used by the
70 * context, either GL or D3D (possible in future). 73 * context, either GL or D3D (possible in future).
71 */ 74 */
72 void resetContext(uint32_t state = kAll_GrBackendState); 75 void resetContext(uint32_t state = kAll_GrBackendState);
73 76
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 355
353 /** Get pointer to atlas texture for given mask format */ 356 /** Get pointer to atlas texture for given mask format */
354 GrTexture* getFontAtlasTexture(GrMaskFormat format); 357 GrTexture* getFontAtlasTexture(GrMaskFormat format);
355 358
356 GrAuditTrail* getAuditTrail() { return &fAuditTrail; } 359 GrAuditTrail* getAuditTrail() { return &fAuditTrail; }
357 360
358 /** This is only useful for debug purposes */ 361 /** This is only useful for debug purposes */
359 SkDEBUGCODE(GrSingleOwner* debugSingleOwner() const { return &fSingleOwner; } ) 362 SkDEBUGCODE(GrSingleOwner* debugSingleOwner() const { return &fSingleOwner; } )
360 363
361 private: 364 private:
362 GrGpu* fGpu; 365 GrGpu* fGpu;
363 const GrCaps* fCaps; 366 const GrCaps* fCaps;
364 GrResourceCache* fResourceCache; 367 GrResourceCache* fResourceCache;
365 // this union exists because the inheritance of GrTextureProvider->GrResourc eProvider 368 // this union exists because the inheritance of GrTextureProvider->GrResourc eProvider
366 // is in a private header. 369 // is in a private header.
367 union { 370 union {
368 GrResourceProvider* fResourceProvider; 371 GrResourceProvider* fResourceProvider;
369 GrTextureProvider* fTextureProvider; 372 GrTextureProvider* fTextureProvider;
370 }; 373 };
371 374
372 GrBatchFontCache* fBatchFontCache; 375 SkAutoTUnref<GrContextThreadSafeProxy> fThreadSafeProxy;
373 SkAutoTDelete<GrLayerCache> fLayerCache; 376
374 SkAutoTDelete<GrTextBlobCache> fTextBlobCache; 377 GrBatchFontCache* fBatchFontCache;
378 SkAutoTDelete<GrLayerCache> fLayerCache;
379 SkAutoTDelete<GrTextBlobCache> fTextBlobCache;
375 380
376 // Set by OverbudgetCB() to request that GrContext flush before exiting a dr aw. 381 // Set by OverbudgetCB() to request that GrContext flush before exiting a dr aw.
377 bool fFlushToReduceCacheSize; 382 bool fFlushToReduceCacheSize;
378 bool fDidTestPMConversions; 383 bool fDidTestPMConversions;
379 int fPMToUPMConversion; 384 int fPMToUPMConversion;
380 int fUPMToPMConversion; 385 int fUPMToPMConversion;
381 // The sw backend may call GrContext::readSurfacePixels on multiple threads 386 // The sw backend may call GrContext::readSurfacePixels on multiple threads
382 // We may transfer the responsibilty for using a mutex to the sw backend 387 // We may transfer the responsibilty for using a mutex to the sw backend
383 // when there are fewer code paths that lead to a readSurfacePixels call 388 // when there are fewer code paths that lead to a readSurfacePixels call
384 // from the sw backend. readSurfacePixels is reentrant in one case - when pe rforming 389 // from the sw backend. readSurfacePixels is reentrant in one case - when pe rforming
385 // the PM conversions test. To handle this we do the PM conversions test out side 390 // the PM conversions test. To handle this we do the PM conversions test out side
386 // of fReadPixelsMutex and use a separate mutex to guard it. When it re-ente rs 391 // of fReadPixelsMutex and use a separate mutex to guard it. When it re-ente rs
387 // readSurfacePixels it will grab fReadPixelsMutex and release it before the outer 392 // readSurfacePixels it will grab fReadPixelsMutex and release it before the outer
388 // readSurfacePixels proceeds to grab it. 393 // readSurfacePixels proceeds to grab it.
389 // TODO: Stop pretending to make GrContext thread-safe for sw rasterization and provide 394 // TODO: Stop pretending to make GrContext thread-safe for sw rasterization and provide
390 // a mechanism to make a SkPicture safe for multithreaded sw rasterization. 395 // a mechanism to make a SkPicture safe for multithreaded sw rasterization.
391 SkMutex fReadPixelsMutex; 396 SkMutex fReadPixelsMutex;
392 SkMutex fTestPMConversionsMutex; 397 SkMutex fTestPMConversionsMutex;
393 398
394 // In debug builds we guard against improper thread handling 399 // In debug builds we guard against improper thread handling
395 // This guard is passed to the GrDrawingManager and, from there to all the 400 // This guard is passed to the GrDrawingManager and, from there to all the
396 // GrDrawContexts. It is also passed to the GrTextureProvider and SkGpuDevi ce. 401 // GrDrawContexts. It is also passed to the GrTextureProvider and SkGpuDevi ce.
397 mutable GrSingleOwner fSingleOwner; 402 mutable GrSingleOwner fSingleOwner;
398 403
399 struct CleanUpData { 404 struct CleanUpData {
400 PFCleanUpFunc fFunc; 405 PFCleanUpFunc fFunc;
401 void* fInfo; 406 void* fInfo;
402 }; 407 };
403 408
404 SkTDArray<CleanUpData> fCleanUpData; 409 SkTDArray<CleanUpData> fCleanUpData;
405 410
406 const uint32_t fUniqueID; 411 const uint32_t fUniqueID;
407 412
408 SkAutoTDelete<GrDrawingManager> fDrawingManager; 413 SkAutoTDelete<GrDrawingManager> fDrawingManager;
409 414
410 GrAuditTrail fAuditTrail; 415 GrAuditTrail fAuditTrail;
411 416
412 // TODO: have the CMM use drawContexts and rm this friending 417 // TODO: have the CMM use drawContexts and rm this friending
413 friend class GrClipMaskManager; // the CMM is friended just so it can call ' drawingManager' 418 friend class GrClipMaskManager; // the CMM is friended just so it can call ' drawingManager'
414 friend class GrDrawingManager; // for access to drawingManager for ProgramU nitTest 419 friend class GrDrawingManager; // for access to drawingManager for ProgramU nitTest
415 GrDrawingManager* drawingManager() { return fDrawingManager; } 420 GrDrawingManager* drawingManager() { return fDrawingManager; }
416 421
417 GrContext(); // init must be called after the constructor. 422 GrContext(); // init must be called after the constructor.
418 bool init(GrBackend, GrBackendContext, const GrContextOptions& options); 423 bool init(GrBackend, GrBackendContext, const GrContextOptions& options);
419 424
420 void initMockContext(); 425 void initMockContext();
(...skipping 24 matching lines...) Expand all
445 450
446 /** 451 /**
447 * A callback similar to the above for use by the TextBlobCache 452 * A callback similar to the above for use by the TextBlobCache
448 * TODO move textblob draw calls below context so we can use the call above. 453 * TODO move textblob draw calls below context so we can use the call above.
449 */ 454 */
450 static void TextBlobCacheOverBudgetCB(void* data); 455 static void TextBlobCacheOverBudgetCB(void* data);
451 456
452 typedef SkRefCnt INHERITED; 457 typedef SkRefCnt INHERITED;
453 }; 458 };
454 459
460 /**
461 * Can be used to perform actions related to the generating GrContext in a threa d safe manner. The
462 * proxy does not access the 3D API (e.g. OpenGL) that backs the generating GrCo ntext.
463 */
464 class GrContextThreadSafeProxy : public SkRefCnt {
465 private:
466 GrContextThreadSafeProxy(const GrCaps* caps, uint32_t uniqueID)
467 : fCaps(SkRef(caps))
468 , fContextUniqueID(uniqueID) {}
469
470 SkAutoTUnref<const GrCaps> fCaps;
471 uint32_t fContextUniqueID;
472
473 friend class GrContext;
474 friend class SkImage;
475
476 typedef SkRefCnt INHERITED;
477 };
478
455 #endif 479 #endif
OLDNEW
« no previous file with comments | « include/core/SkPixmap.h ('k') | src/core/SkPixmap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698