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

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

Issue 1870893002: Implement texel buffers (Closed) Base URL: https://skia.googlesource.com/skia.git@upload_texelfetch
Patch Set: GrBuffer(Access) into include/gpu Created 4 years, 8 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/GrGLGpu.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 1364 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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) {}
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLCaps.h ('k') | src/gpu/gl/GrGLGpu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698