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 |