Revert "Expand texturability testing to cover mip-mapped textures, and fix iOS"
This reverts commit c2b5175e99
.
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>
This commit is contained in:
parent
c2b5175e99
commit
842a560470
@ -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;
|
||||
|
@ -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 |
|
||||
|
@ -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) {
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user