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 | 10 |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
476 version >= GR_GL_VER(3, 0) || | 476 version >= GR_GL_VER(3, 0) || |
477 (ctxInfo.hasExtension("GL_EXT_draw_instanced") && | 477 (ctxInfo.hasExtension("GL_EXT_draw_instanced") && |
478 ctxInfo.hasExtension("GL_EXT_instanced_arrays")); | 478 ctxInfo.hasExtension("GL_EXT_instanced_arrays")); |
479 } | 479 } |
480 | 480 |
481 this->initConfigTexturableTable(ctxInfo, gli, srgbSupport); | 481 this->initConfigTexturableTable(ctxInfo, gli, srgbSupport); |
482 this->initConfigRenderableTable(ctxInfo, srgbSupport); | 482 this->initConfigRenderableTable(ctxInfo, srgbSupport); |
483 this->initShaderPrecisionTable(ctxInfo, gli, glslCaps); | 483 this->initShaderPrecisionTable(ctxInfo, gli, glslCaps); |
484 // Requires fTexutreSwizzleSupport and fTextureRedSupport to be set before t his point. | 484 // Requires fTexutreSwizzleSupport and fTextureRedSupport to be set before t his point. |
485 this->initConfigSwizzleTable(ctxInfo, glslCaps); | 485 this->initConfigSwizzleTable(ctxInfo, glslCaps); |
486 // Requires various members are already correctly initialized (e.g. fTexture RedSupport). | |
487 this->initConfigTable(ctxInfo); | |
486 | 488 |
487 this->applyOptionsOverrides(contextOptions); | 489 this->applyOptionsOverrides(contextOptions); |
488 glslCaps->applyOptionsOverrides(contextOptions); | 490 glslCaps->applyOptionsOverrides(contextOptions); |
489 } | 491 } |
490 | 492 |
491 const char* get_glsl_version_decl_string(GrGLStandard standard, GrGLSLGeneration generation, | 493 const char* get_glsl_version_decl_string(GrGLStandard standard, GrGLSLGeneration generation, |
492 bool isCoreProfile) { | 494 bool isCoreProfile) { |
493 switch (generation) { | 495 switch (generation) { |
494 case k110_GrGLSLGeneration: | 496 case k110_GrGLSLGeneration: |
495 if (kGLES_GrGLStandard == standard) { | 497 if (kGLES_GrGLStandard == standard) { |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
717 fConfigRenderSupport[kRGBA_8888_GrPixelConfig][kNo_MSAA] = true; | 719 fConfigRenderSupport[kRGBA_8888_GrPixelConfig][kNo_MSAA] = true; |
718 fConfigRenderSupport[kRGBA_8888_GrPixelConfig][kYes_MSAA] = true; | 720 fConfigRenderSupport[kRGBA_8888_GrPixelConfig][kYes_MSAA] = true; |
719 } | 721 } |
720 | 722 |
721 if (this->isConfigTexturable(kBGRA_8888_GrPixelConfig)) { | 723 if (this->isConfigTexturable(kBGRA_8888_GrPixelConfig)) { |
722 // On iOS, BGRA is not supported as a renderable target on ES 3.0+ | 724 // On iOS, BGRA is not supported as a renderable target on ES 3.0+ |
723 if (!ctxInfo.hasExtension("GL_APPLE_texture_format_BGRA8888") || | 725 if (!ctxInfo.hasExtension("GL_APPLE_texture_format_BGRA8888") || |
724 ctxInfo.version() < GR_GL_VER(3,0)) { | 726 ctxInfo.version() < GR_GL_VER(3,0)) { |
725 fConfigRenderSupport[kBGRA_8888_GrPixelConfig][kNo_MSAA] = true; | 727 fConfigRenderSupport[kBGRA_8888_GrPixelConfig][kNo_MSAA] = true; |
726 // The GL_EXT_texture_format_BGRA8888 extension does not add BGRA to the list of | 728 // The GL_EXT_texture_format_BGRA8888 extension does not add BGRA to the list of |
727 // configs that are color-renderable and can be passed to glRenderBu fferStorageMultisample. | 729 // configs that are color-renderable and can be passed to |
728 // Chromium may have an extension to allow BGRA renderbuffers to wor k on desktop platforms. | 730 // glRenderBufferStorageMultisample. Chromium may have an extension to allow BGRA |
731 // renderbuffers to work on desktop platforms. | |
729 if (ctxInfo.hasExtension("GL_CHROMIUM_renderbuffer_format_BGRA8888") ) { | 732 if (ctxInfo.hasExtension("GL_CHROMIUM_renderbuffer_format_BGRA8888") ) { |
730 fConfigRenderSupport[kBGRA_8888_GrPixelConfig][kYes_MSAA] = true ; | 733 fConfigRenderSupport[kBGRA_8888_GrPixelConfig][kYes_MSAA] = true ; |
731 } else { | 734 } else { |
732 fConfigRenderSupport[kBGRA_8888_GrPixelConfig][kYes_MSAA] = | 735 fConfigRenderSupport[kBGRA_8888_GrPixelConfig][kYes_MSAA] = |
733 !fBGRAIsInternalFormat || !this->usesMSAARenderBuffers(); | 736 !fBGRAIsInternalFormat || !this->usesMSAARenderBuffers(); |
734 } | 737 } |
735 } | 738 } |
736 } | 739 } |
737 | 740 |
738 if (this->fRGBA8RenderbufferSupport && srgbSupport) { | 741 if (this->fRGBA8RenderbufferSupport && srgbSupport) { |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1337 glslCaps->fConfigSwizzle[kSRGBA_8888_GrPixelConfig] = "rgba"; | 1340 glslCaps->fConfigSwizzle[kSRGBA_8888_GrPixelConfig] = "rgba"; |
1338 glslCaps->fConfigSwizzle[kETC1_GrPixelConfig] = "rgba"; | 1341 glslCaps->fConfigSwizzle[kETC1_GrPixelConfig] = "rgba"; |
1339 glslCaps->fConfigSwizzle[kLATC_GrPixelConfig] = "rrrr"; | 1342 glslCaps->fConfigSwizzle[kLATC_GrPixelConfig] = "rrrr"; |
1340 glslCaps->fConfigSwizzle[kR11_EAC_GrPixelConfig] = "rrrr"; | 1343 glslCaps->fConfigSwizzle[kR11_EAC_GrPixelConfig] = "rrrr"; |
1341 glslCaps->fConfigSwizzle[kASTC_12x12_GrPixelConfig] = "rgba"; | 1344 glslCaps->fConfigSwizzle[kASTC_12x12_GrPixelConfig] = "rgba"; |
1342 glslCaps->fConfigSwizzle[kRGBA_float_GrPixelConfig] = "rgba"; | 1345 glslCaps->fConfigSwizzle[kRGBA_float_GrPixelConfig] = "rgba"; |
1343 glslCaps->fConfigSwizzle[kRGBA_half_GrPixelConfig] = "rgba"; | 1346 glslCaps->fConfigSwizzle[kRGBA_half_GrPixelConfig] = "rgba"; |
1344 | 1347 |
1345 } | 1348 } |
1346 | 1349 |
1350 void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo) { | |
bsalomon
2015/12/18 16:15:41
This is purely a mechanical transfer from GrGLGpu
| |
1351 fConfigTable[kUnknown_GrPixelConfig].fFormats.fBaseInternalFormat = 0; | |
1352 fConfigTable[kUnknown_GrPixelConfig].fFormats.fSizedInternalFormat = 0; | |
1353 fConfigTable[kUnknown_GrPixelConfig].fFormats.fExternalFormat = 0; | |
1354 fConfigTable[kUnknown_GrPixelConfig].fFormats.fExternalType = 0; | |
1355 | |
1356 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_ RGBA; | |
1357 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL _RGBA8; | |
1358 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fExternalFormat = GR_GL_RGBA ; | |
1359 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGN ED_BYTE; | |
1360 | |
1361 if (this->bgraIsInternalFormat()) { | |
1362 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR _GL_BGRA; | |
1363 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = G R_GL_BGRA8; | |
1364 } else { | |
1365 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR _GL_RGBA; | |
1366 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = G R_GL_RGBA8; | |
1367 } | |
1368 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fExternalFormat= GR_GL_BGRA; | |
1369 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIG NED_BYTE; | |
1370 | |
1371 | |
1372 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL _SRGB_ALPHA; | |
1373 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_G L_SRGB8_ALPHA8; | |
1374 // GL does not do srgb<->rgb conversions when transferring between cpu and g pu. Thus, the | |
1375 // external format is GL_RGBA. See below for note about ES2.0 and glTex[Sub] Image. | |
1376 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalFormat = GR_GL_RGB A; | |
1377 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIG NED_BYTE; | |
1378 | |
1379 | |
1380 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RG B; | |
1381 if (this->ES2CompatibilitySupport()) { | |
1382 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_RGB565; | |
1383 } else { | |
1384 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_RGB5; | |
1385 } | |
1386 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fExternalFormat = GR_GL_RGB; | |
1387 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGNED _SHORT_5_6_5; | |
1388 | |
1389 fConfigTable[kRGBA_4444_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_ RGBA; | |
1390 fConfigTable[kRGBA_4444_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL _RGBA4; | |
1391 fConfigTable[kRGBA_4444_GrPixelConfig].fFormats.fExternalFormat = GR_GL_RGBA ; | |
1392 fConfigTable[kRGBA_4444_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGN ED_SHORT_4_4_4_4; | |
1393 | |
1394 | |
1395 if (this->textureRedSupport()) { | |
1396 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_G L_RED; | |
1397 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_R8; | |
1398 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalFormat = GR_GL_RE D; | |
1399 } else { | |
1400 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_G L_ALPHA; | |
1401 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_ALPHA8; | |
1402 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalFormat = GR_GL_AL PHA; | |
1403 } | |
1404 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGNED _BYTE; | |
1405 | |
1406 fConfigTable[kRGBA_float_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL _RGBA; | |
1407 fConfigTable[kRGBA_float_GrPixelConfig].fFormats.fSizedInternalFormat = GR_G L_RGBA32F; | |
1408 fConfigTable[kRGBA_float_GrPixelConfig].fFormats.fExternalFormat = GR_GL_RGB A; | |
1409 fConfigTable[kRGBA_float_GrPixelConfig].fFormats.fExternalType = GR_GL_FLOAT ; | |
1410 | |
1411 if (this->textureRedSupport()) { | |
1412 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fBaseInternalFormat = G R_GL_RED; | |
1413 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_R16F; | |
1414 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalFormat = GR_GL _RED; | |
1415 } else { | |
1416 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fBaseInternalFormat = G R_GL_ALPHA; | |
1417 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_ALPHA16F; | |
1418 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalFormat = GR_GL _ALPHA; | |
1419 } | |
1420 if (kGL_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_VER (3, 0)) { | |
1421 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalType = GR_GL_H ALF_FLOAT; | |
1422 } else { | |
1423 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalType = GR_GL_H ALF_FLOAT_OES; | |
1424 } | |
1425 | |
1426 fConfigTable[kRGBA_half_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_ RGBA; | |
1427 fConfigTable[kRGBA_half_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL _RGBA16F; | |
1428 fConfigTable[kRGBA_half_GrPixelConfig].fFormats.fExternalFormat = GR_GL_RGBA ; | |
1429 if (kGL_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_VER (3, 0)) { | |
1430 fConfigTable[kRGBA_half_GrPixelConfig].fFormats.fExternalType = GR_GL_HA LF_FLOAT; | |
1431 } else { | |
1432 fConfigTable[kRGBA_half_GrPixelConfig].fFormats.fExternalType = GR_GL_HA LF_FLOAT_OES; | |
1433 } | |
1434 | |
1435 // No sized/unsized internal format distinction for compressed formats, no e xternal format. | |
1436 | |
1437 fConfigTable[kIndex_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_PA LETTE8_RGBA8; | |
1438 fConfigTable[kIndex_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_P ALETTE8_RGBA8; | |
1439 fConfigTable[kIndex_8_GrPixelConfig].fFormats.fExternalFormat = 0; | |
1440 fConfigTable[kIndex_8_GrPixelConfig].fFormats.fExternalType = 0; | |
1441 | |
1442 switch(this->latcAlias()) { | |
1443 case GrGLCaps::kLATC_LATCAlias: | |
1444 fConfigTable[kLATC_GrPixelConfig].fFormats.fBaseInternalFormat = | |
1445 GR_GL_COMPRESSED_LUMINANCE_LATC1; | |
1446 fConfigTable[kLATC_GrPixelConfig].fFormats.fSizedInternalFormat = | |
1447 GR_GL_COMPRESSED_LUMINANCE_LATC1; | |
1448 break; | |
1449 case GrGLCaps::kRGTC_LATCAlias: | |
1450 fConfigTable[kLATC_GrPixelConfig].fFormats.fBaseInternalFormat = | |
1451 GR_GL_COMPRESSED_RED_RGTC1; | |
1452 fConfigTable[kLATC_GrPixelConfig].fFormats.fSizedInternalFormat = | |
1453 GR_GL_COMPRESSED_RED_RGTC1; | |
1454 break; | |
1455 case GrGLCaps::k3DC_LATCAlias: | |
1456 fConfigTable[kLATC_GrPixelConfig].fFormats.fBaseInternalFormat = GR_ GL_COMPRESSED_3DC_X; | |
1457 fConfigTable[kLATC_GrPixelConfig].fFormats.fSizedInternalFormat = | |
1458 GR_GL_COMPRESSED_3DC_X; | |
1459 break; | |
1460 } | |
1461 fConfigTable[kLATC_GrPixelConfig].fFormats.fExternalFormat = 0; | |
1462 fConfigTable[kLATC_GrPixelConfig].fFormats.fExternalType = 0; | |
1463 | |
1464 fConfigTable[kETC1_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_COMPR ESSED_ETC1_RGB8; | |
1465 fConfigTable[kETC1_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_COMP RESSED_ETC1_RGB8; | |
1466 fConfigTable[kETC1_GrPixelConfig].fFormats.fExternalFormat = 0; | |
1467 fConfigTable[kETC1_GrPixelConfig].fFormats.fExternalType = 0; | |
1468 | |
1469 fConfigTable[kR11_EAC_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_CO MPRESSED_R11_EAC; | |
1470 fConfigTable[kR11_EAC_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_C OMPRESSED_R11_EAC; | |
1471 fConfigTable[kR11_EAC_GrPixelConfig].fFormats.fExternalFormat = 0; | |
1472 fConfigTable[kR11_EAC_GrPixelConfig].fFormats.fExternalType = 0; | |
1473 | |
1474 fConfigTable[kASTC_12x12_GrPixelConfig].fFormats.fBaseInternalFormat = | |
1475 GR_GL_COMPRESSED_RGBA_ASTC_12x12; | |
1476 fConfigTable[kASTC_12x12_GrPixelConfig].fFormats.fSizedInternalFormat = | |
1477 GR_GL_COMPRESSED_RGBA_ASTC_12x12; | |
1478 fConfigTable[kASTC_12x12_GrPixelConfig].fFormats.fExternalFormat = 0; | |
1479 fConfigTable[kASTC_12x12_GrPixelConfig].fFormats.fExternalType = 0; | |
1480 | |
1481 // Bulk populate the texture internal/external formats here and then deal wi th exceptions below. | |
1482 | |
1483 // ES 2.0 requires that the internal/external formats match. | |
1484 bool useSizedFormats = (kGL_GrGLStandard == ctxInfo.standard() || | |
1485 ctxInfo.version() >= GR_GL_VER(3,0)); | |
1486 for (int i = 0; i < kGrPixelConfigCnt; ++i) { | |
1487 // Almost always we want to pass fExternalFormat as the <format> param t o glTex[Sub]Image. | |
1488 fConfigTable[i].fFormats.fExternalFormatForTexImage = fConfigTable[i].fF ormats.fExternalFormat; | |
1489 fConfigTable[i].fFormats.fInternalFormatTexImage = useSizedFormats ? | |
1490 fConfigTable[i].fFormats.fSizedInternalFormat : | |
1491 fConfigTable[i].fFormats.fBaseInternalFormat; | |
1492 } | |
1493 // OpenGL ES 2.0 + GL_EXT_sRGB allows GL_SRGB_ALPHA to be specified as the < format> | |
1494 // param to Tex(Sub)Image. ES 2.0 requires the <internalFormat> and <format> params to match. | |
1495 // Thus, on ES 2.0 we will use GL_SRGB_ALPHA as the <format> param. | |
1496 // On OpenGL and ES 3.0+ GL_SRGB_ALPHA does not work for the <format> param to glTexImage. | |
1497 if (ctxInfo.standard() == kGLES_GrGLStandard && ctxInfo.version() == GR_GL_V ER(2,0)) { | |
1498 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalFormatForTexIm age = | |
1499 GR_GL_SRGB_ALPHA; | |
1500 } | |
1501 | |
1502 // If BGRA is supported as an internal format it must always be specified to glTex[Sub]Image | |
1503 // as a base format. | |
1504 // GL_EXT_texture_format_BGRA8888: | |
1505 // This extension GL_BGRA as an unsized internal format. However, it is written against ES | |
1506 // 2.0 and therefore doesn't define a value for GL_BGRA8 as ES 2.0 uses unsized internal | |
1507 // formats. | |
1508 // GL_APPLE_texture_format_BGRA8888: | |
1509 // ES 2.0: the extension makes BGRA an external format but not an intern al format. | |
1510 // ES 3.0: the extension explicitly states GL_BGRA8 is not a valid inter nal format for | |
1511 // glTexImage (just for glTexStorage). | |
1512 if (useSizedFormats && this->bgraIsInternalFormat()) { | |
1513 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fInternalFormatTexImage = GR_GL_BGRA; | |
1514 } | |
1515 | |
1516 #ifdef SK_DEBUG | |
1517 // Make sure we initialized everything. | |
1518 ConfigFormats defaultEntry; | |
1519 for (int i = 0; i < kGrPixelConfigCnt; ++i) { | |
1520 SkASSERT(defaultEntry.fBaseInternalFormat != fConfigTable[i].fFormats.fB aseInternalFormat); | |
1521 SkASSERT(defaultEntry.fSizedInternalFormat != fConfigTable[i].fFormats.f SizedInternalFormat); | |
1522 SkASSERT(defaultEntry.fExternalFormat != fConfigTable[i].fFormats.fExter nalFormat); | |
1523 SkASSERT(defaultEntry.fExternalType != fConfigTable[i].fFormats.fExterna lType); | |
1524 } | |
1525 #endif | |
1526 } | |
1527 | |
1347 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} | 1528 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} |
1348 | 1529 |
1349 | 1530 |
OLD | NEW |