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

Side by Side Diff: src/gpu/gl/GrGpuGL.cpp

Issue 12607013: Add MSAA configs to bench. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 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 | Annotate | Revision Log
« src/gpu/GrDrawTarget.h ('K') | « src/gpu/gl/GrGLCaps.cpp ('k') | no next file » | 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 2011 Google Inc. 2 * Copyright 2011 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 8
9 #include "GrGpuGL.h" 9 #include "GrGpuGL.h"
10 #include "GrGLStencilBuffer.h" 10 #include "GrGLStencilBuffer.h"
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 // Our render targets are always created with textures as the color 271 // Our render targets are always created with textures as the color
272 // attachment, hence this min: 272 // attachment, hence this min:
273 caps->fMaxRenderTargetSize = GrMin(caps->fMaxTextureSize, caps->fMaxRenderTa rgetSize); 273 caps->fMaxRenderTargetSize = GrMin(caps->fMaxTextureSize, caps->fMaxRenderTa rgetSize);
274 274
275 caps->fFSAASupport = GrGLCaps::kNone_MSFBOType != this->glCaps().msFBOType() ; 275 caps->fFSAASupport = GrGLCaps::kNone_MSFBOType != this->glCaps().msFBOType() ;
276 caps->fPathStencilingSupport = GR_GL_USE_NV_PATH_RENDERING && 276 caps->fPathStencilingSupport = GR_GL_USE_NV_PATH_RENDERING &&
277 this->hasExtension("GL_NV_path_rendering"); 277 this->hasExtension("GL_NV_path_rendering");
278 278
279 // Enable supported shader-related caps 279 // Enable supported shader-related caps
280 if (kDesktop_GrGLBinding == this->glBinding()) { 280 if (kDesktop_GrGLBinding == this->glBinding()) {
281 caps->fDualSourceBlendingSupport = 281 caps->fDualSourceBlendingSupport = this->glVersion() >= GR_GL_VER(3,3) | |
282 this->glVersion() >= GR_GL_VER(3,3) || 282 this->hasExtension("GL_ARB_blend_func _extended");
283 this->hasExtension("GL_ARB_blend_func_extended");
284 caps->fShaderDerivativeSupport = true; 283 caps->fShaderDerivativeSupport = true;
285 // we don't support GL_ARB_geometry_shader4, just GL 3.2+ GS 284 // we don't support GL_ARB_geometry_shader4, just GL 3.2+ GS
286 caps->fGeometryShaderSupport = 285 caps->fGeometryShaderSupport = this->glVersion() >= GR_GL_VER(3,2) &&
287 this->glVersion() >= GR_GL_VER(3,2) && 286 this->glslGeneration() >= k150_GrGLSLGene ration;
288 this->glslGeneration() >= k150_GrGLSLGeneration;
289 } else { 287 } else {
290 caps->fShaderDerivativeSupport = 288 caps->fShaderDerivativeSupport =
291 this->hasExtension("GL_OES_standard_derivatives"); 289 this->hasExtension("GL_OES_standard_derivatives");
292 } 290 }
291
292 if (GrGLCaps::kNone_MSFBOType != this->glCaps().msFBOType()) {
293 GR_GL_GetIntegerv(this->glInterface(), GR_GL_MAX_SAMPLES, &caps->fMaxSam pleCount);
294 }
293 } 295 }
294 296
295 void GrGpuGL::fillInConfigRenderableTable() { 297 void GrGpuGL::fillInConfigRenderableTable() {
296 298
297 // OpenGL < 3.0 299 // OpenGL < 3.0
298 // no support for render targets unless the GL_ARB_framebuffer_object 300 // no support for render targets unless the GL_ARB_framebuffer_object
299 // extension is supported (in which case we get ALPHA, RED, RG, RGB, 301 // extension is supported (in which case we get ALPHA, RED, RG, RGB,
300 // RGBA (ALPHA8, RGBA4, RGBA8) for OpenGL > 1.1). Note that we 302 // RGBA (ALPHA8, RGBA4, RGBA8) for OpenGL > 1.1). Note that we
301 // probably don't get R8 in this case. 303 // probably don't get R8 in this case.
302 304
303 // OpenGL 3.0 305 // OpenGL 3.0
304 // base color renderable: ALPHA, RED, RG, RGB, and RGBA 306 // base color renderable: ALPHA, RED, RG, RGB, and RGBA
305 // sized derivatives: ALPHA8, R8, RGBA4, RGBA8 307 // sized derivatives: ALPHA8, R8, RGBA4, RGBA8
306 308
307 // >= OpenGL 3.1 309 // >= OpenGL 3.1
308 // base color renderable: RED, RG, RGB, and RGBA 310 // base color renderable: RED, RG, RGB, and RGBA
309 // sized derivatives: R8, RGBA4, RGBA8 311 // sized derivatives: R8, RGBA4, RGBA8
310 // if the GL_ARB_compatibility extension is supported then we get back 312 // if the GL_ARB_compatibility extension is supported then we get back
311 // support for GL_ALPHA and ALPHA8 313 // support for GL_ALPHA and ALPHA8
312 314
313 // GL_EXT_bgra adds BGRA render targets to any version 315 // GL_EXT_bgra adds BGRA render targets to any version
314 316
315 // ES 2.0 317 // ES 2.0
316 // color renderable: RGBA4, RGB5_A1, RGB565 318 // color renderable: RGBA4, RGB5_A1, RGB565
317 // GL_EXT_texture_rg adds support for R8 as a color render target 319 // GL_EXT_texture_rg adds support for R8 as a color render target
318 // GL_OES_rgb8_rgba8 and/or GL_ARM_rgba8 adds support for RGBA8 320 // GL_OES_rgb8_rgba8 and/or GL_ARM_rgba8 adds support for RGBA8
319 // GL_EXT_texture_format_BGRA8888 and/or GL_APPLE_texture_format_BGRA8888 321 // GL_EXT_texture_format_BGRA8888 and/or GL_APPLE_texture_format_BGRA8888 a dded BGRA support
320 // added BGRA support
321 322
322 if (kDesktop_GrGLBinding == this->glBinding()) { 323 if (kDesktop_GrGLBinding == this->glBinding()) {
323 // Post 3.0 we will get R8 324 // Post 3.0 we will get R8
324 // Prior to 3.0 we will get ALPHA8 (with GL_ARB_framebuffer_object) 325 // Prior to 3.0 we will get ALPHA8 (with GL_ARB_framebuffer_object)
325 if (this->glVersion() >= GR_GL_VER(3,0) || 326 if (this->glVersion() >= GR_GL_VER(3,0) ||
326 this->hasExtension("GL_ARB_framebuffer_object")) { 327 this->hasExtension("GL_ARB_framebuffer_object")) {
327 fConfigRenderSupport[kAlpha_8_GrPixelConfig] = true; 328 fConfigRenderSupport[kAlpha_8_GrPixelConfig] = true;
328 } 329 }
329 } else { 330 } else {
330 // On ES we can only hope for R8 331 // On ES we can only hope for R8
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 ctx.info().caps().getMSAACoverageMode(sampleCount); 843 ctx.info().caps().getMSAACoverageMode(sampleCount);
843 GL_ALLOC_CALL(ctx.interface(), 844 GL_ALLOC_CALL(ctx.interface(),
844 RenderbufferStorageMultisampleCoverage(GR_GL_RENDERBUFFER, 845 RenderbufferStorageMultisampleCoverage(GR_GL_RENDERBUFFER,
845 mode.fCoverageSampleCnt, 846 mode.fCoverageSampleCnt,
846 mode.fColorSampleCnt, 847 mode.fColorSampleCnt,
847 format, 848 format,
848 width, height)); 849 width, height));
849 created = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface())); 850 created = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface()));
850 } 851 }
851 if (!created) { 852 if (!created) {
852 // glRBMS will fail if requested samples is > max samples.
853 sampleCount = GrMin(sampleCount, ctx.info().caps().maxSampleCount());
854 GL_ALLOC_CALL(ctx.interface(), 853 GL_ALLOC_CALL(ctx.interface(),
855 RenderbufferStorageMultisample(GR_GL_RENDERBUFFER, 854 RenderbufferStorageMultisample(GR_GL_RENDERBUFFER,
856 sampleCount, 855 sampleCount,
857 format, 856 format,
858 width, height)); 857 width, height));
859 created = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface())); 858 created = (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface()));
860 } 859 }
861 return created; 860 return created;
862 } 861 }
863 } 862 }
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 968
970 GrTexture* GrGpuGL::onCreateTexture(const GrTextureDesc& desc, 969 GrTexture* GrGpuGL::onCreateTexture(const GrTextureDesc& desc,
971 const void* srcData, 970 const void* srcData,
972 size_t rowBytes) { 971 size_t rowBytes) {
973 972
974 GrGLTexture::Desc glTexDesc; 973 GrGLTexture::Desc glTexDesc;
975 GrGLRenderTarget::Desc glRTDesc; 974 GrGLRenderTarget::Desc glRTDesc;
976 975
977 // Attempt to catch un- or wrongly initialized sample counts; 976 // Attempt to catch un- or wrongly initialized sample counts;
978 GrAssert(desc.fSampleCnt >= 0 && desc.fSampleCnt <= 64); 977 GrAssert(desc.fSampleCnt >= 0 && desc.fSampleCnt <= 64);
978 // We fail if the MSAA was requested and is not available.
979 if (GrGLCaps::kNone_MSFBOType == this->glCaps().msFBOType() && desc.fSampleC nt) {
980 //GrPrintf("MSAA RT requested but not supported on this platform.");
981 return return_null_texture();
982 }
983 // If the sample count exceeds the max then we clamp it.
984 glTexDesc.fSampleCnt = GrMin(desc.fSampleCnt, this->getCaps().maxSampleCount ());
979 985
980 glTexDesc.fFlags = desc.fFlags; 986 glTexDesc.fFlags = desc.fFlags;
981 glTexDesc.fWidth = desc.fWidth; 987 glTexDesc.fWidth = desc.fWidth;
982 glTexDesc.fHeight = desc.fHeight; 988 glTexDesc.fHeight = desc.fHeight;
983 glTexDesc.fConfig = desc.fConfig; 989 glTexDesc.fConfig = desc.fConfig;
984 glTexDesc.fSampleCnt = desc.fSampleCnt;
985 glTexDesc.fIsWrapped = false; 990 glTexDesc.fIsWrapped = false;
986 991
987 glRTDesc.fMSColorRenderbufferID = 0; 992 glRTDesc.fMSColorRenderbufferID = 0;
988 glRTDesc.fRTFBOID = 0; 993 glRTDesc.fRTFBOID = 0;
989 glRTDesc.fTexFBOID = 0; 994 glRTDesc.fTexFBOID = 0;
990 glRTDesc.fIsWrapped = false; 995 glRTDesc.fIsWrapped = false;
991 glRTDesc.fConfig = glTexDesc.fConfig; 996 glRTDesc.fConfig = glTexDesc.fConfig;
992 997
993 bool renderTarget = 0 != (desc.fFlags & kRenderTarget_GrTextureFlagBit); 998 bool renderTarget = 0 != (desc.fFlags & kRenderTarget_GrTextureFlagBit);
994 999
995 const Caps& caps = this->getCaps(); 1000 const Caps& caps = this->getCaps();
996 1001
997 glTexDesc.fOrigin = resolve_origin(desc.fOrigin, renderTarget); 1002 glTexDesc.fOrigin = resolve_origin(desc.fOrigin, renderTarget);
998 glRTDesc.fOrigin = glTexDesc.fOrigin; 1003 glRTDesc.fOrigin = glTexDesc.fOrigin;
999 1004
1000 glRTDesc.fSampleCnt = desc.fSampleCnt; 1005 glRTDesc.fSampleCnt = glTexDesc.fSampleCnt;
1001 if (GrGLCaps::kNone_MSFBOType == this->glCaps().msFBOType() && 1006 if (GrGLCaps::kNone_MSFBOType == this->glCaps().msFBOType() &&
1002 desc.fSampleCnt) { 1007 desc.fSampleCnt) {
1003 //GrPrintf("MSAA RT requested but not supported on this platform."); 1008 //GrPrintf("MSAA RT requested but not supported on this platform.");
1004 return return_null_texture(); 1009 return return_null_texture();
1005 } 1010 }
1006 1011
1007 if (renderTarget) { 1012 if (renderTarget) {
1008 if (glTexDesc.fWidth > caps.maxRenderTargetSize() || 1013 if (glTexDesc.fWidth > caps.maxRenderTargetSize() ||
1009 glTexDesc.fHeight > caps.maxRenderTargetSize()) { 1014 glTexDesc.fHeight > caps.maxRenderTargetSize()) {
1010 return return_null_texture(); 1015 return return_null_texture();
(...skipping 1317 matching lines...) Expand 10 before | Expand all | Expand 10 after
2328 this->setVertexArrayID(gpu, 0); 2333 this->setVertexArrayID(gpu, 0);
2329 } 2334 }
2330 int attrCount = gpu->glCaps().maxVertexAttributes(); 2335 int attrCount = gpu->glCaps().maxVertexAttributes();
2331 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2336 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2332 fDefaultVertexArrayAttribState.resize(attrCount); 2337 fDefaultVertexArrayAttribState.resize(attrCount);
2333 } 2338 }
2334 attribState = &fDefaultVertexArrayAttribState; 2339 attribState = &fDefaultVertexArrayAttribState;
2335 } 2340 }
2336 return attribState; 2341 return attribState;
2337 } 2342 }
OLDNEW
« src/gpu/GrDrawTarget.h ('K') | « src/gpu/gl/GrGLCaps.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698