OSDN Git Service

Fix PixelCopyTest failure in CTS
authorRomain Guy <romainguy@google.com>
Wed, 1 Nov 2017 16:50:28 +0000 (09:50 -0700)
committerJohn Reck <jreck@google.com>
Wed, 20 Jun 2018 22:52:35 +0000 (22:52 +0000)
This feature needs support for renderable float textures, but the checks
were only guaranteeing support for float texture reads.

Bug: 68754504
Test: CtsViewTestCases

Change-Id: I0ce4a81cb8e09c10a5f1e65234685767a24ef8c4
Merged-In: I0ce4a81cb8e09c10a5f1e65234685767a24ef8c4
(cherry picked from commit 8472ac67fd1d815022874f5addace0c4334ae9f6)
(cherry picked from commit 8dc7f8275e5ba9004d219d7d7d990e91fc702095)

libs/hwui/Extensions.cpp
libs/hwui/Extensions.h
libs/hwui/OpenGLReadback.cpp

index 1e71cb0..69d5130 100644 (file)
@@ -59,6 +59,7 @@ Extensions::Extensions() {
     mHas1BitStencil = extensions.has("GL_OES_stencil1");
     mHas4BitStencil = extensions.has("GL_OES_stencil4");
     mHasUnpackSubImage = extensions.has("GL_EXT_unpack_subimage");
+    mHasRenderableFloatTexture = extensions.has("GL_OES_texture_half_float");
 
     mHasSRGB = mVersionMajor >= 3 || extensions.has("GL_EXT_sRGB");
     mHasSRGBWriteControl = extensions.has("GL_EXT_sRGB_write_control");
index 0ecfdb1..7af7f79 100644 (file)
@@ -38,6 +38,9 @@ public:
     inline bool hasPixelBufferObjects() const { return mVersionMajor >= 3; }
     inline bool hasOcclusionQueries() const { return mVersionMajor >= 3; }
     inline bool hasFloatTextures() const { return mVersionMajor >= 3; }
+    inline bool hasRenderableFloatTextures() const {
+        return (mVersionMajor >= 3 && mVersionMinor >= 2) || mHasRenderableFloatTexture;
+    }
     inline bool hasSRGB() const { return mHasSRGB; }
     inline bool hasSRGBWriteControl() const { return hasSRGB() && mHasSRGBWriteControl; }
     inline bool hasLinearBlending() const { return hasSRGB() && mHasLinearBlending; }
@@ -56,6 +59,7 @@ private:
     bool mHasSRGB;
     bool mHasSRGBWriteControl;
     bool mHasLinearBlending;
+    bool mHasRenderableFloatTexture;
 
     int mVersionMajor;
     int mVersionMinor;
index 2687410..751e203 100644 (file)
@@ -128,7 +128,8 @@ inline CopyResult copyTextureInto(Caches& caches, RenderState& renderState,
         return CopyResult::DestinationInvalid;
     }
 
-    if (bitmap->colorType() == kRGBA_F16_SkColorType && !caches.extensions().hasFloatTextures()) {
+    if (bitmap->colorType() == kRGBA_F16_SkColorType &&
+            !caches.extensions().hasRenderableFloatTextures()) {
         ALOGW("Can't copy surface into bitmap, RGBA_F16 config is not supported");
         return CopyResult::DestinationInvalid;
     }