diff options
author | 2012-04-27 14:25:44 +0000 | |
---|---|---|
committer | 2012-04-27 14:25:44 +0000 | |
commit | f6b070da5e337d13bd08ca488a0140d8facef8b8 (patch) | |
tree | 15d753d5f84c684a482b389a8d61ba16c745e3cf /src/gpu/gl | |
parent | e9b087e958f3c165a5ac271d3abfb83bdb4c1b9d (diff) |
Clamp requested MSAA sample count to GL_MAX_SAMPLES
Review URL: http://codereview.appspot.com/6135044/
git-svn-id: http://skia.googlecode.com/svn/trunk@3777 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/gl')
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 7 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.h | 6 | ||||
-rw-r--r-- | src/gpu/gl/GrGpuGL.cpp | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index c7e9380c00..797abb4d80 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -20,6 +20,7 @@ void GrGLCaps::reset() { fStencilFormats.reset(); fStencilVerifiedColorConfigs.reset(); fMSFBOType = kNone_MSFBOType; + fMaxSampleCount = 0; fCoverageAAType = kNone_CoverageAAType; fMaxFragmentUniformVectors = 0; fRGBA8RenderbufferSupport = false; @@ -45,6 +46,7 @@ GrGLCaps& GrGLCaps::operator = (const GrGLCaps& caps) { fStencilVerifiedColorConfigs = caps.fStencilVerifiedColorConfigs; fMaxFragmentUniformVectors = caps.fMaxFragmentUniformVectors; fMSFBOType = caps.fMSFBOType; + fMaxSampleCount = caps.fMaxSampleCount; fCoverageAAType = caps.fCoverageAAType; fMSAACoverageModes = caps.fMSAACoverageModes; fRGBA8RenderbufferSupport = caps.fRGBA8RenderbufferSupport; @@ -206,6 +208,11 @@ void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo) { compareProc); } } + if (kNone_MSFBOType != fMSFBOType) { + GR_GL_GetIntegerv(ctxInfo.interface(), + GR_GL_MAX_SAMPLES, + &fMaxSampleCount); + } } const GrGLCaps::MSAACoverageMode& GrGLCaps::getMSAACoverageMode( diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h index 31c4392a10..eb095765c6 100644 --- a/src/gpu/gl/GrGLCaps.h +++ b/src/gpu/gl/GrGLCaps.h @@ -137,6 +137,11 @@ public: MSFBOType msFBOType() const { return fMSFBOType; } /** + * Reports the maximum number of samples supported. + */ + int maxSampleCount() const { return fMaxSampleCount; } + + /** * Reports the type of coverage sample AA support. */ CoverageAAType coverageAAType() const { return fCoverageAAType; } @@ -257,6 +262,7 @@ private: int fMaxFragmentUniformVectors; MSFBOType fMSFBOType; + int fMaxSampleCount; CoverageAAType fCoverageAAType; SkTDArray<MSAACoverageMode> fMSAACoverageModes; diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp index a9b345bdba..9abd01c966 100644 --- a/src/gpu/gl/GrGpuGL.cpp +++ b/src/gpu/gl/GrGpuGL.cpp @@ -866,6 +866,8 @@ bool renderbuffer_storage_msaa(GrGLContextInfo& ctxInfo, created = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctxInfo.interface())); } if (!created) { + // glRBMS will fail if requested samples is > max samples. + sampleCount = GrMin(sampleCount, ctxInfo.caps().maxSampleCount()); GL_ALLOC_CALL(ctxInfo.interface(), RenderbufferStorageMultisample(GR_GL_RENDERBUFFER, sampleCount, |