| Index: src/gpu/gl/GrGLCaps.cpp
|
| diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
|
| index 989c799a37c4edbf641322c88677b99a3278b8a2..792f3ed5ba63555bb4305c247531ba6790a571e3 100644
|
| --- a/src/gpu/gl/GrGLCaps.cpp
|
| +++ b/src/gpu/gl/GrGLCaps.cpp
|
| @@ -33,7 +33,6 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions,
|
| fPackRowLengthSupport = false;
|
| fPackFlipYSupport = false;
|
| fTextureUsageSupport = false;
|
| - fTexStorageSupport = false;
|
| fTextureRedSupport = false;
|
| fImagingSupport = false;
|
| fVertexArrayObjectSupport = false;
|
| @@ -107,18 +106,6 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
| ctxInfo.hasExtension("GL_ANGLE_texture_usage");
|
|
|
| if (kGL_GrGLStandard == standard) {
|
| - // The EXT version can apply to either GL or GLES.
|
| - fTexStorageSupport = version >= GR_GL_VER(4,2) ||
|
| - ctxInfo.hasExtension("GL_ARB_texture_storage") ||
|
| - ctxInfo.hasExtension("GL_EXT_texture_storage");
|
| - } else {
|
| - // Qualcomm Adreno drivers appear to have issues with texture storage.
|
| - fTexStorageSupport = (version >= GR_GL_VER(3,0) &&
|
| - kQualcomm_GrGLVendor != ctxInfo.vendor()) &&
|
| - ctxInfo.hasExtension("GL_EXT_texture_storage");
|
| - }
|
| -
|
| - if (kGL_GrGLStandard == standard) {
|
| fTextureBarrierSupport = version >= GR_GL_VER(4,5) ||
|
| ctxInfo.hasExtension("GL_ARB_texture_barrier") ||
|
| ctxInfo.hasExtension("GL_NV_texture_barrier");
|
| @@ -530,7 +517,6 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
| // TODO: remove after command buffer supports full ES 3.0.
|
| if (kGLES_GrGLStandard == standard && version >= GR_GL_VER(3, 0) &&
|
| kChromium_GrGLDriver == ctxInfo.driver()) {
|
| - fTexStorageSupport = false;
|
| fSupportsInstancedDraws = false;
|
| fTextureSwizzleSupport = false;
|
| SkASSERT(ctxInfo.hasExtension("GL_CHROMIUM_map_sub"));
|
| @@ -1036,7 +1022,6 @@ SkString GrGLCaps::dump() const {
|
| r.appendf("Pack Flip Y support: %s\n", (fPackFlipYSupport ? "YES": "NO"));
|
|
|
| r.appendf("Texture Usage support: %s\n", (fTextureUsageSupport ? "YES": "NO"));
|
| - r.appendf("Texture Storage support: %s\n", (fTexStorageSupport ? "YES": "NO"));
|
| r.appendf("GL_R support: %s\n", (fTextureRedSupport ? "YES": "NO"));
|
| r.appendf("GL_ARB_imaging support: %s\n", (fImagingSupport ? "YES": "NO"));
|
| r.appendf("Vertex array object support: %s\n", (fVertexArrayObjectSupport ? "YES": "NO"));
|
| @@ -1313,6 +1298,25 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| GrGLStandard standard = ctxInfo.standard();
|
| GrGLVersion version = ctxInfo.version();
|
|
|
| + bool texStorageSupported = false;
|
| + if (kGL_GrGLStandard == standard) {
|
| + // The EXT version can apply to either GL or GLES.
|
| + texStorageSupported = version >= GR_GL_VER(4,2) ||
|
| + ctxInfo.hasExtension("GL_ARB_texture_storage") ||
|
| + ctxInfo.hasExtension("GL_EXT_texture_storage");
|
| + } else {
|
| + // Qualcomm Adreno drivers appear to have issues with texture storage.
|
| + texStorageSupported = (version >= GR_GL_VER(3,0) &&
|
| + kQualcomm_GrGLVendor != ctxInfo.vendor()) &&
|
| + ctxInfo.hasExtension("GL_EXT_texture_storage");
|
| + }
|
| +
|
| + // TODO: remove after command buffer supports full ES 3.0
|
| + if (kGLES_GrGLStandard == standard && version >= GR_GL_VER(3,0) &&
|
| + kChromium_GrGLDriver == ctxInfo.driver()) {
|
| + texStorageSupported = false;
|
| + }
|
| +
|
| fConfigTable[kUnknown_GrPixelConfig].fFormats.fBaseInternalFormat = 0;
|
| fConfigTable[kUnknown_GrPixelConfig].fFormats.fSizedInternalFormat = 0;
|
| fConfigTable[kUnknown_GrPixelConfig].fFormats.fExternalFormat[kOther_ExternalFormatUsage] = 0;
|
| @@ -1336,6 +1340,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= allRenderFlags;
|
| }
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kRGBA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
| fConfigTable[kRGBA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
|
|
|
| fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fExternalFormat[kOther_ExternalFormatUsage] =
|
| @@ -1373,6 +1380,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| }
|
| }
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kBGRA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
| fConfigTable[kBGRA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
|
|
|
| // We only enable srgb support if both textures and FBOs support srgb.
|
| @@ -1408,6 +1418,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| fConfigTable[kSRGBA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag |
|
| allRenderFlags;
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kSRGBA_8888_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
| fConfigTable[kSRGBA_8888_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
|
|
|
| fConfigTable[kRGB_565_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RGB;
|
| @@ -1428,6 +1441,16 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| } else {
|
| fConfigTable[kRGB_565_GrPixelConfig].fFlags |= allRenderFlags;
|
| }
|
| + // 565 is not a sized internal format on desktop GL. So on desktop with
|
| + // 565 we always use an unsized internal format to let the system pick
|
| + // the best sized format to convert the 565 data to. Since TexStorage
|
| + // only allows sized internal formats we disallow it.
|
| + //
|
| + // TODO: As of 4.2, regular GL supports 565. This logic is due for an
|
| + // update.
|
| + if (texStorageSupported && kGL_GrGLStandard != standard) {
|
| + fConfigTable[kRGB_565_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
| fConfigTable[kRGB_565_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
|
|
|
| fConfigTable[kRGBA_4444_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RGBA;
|
| @@ -1444,6 +1467,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| } else {
|
| fConfigTable[kRGBA_4444_GrPixelConfig].fFlags |= allRenderFlags;
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kRGBA_4444_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
| fConfigTable[kRGBA_4444_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
|
|
|
| if (this->textureRedSupport()) {
|
| @@ -1467,6 +1493,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| // Core profile removes ALPHA8 support, but we should have chosen R8 in that case.
|
| fConfigTable[kAlpha_8_GrPixelConfig].fFlags |= allRenderFlags;
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kAlpha_8_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
|
|
| // Check for [half] floating point texture support
|
| // NOTE: We disallow floating point textures on ES devices if linear filtering modes are not
|
| @@ -1514,6 +1543,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| fConfigTable[kRGBA_float_GrPixelConfig].fFlags |= fpRenderFlags;
|
| }
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kRGBA_float_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
| fConfigTable[kRGBA_float_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
|
|
|
| if (this->textureRedSupport()) {
|
| @@ -1545,6 +1577,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| fConfigTable[kAlpha_half_GrPixelConfig].fFlags |= fpRenderFlags;
|
| }
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kAlpha_half_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
|
|
| fConfigTable[kRGBA_half_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RGBA;
|
| fConfigTable[kRGBA_half_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_RGBA16F;
|
| @@ -1564,6 +1599,9 @@ void GrGLCaps::initConfigTable(const GrGLContextInfo& ctxInfo, const GrGLInterfa
|
| fConfigTable[kRGBA_half_GrPixelConfig].fFlags |= fpRenderFlags;
|
| }
|
| }
|
| + if (texStorageSupported) {
|
| + fConfigTable[kRGBA_half_GrPixelConfig].fFlags |= ConfigInfo::kCanUseTexStorage_Flag;
|
| + }
|
| fConfigTable[kRGBA_half_GrPixelConfig].fSwizzle = GrSwizzle::RGBA();
|
|
|
| // Compressed texture support
|
|
|