| 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 1364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1375 kQualcomm_GrGLVendor != ctxInfo.vendor()) && | 1375 kQualcomm_GrGLVendor != ctxInfo.vendor()) && |
| 1376 ctxInfo.hasExtension("GL_EXT_texture_storage"); | 1376 ctxInfo.hasExtension("GL_EXT_texture_storage"); |
| 1377 } | 1377 } |
| 1378 | 1378 |
| 1379 // TODO: remove after command buffer supports full ES 3.0 | 1379 // TODO: remove after command buffer supports full ES 3.0 |
| 1380 if (kGLES_GrGLStandard == standard && version >= GR_GL_VER(3,0) && | 1380 if (kGLES_GrGLStandard == standard && version >= GR_GL_VER(3,0) && |
| 1381 kChromium_GrGLDriver == ctxInfo.driver()) { | 1381 kChromium_GrGLDriver == ctxInfo.driver()) { |
| 1382 texStorageSupported = false; | 1382 texStorageSupported = false; |
| 1383 } | 1383 } |
| 1384 | 1384 |
| 1385 bool texelBufferSupport = this->shaderCaps()->texelBufferSupport(); |
| 1386 |
| 1385 fConfigTable[kUnknown_GrPixelConfig].fFormats.fBaseInternalFormat = 0; | 1387 fConfigTable[kUnknown_GrPixelConfig].fFormats.fBaseInternalFormat = 0; |
| 1386 fConfigTable[kUnknown_GrPixelConfig].fFormats.fSizedInternalFormat = 0; | 1388 fConfigTable[kUnknown_GrPixelConfig].fFormats.fSizedInternalFormat = 0; |
| 1387 fConfigTable[kUnknown_GrPixelConfig].fFormats.fExternalFormat[kOther_Externa
lFormatUsage] = 0; | 1389 fConfigTable[kUnknown_GrPixelConfig].fFormats.fExternalFormat[kOther_Externa
lFormatUsage] = 0; |
| 1388 fConfigTable[kUnknown_GrPixelConfig].fFormats.fExternalType = 0; | 1390 fConfigTable[kUnknown_GrPixelConfig].fFormats.fExternalType = 0; |
| 1389 fConfigTable[kUnknown_GrPixelConfig].fFormatType = kNormalizedFixedPoint_For
matType; | 1391 fConfigTable[kUnknown_GrPixelConfig].fFormatType = kNormalizedFixedPoint_For
matType; |
| 1390 fConfigTable[kUnknown_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); | 1392 fConfigTable[kUnknown_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); |
| 1391 | 1393 |
| 1392 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_
RGBA; | 1394 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_
RGBA; |
| 1393 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL
_RGBA8; | 1395 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL
_RGBA8; |
| 1394 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_Exter
nalFormatUsage] = | 1396 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_Exter
nalFormatUsage] = |
| 1395 GR_GL_RGBA; | 1397 GR_GL_RGBA; |
| 1396 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGN
ED_BYTE; | 1398 fConfigTable[kRGBA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGN
ED_BYTE; |
| 1397 fConfigTable[kRGBA_8888_GrPixelConfig].fFormatType = kNormalizedFixedPoint_F
ormatType; | 1399 fConfigTable[kRGBA_8888_GrPixelConfig].fFormatType = kNormalizedFixedPoint_F
ormatType; |
| 1398 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Fla
g; | 1400 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Fla
g; |
| 1399 if (kGL_GrGLStandard == standard) { | 1401 if (kGL_GrGLStandard == standard) { |
| 1400 // We require some form of FBO support and all GLs with FBO support can
render to RGBA8 | 1402 // We require some form of FBO support and all GLs with FBO support can
render to RGBA8 |
| 1401 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= allRenderFlags; | 1403 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= allRenderFlags; |
| 1402 } else { | 1404 } else { |
| 1403 if (version >= GR_GL_VER(3,0) || ctxInfo.hasExtension("GL_OES_rgb8_rgba8
") || | 1405 if (version >= GR_GL_VER(3,0) || ctxInfo.hasExtension("GL_OES_rgb8_rgba8
") || |
| 1404 ctxInfo.hasExtension("GL_ARM_rgba8")) { | 1406 ctxInfo.hasExtension("GL_ARM_rgba8")) { |
| 1405 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= allRenderFlags; | 1407 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= allRenderFlags; |
| 1406 } | 1408 } |
| 1407 } | 1409 } |
| 1408 if (texStorageSupported) { | 1410 if (texStorageSupported) { |
| 1409 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS
torage_Flag; | 1411 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS
torage_Flag; |
| 1410 } | 1412 } |
| 1413 if (texelBufferSupport) { |
| 1414 fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseWith
TexelBuffer_Flag; |
| 1415 } |
| 1411 fConfigTable[kRGBA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); | 1416 fConfigTable[kRGBA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); |
| 1412 | 1417 |
| 1413 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_Exter
nalFormatUsage] = | 1418 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_Exter
nalFormatUsage] = |
| 1414 GR_GL_BGRA; | 1419 GR_GL_BGRA; |
| 1415 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIG
NED_BYTE; | 1420 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIG
NED_BYTE; |
| 1416 fConfigTable[kBGRA_8888_GrPixelConfig].fFormatType = kNormalizedFixedPoint_F
ormatType; | 1421 fConfigTable[kBGRA_8888_GrPixelConfig].fFormatType = kNormalizedFixedPoint_F
ormatType; |
| 1417 if (kGL_GrGLStandard == standard) { | 1422 if (kGL_GrGLStandard == standard) { |
| 1418 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR
_GL_RGBA; | 1423 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR
_GL_RGBA; |
| 1419 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = G
R_GL_RGBA8; | 1424 fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = G
R_GL_RGBA8; |
| 1420 if (version >= GR_GL_VER(1, 2) || ctxInfo.hasExtension("GL_EXT_bgra")) { | 1425 if (version >= GR_GL_VER(1, 2) || ctxInfo.hasExtension("GL_EXT_bgra")) { |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1560 fConfigTable[kRGBA_4444_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS
torage_Flag; | 1565 fConfigTable[kRGBA_4444_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS
torage_Flag; |
| 1561 } | 1566 } |
| 1562 fConfigTable[kRGBA_4444_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); | 1567 fConfigTable[kRGBA_4444_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); |
| 1563 | 1568 |
| 1564 if (this->textureRedSupport()) { | 1569 if (this->textureRedSupport()) { |
| 1565 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_G
L_RED; | 1570 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_G
L_RED; |
| 1566 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_
GL_R8; | 1571 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_
GL_R8; |
| 1567 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalFormat[kOther_Ext
ernalFormatUsage] = | 1572 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalFormat[kOther_Ext
ernalFormatUsage] = |
| 1568 GR_GL_RED; | 1573 GR_GL_RED; |
| 1569 fConfigTable[kAlpha_8_GrPixelConfig].fSwizzle = GrSwizzle::RRRR(); | 1574 fConfigTable[kAlpha_8_GrPixelConfig].fSwizzle = GrSwizzle::RRRR(); |
| 1575 if (texelBufferSupport) { |
| 1576 fConfigTable[kAlpha_8_GrPixelConfig].fFlags |= ConfigInfo::kCanUseWi
thTexelBuffer_Flag; |
| 1577 } |
| 1570 } else { | 1578 } else { |
| 1571 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_G
L_ALPHA; | 1579 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fBaseInternalFormat = GR_G
L_ALPHA; |
| 1572 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_
GL_ALPHA8; | 1580 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fSizedInternalFormat = GR_
GL_ALPHA8; |
| 1573 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalFormat[kOther_Ext
ernalFormatUsage] = | 1581 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalFormat[kOther_Ext
ernalFormatUsage] = |
| 1574 GR_GL_ALPHA; | 1582 GR_GL_ALPHA; |
| 1575 fConfigTable[kAlpha_8_GrPixelConfig].fSwizzle = GrSwizzle::AAAA(); | 1583 fConfigTable[kAlpha_8_GrPixelConfig].fSwizzle = GrSwizzle::AAAA(); |
| 1576 } | 1584 } |
| 1577 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGNED
_BYTE; | 1585 fConfigTable[kAlpha_8_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGNED
_BYTE; |
| 1578 fConfigTable[kAlpha_8_GrPixelConfig].fFormatType = kNormalizedFixedPoint_For
matType; | 1586 fConfigTable[kAlpha_8_GrPixelConfig].fFormatType = kNormalizedFixedPoint_For
matType; |
| 1579 fConfigTable[kAlpha_8_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag; | 1587 fConfigTable[kAlpha_8_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1628 // For now we only enable rendering to float on desktop, because on ES w
e'd have to solve | 1636 // For now we only enable rendering to float on desktop, because on ES w
e'd have to solve |
| 1629 // many precision issues and no clients actually want this yet. | 1637 // many precision issues and no clients actually want this yet. |
| 1630 if (kGL_GrGLStandard == standard /* || version >= GR_GL_VER(3,2) || | 1638 if (kGL_GrGLStandard == standard /* || version >= GR_GL_VER(3,2) || |
| 1631 ctxInfo.hasExtension("GL_EXT_color_buffer_float")*/) { | 1639 ctxInfo.hasExtension("GL_EXT_color_buffer_float")*/) { |
| 1632 fConfigTable[kRGBA_float_GrPixelConfig].fFlags |= fpRenderFlags; | 1640 fConfigTable[kRGBA_float_GrPixelConfig].fFlags |= fpRenderFlags; |
| 1633 } | 1641 } |
| 1634 } | 1642 } |
| 1635 if (texStorageSupported) { | 1643 if (texStorageSupported) { |
| 1636 fConfigTable[kRGBA_float_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTex
Storage_Flag; | 1644 fConfigTable[kRGBA_float_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTex
Storage_Flag; |
| 1637 } | 1645 } |
| 1646 if (texelBufferSupport) { |
| 1647 fConfigTable[kRGBA_float_GrPixelConfig].fFlags |= ConfigInfo::kCanUseWit
hTexelBuffer_Flag; |
| 1648 } |
| 1638 fConfigTable[kRGBA_float_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); | 1649 fConfigTable[kRGBA_float_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); |
| 1639 | 1650 |
| 1640 if (this->textureRedSupport()) { | 1651 if (this->textureRedSupport()) { |
| 1641 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fBaseInternalFormat = G
R_GL_RED; | 1652 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fBaseInternalFormat = G
R_GL_RED; |
| 1642 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fSizedInternalFormat =
GR_GL_R16F; | 1653 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fSizedInternalFormat =
GR_GL_R16F; |
| 1643 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalFormat[kOther_
ExternalFormatUsage] | 1654 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalFormat[kOther_
ExternalFormatUsage] |
| 1644 = GR_GL_RED; | 1655 = GR_GL_RED; |
| 1645 fConfigTable[kAlpha_half_GrPixelConfig].fSwizzle = GrSwizzle::RRRR(); | 1656 fConfigTable[kAlpha_half_GrPixelConfig].fSwizzle = GrSwizzle::RRRR(); |
| 1657 if (texelBufferSupport) { |
| 1658 fConfigTable[kAlpha_half_GrPixelConfig].fFlags |= |
| 1659 ConfigInfo::kCanUseWithTexelBuffer_Flag; |
| 1660 } |
| 1646 } else { | 1661 } else { |
| 1647 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fBaseInternalFormat = G
R_GL_ALPHA; | 1662 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fBaseInternalFormat = G
R_GL_ALPHA; |
| 1648 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fSizedInternalFormat =
GR_GL_ALPHA16F; | 1663 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fSizedInternalFormat =
GR_GL_ALPHA16F; |
| 1649 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalFormat[kOther_
ExternalFormatUsage] | 1664 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalFormat[kOther_
ExternalFormatUsage] |
| 1650 = GR_GL_ALPHA; | 1665 = GR_GL_ALPHA; |
| 1651 fConfigTable[kAlpha_half_GrPixelConfig].fSwizzle = GrSwizzle::AAAA(); | 1666 fConfigTable[kAlpha_half_GrPixelConfig].fSwizzle = GrSwizzle::AAAA(); |
| 1652 } | 1667 } |
| 1653 if (kGL_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_VER
(3, 0)) { | 1668 if (kGL_GrGLStandard == ctxInfo.standard() || ctxInfo.version() >= GR_GL_VER
(3, 0)) { |
| 1654 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalType = GR_GL_H
ALF_FLOAT; | 1669 fConfigTable[kAlpha_half_GrPixelConfig].fFormats.fExternalType = GR_GL_H
ALF_FLOAT; |
| 1655 } else { | 1670 } else { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1684 fConfigTable[kRGBA_half_GrPixelConfig].fFlags = ConfigInfo::kTextureable
_Flag; | 1699 fConfigTable[kRGBA_half_GrPixelConfig].fFlags = ConfigInfo::kTextureable
_Flag; |
| 1685 // ES requires 3.2 or EXT_color_buffer_half_float. | 1700 // ES requires 3.2 or EXT_color_buffer_half_float. |
| 1686 if (kGL_GrGLStandard == standard || version >= GR_GL_VER(3,2) || | 1701 if (kGL_GrGLStandard == standard || version >= GR_GL_VER(3,2) || |
| 1687 ctxInfo.hasExtension("GL_EXT_color_buffer_half_float")) { | 1702 ctxInfo.hasExtension("GL_EXT_color_buffer_half_float")) { |
| 1688 fConfigTable[kRGBA_half_GrPixelConfig].fFlags |= fpRenderFlags; | 1703 fConfigTable[kRGBA_half_GrPixelConfig].fFlags |= fpRenderFlags; |
| 1689 } | 1704 } |
| 1690 } | 1705 } |
| 1691 if (texStorageSupported) { | 1706 if (texStorageSupported) { |
| 1692 fConfigTable[kRGBA_half_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS
torage_Flag; | 1707 fConfigTable[kRGBA_half_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS
torage_Flag; |
| 1693 } | 1708 } |
| 1709 if (texelBufferSupport) { |
| 1710 fConfigTable[kRGBA_half_GrPixelConfig].fFlags |= ConfigInfo::kCanUseWith
TexelBuffer_Flag; |
| 1711 } |
| 1694 fConfigTable[kRGBA_half_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); | 1712 fConfigTable[kRGBA_half_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); |
| 1695 | 1713 |
| 1696 // Compressed texture support | 1714 // Compressed texture support |
| 1697 | 1715 |
| 1698 // glCompressedTexImage2D is available on all OpenGL ES devices. It is avail
able on standard | 1716 // glCompressedTexImage2D is available on all OpenGL ES devices. It is avail
able on standard |
| 1699 // OpenGL after version 1.3. We'll assume at least that level of OpenGL supp
ort. | 1717 // OpenGL after version 1.3. We'll assume at least that level of OpenGL supp
ort. |
| 1700 | 1718 |
| 1701 // TODO: Fix command buffer bindings and remove this. | 1719 // TODO: Fix command buffer bindings and remove this. |
| 1702 fCompressedTexSubImageSupport = SkToBool(gli->fFunctions.fCompressedTexSubIm
age2D); | 1720 fCompressedTexSubImageSupport = SkToBool(gli->fFunctions.fCompressedTexSubIm
age2D); |
| 1703 | 1721 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1884 for (int j = 0; j < kExternalFormatUsageCnt; ++j) { | 1902 for (int j = 0; j < kExternalFormatUsageCnt; ++j) { |
| 1885 SkASSERT(defaultEntry.fFormats.fExternalFormat[j] != | 1903 SkASSERT(defaultEntry.fFormats.fExternalFormat[j] != |
| 1886 fConfigTable[i].fFormats.fExternalFormat[j]); | 1904 fConfigTable[i].fFormats.fExternalFormat[j]); |
| 1887 } | 1905 } |
| 1888 SkASSERT(defaultEntry.fFormats.fExternalType != fConfigTable[i].fFormats
.fExternalType); | 1906 SkASSERT(defaultEntry.fFormats.fExternalType != fConfigTable[i].fFormats
.fExternalType); |
| 1889 } | 1907 } |
| 1890 #endif | 1908 #endif |
| 1891 } | 1909 } |
| 1892 | 1910 |
| 1893 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} | 1911 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} |
| OLD | NEW |