summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main')
-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 0a641cf2cad..56ae4150a6f 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;
}