Fix bugs in image.create tests and clean up code a bit
authorPyry Haulos <phaulos@google.com>
Tue, 8 Sep 2015 19:53:12 +0000 (12:53 -0700)
committerPyry Haulos <phaulos@google.com>
Tue, 8 Sep 2015 19:53:12 +0000 (12:53 -0700)
 * Cube map tests were incorrectly using EGL image target as format.

 * GL_R & GL_RG cases weren't properly checking for extensions due
to typo in m_format initialization.

 * General cleanup for format/internalFormat handling and separation.

Change-Id: I6c1b28385269d4af60d1a5e097ef1dbb11413f6b

modules/egl/teglImageFormatTests.cpp
modules/egl/teglImageTests.cpp
modules/egl/teglImageUtil.cpp

index 5afd1ad..e7cf0f4 100644 (file)
@@ -1072,20 +1072,20 @@ protected:
                                        ImageTests                                              (EglTestContext& eglTestCtx, const string& name, const string& desc)
                                                : TestCaseGroup(eglTestCtx, name.c_str(), desc.c_str()) {}
 
-       void                    addCreateTexture                                (const string& name, EGLenum source, GLenum format, GLenum type);
+       void                    addCreateTexture                                (const string& name, EGLenum source, GLenum internalFormat, GLenum format, GLenum type);
        void                    addCreateRenderbuffer                   (const string& name, GLenum format);
        void                    addCreateAndroidNative                  (const string& name, GLenum format);
        void                    addCreateTexture2DActions               (const string& prefix);
-       void                    addCreateTextureCubemapActions  (const string& suffix, GLenum format, GLenum type);
+       void                    addCreateTextureCubemapActions  (const string& suffix, GLenum internalFormat, GLenum format, GLenum type);
        void                    addCreateRenderbufferActions    (void);
        void                    addCreateAndroidNativeActions   (void);
 
        LabeledActions  m_createActions;
 };
 
-void ImageTests::addCreateTexture (const string& name, EGLenum source, GLenum format, GLenum type)
+void ImageTests::addCreateTexture (const string& name, EGLenum source, GLenum internalFormat, GLenum format, GLenum type)
 {
-       m_createActions.add(name, MovePtr<Action>(new GLES2ImageApi::Create(createTextureImageSource(source, format, format, type))));
+       m_createActions.add(name, MovePtr<Action>(new GLES2ImageApi::Create(createTextureImageSource(source, internalFormat, format, type))));
 }
 
 void ImageTests::addCreateRenderbuffer (const string& name, GLenum format)
@@ -1100,21 +1100,21 @@ void ImageTests::addCreateAndroidNative (const string& name, GLenum format)
 
 void ImageTests::addCreateTexture2DActions (const string& prefix)
 {
-       addCreateTexture(prefix + "rgb8",               EGL_GL_TEXTURE_2D_KHR,  GL_RGB,         GL_UNSIGNED_BYTE);
-       addCreateTexture(prefix + "rgb565",             EGL_GL_TEXTURE_2D_KHR,  GL_RGB,         GL_UNSIGNED_SHORT_5_6_5);
-       addCreateTexture(prefix + "rgba8",              EGL_GL_TEXTURE_2D_KHR,  GL_RGBA,        GL_UNSIGNED_BYTE);
-       addCreateTexture(prefix + "rgba5_a1",   EGL_GL_TEXTURE_2D_KHR,  GL_RGBA,        GL_UNSIGNED_SHORT_5_5_5_1);
-       addCreateTexture(prefix + "rgba4",              EGL_GL_TEXTURE_2D_KHR,  GL_RGBA,        GL_UNSIGNED_SHORT_4_4_4_4);
+       addCreateTexture(prefix + "rgb8",               EGL_GL_TEXTURE_2D_KHR,  GL_RGB,         GL_RGB,         GL_UNSIGNED_BYTE);
+       addCreateTexture(prefix + "rgb565",             EGL_GL_TEXTURE_2D_KHR,  GL_RGB,         GL_RGB,         GL_UNSIGNED_SHORT_5_6_5);
+       addCreateTexture(prefix + "rgba8",              EGL_GL_TEXTURE_2D_KHR,  GL_RGBA,        GL_RGBA,        GL_UNSIGNED_BYTE);
+       addCreateTexture(prefix + "rgba5_a1",   EGL_GL_TEXTURE_2D_KHR,  GL_RGBA,        GL_RGBA,        GL_UNSIGNED_SHORT_5_5_5_1);
+       addCreateTexture(prefix + "rgba4",              EGL_GL_TEXTURE_2D_KHR,  GL_RGBA,        GL_RGBA,        GL_UNSIGNED_SHORT_4_4_4_4);
 }
 
-void ImageTests::addCreateTextureCubemapActions (const string& suffix, GLenum format, GLenum type)
+void ImageTests::addCreateTextureCubemapActions (const string& suffix, GLenum internalFormat, GLenum format, GLenum type)
 {
-       addCreateTexture("cubemap_positive_x" + suffix, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, format, type);
-       addCreateTexture("cubemap_positive_y" + suffix, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR, format, type);
-       addCreateTexture("cubemap_positive_z" + suffix, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR, format, type);
-       addCreateTexture("cubemap_negative_x" + suffix, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR, format, type);
-       addCreateTexture("cubemap_negative_y" + suffix, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR, format, type);
-       addCreateTexture("cubemap_negative_z" + suffix, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR, format, type);
+       addCreateTexture("cubemap_positive_x" + suffix, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, internalFormat, format, type);
+       addCreateTexture("cubemap_positive_y" + suffix, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR, internalFormat, format, type);
+       addCreateTexture("cubemap_positive_z" + suffix, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR, internalFormat, format, type);
+       addCreateTexture("cubemap_negative_x" + suffix, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR, internalFormat, format, type);
+       addCreateTexture("cubemap_negative_y" + suffix, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR, internalFormat, format, type);
+       addCreateTexture("cubemap_negative_z" + suffix, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR, internalFormat, format, type);
 }
 
 void ImageTests::addCreateRenderbufferActions (void)
@@ -1257,8 +1257,8 @@ bool isCompatibleCreateAndRenderActions (const Action& create, const Action& ren
 void SimpleCreationTests::init (void)
 {
        addCreateTexture2DActions("texture_");
-       addCreateTextureCubemapActions("_rgba", GL_RGBA, GL_UNSIGNED_BYTE);
-       addCreateTextureCubemapActions("_rgb", GL_RGB, GL_UNSIGNED_BYTE);
+       addCreateTextureCubemapActions("_rgba", GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE);
+       addCreateTextureCubemapActions("_rgb", GL_RGB, GL_RGB, GL_UNSIGNED_BYTE);
        addCreateRenderbufferActions();
        addCreateAndroidNativeActions();
        addRenderActions();
@@ -1394,8 +1394,8 @@ void MultiContextRenderTests::addClearActions (void)
 void MultiContextRenderTests::init (void)
 {
        addCreateTexture2DActions("texture_");
-       addCreateTextureCubemapActions("_rgba8", GL_RGBA, GL_UNSIGNED_BYTE);
-       addCreateTextureCubemapActions("_rgb8", GL_RGB, GL_UNSIGNED_BYTE);
+       addCreateTextureCubemapActions("_rgba8", GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE);
+       addCreateTextureCubemapActions("_rgb8", GL_RGB, GL_RGB, GL_UNSIGNED_BYTE);
        addCreateRenderbufferActions();
        addCreateAndroidNativeActions();
        addRenderActions();
index d9e6f16..1f48124 100644 (file)
@@ -316,7 +316,7 @@ public:
                }
        }
 
-       MovePtr<ImageSource> getImageSource (EGLint target, GLenum format, bool useTexLevel0, GLenum internalFormat)
+       MovePtr<ImageSource> getImageSource (EGLint target, GLenum internalFormat, GLenum format, GLenum type, bool useTexLevel0)
        {
                switch (target)
                {
@@ -327,21 +327,27 @@ public:
                        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
                        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
                        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
-                               return createTextureImageSource(target, internalFormat, format, GL_UNSIGNED_BYTE, useTexLevel0);
+                               DE_ASSERT(format != 0u && type != 0u);
+                               return createTextureImageSource(target, internalFormat, format, type, useTexLevel0);
+
                        case EGL_GL_RENDERBUFFER_KHR:
-                               return createRenderbufferImageSource(format);
+                               DE_ASSERT(format == 0u && type == 0u);
+                               return createRenderbufferImageSource(internalFormat);
+
                        case EGL_NATIVE_BUFFER_ANDROID:
-                               return createAndroidNativeImageSource(format);
+                               DE_ASSERT(format == 0u && type == 0u);
+                               return createAndroidNativeImageSource(internalFormat);
+
                        default:
                                DE_FATAL("Impossible");
                                return MovePtr<ImageSource>();
                }
        }
 
-       CreateImageGLES2 (EglTestContext& eglTestCtx, EGLint target, GLenum storage, bool useTexLevel0 = false, GLenum internalFormat = GLenum(0))
-               : ImageTestCase                 (eglTestCtx, ApiType::es(2, 0), string("create_image_gles2_") + getTargetName(target) + "_" + getStorageName(storage) + (useTexLevel0 ? "_level0_only" : ""), "Create EGLImage from GLES2 object")
-               , m_source                              (getImageSource(target, storage, useTexLevel0, internalFormat))
-               , m_format                              (target)
+       CreateImageGLES2 (EglTestContext& eglTestCtx, EGLint target, GLenum internalFormat, GLenum format, GLenum type, bool useTexLevel0 = false)
+               : ImageTestCase         (eglTestCtx, ApiType::es(2, 0), string("create_image_gles2_") + getTargetName(target) + "_" + getStorageName(internalFormat) + (useTexLevel0 ? "_level0_only" : ""), "Create EGLImage from GLES2 object")
+               , m_source                      (getImageSource(target, internalFormat, format, type, useTexLevel0))
+               , m_internalFormat      (internalFormat)
        {
        }
 
@@ -362,7 +368,7 @@ public:
                Context                                 context                 (m_eglTestCtx, dpy, contextType, 64, 64);
                const EGLContext                eglContext              = context.getEglContext();
 
-               if ((m_format == GL_RED || m_format == GL_RG) && !isGLRedSupported())
+               if ((m_internalFormat == GL_RED || m_internalFormat == GL_RG) && !isGLRedSupported())
                        TCU_THROW(NotSupportedError, "Unsupported extension: GL_EXT_texture_rg");
 
                log << TestLog::Message << "Using EGL config " << eglu::getConfigID(egl, dpy, context.getConfig()) << TestLog::EndMessage;
@@ -385,8 +391,8 @@ public:
        }
 
 private:
-       UniquePtr<ImageSource>  m_source;
-       GLenum                                  m_format;
+       const UniquePtr<ImageSource>    m_source;
+       const GLenum                                    m_internalFormat;
 };
 
 class ImageTargetGLES2 : public ImageTestCase
@@ -500,25 +506,25 @@ public:
        {
                addChild(new Image::InvalidCreateImage(m_eglTestCtx));
 
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RED, false, GL_R8));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RG, false, GL_RG8));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RED, GL_RED, GL_UNSIGNED_BYTE, false));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RG, GL_RG, GL_UNSIGNED_BYTE, false));
 
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_LUMINANCE));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_LUMINANCE_ALPHA));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE));
 
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RGB));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RGBA));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RGBA, true));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_2D_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, true));
 
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, GL_RGB));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, GL_RGBA));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, GL_RGBA, true));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, true));
 
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR, GL_RGBA));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR, GL_RGBA));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR, GL_RGBA));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR, GL_RGBA));
-               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR, GL_RGBA));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE));
+               addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE));
 
                static const GLenum rboStorages[] =
                {
@@ -529,7 +535,7 @@ public:
                        GL_STENCIL_INDEX8
                };
                for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(rboStorages); storageNdx++)
-                       addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_RENDERBUFFER_KHR, rboStorages[storageNdx]));
+                       addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_GL_RENDERBUFFER_KHR, rboStorages[storageNdx], (GLenum)0, (GLenum)0));
 
                static const GLenum androidFormats[] =
                {
@@ -541,7 +547,7 @@ public:
                };
 
                for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(androidFormats); ++formatNdx)
-                       addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_NATIVE_BUFFER_ANDROID, androidFormats[formatNdx]));
+                       addChild(new Image::CreateImageGLES2(m_eglTestCtx, EGL_NATIVE_BUFFER_ANDROID, androidFormats[formatNdx], (GLenum)0, (GLenum)0));
 
                addChild(new Image::ImageTargetGLES2(m_eglTestCtx, GL_TEXTURE_2D));
                addChild(new Image::ImageTargetGLES2(m_eglTestCtx, GL_RENDERBUFFER));
index d58e418..1228b8c 100644 (file)
@@ -188,10 +188,10 @@ protected:
        virtual void                    initTexture                     (const glw::Functions& gl) const = 0;
        virtual GLenum                  getGLTarget                     (void) const = 0;
 
-       GLenum                                  m_internalFormat;
-       GLenum                                  m_format;
-       GLenum                                  m_type;
-       bool                                    m_useTexLevel0;
+       const GLenum                    m_internalFormat;
+       const GLenum                    m_format;
+       const GLenum                    m_type;
+       const bool                              m_useTexLevel0;
 };
 
 AttribMap TextureImageSource::getCreateAttribs (void) const
@@ -262,7 +262,7 @@ void Texture2DImageSource::initTexture (const glw::Functions& gl) const
 class TextureCubeMapImageSource : public TextureImageSource
 {
 public:
-                                       TextureCubeMapImageSource       (GLenum internalFormat, EGLenum source, GLenum format, GLenum type, bool useTexLevel0) : TextureImageSource(internalFormat, format, type, useTexLevel0), m_source(source) {}
+                                       TextureCubeMapImageSource       (EGLenum source, GLenum internalFormat, GLenum format, GLenum type, bool useTexLevel0) : TextureImageSource(internalFormat, format, type, useTexLevel0), m_source(source) {}
        EGLenum                 getSource                                       (void) const { return m_source; }
        string                  getRequiredExtension            (void) const { return "EGL_KHR_gl_texture_cubemap_image"; }
        GLenum                  getGLTarget                                     (void) const { return GL_TEXTURE_CUBE_MAP; }