Enable these kind of 3D texture when proper extensions are available.
Fixes KHR-GLES2.texture_3d.* with these textures.
v2: add better clarification (Eric)
---
src/mesa/main/teximage.c | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index e5f8bb0718f..56235898c66 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -1487,6 +1487,9 @@ _mesa_target_can_be_compressed(const struct gl_context
*ctx, GLenum target,
break;
case GL_TEXTURE_3D:
switch (layout) {
+ case MESA_FORMAT_LAYOUT_ETC1:
+ target_can_be_compresed =
ctx->Extensions.OES_compressed_ETC1_RGB8_texture;
+ break;
case MESA_FORMAT_LAYOUT_ETC2:
/* See ETC2/EAC comment in case GL_TEXTURE_CUBE_MAP_ARRAY. */
if (_mesa_is_gles3(ctx))
@@ -4648,10 +4651,12 @@ out:
*/
static GLboolean
compressed_subtexture_target_check(struct gl_context *ctx, GLenum target,
- GLint dims, GLenum format, bool dsa,
+ GLint dims, GLenum intFormat, bool dsa,
const char *caller)
{
GLboolean targetOK;
+ mesa_format format;
+ enum mesa_format_layout layout;
if (dsa && target == GL_TEXTURE_RECTANGLE) {
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(invalid target %s)", caller,
@@ -4712,21 +4717,33 @@ compressed_subtexture_target_check(struct gl_context
*ctx, GLenum target,
* which is (at this time) only bptc. Otherwise we'd say s3tc (and
* more) are valid here, which they are not, but of course not
* mentioned by core spec.
+ *
+ * Besides that, the OES_texture_3d spec doesn't specify any list of
+ * supported formats for CompressedTex*Image3D functions, and
+ * OES_texture_compressed_ETC1_RGB8_texture mentions only 2D for a
+ * function supporting it. However, given a KHR conformance test
+ * expects that the two work together in the obvious way, follow the
+ * tests instead of the specs.
*/
- switch (format) {
+ format = _mesa_glenum_to_compressed_format(intFormat);
+ layout = _mesa_get_format_layout(format);
+ switch (layout) {
/* These are the only 3D compression formats supported at this time */
- case GL_COMPRESSED_RGBA_BPTC_UNORM:
- case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:
- case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:
- case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
+ case MESA_FORMAT_LAYOUT_BPTC:
/* valid format */
break;
+ case MESA_FORMAT_LAYOUT_ASTC:
+ targetOK = ctx->Extensions.KHR_texture_compression_astc_ldr;
+ break;
+ case MESA_FORMAT_LAYOUT_ETC1:
+ targetOK = ctx->Extensions.OES_compressed_ETC1_RGB8_texture;
+ break;
default:
/* invalid format */
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(invalid target %s for format %s)", caller,
_mesa_enum_to_string(target),
- _mesa_enum_to_string(format));
+ _mesa_enum_to_string(intFormat));
return GL_TRUE;
}
break;
--
2.14.3
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev