| Index: src/gpu/GrGpu.h
 | 
| diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
 | 
| index 5d35fcf859bca3792681e9e6ff5037e92fc9fdf0..ebe4116ebed388ee8277554baa1692a0cacbb607 100644
 | 
| --- a/src/gpu/GrGpu.h
 | 
| +++ b/src/gpu/GrGpu.h
 | 
| @@ -12,6 +12,7 @@
 | 
|  #include "GrProgramDesc.h"
 | 
|  #include "GrStencil.h"
 | 
|  #include "GrSwizzle.h"
 | 
| +#include "GrAllocator.h"
 | 
|  #include "GrTextureParamsAdjuster.h"
 | 
|  #include "GrTypes.h"
 | 
|  #include "GrXferProcessor.h"
 | 
| @@ -365,6 +366,22 @@ public:
 | 
|                       const SkIRect& srcRect,
 | 
|                       const SkIPoint& dstPoint);
 | 
|  
 | 
| +    struct MultisampleSpecs {
 | 
| +        // Nonzero ID that uniquely identifies these multisample specs.
 | 
| +        uint8_t                            fUniqueID;
 | 
| +        // The actual number of samples the GPU will run. NOTE: this value can be greater than the
 | 
| +        // the render target's sample count.
 | 
| +        int                                fEffectiveSampleCnt;
 | 
| +        // If sample locations are supported, contains the subpixel locations at which the GPU will
 | 
| +        // sample. Pixel center is at (.5, .5) and (0, 0) indicates the top left corner.
 | 
| +        SkAutoTDeleteArray<const SkPoint>  fSampleLocations;
 | 
| +    };
 | 
| +
 | 
| +    // Finds a render target's multisample specs. The stencil settings are only needed to flush the
 | 
| +    // draw state prior to querying multisample information; they should not have any effect on the
 | 
| +    // multisample information itself.
 | 
| +    const MultisampleSpecs& getMultisampleSpecs(GrRenderTarget*, const GrStencilSettings&);
 | 
| +
 | 
|      struct DrawArgs {
 | 
|          DrawArgs(const GrPrimitiveProcessor* primProc,
 | 
|                   const GrPipeline* pipeline,
 | 
| @@ -601,6 +618,12 @@ private:
 | 
|                                 const SkIRect& srcRect,
 | 
|                                 const SkIPoint& dstPoint) = 0;
 | 
|  
 | 
| +    // overridden by backend specific derived class to perform the multisample queries
 | 
| +    virtual void onGetMultisampleSpecs(GrRenderTarget*,
 | 
| +                                       const GrStencilSettings&,
 | 
| +                                       int* effectiveSampleCnt,
 | 
| +                                       SkAutoTDeleteArray<SkPoint>* sampleLocations) = 0;
 | 
| +
 | 
|      void resetContext() {
 | 
|          this->onResetContext(fResetBits);
 | 
|          fResetBits = 0;
 | 
| @@ -609,6 +632,8 @@ private:
 | 
|  
 | 
|      ResetTimestamp                                                      fResetTimestamp;
 | 
|      uint32_t                                                            fResetBits;
 | 
| +    SkTArray<const MultisampleSpecs*, true>                             fMultisampleSpecsMap;
 | 
| +    GrTAllocator<MultisampleSpecs>                                      fMultisampleSpecsAllocator;
 | 
|      // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu.
 | 
|      GrContext*                                                          fContext;
 | 
|  
 | 
| 
 |