From 62cd1bdf41a2b1441a5b3fe21a46140808c05d9e Mon Sep 17 00:00:00 2001
From: Gurchetan Singh <gurchetansingh@chromium.org>
Date: Mon, 6 Jan 2020 18:02:26 -0800
Subject: [PATCH] BACKPORT: EGL image storage

Change-Id: I73fd96af28f74afbca080a6df00f1c1db1f94af8
---
 src/mapi/glapi/gen/EXT_EGL_image_storage.xml |  22 +++
 src/mapi/glapi/gen/es_EXT.xml                |   1 +
 src/mapi/glapi/gen/static_data.py            |   2 +
 src/mesa/drivers/dri/common/dri_util.c       | 111 +++++++++------
 src/mesa/drivers/dri/common/dri_util.h       |   3 +
 src/mesa/drivers/dri/i965/intel_extensions.c |   1 +
 src/mesa/drivers/dri/i965/intel_image.h      |   2 +
 src/mesa/drivers/dri/i965/intel_screen.c     |   1 +
 src/mesa/drivers/dri/i965/intel_tex_image.c  |  62 ++++++++-
 src/mesa/main/dd.h                           |   8 +-
 src/mesa/main/extensions_table.h             |   1 +
 src/mesa/main/mtypes.h                       |   1 +
 src/mesa/main/teximage.c                     | 137 ++++++++++++++++---
 src/mesa/main/teximage.h                     |   7 +
 14 files changed, 293 insertions(+), 66 deletions(-)
 create mode 100644 src/mapi/glapi/gen/EXT_EGL_image_storage.xml

diff --git a/src/mapi/glapi/gen/EXT_EGL_image_storage.xml b/src/mapi/glapi/gen/EXT_EGL_image_storage.xml
new file mode 100644
index 00000000000..9ce84d537aa
--- /dev/null
+++ b/src/mapi/glapi/gen/EXT_EGL_image_storage.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_EXT_EGL_image_storage" number="301">
+
+    <function name="EGLImageTargetTexStorageEXT" es2="3.0" desktop="false">
+        <param name="target" type="GLenum"/>
+        <param name="image" type="GLvoid *"/>
+        <param name="attrib_list" type="const GLint *"/>
+    </function>
+
+    <function name="EGLImageTargetTextureStorageEXT" es2="3.0" desktop="false">
+        <param name="texture" type="GLuint"/>
+        <param name="image" type="GLvoid *"/>
+        <param name="attrib_list" type="const GLint *"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml
index 3a797a50989..a3411679c19 100644
--- a/src/mapi/glapi/gen/es_EXT.xml
+++ b/src/mapi/glapi/gen/es_EXT.xml
@@ -1490,4 +1490,5 @@
    </function>
 </category>
 
+<xi:include href="EXT_EGL_image_storage.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </OpenGLAPI>
diff --git a/src/mapi/glapi/gen/static_data.py b/src/mapi/glapi/gen/static_data.py
index 24781390d30..62652112f3f 100644
--- a/src/mapi/glapi/gen/static_data.py
+++ b/src/mapi/glapi/gen/static_data.py
@@ -1455,6 +1455,8 @@ offsets = {
     "PrimitiveBoundingBox": 1419,
     "FramebufferParameteriMESA": 1420,
     "GetFramebufferParameterivMESA": 1421,
+    "EGLImageTargetTexStorageEXT" : 1422,
+    "EGLImageTargetTextureStorageEXT" : 1423,
 }
 
 functions = [
diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index ac3a04bceff..cdf7aa92c24 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -873,86 +873,107 @@ driUpdateFramebufferSize(struct gl_context *ctx, const __DRIdrawable *dPriv)
 static const struct {
    uint32_t    image_format;
    mesa_format mesa_format;
+   GLenum internal_format;
 } format_mapping[] = {
    {
-      .image_format = __DRI_IMAGE_FORMAT_RGB565,
-      .mesa_format  =        MESA_FORMAT_B5G6R5_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_RGB565,
+      .mesa_format     =        MESA_FORMAT_B5G6R5_UNORM,
+      .internal_format =        GL_RGB565,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_ARGB1555,
-      .mesa_format  =        MESA_FORMAT_B5G5R5A1_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_ARGB1555,
+      .mesa_format     =        MESA_FORMAT_B5G5R5A1_UNORM,
+      .internal_format =        GL_RGB5_A1,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_XRGB8888,
-      .mesa_format  =        MESA_FORMAT_B8G8R8X8_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_XRGB8888,
+      .mesa_format     =        MESA_FORMAT_B8G8R8X8_UNORM,
+      .internal_format =        GL_RGBA8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_ARGB2101010,
-      .mesa_format  =        MESA_FORMAT_B10G10R10A2_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_ARGB2101010,
+      .mesa_format     =        MESA_FORMAT_B10G10R10A2_UNORM,
+      .internal_format =        GL_RGB10_A2,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_XRGB2101010,
-      .mesa_format  =        MESA_FORMAT_B10G10R10X2_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_XRGB2101010,
+      .mesa_format     =        MESA_FORMAT_B10G10R10X2_UNORM,
+      .internal_format =        GL_RGB10_A2,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_ABGR2101010,
-      .mesa_format  =        MESA_FORMAT_R10G10B10A2_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_ABGR2101010,
+      .mesa_format     =        MESA_FORMAT_R10G10B10A2_UNORM,
+      .internal_format =        GL_RGB10_A2,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_XBGR2101010,
-      .mesa_format  =        MESA_FORMAT_R10G10B10X2_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_XBGR2101010,
+      .mesa_format     =        MESA_FORMAT_R10G10B10X2_UNORM,
+      .internal_format =        GL_RGB10_A2,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_ARGB8888,
-      .mesa_format  =        MESA_FORMAT_B8G8R8A8_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_ARGB8888,
+      .mesa_format     =        MESA_FORMAT_B8G8R8A8_UNORM,
+      .internal_format =        GL_RGBA8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_ABGR8888,
-      .mesa_format  =        MESA_FORMAT_R8G8B8A8_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_ABGR8888,
+      .mesa_format     =        MESA_FORMAT_R8G8B8A8_UNORM,
+      .internal_format =        GL_RGBA8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_XBGR8888,
-      .mesa_format  =        MESA_FORMAT_R8G8B8X8_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_XBGR8888,
+      .mesa_format     =        MESA_FORMAT_R8G8B8X8_UNORM,
+      .internal_format =        GL_RGBA8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_R8,
-      .mesa_format  =        MESA_FORMAT_R_UNORM8,
+      .image_format    = __DRI_IMAGE_FORMAT_R8,
+      .mesa_format     =        MESA_FORMAT_R_UNORM8,
+      .internal_format =        GL_R8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_R8,
-      .mesa_format  =        MESA_FORMAT_L_UNORM8,
+      .image_format    = __DRI_IMAGE_FORMAT_R8,
+      .mesa_format     =        MESA_FORMAT_L_UNORM8,
+      .internal_format =        GL_R8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_GR88,
-      .mesa_format  =        MESA_FORMAT_R8G8_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_GR88,
+      .mesa_format     =        MESA_FORMAT_R8G8_UNORM,
+      .internal_format =        GL_RG8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_GR88,
-      .mesa_format  =        MESA_FORMAT_L8A8_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_GR88,
+      .mesa_format     =        MESA_FORMAT_L8A8_UNORM,
+      .internal_format =        GL_RG8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_SABGR8,
-      .mesa_format  =        MESA_FORMAT_R8G8B8A8_SRGB,
+      .image_format    = __DRI_IMAGE_FORMAT_SABGR8,
+      .mesa_format     =        MESA_FORMAT_R8G8B8A8_SRGB,
+      .internal_format =        GL_SRGB8_ALPHA8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_SARGB8,
-      .mesa_format  =        MESA_FORMAT_B8G8R8A8_SRGB,
+      .image_format    = __DRI_IMAGE_FORMAT_SARGB8,
+      .mesa_format     =        MESA_FORMAT_B8G8R8A8_SRGB,
+      .internal_format =        GL_SRGB8_ALPHA8,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_R16,
-      .mesa_format  =        MESA_FORMAT_R_UNORM16,
+      .image_format    = __DRI_IMAGE_FORMAT_R16,
+      .mesa_format     =        MESA_FORMAT_R_UNORM16,
+      .internal_format =        GL_R16,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_R16,
-      .mesa_format  =        MESA_FORMAT_L_UNORM16,
+      .image_format    = __DRI_IMAGE_FORMAT_R16,
+      .mesa_format     =        MESA_FORMAT_L_UNORM16,
+      .internal_format =        GL_R16,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_GR1616,
-      .mesa_format  =        MESA_FORMAT_R16G16_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_GR1616,
+      .mesa_format     =        MESA_FORMAT_R16G16_UNORM,
+      .internal_format =        GL_RG16,
    },
    {
-      .image_format = __DRI_IMAGE_FORMAT_GR1616,
-      .mesa_format  =        MESA_FORMAT_L16A16_UNORM,
+      .image_format    = __DRI_IMAGE_FORMAT_GR1616,
+      .mesa_format     =        MESA_FORMAT_L_UNORM16,
+      .internal_format =        GL_RG16,
    },
 };
 
@@ -976,6 +997,16 @@ driImageFormatToGLFormat(uint32_t image_format)
    return MESA_FORMAT_NONE;
 }
 
+uint32_t
+driGLFormatToSizedInternalGLFormat(mesa_format format)
+{
+   for (size_t i = 0; i < ARRAY_SIZE(format_mapping); i++)
+      if (format_mapping[i].mesa_format == format)
+         return format_mapping[i].internal_format;
+
+   return GL_NONE;
+}
+
 /** Image driver interface */
 const __DRIimageDriverExtension driImageDriverExtension = {
     .base = { __DRI_IMAGE_DRIVER, 1 },
diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h
index d6c7d07d4e0..1bc84ebddaa 100644
--- a/src/mesa/drivers/dri/common/dri_util.h
+++ b/src/mesa/drivers/dri/common/dri_util.h
@@ -320,6 +320,9 @@ struct __DRIdrawableRec {
 extern uint32_t
 driGLFormatToImageFormat(mesa_format format);
 
+extern uint32_t
+driGLFormatToSizedInternalGLFormat(mesa_format format);
+
 extern mesa_format
 driImageFormatToGLFormat(uint32_t image_format);
 
diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c
index d7080fb21b4..545d3b2e3b8 100644
--- a/src/mesa/drivers/dri/i965/intel_extensions.c
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c
@@ -141,6 +141,7 @@ intelInitExtensions(struct gl_context *ctx)
    ctx->Extensions.OES_texture_float_linear = true;
    ctx->Extensions.OES_texture_half_float = true;
    ctx->Extensions.OES_texture_half_float_linear = true;
+   ctx->Extensions.EXT_EGL_image_storage = true;
 
    if (devinfo->gen >= 8)
       ctx->Const.GLSLVersion = 450;
diff --git a/src/mesa/drivers/dri/i965/intel_image.h b/src/mesa/drivers/dri/i965/intel_image.h
index 4ab8a49b8bb..49f26d236f9 100644
--- a/src/mesa/drivers/dri/i965/intel_image.h
+++ b/src/mesa/drivers/dri/i965/intel_image.h
@@ -1,4 +1,5 @@
 /*
+://gitlab.freedesktop.org/mesa/mesa/merge_requests/3299/diffs#diff-content-6d6f80af2b8ec8e1fe366c565ba85c6a1737c7c0 endif
  * Copyright 2006 VMware, Inc.
  * All Rights Reserved.
  *
@@ -110,6 +111,7 @@ struct __DRIimageRec {
    /* \} */
 
    void *data;
+   bool imported_dmabuf;
 };
 
 #ifdef __cplusplus
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index d34b161f41e..a3ea3692833 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -1259,6 +1259,7 @@ intel_create_image_from_dma_bufs2(__DRIscreen *dri_screen,
    image->sample_range = sample_range;
    image->horizontal_siting = horizontal_siting;
    image->vertical_siting = vertical_siting;
+   image->imported_dmabuf = true;
 
    *error = __DRI_IMAGE_ERROR_SUCCESS;
    return image;
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
index 8d4ca7fed72..13ba2a0e506 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -599,10 +599,11 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
 }
 
 static void
-intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
-			      struct gl_texture_object *texObj,
-			      struct gl_texture_image *texImage,
-			      GLeglImageOES image_handle)
+intel_image_target_texture(struct gl_context *ctx, GLenum target,
+                           struct gl_texture_object *texObj,
+                           struct gl_texture_image *texImage,
+                           GLeglImageOES image_handle,
+                           bool storage)
 {
    struct brw_context *brw = brw_context(ctx);
    struct intel_mipmap_tree *mt;
@@ -630,13 +631,63 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
    struct intel_texture_object *intel_texobj = intel_texture_object(texObj);
    intel_texobj->planar_format = image->planar_format;
 
-   const GLenum internal_format =
+   GLenum internal_format =
       image->internal_format != 0 ?
       image->internal_format : _mesa_get_format_base_format(mt->format);
+
+   /* Fix the internal format when _mesa_get_format_base_format(mt->format)
+    * isn't a valid one for that particular format.
+    */
+   if (brw->mesa_format_supports_render[image->format]) {
+      if (image->format == MESA_FORMAT_R10G10B10A2_UNORM ||
+          image->format == MESA_FORMAT_R10G10B10X2_UNORM ||
+          image->format == MESA_FORMAT_B10G10R10A2_UNORM ||
+          image->format == MESA_FORMAT_B10G10R10X2_UNORM)
+         internal_format = GL_RGB10_A2;
+   }
+
+   /* Guess sized internal format for dma-bufs, as specified by
+    * EXT_EGL_image_storage.
+    */
+   if (storage && target == GL_TEXTURE_2D && image->imported_dmabuf) {
+      internal_format = driGLFormatToSizedInternalGLFormat(image->format);
+      if (internal_format == GL_NONE) {
+         _mesa_error(ctx, GL_INVALID_OPERATION, __func__);
+         return;
+      }
+   }
+
    intel_set_texture_image_mt(brw, texImage, internal_format, mt->format, mt);
    intel_miptree_release(&mt);
 }
 
+static void
+intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
+                              struct gl_texture_object *texObj,
+                              struct gl_texture_image *texImage,
+                              GLeglImageOES image_handle)
+{
+   intel_image_target_texture(ctx, target, texObj, texImage, image_handle,
+                              false);
+}
+
+static void
+intel_image_target_tex_storage(struct gl_context *ctx, GLenum target,
+                              struct gl_texture_object *texObj,
+                              struct gl_texture_image *texImage,
+                              GLeglImageOES image_handle)
+{
+   struct intel_texture_object *intel_texobj = intel_texture_object(texObj);
+   intel_image_target_texture(ctx, target, texObj, texImage, image_handle,
+                              true);
+
+   /* The miptree is in a validated state, so no need to check later. */
+   intel_texobj->needs_validate = false;
+   intel_texobj->validated_first_level = 0;
+   intel_texobj->validated_last_level = 0;
+   intel_texobj->_Format = texImage->TexFormat;
+}
+
 static bool
 intel_gettexsubimage_blorp(struct brw_context *brw,
                            struct gl_texture_image *tex_image,
@@ -929,6 +980,7 @@ intelInitTextureImageFuncs(struct dd_function_table *functions)
    functions->TexSubImage = intelTexSubImage;
    functions->CompressedTexSubImage = intelCompressedTexSubImage;
    functions->EGLImageTargetTexture2D = intel_image_target_texture_2d;
+   functions->EGLImageTargetTexStorage = intel_image_target_tex_storage;
    functions->BindRenderbufferTexImage = intel_bind_renderbuffer_tex_image;
    functions->GetTexSubImage = intel_get_tex_sub_image;
 }
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 1214eeaa474..a09e11b1330 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -973,7 +973,13 @@ struct dd_function_table {
    void (*EGLImageTargetRenderbufferStorage)(struct gl_context *ctx,
 					     struct gl_renderbuffer *rb,
 					     void *image_handle);
-
+   /**
+    * \name GL_EXT_EGL_image_storage interface
+    */
+   void (*EGLImageTargetTexStorage)(struct gl_context *ctx, GLenum target,
+                                    struct gl_texture_object *texObj,
+                                    struct gl_texture_image *texImage,
+                                    GLeglImageOES image_handle);
    /**
     * \name GL_EXT_transform_feedback interface
     */
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index bca4aa063f5..cf3271f73c6 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -201,6 +201,7 @@ EXT(ATI_texture_env_combine3                , ATI_texture_env_combine3
 EXT(ATI_texture_float                       , ARB_texture_float                      , GLL, GLC,  x ,  x , 2002)
 EXT(ATI_texture_mirror_once                 , ATI_texture_mirror_once                , GLL, GLC,  x ,  x , 2006)
 
+EXT(EXT_EGL_image_storage                   , EXT_EGL_image_storage                  , GLL, GLC , x ,  30, 2018)
 EXT(EXT_abgr                                , dummy_true                             , GLL, GLC,  x ,  x , 1995)
 EXT(EXT_base_instance                       , ARB_base_instance                      ,  x ,  x ,  x ,  30, 2014)
 EXT(EXT_bgra                                , dummy_true                             , GLL,  x ,  x ,  x , 1995)
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 9bca5c153ad..9f6aaebbe95 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -4245,6 +4245,7 @@ struct gl_extensions
    GLboolean EXT_depth_bounds_test;
    GLboolean EXT_disjoint_timer_query;
    GLboolean EXT_draw_buffers2;
+   GLboolean EXT_EGL_image_storage;
    GLboolean EXT_float_blend;
    GLboolean EXT_framebuffer_multisample;
    GLboolean EXT_framebuffer_multisample_blit_scaled;
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index a43915e18d9..3d7736a8119 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -3229,23 +3229,28 @@ _mesa_TexImage3D_no_error(GLenum target, GLint level, GLint internalFormat,
                      width, height, depth, border, format, type, 0, pixels);
 }
 
-
-void GLAPIENTRY
-_mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
+/*
+ * Helper used by __mesa_EGLImageTargetTexture2DOES and
+ * _mesa_EGLImageTargetTexStorageEXT.
+ */
+static void
+egl_image_target_texture(struct gl_context *ctx,
+                         struct gl_texture_object *texObj, GLenum target,
+                         GLeglImageOES image, bool tex_storage,
+                         const char *caller)
 {
-   struct gl_texture_object *texObj;
    struct gl_texture_image *texImage;
    bool valid_target;
-   GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
 
    switch (target) {
    case GL_TEXTURE_2D:
-      valid_target = ctx->Extensions.OES_EGL_image;
+      valid_target = _mesa_has_OES_EGL_image(ctx) ||
+                     (tex_storage && _mesa_has_EXT_EGL_image_storage(ctx));
       break;
    case GL_TEXTURE_EXTERNAL_OES:
       valid_target =
-         _mesa_is_gles(ctx) ? ctx->Extensions.OES_EGL_image_external : false;
+         _mesa_is_gles(ctx) ? _mesa_has_OES_EGL_image_external(ctx) : false;
       break;
    default:
       valid_target = false;
@@ -3253,47 +3258,139 @@ _mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
    }
 
    if (!valid_target) {
-      _mesa_error(ctx, GL_INVALID_ENUM,
-                  "glEGLImageTargetTexture2D(target=%d)", target);
+      _mesa_error(ctx, GL_INVALID_ENUM, "%s(target=%d)", caller, target);
       return;
    }
 
    if (!image) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glEGLImageTargetTexture2D(image=%p)", image);
+      _mesa_error(ctx, GL_INVALID_VALUE, "%s(image=%p)", caller, image);
       return;
    }
 
    if (ctx->NewState & _NEW_PIXEL)
       _mesa_update_state(ctx);
 
-   texObj = _mesa_get_current_tex_object(ctx, target);
-   if (!texObj)
-      return;
-
    _mesa_lock_texture(ctx, texObj);
 
    if (texObj->Immutable) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glEGLImageTargetTexture2D(texture is immutable)");
+      _mesa_error(ctx, GL_INVALID_OPERATION, "%s(texture is immutable)", caller);
       _mesa_unlock_texture(ctx, texObj);
       return;
    }
 
    texImage = _mesa_get_tex_image(ctx, texObj, target, 0);
    if (!texImage) {
-      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glEGLImageTargetTexture2D");
+      _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
    } else {
       ctx->Driver.FreeTextureImageBuffer(ctx, texImage);
 
-      ctx->Driver.EGLImageTargetTexture2D(ctx, target,
-                                          texObj, texImage, image);
+      if (tex_storage) {
+         ctx->Driver.EGLImageTargetTexStorage(ctx, target, texObj, texImage,
+                                              image);
+      } else {
+         ctx->Driver.EGLImageTargetTexture2D(ctx, target, texObj, texImage,
+                                             image);
+      }
 
       _mesa_dirty_texobj(ctx, texObj);
    }
+
+   if (tex_storage)
+      _mesa_set_texture_view_state(ctx, texObj, target, 1);
+
    _mesa_unlock_texture(ctx, texObj);
 }
 
+void GLAPIENTRY
+_mesa_EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
+{
+   struct gl_texture_object *texObj;
+   const char *func = "glEGLImageTargetTexture2D";
+   GET_CURRENT_CONTEXT(ctx);
+
+   texObj = _mesa_get_current_tex_object(ctx, target);
+   if (!texObj) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "%s(target=%d)", func, target);
+      return;
+   }
+
+   egl_image_target_texture(ctx, texObj, target, image, false, func);
+}
+
+static void
+egl_image_target_texture_storage(struct gl_context *ctx,
+                                 struct gl_texture_object *texObj, GLenum target,
+                                 GLeglImageOES image, const GLint *attrib_list,
+                                 const char *caller)
+{
+   /*
+    * EXT_EGL_image_storage:
+    *
+    * "<attrib_list> must be NULL or a pointer to the value GL_NONE."
+    */
+   if (attrib_list && attrib_list[0] != GL_NONE) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "%s(image=%p)", caller, image);
+      return;
+   }
+
+   switch (target) {
+   case GL_TEXTURE_2D:
+   case GL_TEXTURE_EXTERNAL_OES:
+      break;
+   default:
+    /*
+     * The EXT_EGL_image_storage spec allows for many other targets besides
+     * GL_TEXTURE_2D and GL_TEXTURE_EXTERNAL_OES, however these are complicated
+     * to implement.
+     */
+     _mesa_error(ctx, GL_INVALID_OPERATION, "%s(unsupported target=%d)",
+                 caller, target);
+     return;
+   }
+
+   egl_image_target_texture(ctx, texObj, target, image, true, caller);
+}
+
+
+void GLAPIENTRY
+_mesa_EGLImageTargetTexStorageEXT(GLenum target, GLeglImageOES image,
+                                  const GLint *attrib_list)
+{
+   struct gl_texture_object *texObj;
+   const char *func = "glEGLImageTargetTexStorageEXT";
+   GET_CURRENT_CONTEXT(ctx);
+
+   texObj = _mesa_get_current_tex_object(ctx, target);
+   if (!texObj) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "%s(target=%d)", func, target);
+      return;
+   }
+
+   egl_image_target_texture_storage(ctx, texObj, target, image, attrib_list,
+                                    func);
+}
+
+void GLAPIENTRY
+_mesa_EGLImageTargetTextureStorageEXT(GLuint texture, GLeglImageOES image,
+                                      const GLint *attrib_list)
+{
+   struct gl_texture_object *texObj;
+   const char *func = "glEGLImageTargetTextureStorageEXT";
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (!(_mesa_is_desktop_gl(ctx) && ctx->Version >= 45) &&
+       !_mesa_has_ARB_direct_state_access(ctx)) {
+      _mesa_error(ctx, GL_INVALID_OPERATION, "direct access not supported");
+      return;
+   }
+
+   texObj = _mesa_lookup_texture_err(ctx, texture, func);
+   if (!texObj)
+      return;
+
+   egl_image_target_texture_storage(ctx, texObj, texObj->Target, image,
+                                    attrib_list, func);
+}
 
 /**
  * Helper that implements the glTexSubImage1/2/3D()
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index 266a9f3d83d..55c0ff87a48 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -299,6 +299,13 @@ _mesa_TexImage3D_no_error(GLenum target, GLint level, GLint internalformat,
 extern void GLAPIENTRY
 _mesa_EGLImageTargetTexture2DOES( GLenum target, GLeglImageOES image );
 
+extern void GLAPIENTRY
+_mesa_EGLImageTargetTexStorageEXT(GLenum target, GLeglImageOES image,
+                                  const GLint *attrib_list);
+extern void GLAPIENTRY
+_mesa_EGLImageTargetTextureStorageEXT(GLuint texture, GLeglImageOES image,
+                                      const GLint *attrib_list);
+
 void GLAPIENTRY
 _mesa_TexSubImage1D_no_error(GLenum target, GLint level, GLint xoffset,
                              GLsizei width,
-- 
2.24.1

