Commit b65c82ea by Nicolas Capens

Return EGL_BAD_ATTRIBUTE for unsupported HAL formats.

As prescribed by the EGL_ANDROID_image_native_buffer extension spec. Change-Id: Id4213e245d055971bd687f484dbc5efa7958adda Reviewed-on: https://swiftshader-review.googlesource.com/4518Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarGreg Hartman <ghartman@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent c0fb8a07
...@@ -174,46 +174,28 @@ inline GLenum GLPixelFormatFromAndroid(int halFormat) ...@@ -174,46 +174,28 @@ inline GLenum GLPixelFormatFromAndroid(int halFormat)
{ {
switch(halFormat) switch(halFormat)
{ {
case HAL_PIXEL_FORMAT_RGBA_8888: case HAL_PIXEL_FORMAT_RGBA_8888: return GL_RGBA;
return GL_RGBA; case HAL_PIXEL_FORMAT_RGBX_8888: return GL_RGB;
case HAL_PIXEL_FORMAT_RGBX_8888: case HAL_PIXEL_FORMAT_RGB_888: return GL_NONE; // Unsupported
return GL_RGB; case HAL_PIXEL_FORMAT_BGRA_8888: return GL_BGRA_EXT;
case HAL_PIXEL_FORMAT_RGB_888: case HAL_PIXEL_FORMAT_RGB_565: return GL_RGB565;
ALOGE("%s badness unsupported format HAL_PIXEL_FORMAT_RGB_888", __FUNCTION__); case HAL_PIXEL_FORMAT_YV12: return SW_YV12_BT601;
return GL_RGB; default: return GL_NONE;
case HAL_PIXEL_FORMAT_BGRA_8888:
return GL_BGRA_EXT;
case HAL_PIXEL_FORMAT_RGB_565:
return GL_RGB565;
case HAL_PIXEL_FORMAT_YV12:
return SW_YV12_BT601;
default:
ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);
} }
return GL_RGBA;
} }
inline GLenum GLPixelTypeFromAndroid(int halFormat) inline GLenum GLPixelTypeFromAndroid(int halFormat)
{ {
switch(halFormat) switch(halFormat)
{ {
case HAL_PIXEL_FORMAT_RGBA_8888: case HAL_PIXEL_FORMAT_RGBA_8888: return GL_UNSIGNED_BYTE;
case HAL_PIXEL_FORMAT_RGBX_8888: case HAL_PIXEL_FORMAT_RGBX_8888: return GL_UNSIGNED_BYTE;
case HAL_PIXEL_FORMAT_BGRA_8888: case HAL_PIXEL_FORMAT_RGB_888: return GL_NONE; // Unsupported
return GL_UNSIGNED_BYTE; case HAL_PIXEL_FORMAT_BGRA_8888: return GL_UNSIGNED_BYTE;
case HAL_PIXEL_FORMAT_RGB_565: case HAL_PIXEL_FORMAT_RGB_565: return GL_UNSIGNED_SHORT_5_6_5;
return GL_UNSIGNED_SHORT_5_6_5; case HAL_PIXEL_FORMAT_YV12: return GL_UNSIGNED_BYTE;
case HAL_PIXEL_FORMAT_YV12: default: return GL_NONE;
return GL_UNSIGNED_BYTE;
case HAL_PIXEL_FORMAT_RGB_888:
ALOGE("%s badness unsupported format HAL_PIXEL_FORMAT_RGB_888", __FUNCTION__);
return GL_UNSIGNED_BYTE;
default:
ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);
} }
return GL_UNSIGNED_BYTE;
} }
class AndroidNativeImage : public egl::Image class AndroidNativeImage : public egl::Image
......
...@@ -896,7 +896,15 @@ EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLCl ...@@ -896,7 +896,15 @@ EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLCl
#if defined(__ANDROID__) #if defined(__ANDROID__)
if(target == EGL_NATIVE_BUFFER_ANDROID) if(target == EGL_NATIVE_BUFFER_ANDROID)
{ {
return new AndroidNativeImage(reinterpret_cast<ANativeWindowBuffer*>(buffer)); ANativeWindowBuffer *nativeBuffer = reinterpret_cast<ANativeWindowBuffer*>(buffer);
if(!nativeBuffer || GLPixelFormatFromAndroid(nativeBuffer->format) == GL_NONE)
{
ALOGW("%s badness unsupported HAL format=%x", __FUNCTION__, nativeBuffer ? nativeBuffer->format : 0);
return error(EGL_BAD_ATTRIBUTE, EGL_NO_IMAGE_KHR);
}
return new AndroidNativeImage(nativeBuffer);
} }
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment