OSDN Git Service

Log an error when unsupported Android pixel formats are used.
authorNicolas Capens <capn@google.com>
Fri, 4 Aug 2017 21:19:08 +0000 (17:19 -0400)
committerNicolas Capens <nicolascapens@google.com>
Fri, 4 Aug 2017 21:50:08 +0000 (21:50 +0000)
Known projects avoid using HAL_PIXEL_FORMAT_RGB_888 because we have no
immediate desire to support it (for performance reasons), but other
users may run into unexpected issues that previously would leave no
trace.

Change-Id: Idc606809117f8e0b200b4b38c58ba24696e7193c
Reviewed-on: https://swiftshader-review.googlesource.com/11311
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
src/Main/FrameBufferAndroid.cpp
src/OpenGL/common/Image.hpp

index 49957c8..16e63ab 100644 (file)
@@ -100,15 +100,22 @@ namespace sw
 
                switch(buffer->format)
                {
-               default: ALOGE("Unsupported buffer format %d", buffer->format); ASSERT(false);
-               case HAL_PIXEL_FORMAT_RGB_565: destFormat = FORMAT_R5G6B5; break;
-               case HAL_PIXEL_FORMAT_RGB_888: destFormat = FORMAT_R8G8B8; break;
+               case HAL_PIXEL_FORMAT_RGB_565:   destFormat = FORMAT_R5G6B5; break;
                case HAL_PIXEL_FORMAT_RGBA_8888: destFormat = FORMAT_A8B8G8R8; break;
 #if ANDROID_PLATFORM_SDK_VERSION > 16
                case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: destFormat = FORMAT_X8B8G8R8; break;
 #endif
                case HAL_PIXEL_FORMAT_RGBX_8888: destFormat = FORMAT_X8B8G8R8; break;
                case HAL_PIXEL_FORMAT_BGRA_8888: destFormat = FORMAT_A8R8G8B8; break;
+               case HAL_PIXEL_FORMAT_RGB_888:
+                       // Frame buffers are expected to have 16-bit or 32-bit colors, not 24-bit.
+                       ALOGE("Unsupported frame buffer format RGB_888"); ASSERT(false);
+                       destFormat = FORMAT_R8G8B8;   // Wrong component order.
+                       break;
+               default:
+                       ALOGE("Unsupported frame buffer format %d", buffer->format); ASSERT(false);
+                       destFormat = FORMAT_NULL;
+                       break;
                }
 
                stride = buffer->stride * Surface::bytes(destFormat);
index e13b19e..ecd6cd7 100644 (file)
@@ -220,14 +220,16 @@ inline GLenum GLPixelFormatFromAndroid(int halFormat)
        case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: return GL_RGB8;
 #endif
        case HAL_PIXEL_FORMAT_RGBX_8888: return GL_RGB8;
-       case HAL_PIXEL_FORMAT_RGB_888:   return GL_NONE;   // Unsupported
        case HAL_PIXEL_FORMAT_BGRA_8888: return GL_BGRA8_EXT;
        case HAL_PIXEL_FORMAT_RGB_565:   return GL_RGB565;
        case HAL_PIXEL_FORMAT_YV12:      return SW_YV12_BT601;
 #ifdef GRALLOC_MODULE_API_VERSION_0_2
        case HAL_PIXEL_FORMAT_YCbCr_420_888: return SW_YV12_BT601;
 #endif
-       default:                         return GL_NONE;
+       case HAL_PIXEL_FORMAT_RGB_888:   // Unsupported.
+       default:
+               ALOGE("Unsupported EGL image format %d", halFormat); ASSERT(false);
+               return GL_NONE;
        }
 }
 
@@ -240,14 +242,16 @@ inline GLenum GLPixelTypeFromAndroid(int halFormat)
        case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: return GL_UNSIGNED_BYTE;
 #endif
        case HAL_PIXEL_FORMAT_RGBX_8888: return GL_UNSIGNED_BYTE;
-       case HAL_PIXEL_FORMAT_RGB_888:   return GL_NONE;   // Unsupported
        case HAL_PIXEL_FORMAT_BGRA_8888: return GL_UNSIGNED_BYTE;
        case HAL_PIXEL_FORMAT_RGB_565:   return GL_UNSIGNED_SHORT_5_6_5;
        case HAL_PIXEL_FORMAT_YV12:      return GL_UNSIGNED_BYTE;
 #ifdef GRALLOC_MODULE_API_VERSION_0_2
        case HAL_PIXEL_FORMAT_YCbCr_420_888: return GL_UNSIGNED_BYTE;
 #endif
-       default:                         return GL_NONE;
+       case HAL_PIXEL_FORMAT_RGB_888:   // Unsupported.
+       default:
+               ALOGE("Unsupported EGL image format %d", halFormat); ASSERT(false);
+               return GL_NONE;
        }
 }