aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/GrSurfaceTest.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-06-02 08:45:06 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-02 13:12:17 +0000
commit48c9919335c7da6188c08a78552186760bd434ea (patch)
tree341c083cb1ad96d3215f17c6f23ade2f87b2cc3a /tests/GrSurfaceTest.cpp
parentfcc8adc5e4768be74ffaf703a25abfc8ecbc40ff (diff)
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. Now that we're testing our TexStorage path, fix a few other problems that showed up: - Command Buffer doesn't like extension formats. - X86 PowerVR and Adreno devices don't like BGRA. Re-land of : https://skia-review.googlesource.com/18382 Re-re-land of: https://skia-review.googlesource.com/18261 BUG=skia: Change-Id: Ie12793549a6807300d6ece68cd6b92495e85c3fe Reviewed-on: https://skia-review.googlesource.com/18403 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tests/GrSurfaceTest.cpp')
-rw-r--r--tests/GrSurfaceTest.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp
index 8c596d915b..85fc835bfe 100644
--- a/tests/GrSurfaceTest.cpp
+++ b/tests/GrSurfaceTest.cpp
@@ -17,6 +17,7 @@
#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
@@ -99,6 +100,16 @@ 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;
@@ -109,6 +120,18 @@ 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));