Add texture specification test for GL_OES_texture_half_float.
authorNicolas Capens <capn@google.com>
Fri, 16 Mar 2018 13:51:47 +0000 (09:51 -0400)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 2 Jun 2020 07:13:28 +0000 (03:13 -0400)
Google bug: b/74609191
Components: AOSP
Affects: dEQP-GLES2.functional.texture.specification.*

Change-Id: I85aec3469872f2733f528ef7902427e9e87935e7
(cherry picked from commit 19dd72470bdd1a772c08474535e40874624a93b1)

android/cts/master/gles2-master.txt
external/openglcts/data/mustpass/gles/aosp_mustpass/3.2.5.x/gles2-master.txt
external/openglcts/data/mustpass/gles/aosp_mustpass/master/gles2-master.txt
external/openglcts/scripts/build_mustpass.py
framework/opengl/gluTextureUtil.cpp
modules/gles2/functional/es2fTextureSpecificationTests.cpp

index 27e8062..ecf56bb 100644 (file)
@@ -9094,6 +9094,16 @@ dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.la16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.la16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.l16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.l16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.a16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.a16f_cube
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_0
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_1
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_2
@@ -9148,6 +9158,16 @@ dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.la16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.la16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.l16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.l16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.a16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.a16f_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a8_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a8_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l8_2d
@@ -9164,6 +9184,16 @@ dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.la16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.la16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a16f_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_1
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_2
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_4
index 1be8f8d..6287ba0 100644 (file)
@@ -10637,6 +10637,16 @@ dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.la16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.la16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.l16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.l16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.a16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.a16f_cube
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_0
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_1
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_2
@@ -10707,6 +10717,16 @@ dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.la16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.la16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.l16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.l16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.a16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.a16f_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a8_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a8_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l8_2d
@@ -10723,6 +10743,16 @@ dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.la16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.la16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a16f_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_1
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_2
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_4
index da73d7a..35e5c28 100644 (file)
@@ -10818,6 +10818,16 @@ dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.la16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.la16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.l16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.l16f_cube
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.a16f_2d
+dEQP-GLES2.functional.texture.specification.basic_teximage2d.a16f_cube
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_0
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_1
 dEQP-GLES2.functional.texture.specification.random_teximage2d.2d_2
@@ -10888,6 +10898,16 @@ dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.la16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.la16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.l16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.l16f_cube
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.a16f_2d
+dEQP-GLES2.functional.texture.specification.basic_texsubimage2d.a16f_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a8_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a8_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l8_2d
@@ -10904,6 +10924,16 @@ dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba5551_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba5551_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba8888_2d
 dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba8888_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgba16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgb16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.rgb16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.la16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.la16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.l16f_cube
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a16f_2d
+dEQP-GLES2.functional.texture.specification.texsubimage2d_empty_tex.a16f_cube
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_1
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_2
 dEQP-GLES2.functional.texture.specification.texsubimage2d_align.2d_l8_1_4
index 6c250a3..a6bf7d7 100644 (file)
@@ -1113,7 +1113,7 @@ GL_BUILD_CONFIG                                   = BuildConfig(buildPath, "Debug", ["-DDEQP_TARGET=%s" % DEFA
 if __name__ == "__main__":
        gtfCMakeLists = os.path.join(DEQP_DIR, "external", "kc-cts", "src", "GTF_ES", "CMakeLists.txt")
        if os.path.isfile(gtfCMakeLists) == False:
-               raise Exception("GTF sources not found. GTF module is required to build the mustpass files")
+               raise Exception("GTF sources not found. GTF module is required to build the mustpass files. 'cd external && python fetch_kc_cts.py'")
        genMustpassLists(ES_MUSTPASS_LISTS, ANY_GENERATOR, ES_BUILD_CONFIG)
        gl_mustpass_lists = generateGLMustpass()
        genMustpassLists(gl_mustpass_lists, ANY_GENERATOR, GL_BUILD_CONFIG)
index 98b8c76..bbf88e1 100644 (file)
@@ -417,6 +417,9 @@ static tcu::TextureFormat::ChannelType mapGLChannelType (deUint32 dataType, bool
                case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: return TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV;
                case GL_UNSIGNED_INT_5_9_9_9_REV:               return TextureFormat::UNSIGNED_INT_999_E5_REV;
 
+               // GL_OES_texture_half_float
+               case GL_HALF_FLOAT_OES:                                 return TextureFormat::HALF_FLOAT;
+
                default:
                        DE_ASSERT(false);
                        return TextureFormat::CHANNELTYPE_LAST;
index 7a8705e..ff19431 100644 (file)
@@ -367,6 +367,8 @@ protected:
        const int                                       m_width;
        const int                                       m_height;
 
+       bool m_half_float_oes;
+
 private:
                                                                TextureSpecCase         (const TextureSpecCase& other);
        TextureSpecCase&                        operator=                       (const TextureSpecCase& other);
@@ -403,6 +405,8 @@ TextureSpecCase::TextureSpecCase (Context& context, const char* name, const char
        , m_texCubeNegZShader   (tcu::CUBEFACE_NEGATIVE_Z)
        , m_texCubePosZShader   (tcu::CUBEFACE_POSITIVE_Z)
 {
+       const glw::Functions& gl = m_context.getRenderContext().getFunctions();
+       m_half_float_oes = glu::hasExtension(gl, glu::ApiType::es(2, 0), "GL_OES_texture_half_float");
 }
 
 TextureSpecCase::~TextureSpecCase (void)
@@ -629,6 +633,9 @@ protected:
                tcu::TextureLevel       levelData       (fmt);
                de::Random                      rnd                     (deStringHash(getName()));
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_2D, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -673,6 +680,9 @@ protected:
 
                DE_ASSERT(m_width == m_height); // Non-square cubemaps are not supported by GLES2.
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -720,6 +730,9 @@ protected:
                tcu::TextureLevel       levelData       (fmt);
                de::Random                      rnd                     (deStringHash(getName()));
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_2D, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -771,6 +784,9 @@ protected:
 
                DE_ASSERT(m_width == m_height); // Non-square cubemaps are not supported by GLES2.
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -830,6 +846,9 @@ protected:
                deUint32                        tex                     = 0;
                vector<deUint8>         data;
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_2D, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, m_alignment);
@@ -877,6 +896,9 @@ protected:
 
                DE_ASSERT(m_width == m_height); // Non-square cubemaps are not supported by GLES2.
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, m_alignment);
@@ -923,6 +945,9 @@ protected:
                tcu::TextureLevel       data            (fmt);
                de::Random                      rnd                     (deStringHash(getName()));
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_2D, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -989,6 +1014,9 @@ protected:
 
                DE_ASSERT(m_width == m_height); // Non-square cubemaps are not supported by GLES2.
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -1060,6 +1088,9 @@ protected:
                tcu::TextureLevel       data            (fmt);
                de::Random                      rnd                     (deStringHash(getName()));
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_2D, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -1114,6 +1145,9 @@ protected:
 
                DE_ASSERT(m_width == m_height); // Non-square cubemaps are not supported by GLES2.
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -1175,6 +1209,9 @@ protected:
                deUint32                        tex                     = 0;
                vector<deUint8>         data;
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_2D, tex);
 
@@ -1228,6 +1265,9 @@ protected:
 
                DE_ASSERT(m_width == m_height);
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
 
@@ -1394,6 +1434,9 @@ protected:
                if ((texHasRGB && !targetHasRGB) || (texHasAlpha && !targetHasAlpha))
                        throw tcu::NotSupportedError("Copying from current framebuffer is not supported", "", __FILE__, __LINE__);
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_2D, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -1471,6 +1514,9 @@ protected:
                if ((texHasRGB && !targetHasRGB) || (texHasAlpha && !targetHasAlpha))
                        throw tcu::NotSupportedError("Copying from current framebuffer is not supported", "", __FILE__, __LINE__);
 
+               if (m_dataType == GL_HALF_FLOAT_OES && !m_half_float_oes)
+                       throw tcu::NotSupportedError("GL_OES_texture_half_float is not supported", "", __FILE__, __LINE__);
+
                glGenTextures(1, &tex);
                glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
                glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -1546,7 +1592,12 @@ void TextureSpecificationTests::init (void)
                { "rgb888",             GL_RGB,                         GL_UNSIGNED_BYTE },
                { "rgba4444",   GL_RGBA,                        GL_UNSIGNED_SHORT_4_4_4_4 },
                { "rgba5551",   GL_RGBA,                        GL_UNSIGNED_SHORT_5_5_5_1 },
-               { "rgba8888",   GL_RGBA,                        GL_UNSIGNED_BYTE }
+               { "rgba8888",   GL_RGBA,                        GL_UNSIGNED_BYTE },
+               { "rgba16f",    GL_RGBA,                        GL_HALF_FLOAT_OES },
+               { "rgb16f",             GL_RGB,                         GL_HALF_FLOAT_OES },
+               { "la16f",              GL_LUMINANCE_ALPHA,     GL_HALF_FLOAT_OES },
+               { "l16f",               GL_LUMINANCE,           GL_HALF_FLOAT_OES },
+               { "a16f",               GL_ALPHA,                       GL_HALF_FLOAT_OES }
        };
 
        // Basic TexImage2D usage.