OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 "GrGLCaps.h" | 9 #include "GrGLCaps.h" |
10 #include "GrGLContext.h" | 10 #include "GrGLContext.h" |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
361 fShaderDerivativeSupport = ctxInfo.hasExtension("GL_OES_standard_derivat ives"); | 361 fShaderDerivativeSupport = ctxInfo.hasExtension("GL_OES_standard_derivat ives"); |
362 } | 362 } |
363 | 363 |
364 if (GrGLCaps::kES_IMG_MsToTexture_MSFBOType == fMSFBOType) { | 364 if (GrGLCaps::kES_IMG_MsToTexture_MSFBOType == fMSFBOType) { |
365 GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES_IMG, &fMaxSampleCount); | 365 GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES_IMG, &fMaxSampleCount); |
366 } else if (GrGLCaps::kNone_MSFBOType != fMSFBOType) { | 366 } else if (GrGLCaps::kNone_MSFBOType != fMSFBOType) { |
367 GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES, &fMaxSampleCount); | 367 GR_GL_GetIntegerv(gli, GR_GL_MAX_SAMPLES, &fMaxSampleCount); |
368 } | 368 } |
369 | 369 |
370 this->initConfigRenderableTable(ctxInfo); | 370 this->initConfigRenderableTable(ctxInfo); |
371 | 371 this->initConfigTexturableTable(ctxInfo); |
372 this->initCompressedTextureSupport(ctxInfo); | |
373 | 372 |
374 return true; | 373 return true; |
375 } | 374 } |
376 | 375 |
377 void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) { | 376 void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) { |
378 | 377 |
379 // OpenGL < 3.0 | 378 // OpenGL < 3.0 |
380 // no support for render targets unless the GL_ARB_framebuffer_object | 379 // no support for render targets unless the GL_ARB_framebuffer_object |
381 // extension is supported (in which case we get ALPHA, RED, RG, RGB, | 380 // extension is supported (in which case we get ALPHA, RED, RG, RGB, |
382 // RGBA (ALPHA8, RGBA4, RGBA8) for OpenGL > 1.1). Note that we | 381 // RGBA (ALPHA8, RGBA4, RGBA8) for OpenGL > 1.1). Note that we |
(...skipping 14 matching lines...) Expand all Loading... | |
397 // ES 2.0 | 396 // ES 2.0 |
398 // color renderable: RGBA4, RGB5_A1, RGB565 | 397 // color renderable: RGBA4, RGB5_A1, RGB565 |
399 // GL_EXT_texture_rg adds support for R8 as a color render target | 398 // GL_EXT_texture_rg adds support for R8 as a color render target |
400 // GL_OES_rgb8_rgba8 and/or GL_ARM_rgba8 adds support for RGBA8 | 399 // GL_OES_rgb8_rgba8 and/or GL_ARM_rgba8 adds support for RGBA8 |
401 // GL_EXT_texture_format_BGRA8888 and/or GL_APPLE_texture_format_BGRA8888 a dded BGRA support | 400 // GL_EXT_texture_format_BGRA8888 and/or GL_APPLE_texture_format_BGRA8888 a dded BGRA support |
402 | 401 |
403 // ES 3.0 | 402 // ES 3.0 |
404 // Same as ES 2.0 except R8 and RGBA8 are supported without extensions (the functions called | 403 // Same as ES 2.0 except R8 and RGBA8 are supported without extensions (the functions called |
405 // below already account for this). | 404 // below already account for this). |
406 | 405 |
406 GrGLStandard standard = ctxInfo.standard(); | |
407 | |
407 enum { | 408 enum { |
408 kNo_MSAA = 0, | 409 kNo_MSAA = 0, |
409 kYes_MSAA = 1, | 410 kYes_MSAA = 1, |
410 }; | 411 }; |
411 | 412 |
412 if (kGL_GrGLStandard == ctxInfo.standard()) { | 413 if (kGL_GrGLStandard == standard) { |
413 // Post 3.0 we will get R8 | 414 // Post 3.0 we will get R8 |
414 // Prior to 3.0 we will get ALPHA8 (with GL_ARB_framebuffer_object) | 415 // Prior to 3.0 we will get ALPHA8 (with GL_ARB_framebuffer_object) |
415 if (ctxInfo.version() >= GR_GL_VER(3,0) || | 416 if (ctxInfo.version() >= GR_GL_VER(3,0) || |
416 ctxInfo.hasExtension("GL_ARB_framebuffer_object")) { | 417 ctxInfo.hasExtension("GL_ARB_framebuffer_object")) { |
417 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kNo_MSAA] = true; | 418 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kNo_MSAA] = true; |
418 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kYes_MSAA] = true; | 419 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kYes_MSAA] = true; |
419 } | 420 } |
420 } else { | 421 } else { |
421 // On ES we can only hope for R8 | 422 // On ES we can only hope for R8 |
422 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kNo_MSAA] = fTextureRedSupp ort; | 423 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kNo_MSAA] = fTextureRedSupp ort; |
423 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kYes_MSAA] = fTextureRedSup port; | 424 fConfigRenderSupport[kAlpha_8_GrPixelConfig][kYes_MSAA] = fTextureRedSup port; |
424 } | 425 } |
425 | 426 |
426 if (kGL_GrGLStandard != ctxInfo.standard()) { | 427 if (kGL_GrGLStandard != standard) { |
427 // only available in ES | 428 // only available in ES |
428 fConfigRenderSupport[kRGB_565_GrPixelConfig][kNo_MSAA] = true; | 429 fConfigRenderSupport[kRGB_565_GrPixelConfig][kNo_MSAA] = true; |
429 fConfigRenderSupport[kRGB_565_GrPixelConfig][kYes_MSAA] = true; | 430 fConfigRenderSupport[kRGB_565_GrPixelConfig][kYes_MSAA] = true; |
430 } | 431 } |
431 | 432 |
432 // we no longer support 444 as a render target | 433 // we no longer support 444 as a render target |
433 fConfigRenderSupport[kRGBA_4444_GrPixelConfig][kNo_MSAA] = false; | 434 fConfigRenderSupport[kRGBA_4444_GrPixelConfig][kNo_MSAA] = false; |
434 fConfigRenderSupport[kRGBA_4444_GrPixelConfig][kYes_MSAA] = false; | 435 fConfigRenderSupport[kRGBA_4444_GrPixelConfig][kYes_MSAA] = false; |
435 | 436 |
436 if (this->fRGBA8RenderbufferSupport) { | 437 if (this->fRGBA8RenderbufferSupport) { |
(...skipping 16 matching lines...) Expand all Loading... | |
453 | 454 |
454 // If we don't support MSAA then undo any places above where we set a config as renderable with | 455 // If we don't support MSAA then undo any places above where we set a config as renderable with |
455 // msaa. | 456 // msaa. |
456 if (kNone_MSFBOType == fMSFBOType) { | 457 if (kNone_MSFBOType == fMSFBOType) { |
457 for (int i = 0; i < kGrPixelConfigCnt; ++i) { | 458 for (int i = 0; i < kGrPixelConfigCnt; ++i) { |
458 fConfigRenderSupport[i][kYes_MSAA] = false; | 459 fConfigRenderSupport[i][kYes_MSAA] = false; |
459 } | 460 } |
460 } | 461 } |
461 } | 462 } |
462 | 463 |
463 void GrGLCaps::initCompressedTextureSupport(const GrGLContextInfo &ctxInfo) { | 464 void GrGLCaps::initConfigTexturableTable(const GrGLContextInfo& ctxInfo) { |
465 // Base texture support | |
466 fConfigTextureSupport[kAlpha_8_GrPixelConfig] = true; | |
467 fConfigTextureSupport[kIndex_8_GrPixelConfig] = true; | |
468 fConfigTextureSupport[kRGB_565_GrPixelConfig] = true; | |
469 fConfigTextureSupport[kRGBA_4444_GrPixelConfig] = true; | |
470 fConfigTextureSupport[kRGBA_8888_GrPixelConfig] = true; | |
471 fConfigTextureSupport[kBGRA_8888_GrPixelConfig] = true; | |
bsalomon
2014/05/29 19:11:29
I think this needs to duplicate the logic to setup
krajcevski
2014/05/29 19:46:42
Done.
| |
472 | |
473 // Compressed texture support | |
464 GrGLStandard standard = ctxInfo.standard(); | 474 GrGLStandard standard = ctxInfo.standard(); |
465 GrGLVersion version = ctxInfo.version(); | 475 GrGLVersion version = ctxInfo.version(); |
466 | 476 |
467 // glCompressedTexImage2D is available on all OpenGL ES devices... | 477 // glCompressedTexImage2D is available on all OpenGL ES devices... |
468 // however, it is only available on standard OpenGL after version 1.3 | 478 // however, it is only available on standard OpenGL after version 1.3 |
469 if (kGL_GrGLStandard == standard && version < GR_GL_VER(1, 3)) { | 479 bool hasCompressTex2D = (kGL_GrGLStandard != standard || version > GR_GL_VER (1, 3)); |
470 return; | |
471 } | |
472 | 480 |
473 // Check for ETC1 | 481 // Check for ETC1 |
474 bool hasETC1 = false; | 482 bool hasETC1 = false; |
475 | 483 |
476 // First check version for support | 484 // First check version for support |
477 if (kGL_GrGLStandard == standard) { | 485 if (kGL_GrGLStandard == standard) { |
478 hasETC1 = | 486 hasETC1 = hasCompressTex2D && |
479 version >= GR_GL_VER(4, 3) || | 487 (version >= GR_GL_VER(4, 3) || |
480 ctxInfo.hasExtension("GL_ARB_ES3_compatibility"); | 488 ctxInfo.hasExtension("GL_ARB_ES3_compatibility")); |
481 } else { | 489 } else { |
482 hasETC1 = | 490 hasETC1 = hasCompressTex2D && |
483 version >= GR_GL_VER(3, 0) || | 491 (version >= GR_GL_VER(3, 0) || |
484 ctxInfo.hasExtension("GL_OES_compressed_ETC1_RGB8_texture") || | 492 ctxInfo.hasExtension("GL_OES_compressed_ETC1_RGB8_texture") || |
485 // ETC2 is a superset of ETC1, so we can just check for that, too. | 493 // ETC2 is a superset of ETC1, so we can just check for that, too. |
486 (ctxInfo.hasExtension("GL_OES_compressed_ETC2_RGB8_texture") && | 494 (ctxInfo.hasExtension("GL_OES_compressed_ETC2_RGB8_texture") && |
487 ctxInfo.hasExtension("GL_OES_compressed_ETC2_RGBA8_texture")); | 495 ctxInfo.hasExtension("GL_OES_compressed_ETC2_RGBA8_texture"))); |
488 } | 496 } |
489 fCompressedFormatSupport[kETC1_GrCompressedFormat] = hasETC1; | 497 fConfigTextureSupport[kETC1_GrPixelConfig] = hasETC1; |
490 | 498 |
491 fCompressedFormatSupport[kETC2_GrCompressedFormat] = false; | 499 // Check for LATC under its various forms |
492 fCompressedFormatSupport[kDXT1_GrCompressedFormat] = false; | 500 LATCAlias alias = kLATC_LATCAlias; |
501 bool hasLATC = hasCompressTex2D && | |
502 (ctxInfo.hasExtension("GL_EXT_texture_compression_latc") || | |
503 ctxInfo.hasExtension("GL_NV_texture_compression_latc")); | |
504 | |
505 // Check for RGTC | |
506 if (!hasLATC) { | |
507 // If we're using OpenGL 3.0 or later, then we have RGTC, an identical c ompression format. | |
508 if (kGL_GrGLStandard == standard) { | |
509 hasLATC = version >= GR_GL_VER(3, 0); | |
510 } | |
511 | |
512 if (!hasLATC) { | |
513 hasLATC = | |
514 ctxInfo.hasExtension("GL_EXT_texture_compression_rgtc") || | |
515 ctxInfo.hasExtension("GL_ARB_texture_compression_rgtc"); | |
516 } | |
517 | |
518 if (hasLATC) { | |
519 alias = kRGTC_LATCAlias; | |
520 } | |
521 } | |
522 | |
523 // Check for 3DC | |
524 if (!hasLATC) { | |
525 hasLATC = ctxInfo.hasExtension("GL_AMD_compressed_3DC_texture"); | |
526 if (hasLATC) { | |
527 alias = k3DC_LATCAlias; | |
528 } | |
529 } | |
530 | |
531 fConfigTextureSupport[kLATC_GrPixelConfig] = hasLATC; | |
532 fLATCAlias = alias; | |
493 } | 533 } |
494 | 534 |
495 bool GrGLCaps::readPixelsSupported(const GrGLInterface* intf, | 535 bool GrGLCaps::readPixelsSupported(const GrGLInterface* intf, |
496 GrGLenum format, | 536 GrGLenum format, |
497 GrGLenum type) const { | 537 GrGLenum type) const { |
498 if (GR_GL_RGBA == format && GR_GL_UNSIGNED_BYTE == type) { | 538 if (GR_GL_RGBA == format && GR_GL_UNSIGNED_BYTE == type) { |
499 // ES 2 guarantees this format is supported | 539 // ES 2 guarantees this format is supported |
500 return true; | 540 return true; |
501 } | 541 } |
502 | 542 |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
743 r.appendf("Two Format Limit: %s\n", (fTwoFormatLimit ? "YES": "NO")); | 783 r.appendf("Two Format Limit: %s\n", (fTwoFormatLimit ? "YES": "NO")); |
744 r.appendf("Fragment coord conventions support: %s\n", | 784 r.appendf("Fragment coord conventions support: %s\n", |
745 (fFragCoordsConventionSupport ? "YES": "NO")); | 785 (fFragCoordsConventionSupport ? "YES": "NO")); |
746 r.appendf("Vertex array object support: %s\n", (fVertexArrayObjectSupport ? "YES": "NO")); | 786 r.appendf("Vertex array object support: %s\n", (fVertexArrayObjectSupport ? "YES": "NO")); |
747 r.appendf("Use non-VBO for dynamic data: %s\n", | 787 r.appendf("Use non-VBO for dynamic data: %s\n", |
748 (fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); | 788 (fUseNonVBOVertexAndIndexDynamicData ? "YES" : "NO")); |
749 r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO ")); | 789 r.appendf("Full screen clear is free: %s\n", (fFullClearIsFree ? "YES" : "NO ")); |
750 r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES" : "NO")); | 790 r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES" : "NO")); |
751 return r; | 791 return r; |
752 } | 792 } |
OLD | NEW |