diff options
author | 2017-06-01 17:56:29 +0000 | |
---|---|---|
committer | 2017-06-01 18:00:41 +0000 | |
commit | 842a56047093470de52083b8768585427e1def31 (patch) | |
tree | 96a4dab9eb24960554544fe5e359dd903fce9a55 | |
parent | c2b5175e99c6451bdf34fa52900af39ee11a4a84 (diff) |
Revert "Expand texturability testing to cover mip-mapped textures, and fix iOS"
This reverts commit c2b5175e99c6451bdf34fa52900af39ee11a4a84.
Reason for revert: Nexus 5
Original change's description:
> Expand texturability testing to cover mip-mapped textures, and fix iOS
>
> Don't allow creation of mip-mapped textures when caps says we don't
> support mip-mapping.
>
> Skip testing of mip-mapped resources in the resource size test,
> when creation will fail.
>
> For iOS devices with ES2, the APPLE BGRA8888 extension is more
> trouble than it's worth. Even though it lets the internal and
> external formats not match, it appears that the driver remembers
> the first external format, so subsequent attempts to upload with
> the other swizzle will fail. Up until now, creation of these
> textures was failing anyway, so now just make it more explicit
> that we don't support BGRA in this situation.
>
> Re-land of: https://skia-review.googlesource.com/18261
>
> BUG=skia:
>
> Change-Id: I910ffab0aa735647dce910d9054696c385f94933
> Reviewed-on: https://skia-review.googlesource.com/18382
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
>
TBR=bsalomon@google.com,robertphillips@google.com,brianosman@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
BUG=skia:
Change-Id: I8f0fd87678cc584ad37b2a93a859bd4ef38c8092
Reviewed-on: https://skia-review.googlesource.com/18401
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
-rw-r--r-- | src/gpu/GrResourceProvider.cpp | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 18 | ||||
-rw-r--r-- | src/gpu/vk/GrVkTexture.cpp | 6 | ||||
-rw-r--r-- | tests/GrSurfaceTest.cpp | 23 | ||||
-rw-r--r-- | tests/ResourceCacheTest.cpp | 2 |
5 files changed, 13 insertions, 38 deletions
diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp index c75f298807..53b9b46d87 100644 --- a/src/gpu/GrResourceProvider.cpp +++ b/src/gpu/GrResourceProvider.cpp @@ -65,7 +65,7 @@ bool validate_desc(const GrSurfaceDesc& desc, const GrCaps& caps, int levelCount return false; } } - if (levelCount > 1 && (GrPixelConfigIsSint(desc.fConfig) || !caps.mipMapSupport())) { + if (levelCount > 1 && GrPixelConfigIsSint(desc.fConfig)) { return false; } return true; diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index cb675bdb85..521e2553f0 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -1571,16 +1571,14 @@ void GrGLCaps::initConfigTable(const GrContextOptions& contextOptions, fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_BGRA; fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_BGRA8; if (ctxInfo.hasExtension("GL_APPLE_texture_format_BGRA8888")) { - // This APPLE extension introduces complexity on ES2. It leaves the internal format - // as RGBA, but allows BGRA as the external format. From testing, it appears that the - // driver remembers the external format when the texture is created (with TexImage). - // If you then try to upload data in the other swizzle (with TexSubImage), it fails. - // We could work around this, but it adds even more state tracking to code that is - // already too tricky. Instead, we opt not to support BGRA on ES2 with this extension. - // This also side-steps some ambiguous interactions with the texture storage extension. - if (version >= GR_GL_VER(3,0)) { - // The APPLE extension doesn't make this renderable. - fConfigTable[kBGRA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag; + // The APPLE extension doesn't make this renderable. + fConfigTable[kBGRA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag; + if (version < GR_GL_VER(3,0) && !ctxInfo.hasExtension("GL_EXT_texture_storage")) { + // On ES2 the internal format of a BGRA texture is RGBA with the APPLE extension. + // Though, that seems to not be the case if the texture storage extension is + // present. The specs don't exactly make that clear. + fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_RGBA; + fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_RGBA8; } } else if (ctxInfo.hasExtension("GL_EXT_texture_format_BGRA8888")) { fConfigTable[kBGRA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag | diff --git a/src/gpu/vk/GrVkTexture.cpp b/src/gpu/vk/GrVkTexture.cpp index 1525df34a1..826f091ebe 100644 --- a/src/gpu/vk/GrVkTexture.cpp +++ b/src/gpu/vk/GrVkTexture.cpp @@ -34,7 +34,7 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, : GrSurface(gpu, desc) , GrVkImage(info, GrVkImage::kNot_Wrapped) , INHERITED(gpu, desc, kTexture2DSampler_GrSLType, highest_filter_mode(desc.fConfig), - info.fLevelCount > 1) + desc.fIsMipMapped) , fTextureView(view) , fLinearTextureView(nullptr) { this->registerWithCache(budgeted); @@ -49,7 +49,7 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, : GrSurface(gpu, desc) , GrVkImage(info, wrapped) , INHERITED(gpu, desc, kTexture2DSampler_GrSLType, highest_filter_mode(desc.fConfig), - info.fLevelCount > 1) + desc.fIsMipMapped) , fTextureView(view) , fLinearTextureView(nullptr) { this->registerWithCacheWrapped(); @@ -64,7 +64,7 @@ GrVkTexture::GrVkTexture(GrVkGpu* gpu, : GrSurface(gpu, desc) , GrVkImage(info, wrapped) , INHERITED(gpu, desc, kTexture2DSampler_GrSLType, highest_filter_mode(desc.fConfig), - info.fLevelCount > 1) + desc.fIsMipMapped) , fTextureView(view) , fLinearTextureView(nullptr) { } diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp index 85fc835bfe..8c596d915b 100644 --- a/tests/GrSurfaceTest.cpp +++ b/tests/GrSurfaceTest.cpp @@ -17,7 +17,6 @@ #include "GrTest.h" #include "GrTexture.h" #include "GrSurfacePriv.h" -#include "SkMipMap.h" #include "Test.h" // Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static upcasting of texture @@ -100,16 +99,6 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(GrSurfaceRenderability, reporter, ctxInfo) { desc.fWidth = 64; desc.fHeight = 64; - // Enough space for the first mip of our largest pixel config - const size_t pixelBufferSize = desc.fWidth * desc.fHeight * - GrBytesPerPixel(kRGBA_float_GrPixelConfig); - std::unique_ptr<char[]> pixelData(new char[pixelBufferSize]); - memset(pixelData.get(), 0, pixelBufferSize); - - // We re-use the same mip level objects (with updated pointers and rowBytes) for each config - const int levelCount = SkMipMap::ComputeLevelCount(desc.fWidth, desc.fHeight) + 1; - std::unique_ptr<GrMipLevel[]> texels(new GrMipLevel[levelCount]); - for (GrPixelConfig config : configs) { for (GrSurfaceOrigin origin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin }) { desc.fFlags = kNone_GrSurfaceFlags; @@ -120,18 +109,6 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(GrSurfaceRenderability, reporter, ctxInfo) { sk_sp<GrSurface> tex = resourceProvider->createTexture(desc, SkBudgeted::kNo); REPORTER_ASSERT(reporter, SkToBool(tex.get()) == caps->isConfigTexturable(desc.fConfig)); - size_t rowBytes = desc.fWidth * GrBytesPerPixel(desc.fConfig); - for (int i = 0; i < levelCount; ++i) { - texels[i].fPixels = pixelData.get(); - texels[i].fRowBytes = rowBytes >> i; - } - sk_sp<GrTextureProxy> proxy = resourceProvider->createMipMappedTexture( - desc, SkBudgeted::kNo, texels.get(), levelCount); - REPORTER_ASSERT(reporter, SkToBool(proxy.get()) == - (caps->isConfigTexturable(desc.fConfig) && - caps->mipMapSupport() && - !GrPixelConfigIsSint(desc.fConfig))); - desc.fFlags = kRenderTarget_GrSurfaceFlag; tex = resourceProvider->createTexture(desc, SkBudgeted::kNo); REPORTER_ASSERT(reporter, SkToBool(tex.get()) == caps->isConfigRenderable(config, false)); diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp index 460d4ee096..08f60ea1c5 100644 --- a/tests/ResourceCacheTest.cpp +++ b/tests/ResourceCacheTest.cpp @@ -1714,7 +1714,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GPUMemorySize, reporter, ctxInfo) { // Mipmapped versions - if (context->caps()->mipMapSupport()) { + { sk_sp<GrTextureProxy> proxy; proxy = make_mipmap_proxy(provider, kRenderTarget_GrSurfaceFlag, kSize, kSize, 0); |