| OLD | NEW | 
|---|
| 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 | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 95      */ | 95      */ | 
| 96     void contextLost(); | 96     void contextLost(); | 
| 97 | 97 | 
| 98     /** | 98     /** | 
| 99      * Similar to contextLost, but makes no attempt to reset state. | 99      * Similar to contextLost, but makes no attempt to reset state. | 
| 100      * Use this method when GrContext destruction is pending, but | 100      * Use this method when GrContext destruction is pending, but | 
| 101      * the graphics context is destroyed first. | 101      * the graphics context is destroyed first. | 
| 102      */ | 102      */ | 
| 103     void contextDestroyed(); | 103     void contextDestroyed(); | 
| 104 | 104 | 
|  | 105     /////////////////////////////////////////////////////////////////////////// | 
|  | 106     // Resource Cache | 
|  | 107 | 
|  | 108     /** | 
|  | 109      *  Return the current GPU resource cache limits. | 
|  | 110      * | 
|  | 111      *  @param maxResources If non-null, returns maximum number of resources tha
      t | 
|  | 112      *                      can be held in the cache. | 
|  | 113      *  @param maxResourceBytes If non-null, returns maximum number of bytes of | 
|  | 114      *                          video memory that can be held in the cache. | 
|  | 115      */ | 
|  | 116     void getResourceCacheLimits(int* maxResources, size_t* maxResourceBytes) con
      st; | 
|  | 117     SK_ATTR_DEPRECATED("This function has been renamed to getResourceCacheLimits
      ().") | 
|  | 118     void getTextureCacheLimits(int* maxTextures, size_t* maxTextureBytes) const 
      { | 
|  | 119         this->getResourceCacheLimits(maxTextures, maxTextureBytes); | 
|  | 120     } | 
|  | 121 | 
|  | 122     /** | 
|  | 123      *  Gets the current GPU resource cache usage. | 
|  | 124      * | 
|  | 125      *  @param resourceCount If non-null, returns the number of resources that a
      re held in the | 
|  | 126      *                       cache. | 
|  | 127      *  @param maxResourceBytes If non-null, returns the total number of bytes o
      f video memory held | 
|  | 128      *                          in the cache. | 
|  | 129      */ | 
|  | 130     void getResourceCacheUsage(int* resourceCount, size_t* resourceBytes) const; | 
|  | 131 | 
|  | 132     SK_ATTR_DEPRECATED("Use getResourceCacheUsage().") | 
|  | 133     size_t getGpuTextureCacheBytes() const { | 
|  | 134         size_t bytes; | 
|  | 135         this->getResourceCacheUsage(NULL, &bytes); | 
|  | 136         return bytes; | 
|  | 137     } | 
|  | 138 | 
|  | 139     SK_ATTR_DEPRECATED("Use getResourceCacheUsage().") | 
|  | 140     int getGpuTextureCacheResourceCount() const { | 
|  | 141         int count; | 
|  | 142         this->getResourceCacheUsage(&count, NULL); | 
|  | 143         return count; | 
|  | 144     } | 
|  | 145 | 
|  | 146     /** | 
|  | 147      *  Specify the GPU resource cache limits. If the current cache exceeds eith
      er | 
|  | 148      *  of these, it will be purged (LRU) to keep the cache within these limits. | 
|  | 149      * | 
|  | 150      *  @param maxResources The maximum number of resources that can be held in | 
|  | 151      *                      the cache. | 
|  | 152      *  @param maxResourceBytes The maximum number of bytes of video memory | 
|  | 153      *                          that can be held in the cache. | 
|  | 154      */ | 
|  | 155     void setResourceCacheLimits(int maxResources, size_t maxResourceBytes); | 
|  | 156     SK_ATTR_DEPRECATED("This function has been renamed to setResourceCacheLimits
      ().") | 
|  | 157     void setTextureCacheLimits(int maxTextures, size_t maxTextureBytes) { | 
|  | 158         this->setResourceCacheLimits(maxTextures, maxTextureBytes); | 
|  | 159     } | 
|  | 160 | 
| 105     /** | 161     /** | 
| 106      * Frees GPU created by the context. Can be called to reduce GPU memory | 162      * Frees GPU created by the context. Can be called to reduce GPU memory | 
| 107      * pressure. | 163      * pressure. | 
| 108      */ | 164      */ | 
| 109     void freeGpuResources(); | 165     void freeGpuResources(); | 
| 110 | 166 | 
| 111     /** | 167     /** | 
| 112      * Returns the number of bytes of GPU memory hosted by the texture cache. | 168      * This method should be called whenever a GrResource is unreffed or | 
|  | 169      * switched from exclusive to non-exclusive. This | 
|  | 170      * gives the resource cache a chance to discard unneeded resources. | 
|  | 171      * Note: this entry point will be removed once totally ref-driven | 
|  | 172      * cache maintenance is implemented. | 
| 113      */ | 173      */ | 
| 114     size_t getGpuTextureCacheBytes() const; | 174     void purgeCache(); | 
| 115 | 175 | 
| 116     /** | 176     /** | 
| 117      * Returns the number of resources hosted by the texture cache. | 177      * Purge all the unlocked resources from the cache. | 
|  | 178      * This entry point is mainly meant for timing texture uploads | 
|  | 179      * and is not defined in normal builds of Skia. | 
| 118      */ | 180      */ | 
| 119     int getGpuTextureCacheResourceCount() const; | 181     void purgeAllUnlockedResources(); | 
|  | 182 | 
|  | 183     /** | 
|  | 184      * Stores a custom resource in the cache, based on the specified key. | 
|  | 185      */ | 
|  | 186     void addResourceToCache(const GrResourceKey&, GrCacheable*); | 
|  | 187 | 
|  | 188     /** | 
|  | 189      * Finds a resource in the cache, based on the specified key. This is intend
      ed for use in | 
|  | 190      * conjunction with addResourceToCache(). The return value will be NULL if n
      ot found. The | 
|  | 191      * caller must balance with a call to unref(). | 
|  | 192      */ | 
|  | 193     GrCacheable* findAndRefCachedResource(const GrResourceKey&); | 
| 120 | 194 | 
| 121     /////////////////////////////////////////////////////////////////////////// | 195     /////////////////////////////////////////////////////////////////////////// | 
| 122     // Textures | 196     // Textures | 
| 123 | 197 | 
| 124     /** | 198     /** | 
| 125      * Creates a new entry, based on the specified key and texture and returns i
      t. The caller owns a | 199      * Creates a new entry, based on the specified key and texture and returns i
      t. The caller owns a | 
| 126      * ref on the returned texture which must be balanced by a call to unref. | 200      * ref on the returned texture which must be balanced by a call to unref. | 
| 127      * | 201      * | 
| 128      * @param params    The texture params used to draw a texture may help deter
      mine | 202      * @param params    The texture params used to draw a texture may help deter
      mine | 
| 129      *                  the cache entry used. (e.g. different versions may exist | 203      *                  the cache entry used. (e.g. different versions may exist | 
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 201      */ | 275      */ | 
| 202     GrTexture* lockAndRefScratchTexture(const GrTextureDesc&, ScratchTexMatch ma
      tch); | 276     GrTexture* lockAndRefScratchTexture(const GrTextureDesc&, ScratchTexMatch ma
      tch); | 
| 203 | 277 | 
| 204     /** | 278     /** | 
| 205      *  When done with an entry, call unlockScratchTexture(entry) on it, which r
      eturns | 279      *  When done with an entry, call unlockScratchTexture(entry) on it, which r
      eturns | 
| 206      *  it to the cache, where it may be purged. This does not unref the texture
      . | 280      *  it to the cache, where it may be purged. This does not unref the texture
      . | 
| 207      */ | 281      */ | 
| 208     void unlockScratchTexture(GrTexture* texture); | 282     void unlockScratchTexture(GrTexture* texture); | 
| 209 | 283 | 
| 210     /** | 284     /** | 
| 211      * This method should be called whenever a GrTexture is unreffed or |  | 
| 212      * switched from exclusive to non-exclusive. This |  | 
| 213      * gives the resource cache a chance to discard unneeded textures. |  | 
| 214      * Note: this entry point will be removed once totally ref-driven |  | 
| 215      * cache maintenance is implemented |  | 
| 216      */ |  | 
| 217     void purgeCache(); |  | 
| 218 |  | 
| 219     /** |  | 
| 220      * Purge all the unlocked resources from the cache. |  | 
| 221      * This entry point is mainly meant for timing texture uploads |  | 
| 222      * and is not defined in normal builds of Skia. |  | 
| 223      */ |  | 
| 224     void purgeAllUnlockedResources(); |  | 
| 225 |  | 
| 226     /** |  | 
| 227      * Creates a texture that is outside the cache. Does not count against | 285      * Creates a texture that is outside the cache. Does not count against | 
| 228      * cache's budget. | 286      * cache's budget. | 
| 229      */ | 287      */ | 
| 230     GrTexture* createUncachedTexture(const GrTextureDesc& desc, | 288     GrTexture* createUncachedTexture(const GrTextureDesc& desc, | 
| 231                                      void* srcData, | 289                                      void* srcData, | 
| 232                                      size_t rowBytes); | 290                                      size_t rowBytes); | 
| 233 | 291 | 
| 234     /** | 292     /** | 
| 235      * Returns true if the specified use of an indexed texture is supported. | 293      * Returns true if the specified use of an indexed texture is supported. | 
| 236      * Support may depend upon whether the texture params indicate that the | 294      * Support may depend upon whether the texture params indicate that the | 
| 237      * texture will be tiled. Passing NULL for the texture params indicates | 295      * texture will be tiled. Passing NULL for the texture params indicates | 
| 238      * clamp mode. | 296      * clamp mode. | 
| 239      */ | 297      */ | 
| 240     bool supportsIndex8PixelConfig(const GrTextureParams*, | 298     bool supportsIndex8PixelConfig(const GrTextureParams*, | 
| 241                                    int width, | 299                                    int width, | 
| 242                                    int height) const; | 300                                    int height) const; | 
| 243 | 301 | 
| 244     /** | 302     /** | 
| 245      *  Return the current texture cache limits. |  | 
| 246      * |  | 
| 247      *  @param maxTextures If non-null, returns maximum number of textures that |  | 
| 248      *                     can be held in the cache. |  | 
| 249      *  @param maxTextureBytes If non-null, returns maximum number of bytes of |  | 
| 250      *                         texture memory that can be held in the cache. |  | 
| 251      */ |  | 
| 252     void getTextureCacheLimits(int* maxTextures, size_t* maxTextureBytes) const; |  | 
| 253 |  | 
| 254     /** |  | 
| 255      *  Specify the texture cache limits. If the current cache exceeds either |  | 
| 256      *  of these, it will be purged (LRU) to keep the cache within these limits. |  | 
| 257      * |  | 
| 258      *  @param maxTextures The maximum number of textures that can be held in |  | 
| 259      *                     the cache. |  | 
| 260      *  @param maxTextureBytes The maximum number of bytes of texture memory |  | 
| 261      *                         that can be held in the cache. |  | 
| 262      */ |  | 
| 263     void setTextureCacheLimits(int maxTextures, size_t maxTextureBytes); |  | 
| 264 |  | 
| 265     /** |  | 
| 266      *  Return the max width or height of a texture supported by the current GPU
      . | 303      *  Return the max width or height of a texture supported by the current GPU
      . | 
| 267      */ | 304      */ | 
| 268     int getMaxTextureSize() const; | 305     int getMaxTextureSize() const; | 
| 269 | 306 | 
| 270     /** | 307     /** | 
| 271      *  Temporarily override the true max texture size. Note: an override | 308      *  Temporarily override the true max texture size. Note: an override | 
| 272      *  larger then the true max texture size will have no effect. | 309      *  larger then the true max texture size will have no effect. | 
| 273      *  This entry point is mainly meant for testing texture size dependent | 310      *  This entry point is mainly meant for testing texture size dependent | 
| 274      *  features and is only available if defined outside of Skia (see | 311      *  features and is only available if defined outside of Skia (see | 
| 275      *  bleed GM. | 312      *  bleed GM. | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 287         fRenderTarget.reset(SkSafeRef(target)); | 324         fRenderTarget.reset(SkSafeRef(target)); | 
| 288     } | 325     } | 
| 289 | 326 | 
| 290     /** | 327     /** | 
| 291      * Gets the current render target. | 328      * Gets the current render target. | 
| 292      * @return the currently bound render target. | 329      * @return the currently bound render target. | 
| 293      */ | 330      */ | 
| 294     const GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); 
      } | 331     const GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); 
      } | 
| 295     GrRenderTarget* getRenderTarget() { return fRenderTarget.get(); } | 332     GrRenderTarget* getRenderTarget() { return fRenderTarget.get(); } | 
| 296 | 333 | 
| 297     GrAARectRenderer* getAARectRenderer() { return fAARectRenderer; } |  | 
| 298 |  | 
| 299     /** | 334     /** | 
| 300      * Can the provided configuration act as a color render target? | 335      * Can the provided configuration act as a color render target? | 
| 301      */ | 336      */ | 
| 302     bool isConfigRenderable(GrPixelConfig config, bool withMSAA) const; | 337     bool isConfigRenderable(GrPixelConfig config, bool withMSAA) const; | 
| 303 | 338 | 
| 304     /** | 339     /** | 
| 305      * Return the max width or height of a render target supported by the | 340      * Return the max width or height of a render target supported by the | 
| 306      * current GPU. | 341      * current GPU. | 
| 307      */ | 342      */ | 
| 308     int getMaxRenderTargetSize() const; | 343     int getMaxRenderTargetSize() const; | 
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 635      * @param pixelOpsFlags see PixelOpsFlags enum above. | 670      * @param pixelOpsFlags see PixelOpsFlags enum above. | 
| 636      * @return true if the write succeeded, false if not. The write can fail bec
      ause of an | 671      * @return true if the write succeeded, false if not. The write can fail bec
      ause of an | 
| 637      *         unsupported combination of texture and pixel configs. | 672      *         unsupported combination of texture and pixel configs. | 
| 638      */ | 673      */ | 
| 639     bool writeTexturePixels(GrTexture* texture, | 674     bool writeTexturePixels(GrTexture* texture, | 
| 640                             int left, int top, int width, int height, | 675                             int left, int top, int width, int height, | 
| 641                             GrPixelConfig config, const void* buffer, | 676                             GrPixelConfig config, const void* buffer, | 
| 642                             size_t rowBytes, | 677                             size_t rowBytes, | 
| 643                             uint32_t pixelOpsFlags = 0); | 678                             uint32_t pixelOpsFlags = 0); | 
| 644 | 679 | 
| 645 |  | 
| 646     /** | 680     /** | 
| 647      * Copies a rectangle of texels from src to dst. The size of dst is the size
       of the rectangle | 681      * Copies a rectangle of texels from src to dst. The size of dst is the size
       of the rectangle | 
| 648      * copied and topLeft is the position of the rect in src. The rectangle is c
      lipped to src's | 682      * copied and topLeft is the position of the rect in src. The rectangle is c
      lipped to src's | 
| 649      * bounds. | 683      * bounds. | 
| 650      * @param src           the texture to copy from. | 684      * @param src           the texture to copy from. | 
| 651      * @param dst           the render target to copy to. | 685      * @param dst           the render target to copy to. | 
| 652      * @param topLeft       the point in src that will be copied to the top-left
       of dst. If NULL, | 686      * @param topLeft       the point in src that will be copied to the top-left
       of dst. If NULL, | 
| 653      *                      (0, 0) will be used. | 687      *                      (0, 0) will be used. | 
| 654      */ | 688      */ | 
| 655     void copyTexture(GrTexture* src, GrRenderTarget* dst, const SkIPoint* topLef
      t = NULL); | 689     void copyTexture(GrTexture* src, GrRenderTarget* dst, const SkIPoint* topLef
      t = NULL); | 
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 868     }; | 902     }; | 
| 869 | 903 | 
| 870     /////////////////////////////////////////////////////////////////////////// | 904     /////////////////////////////////////////////////////////////////////////// | 
| 871     // Functions intended for internal use only. | 905     // Functions intended for internal use only. | 
| 872     GrGpu* getGpu() { return fGpu; } | 906     GrGpu* getGpu() { return fGpu; } | 
| 873     const GrGpu* getGpu() const { return fGpu; } | 907     const GrGpu* getGpu() const { return fGpu; } | 
| 874     GrFontCache* getFontCache() { return fFontCache; } | 908     GrFontCache* getFontCache() { return fFontCache; } | 
| 875     GrLayerCache* getLayerCache() { return fLayerCache.get(); } | 909     GrLayerCache* getLayerCache() { return fLayerCache.get(); } | 
| 876     GrDrawTarget* getTextTarget(); | 910     GrDrawTarget* getTextTarget(); | 
| 877     const GrIndexBuffer* getQuadIndexBuffer() const; | 911     const GrIndexBuffer* getQuadIndexBuffer() const; | 
|  | 912     GrAARectRenderer* getAARectRenderer() { return fAARectRenderer; } | 
| 878 | 913 | 
| 879     // Called by tests that draw directly to the context via GrDrawTarget | 914     // Called by tests that draw directly to the context via GrDrawTarget | 
| 880     void getTestTarget(GrTestTarget*); | 915     void getTestTarget(GrTestTarget*); | 
| 881 | 916 | 
| 882     // Functions for managing gpu trace markers | 917     // Functions for managing gpu trace markers | 
| 883     bool isGpuTracingEnabled() const { return fGpuTracingEnabled; } | 918     bool isGpuTracingEnabled() const { return fGpuTracingEnabled; } | 
| 884     void enableGpuTracing() { fGpuTracingEnabled = true; } | 919     void enableGpuTracing() { fGpuTracingEnabled = true; } | 
| 885     void disableGpuTracing() { fGpuTracingEnabled = false; } | 920     void disableGpuTracing() { fGpuTracingEnabled = false; } | 
| 886 | 921 | 
| 887     /** | 922     /** | 
| 888      * Stencil buffers add themselves to the cache using addStencilBuffer. findS
      tencilBuffer is | 923      * Stencil buffers add themselves to the cache using addStencilBuffer. findS
      tencilBuffer is | 
| 889      * called to check the cache for a SB that matches an RT's criteria. | 924      * called to check the cache for a SB that matches an RT's criteria. | 
| 890      */ | 925      */ | 
| 891     void addStencilBuffer(GrStencilBuffer* sb); | 926     void addStencilBuffer(GrStencilBuffer* sb); | 
| 892     GrStencilBuffer* findStencilBuffer(int width, int height, int sampleCnt); | 927     GrStencilBuffer* findStencilBuffer(int width, int height, int sampleCnt); | 
| 893 | 928 | 
| 894     GrPathRenderer* getPathRenderer( | 929     GrPathRenderer* getPathRenderer( | 
| 895                     const SkPath& path, | 930                     const SkPath& path, | 
| 896                     const SkStrokeRec& stroke, | 931                     const SkStrokeRec& stroke, | 
| 897                     const GrDrawTarget* target, | 932                     const GrDrawTarget* target, | 
| 898                     bool allowSW, | 933                     bool allowSW, | 
| 899                     GrPathRendererChain::DrawType drawType = GrPathRendererChain
      ::kColor_DrawType, | 934                     GrPathRendererChain::DrawType drawType = GrPathRendererChain
      ::kColor_DrawType, | 
| 900                     GrPathRendererChain::StencilSupport* stencilSupport = NULL); | 935                     GrPathRendererChain::StencilSupport* stencilSupport = NULL); | 
| 901 | 936 | 
| 902     /** |  | 
| 903      * Stores a custom resource in the cache, based on the specified key. |  | 
| 904      */ |  | 
| 905     void addResourceToCache(const GrResourceKey&, GrCacheable*); |  | 
| 906 |  | 
| 907     /** |  | 
| 908      * Finds a resource in the cache, based on the specified key. This is intend
      ed for use in |  | 
| 909      * conjunction with addResourceToCache(). The return value will be NULL if n
      ot found. The |  | 
| 910      * caller must balance with a call to unref(). |  | 
| 911      */ |  | 
| 912     GrCacheable* findAndRefCachedResource(const GrResourceKey&); |  | 
| 913 |  | 
| 914 #if GR_CACHE_STATS | 937 #if GR_CACHE_STATS | 
| 915     void printCacheStats() const; | 938     void printCacheStats() const; | 
| 916 #endif | 939 #endif | 
| 917 | 940 | 
| 918 private: | 941 private: | 
| 919     // Used to indicate whether a draw should be performed immediately or queued
       in fDrawBuffer. | 942     // Used to indicate whether a draw should be performed immediately or queued
       in fDrawBuffer. | 
| 920     enum BufferedDraw { | 943     enum BufferedDraw { | 
| 921         kYes_BufferedDraw, | 944         kYes_BufferedDraw, | 
| 922         kNo_BufferedDraw, | 945         kNo_BufferedDraw, | 
| 923     }; | 946     }; | 
| 924     BufferedDraw fLastDrawWasBuffered; | 947     BufferedDraw fLastDrawWasBuffered; | 
| 925 | 948 | 
| 926     GrGpu*                          fGpu; | 949     GrGpu*                          fGpu; | 
| 927     SkMatrix                        fViewMatrix; | 950     SkMatrix                        fViewMatrix; | 
| 928     SkAutoTUnref<GrRenderTarget>    fRenderTarget; | 951     SkAutoTUnref<GrRenderTarget>    fRenderTarget; | 
| 929     const GrClipData*               fClip;  // TODO: make this ref counted | 952     const GrClipData*               fClip;  // TODO: make this ref counted | 
| 930     GrDrawState*                    fDrawState; | 953     GrDrawState*                    fDrawState; | 
| 931 | 954 | 
| 932     GrResourceCache*                fTextureCache; | 955     GrResourceCache*                fResourceCache; | 
| 933     GrFontCache*                    fFontCache; | 956     GrFontCache*                    fFontCache; | 
| 934     SkAutoTDelete<GrLayerCache>     fLayerCache; | 957     SkAutoTDelete<GrLayerCache>     fLayerCache; | 
| 935 | 958 | 
| 936     GrPathRendererChain*            fPathRendererChain; | 959     GrPathRendererChain*            fPathRendererChain; | 
| 937     GrSoftwarePathRenderer*         fSoftwarePathRenderer; | 960     GrSoftwarePathRenderer*         fSoftwarePathRenderer; | 
| 938 | 961 | 
| 939     GrVertexBufferAllocPool*        fDrawBufferVBAllocPool; | 962     GrVertexBufferAllocPool*        fDrawBufferVBAllocPool; | 
| 940     GrIndexBufferAllocPool*         fDrawBufferIBAllocPool; | 963     GrIndexBufferAllocPool*         fDrawBufferIBAllocPool; | 
| 941     GrInOrderDrawBuffer*            fDrawBuffer; | 964     GrInOrderDrawBuffer*            fDrawBuffer; | 
| 942 | 965 | 
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1100     } | 1123     } | 
| 1101 | 1124 | 
| 1102     GrTexture* texture() { return fTexture; } | 1125     GrTexture* texture() { return fTexture; } | 
| 1103 | 1126 | 
| 1104 private: | 1127 private: | 
| 1105     GrContext*                    fContext; | 1128     GrContext*                    fContext; | 
| 1106     GrTexture*                    fTexture; | 1129     GrTexture*                    fTexture; | 
| 1107 }; | 1130 }; | 
| 1108 | 1131 | 
| 1109 #endif | 1132 #endif | 
| OLD | NEW | 
|---|