summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/teximage.c
diff options
context:
space:
mode:
authorNanley Chery <nanley.g.chery@intel.com>2015-07-27 16:09:09 -0700
committerNanley Chery <nanley.g.chery@intel.com>2015-08-26 14:36:43 -0700
commit12b519b4571d27a45abd3266f35b126d00dcb926 (patch)
tree889a94fdbfa73dc546560dcdda2772d68e03ecd4 /src/mesa/main/teximage.c
parent23c9cd5a9613ad07bdbe55708a56562ee23f25d5 (diff)
downloadexternal_mesa3d-12b519b4571d27a45abd3266f35b126d00dcb926.zip
external_mesa3d-12b519b4571d27a45abd3266f35b126d00dcb926.tar.gz
external_mesa3d-12b519b4571d27a45abd3266f35b126d00dcb926.tar.bz2
mesa/teximage: accept ASTC formats for 3D texture specification
The ASTC spec was revised as follows: Revision 2, April 28, 2015 - added CompressedTex{Sub,}Image3D to commands accepting ASTC format tokens in the New Tokens section [...]. Support only exists in the HDR submode: Add a second new column "3D Tex." which is empty for all non-ASTC formats. If only the LDR profile is supported by the implementation, this column is also empty for all ASTC formats. If both the LDR and HDR profiles are supported only, this column is checked for all ASTC formats. LDR-only systems should generate an INVALID_OPERATION error when attempting to call CompressedTexImage3D with the TEXTURE_3D target. v2. return the proper error for LDR-only systems. v3. update is_astc_format(). v4. use _mesa_is_astc_format(). v5. place logic in _mesa_target_can_be_compressed. v6. fix issues handling ASTC formats. Reviewed-by: Chad Versace <chad.versace@intel.com> Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Diffstat (limited to 'src/mesa/main/teximage.c')
-rw-r--r--src/mesa/main/teximage.c63
1 files changed, 56 insertions, 7 deletions
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 0a641cf..56ae415 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -1854,19 +1854,68 @@ _mesa_target_can_be_compressed(const struct gl_context *ctx, GLenum target,
return write_error(error, GL_INVALID_OPERATION);
target_can_be_compresed = ctx->Extensions.ARB_texture_cube_map_array;
- break;
- case GL_TEXTURE_3D:
- /* See ETC2/EAC comment in switch case GL_TEXTURE_CUBE_MAP_ARRAY. */
- if (layout == MESA_FORMAT_LAYOUT_ETC2 && _mesa_is_gles3(ctx))
+ /* From the KHR_texture_compression_astc_hdr spec:
+ *
+ * Add a second new column "3D Tex." which is empty for all non-ASTC
+ * formats. If only the LDR profile is supported by the
+ * implementation, this column is also empty for all ASTC formats. If
+ * both the LDR and HDR profiles are supported only, this column is
+ * checked for all ASTC formats.
+ *
+ * Add a third new column "Cube Map Array Tex." which is empty for all
+ * non-ASTC formats, and checked for all ASTC formats.
+ *
+ * and,
+ *
+ * 'An INVALID_OPERATION error is generated by CompressedTexImage3D
+ * if <internalformat> is TEXTURE_CUBE_MAP_ARRAY and the
+ * "Cube Map Array" column of table 8.19 is *not* checked, or if
+ * <internalformat> is TEXTURE_3D and the "3D Tex." column of table
+ * 8.19 is *not* checked'
+ *
+ * The instances of <internalformat> above should say <target>.
+ */
+
+ /* Throw an INVALID_OPERATION error if the target is
+ * TEXTURE_CUBE_MAP_ARRAY and the format is not ASTC.
+ */
+ if (target_can_be_compresed &&
+ ctx->Extensions.KHR_texture_compression_astc_ldr &&
+ layout != MESA_FORMAT_LAYOUT_ASTC)
return write_error(error, GL_INVALID_OPERATION);
- if (layout == MESA_FORMAT_LAYOUT_BPTC) {
+ break;
+ case GL_TEXTURE_3D:
+ switch (layout) {
+ case MESA_FORMAT_LAYOUT_ETC2:
+ /* See ETC2/EAC comment in case GL_TEXTURE_CUBE_MAP_ARRAY. */
+ if (_mesa_is_gles3(ctx))
+ return write_error(error, GL_INVALID_OPERATION);
+ break;
+ case MESA_FORMAT_LAYOUT_BPTC:
target_can_be_compresed = ctx->Extensions.ARB_texture_compression_bptc;
break;
- }
+ case MESA_FORMAT_LAYOUT_ASTC:
+ target_can_be_compresed =
+ ctx->Extensions.KHR_texture_compression_astc_hdr;
- break;
+ /* Throw an INVALID_OPERATION error if the target is TEXTURE_3D and
+ * and the hdr extension is not supported.
+ * See comment in switch case GL_TEXTURE_CUBE_MAP_ARRAY for more info.
+ */
+ if (!target_can_be_compresed)
+ return write_error(error, GL_INVALID_OPERATION);
+ break;
+ default:
+ /* Throw an INVALID_OPERATION error if the target is TEXTURE_3D and
+ * the format is not ASTC.
+ * See comment in switch case GL_TEXTURE_CUBE_MAP_ARRAY for more info.
+ */
+ if (ctx->Extensions.KHR_texture_compression_astc_ldr)
+ return write_error(error, GL_INVALID_OPERATION);
+ break;
+ }
default:
break;
}