<div dir="ltr">From: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br><div class="gmail_quote">
<br>
A prior, literal reading of the ASTC spec led to the prohibition<br>
of some compressed formats being used against the targets:<br>
TEXTURE_CUBE_MAP_ARRAY and TEXTURE_3D. Since the spec does not specify<br>
interactions with other extensions for specific compressed textures,<br>
remove such interactions.<br>
<br>
Fixes the following Piglit tests on Gen9:<br>
piglit.spec.arb_direct_state_access.getcompressedtextureimage<br>
piglit.spec.arb_get_texture_sub_image.arb_get_texture_sub_image-getcompressed<br>
piglit.spec.arb_texture_cube_map_array.fbo-generatemipmap-cubemap array s3tc_dxt1<br>
piglit.spec.ext_texture_compression_s3tc.getteximage-targets cube_array s3tc<br>
<br>
v2. Don't interact with other specific compressed formats (Ian).<br>
<br>
Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=91927" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=91927</a><br>
Suggested-by: Neil Roberts <<a href="mailto:neil@linux.intel.com">neil@linux.intel.com</a>><br>
Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
---<br>
<br>
</div><div class="gmail_quote">This patch received an Rb here: <a href="http://lists.freedesktop.org/archives/mesa-dev/2015-November/101066.html">http://lists.freedesktop.org/archives/mesa-dev/2015-November/101066.html</a><br></div><div class="gmail_quote">
<br>
 src/mesa/main/teximage.c | 43 +++++++++++++++----------------------------<br>
 1 file changed, 15 insertions(+), 28 deletions(-)<br>
<br>
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c<br>
index d9453e3..ac7599f 100644<br>
--- a/src/mesa/main/teximage.c<br>
+++ b/src/mesa/main/teximage.c<br>
@@ -1333,21 +1333,6 @@ _mesa_target_can_be_compressed(const struct gl_context *ctx, GLenum target,<br>
       break;<br>
    case GL_PROXY_TEXTURE_CUBE_MAP_ARRAY:<br>
    case GL_TEXTURE_CUBE_MAP_ARRAY:<br>
-      /* From section 3.8.6, page 146 of OpenGL ES 3.0 spec:<br>
-       *<br>
-       *    "The ETC2/EAC texture compression algorithm supports only<br>
-       *     two-dimensional images. If internalformat is an ETC2/EAC format,<br>
-       *     glCompressedTexImage3D will generate an INVALID_OPERATION error if<br>
-       *     target is not TEXTURE_2D_ARRAY."<br>
-       *<br>
-       * This should also be applicable for glTexStorage3D(). Other available<br>
-       * targets for these functions are: TEXTURE_3D and TEXTURE_CUBE_MAP_ARRAY.<br>
-       */<br>
-      if (layout == MESA_FORMAT_LAYOUT_ETC2 && _mesa_is_gles3(ctx))<br>
-            return write_error(error, GL_INVALID_OPERATION);<br>
-<br>
-      target_can_be_compresed = ctx->Extensions.ARB_texture_cube_map_array;<br>
-<br>
       /* From the KHR_texture_compression_astc_hdr spec:<br>
        *<br>
        *     Add a second new column "3D Tex." which is empty for all non-ASTC<br>
@@ -1368,16 +1353,24 @@ _mesa_target_can_be_compressed(const struct gl_context *ctx, GLenum target,<br>
        *      8.19 is *not* checked'<br>
        *<br>
        * The instances of <internalformat> above should say <target>.<br>
+       *<br>
+       * ETC2/EAC formats are the only alternative in GLES and thus such errors<br>
+       * have already been handled by normal ETC2/EAC behavior.<br>
        */<br>
<br>
-      /* Throw an INVALID_OPERATION error if the target is<br>
-       * TEXTURE_CUBE_MAP_ARRAY and the format is not ASTC.<br>
+      /* From section 3.8.6, page 146 of OpenGL ES 3.0 spec:<br>
+       *<br>
+       *    "The ETC2/EAC texture compression algorithm supports only<br>
+       *     two-dimensional images. If internalformat is an ETC2/EAC format,<br>
+       *     glCompressedTexImage3D will generate an INVALID_OPERATION error if<br>
+       *     target is not TEXTURE_2D_ARRAY."<br>
+       *<br>
+       * This should also be applicable for glTexStorage3D(). Other available<br>
+       * targets for these functions are: TEXTURE_3D and TEXTURE_CUBE_MAP_ARRAY.<br>
        */<br>
-      if (target_can_be_compresed &&<br>
-          ctx->Extensions.KHR_texture_compression_astc_ldr &&<br>
-          layout != MESA_FORMAT_LAYOUT_ASTC)<br>
-         return write_error(error, GL_INVALID_OPERATION);<br>
-<br>
+      if (layout == MESA_FORMAT_LAYOUT_ETC2 && _mesa_is_gles3(ctx))<br>
+            return write_error(error, GL_INVALID_OPERATION);<br>
+      target_can_be_compresed = ctx->Extensions.ARB_texture_cube_map_array;<br>
       break;<br>
    case GL_TEXTURE_3D:<br>
       switch (layout) {<br>
@@ -1401,12 +1394,6 @@ _mesa_target_can_be_compressed(const struct gl_context *ctx, GLenum target,<br>
             return write_error(error, GL_INVALID_OPERATION);<br>
          break;<br>
       default:<br>
-         /* Throw an INVALID_OPERATION error if the target is TEXTURE_3D and<br>
-          * the format is not ASTC.<br>
-          * See comment in switch case GL_TEXTURE_CUBE_MAP_ARRAY for more info.<br>
-          */<br>
-         if (ctx->Extensions.KHR_texture_compression_astc_ldr)<br>
-            return write_error(error, GL_INVALID_OPERATION);<br>
          break;<br>
       }<br>
    default:<br>
<span class=""><font color="#888888">--<br>
2.6.2<br>
<br>
</font></span></div><br></div>