diff --git a/gapid/gfxapi/gles/compat.go b/gapid/gfxapi/gles/compat.go
index 88c7ba9..9b5494f 100644
--- a/gapid/gfxapi/gles/compat.go
+++ b/gapid/gfxapi/gles/compat.go
@@ -82,7 +82,8 @@
 }
 
 type features struct {
-	halfFloatOES               support // support for GL_OES_vertex_half_float
+	vertexHalfFloatOES         support // support for GL_OES_vertex_half_float
+	textureHalfFloatOES        support // support for GL_OES_texture_half_float
 	eglImageExternal           support // support for GL_OES_EGL_image_external
 	vertexArrayObjects         support // support for VBOs
 	supportGenerateMipmapHint  bool    // support for GL_GENERATE_MIPMAP_HINT
@@ -105,7 +106,8 @@
 	}
 
 	f := features{
-		halfFloatOES:               ext.get("GL_OES_vertex_half_float"),
+		vertexHalfFloatOES:         ext.get("GL_OES_vertex_half_float"),
+		textureHalfFloatOES:        ext.get("GL_OES_texture_half_float"),
 		eglImageExternal:           ext.get("GL_OES_EGL_image_external"),
 		uncompressedTextureFormats: utfs,
 		compressedTextureFormats:   getSupportedCompressedTextureFormats(ext),
@@ -262,7 +264,7 @@
 
 		// TODO: glVertexAttribIPointer
 		case *GlVertexAttribPointer:
-			if a.Type == GLenum_GL_HALF_FLOAT_OES && target.halfFloatOES == unsupported {
+			if a.Type == GLenum_GL_HALF_FLOAT_OES && target.vertexHalfFloatOES == unsupported {
 				// Convert GL_HALF_FLOAT_OES to GL_HALF_FLOAT_ARB.
 				a = NewGlVertexAttribPointer(a.Location, a.Size, GLenum_GL_HALF_FLOAT_ARB, a.Normalized, a.Stride, memory.Pointer(a.Data))
 			}
@@ -356,19 +358,33 @@
 			}
 
 		case *GlTexImage2D:
-			if _, supported := target.uncompressedTextureFormats[a.Format]; !supported {
-				if err := convertTexImage2DtoRGBA(ctx, i, a, s, d, out); err == nil {
-					return
+			{
+				a := *a
+				if a.Type == GLenum_GL_HALF_FLOAT_OES && target.textureHalfFloatOES == unsupported {
+					// Half-float made it to core desktop and ES specification, but it was renumbered.
+					a.Type = GLenum_GL_HALF_FLOAT
 				}
-				ctx.Fail(err, "Converting texture")
+				if _, supported := target.uncompressedTextureFormats[a.Format]; !supported {
+					if err := convertTexImage2DtoRGBA(ctx, i, &a, s, d, out); err == nil {
+						return
+					}
+					ctx.Fail(err, "Converting texture")
+				}
 			}
 
 		case *GlTexSubImage2D:
-			if _, supported := target.uncompressedTextureFormats[a.Format]; !supported {
-				if err := convertTexSubImage2DtoRGBA(ctx, i, a, s, d, out); err == nil {
-					return
+			{
+				a := *a
+				if a.Type == GLenum_GL_HALF_FLOAT_OES && target.textureHalfFloatOES == unsupported {
+					// Half-float made it to core desktop and ES specification, but it was renumbered.
+					a.Type = GLenum_GL_HALF_FLOAT
 				}
-				ctx.Fail(err, "Converting texture")
+				if _, supported := target.uncompressedTextureFormats[a.Format]; !supported {
+					if err := convertTexSubImage2DtoRGBA(ctx, i, &a, s, d, out); err == nil {
+						return
+					}
+					ctx.Fail(err, "Converting texture")
+				}
 			}
 
 		case *GlCompressedTexImage2D:
