OSDN Git Service

Return EGL_BAD_ATTRIBUTE for unsupported HAL formats.
authorNicolas Capens <capn@google.com>
Wed, 6 Jan 2016 03:42:34 +0000 (22:42 -0500)
committerNicolas Capens <capn@google.com>
Wed, 6 Jan 2016 19:26:47 +0000 (19:26 +0000)
As prescribed by the EGL_ANDROID_image_native_buffer extension spec.

Change-Id: Id4213e245d055971bd687f484dbc5efa7958adda
Reviewed-on: https://swiftshader-review.googlesource.com/4518
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Greg Hartman <ghartman@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/common/Image.hpp
src/OpenGL/libEGL/libEGL.cpp

index e03d729..cf1f7d4 100644 (file)
@@ -174,46 +174,28 @@ inline GLenum GLPixelFormatFromAndroid(int halFormat)
 {\r
        switch(halFormat)\r
        {\r
-       case HAL_PIXEL_FORMAT_RGBA_8888:\r
-               return GL_RGBA;\r
-       case HAL_PIXEL_FORMAT_RGBX_8888:\r
-               return GL_RGB;\r
-       case HAL_PIXEL_FORMAT_RGB_888:\r
-               ALOGE("%s badness unsupported format HAL_PIXEL_FORMAT_RGB_888", __FUNCTION__);\r
-               return GL_RGB;\r
-       case HAL_PIXEL_FORMAT_BGRA_8888:\r
-               return GL_BGRA_EXT;\r
-       case HAL_PIXEL_FORMAT_RGB_565:\r
-               return GL_RGB565;\r
-       case HAL_PIXEL_FORMAT_YV12:\r
-               return SW_YV12_BT601;\r
-       default:\r
-               ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);\r
+       case HAL_PIXEL_FORMAT_RGBA_8888: return GL_RGBA;\r
+       case HAL_PIXEL_FORMAT_RGBX_8888: return GL_RGB;\r
+       case HAL_PIXEL_FORMAT_RGB_888:   return GL_NONE;   // Unsupported\r
+       case HAL_PIXEL_FORMAT_BGRA_8888: return GL_BGRA_EXT;\r
+       case HAL_PIXEL_FORMAT_RGB_565:   return GL_RGB565;\r
+       case HAL_PIXEL_FORMAT_YV12:      return SW_YV12_BT601;\r
+       default:                         return GL_NONE;\r
        }\r
-\r
-       return GL_RGBA;\r
 }\r
 \r
 inline GLenum GLPixelTypeFromAndroid(int halFormat)\r
 {\r
        switch(halFormat)\r
        {\r
-       case HAL_PIXEL_FORMAT_RGBA_8888:\r
-       case HAL_PIXEL_FORMAT_RGBX_8888:\r
-       case HAL_PIXEL_FORMAT_BGRA_8888:\r
-               return GL_UNSIGNED_BYTE;\r
-       case HAL_PIXEL_FORMAT_RGB_565:\r
-               return GL_UNSIGNED_SHORT_5_6_5;\r
-       case HAL_PIXEL_FORMAT_YV12:\r
-               return GL_UNSIGNED_BYTE;\r
-       case HAL_PIXEL_FORMAT_RGB_888:\r
-               ALOGE("%s badness unsupported format HAL_PIXEL_FORMAT_RGB_888", __FUNCTION__);\r
-               return GL_UNSIGNED_BYTE;\r
-       default:\r
-               ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);\r
+       case HAL_PIXEL_FORMAT_RGBA_8888: return GL_UNSIGNED_BYTE;\r
+       case HAL_PIXEL_FORMAT_RGBX_8888: return GL_UNSIGNED_BYTE;\r
+       case HAL_PIXEL_FORMAT_RGB_888:   return GL_NONE;   // Unsupported\r
+       case HAL_PIXEL_FORMAT_BGRA_8888: return GL_UNSIGNED_BYTE;\r
+       case HAL_PIXEL_FORMAT_RGB_565:   return GL_UNSIGNED_SHORT_5_6_5;\r
+       case HAL_PIXEL_FORMAT_YV12:      return GL_UNSIGNED_BYTE;\r
+       default:                         return GL_NONE;\r
        }\r
-\r
-       return GL_UNSIGNED_BYTE;\r
 }\r
 \r
 class AndroidNativeImage : public egl::Image\r
index 21065c4..8922f8f 100644 (file)
@@ -896,7 +896,15 @@ EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLCl
        #if defined(__ANDROID__)\r
                if(target == EGL_NATIVE_BUFFER_ANDROID)\r
                {\r
-                       return new AndroidNativeImage(reinterpret_cast<ANativeWindowBuffer*>(buffer));\r
+                       ANativeWindowBuffer *nativeBuffer = reinterpret_cast<ANativeWindowBuffer*>(buffer);\r
+\r
+                       if(!nativeBuffer || GLPixelFormatFromAndroid(nativeBuffer->format) == GL_NONE)\r
+                       {\r
+                               ALOGW("%s badness unsupported HAL format=%x", __FUNCTION__, nativeBuffer ? nativeBuffer->format : 0);\r
+                               return error(EGL_BAD_ATTRIBUTE, EGL_NO_IMAGE_KHR);\r
+                       }\r
+\r
+                       return new AndroidNativeImage(nativeBuffer);\r
                }\r
        #endif\r
 \r