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

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

Issue 1789663002: sRGB support in Ganesh. Several pieces: (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Squelch assert when blurring sRGB Created 4 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
« no previous file with comments | « src/gpu/gl/GrGLCaps.h ('k') | src/gpu/gl/GrGLDefines.h » ('j') | 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 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 1417 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 fConfigTable[kBGRA_8888_GrPixelConfig].fFlags |= 1428 fConfigTable[kBGRA_8888_GrPixelConfig].fFlags |=
1429 ConfigInfo::kRenderableWithMSAA_Flag; 1429 ConfigInfo::kRenderableWithMSAA_Flag;
1430 } 1430 }
1431 } 1431 }
1432 } 1432 }
1433 if (texStorageSupported) { 1433 if (texStorageSupported) {
1434 fConfigTable[kBGRA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS torage_Flag; 1434 fConfigTable[kBGRA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexS torage_Flag;
1435 } 1435 }
1436 fConfigTable[kBGRA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); 1436 fConfigTable[kBGRA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
1437 1437
1438 // We only enable srgb support if both textures and FBOs support srgb. 1438 // We only enable srgb support if both textures and FBOs support srgb,
1439 bool srgbSupport = false; 1439 // *and* we can disable sRGB decode-on-read, to support "legacy" mode.
1440 if (kGL_GrGLStandard == standard) { 1440 if (kGL_GrGLStandard == standard) {
1441 if (ctxInfo.version() >= GR_GL_VER(3,0)) { 1441 if (ctxInfo.version() >= GR_GL_VER(3,0)) {
1442 srgbSupport = true; 1442 fSRGBSupport = true;
1443 } else if (ctxInfo.hasExtension("GL_EXT_texture_sRGB")) { 1443 } else if (ctxInfo.hasExtension("GL_EXT_texture_sRGB")) {
1444 if (ctxInfo.hasExtension("GL_ARB_framebuffer_sRGB") || 1444 if (ctxInfo.hasExtension("GL_ARB_framebuffer_sRGB") ||
1445 ctxInfo.hasExtension("GL_EXT_framebuffer_sRGB")) { 1445 ctxInfo.hasExtension("GL_EXT_framebuffer_sRGB")) {
1446 srgbSupport = true; 1446 fSRGBSupport = true;
1447 } 1447 }
1448 } 1448 }
1449 // All the above srgb extensions support toggling srgb writes 1449 // All the above srgb extensions support toggling srgb writes
1450 fSRGBWriteControl = srgbSupport; 1450 fSRGBWriteControl = fSRGBSupport;
1451 } else { 1451 } else {
1452 // See https://bug.skia.org/4148 for PowerVR issue. 1452 // See https://bug.skia.org/4148 for PowerVR issue.
1453 srgbSupport = kPowerVRRogue_GrGLRenderer != ctxInfo.renderer() && 1453 fSRGBSupport = kPowerVRRogue_GrGLRenderer != ctxInfo.renderer() &&
1454 (ctxInfo.version() >= GR_GL_VER(3,0) || ctxInfo.hasExtension("GL_EXT _sRGB")); 1454 (ctxInfo.version() >= GR_GL_VER(3,0) || ctxInfo.hasExtension("GL_EXT _sRGB"));
1455 // ES through 3.1 requires EXT_srgb_write_control to support toggling 1455 // ES through 3.1 requires EXT_srgb_write_control to support toggling
1456 // sRGB writing for destinations. 1456 // sRGB writing for destinations.
1457 fSRGBWriteControl = ctxInfo.hasExtension("GL_EXT_sRGB_write_control"); 1457 fSRGBWriteControl = ctxInfo.hasExtension("GL_EXT_sRGB_write_control");
1458 } 1458 }
1459 if (!ctxInfo.hasExtension("GL_EXT_texture_sRGB_decode")) {
1460 // To support "legacy" L32 mode, we require the ability to turn off sRGB decode:
1461 fSRGBSupport = false;
1462 }
1459 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL _SRGB_ALPHA; 1463 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL _SRGB_ALPHA;
1460 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_G L_SRGB8_ALPHA8; 1464 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_G L_SRGB8_ALPHA8;
1461 // GL does not do srgb<->rgb conversions when transferring between cpu and g pu. Thus, the 1465 // GL does not do srgb<->rgb conversions when transferring between cpu and g pu. Thus, the
1462 // external format is GL_RGBA. See below for note about ES2.0 and glTex[Sub] Image. 1466 // external format is GL_RGBA. See below for note about ES2.0 and glTex[Sub] Image.
1463 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_Exte rnalFormatUsage] = 1467 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_Exte rnalFormatUsage] =
1464 GR_GL_RGBA; 1468 GR_GL_RGBA;
1465 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIG NED_BYTE; 1469 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIG NED_BYTE;
1466 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormatType = kNormalizedFixedPoint_ FormatType; 1470 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormatType = kNormalizedFixedPoint_ FormatType;
1467 if (srgbSupport) { 1471 if (fSRGBSupport) {
1468 fConfigTable[kSRGBA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureabl e_Flag | 1472 fConfigTable[kSRGBA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureabl e_Flag |
1469 allRenderFlags; 1473 allRenderFlags;
1470 } 1474 }
1471 if (texStorageSupported) { 1475 if (texStorageSupported) {
1472 fConfigTable[kSRGBA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTex Storage_Flag; 1476 fConfigTable[kSRGBA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTex Storage_Flag;
1473 } 1477 }
1474 fConfigTable[kSRGBA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA(); 1478 fConfigTable[kSRGBA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
1475 1479
1480 // sBGRA is not a "real" thing in OpenGL, but GPUs support it, and on platfo rms where
1481 // kN32 == BGRA, we need some way to work with it. (The default framebuffer on Windows
1482 // is in this format, for example).
1483 fConfigTable[kSBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL _SRGB_ALPHA;
1484 fConfigTable[kSBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_G L_SRGB8_ALPHA8;
1485 // GL does not do srgb<->rgb conversions when transferring between cpu and g pu. Thus, the
1486 // external format is GL_BGRA.
1487 fConfigTable[kSBGRA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_Exte rnalFormatUsage] =
1488 GR_GL_BGRA;
1489 fConfigTable[kSBGRA_8888_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIG NED_BYTE;
1490 fConfigTable[kSBGRA_8888_GrPixelConfig].fFormatType = kNormalizedFixedPoint_ FormatType;
1491 if (fSRGBSupport) {
1492 fConfigTable[kSBGRA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureabl e_Flag |
1493 allRenderFlags;
1494 }
1495 if (texStorageSupported) {
1496 fConfigTable[kSBGRA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTex Storage_Flag;
1497 }
1498 fConfigTable[kSBGRA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
1499
1476 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RG B; 1500 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RG B;
1477 if (this->ES2CompatibilitySupport()) { 1501 if (this->ES2CompatibilitySupport()) {
1478 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_RGB565; 1502 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_RGB565;
1479 } else { 1503 } else {
1480 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_RGB5; 1504 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fSizedInternalFormat = GR_ GL_RGB5;
1481 } 1505 }
1482 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fExternalFormat[kOther_Externa lFormatUsage] = 1506 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fExternalFormat[kOther_Externa lFormatUsage] =
1483 GR_GL_RGB; 1507 GR_GL_RGB;
1484 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGNED _SHORT_5_6_5; 1508 fConfigTable[kRGB_565_GrPixelConfig].fFormats.fExternalType = GR_GL_UNSIGNED _SHORT_5_6_5;
1485 fConfigTable[kRGB_565_GrPixelConfig].fFormatType = kNormalizedFixedPoint_For matType; 1509 fConfigTable[kRGB_565_GrPixelConfig].fFormatType = kNormalizedFixedPoint_For matType;
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
1785 fConfigTable[i].fFormats.fSizedInternalFormat : 1809 fConfigTable[i].fFormats.fSizedInternalFormat :
1786 fConfigTable[i].fFormats.fBaseInternalFormat; 1810 fConfigTable[i].fFormats.fBaseInternalFormat;
1787 } 1811 }
1788 // OpenGL ES 2.0 + GL_EXT_sRGB allows GL_SRGB_ALPHA to be specified as the < format> 1812 // OpenGL ES 2.0 + GL_EXT_sRGB allows GL_SRGB_ALPHA to be specified as the < format>
1789 // param to Tex(Sub)Image. ES 2.0 requires the <internalFormat> and <format> params to match. 1813 // param to Tex(Sub)Image. ES 2.0 requires the <internalFormat> and <format> params to match.
1790 // Thus, on ES 2.0 we will use GL_SRGB_ALPHA as the <format> param. 1814 // Thus, on ES 2.0 we will use GL_SRGB_ALPHA as the <format> param.
1791 // On OpenGL and ES 3.0+ GL_SRGB_ALPHA does not work for the <format> param to glTexImage. 1815 // On OpenGL and ES 3.0+ GL_SRGB_ALPHA does not work for the <format> param to glTexImage.
1792 if (ctxInfo.standard() == kGLES_GrGLStandard && ctxInfo.version() == GR_GL_V ER(2,0)) { 1816 if (ctxInfo.standard() == kGLES_GrGLStandard && ctxInfo.version() == GR_GL_V ER(2,0)) {
1793 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalFormat[kTexIma ge_ExternalFormatUsage] = 1817 fConfigTable[kSRGBA_8888_GrPixelConfig].fFormats.fExternalFormat[kTexIma ge_ExternalFormatUsage] =
1794 GR_GL_SRGB_ALPHA; 1818 GR_GL_SRGB_ALPHA;
1819
1820 // Additionally, because we had to "invent" sBGRA, there is no way to ma ke it work
1821 // in ES 2.0, because there is no <internalFormat> we can use. So just m ake that format
1822 // unsupported. (If we have no sRGB support at all, this will get overwr itten below).
1823 fConfigTable[kSBGRA_8888_GrPixelConfig].fFlags = 0;
1795 } 1824 }
1796 1825
1797 // If BGRA is supported as an internal format it must always be specified to glTex[Sub]Image 1826 // If BGRA is supported as an internal format it must always be specified to glTex[Sub]Image
1798 // as a base format. 1827 // as a base format.
1799 // GL_EXT_texture_format_BGRA8888: 1828 // GL_EXT_texture_format_BGRA8888:
1800 // This extension GL_BGRA as an unsized internal format. However, it is written against ES 1829 // This extension GL_BGRA as an unsized internal format. However, it is written against ES
1801 // 2.0 and therefore doesn't define a value for GL_BGRA8 as ES 2.0 uses unsized internal 1830 // 2.0 and therefore doesn't define a value for GL_BGRA8 as ES 2.0 uses unsized internal
1802 // formats. 1831 // formats.
1803 // GL_APPLE_texture_format_BGRA8888: 1832 // GL_APPLE_texture_format_BGRA8888:
1804 // ES 2.0: the extension makes BGRA an external format but not an intern al format. 1833 // ES 2.0: the extension makes BGRA an external format but not an intern al format.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 for (int j = 0; j < kExternalFormatUsageCnt; ++j) { 1869 for (int j = 0; j < kExternalFormatUsageCnt; ++j) {
1841 SkASSERT(defaultEntry.fFormats.fExternalFormat[j] != 1870 SkASSERT(defaultEntry.fFormats.fExternalFormat[j] !=
1842 fConfigTable[i].fFormats.fExternalFormat[j]); 1871 fConfigTable[i].fFormats.fExternalFormat[j]);
1843 } 1872 }
1844 SkASSERT(defaultEntry.fFormats.fExternalType != fConfigTable[i].fFormats .fExternalType); 1873 SkASSERT(defaultEntry.fFormats.fExternalType != fConfigTable[i].fFormats .fExternalType);
1845 } 1874 }
1846 #endif 1875 #endif
1847 } 1876 }
1848 1877
1849 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {} 1878 void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {}
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLCaps.h ('k') | src/gpu/gl/GrGLDefines.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698