case GL_RED:
if (_mesa_has_rg_textures(ctx))
return GL_NO_ERROR;
+ /* fallthrough */
default:
return GL_INVALID_OPERATION;
}
is_astc_3d_format(internalFormat)))
return GL_RGBA;
- if (!_mesa_has_MESA_ycbcr_texture(ctx)) {
+ if (_mesa_has_MESA_ycbcr_texture(ctx)) {
if (internalFormat == GL_YCBCR_MESA)
return GL_YCBCR_MESA;
}
return GL_INVALID_OPERATION;
break;
case GL_RGBA:
- if (_mesa_has_OES_texture_float(ctx) && internalFormat == format)
- break;
+ if (!_mesa_has_OES_texture_float(ctx) || internalFormat != format)
+ return GL_INVALID_OPERATION;
+ break;
default:
return GL_INVALID_OPERATION;
}
break;
case GL_HALF_FLOAT_OES:
- if (_mesa_has_OES_texture_half_float(ctx) && internalFormat == format)
- break;
+ if (!_mesa_has_OES_texture_half_float(ctx) || internalFormat != format)
+ return GL_INVALID_OPERATION;
+ break;
default:
return GL_INVALID_OPERATION;
}
if (ctx->Version <= 20)
return GL_INVALID_OPERATION;
break;
- case GL_RGB:
- if (_mesa_has_OES_texture_float(ctx) && internalFormat == format)
- break;
case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:
case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
if (!_mesa_has_EXT_texture_compression_bptc(ctx))
return GL_INVALID_OPERATION;
break;
+ case GL_RGB:
+ if (!_mesa_has_OES_texture_float(ctx) || internalFormat != format)
+ return GL_INVALID_OPERATION;
+ break;
default:
return GL_INVALID_OPERATION;
}
return GL_INVALID_OPERATION;
break;
case GL_RG:
- if (_mesa_has_rg_textures(ctx) &&
- _mesa_has_OES_texture_half_float(ctx))
- break;
- /* fallthrough */
+ if (!_mesa_has_rg_textures(ctx) ||
+ !_mesa_has_OES_texture_half_float(ctx))
+ return GL_INVALID_OPERATION;
+ break;
default:
return GL_INVALID_OPERATION;
}
case GL_RG32F:
break;
case GL_RG:
- if (_mesa_has_rg_textures(ctx) &&
- _mesa_has_OES_texture_float(ctx))
- break;
- /* fallthrough */
+ if (!_mesa_has_rg_textures(ctx) ||
+ !_mesa_has_OES_texture_float(ctx))
+ return GL_INVALID_OPERATION;
+ break;
default:
return GL_INVALID_OPERATION;
}
break;
case GL_RG:
case GL_RED:
- if (_mesa_has_rg_textures(ctx) &&
- _mesa_has_OES_texture_half_float(ctx))
- break;
- /* fallthrough */
+ if (!_mesa_has_rg_textures(ctx) ||
+ !_mesa_has_OES_texture_half_float(ctx))
+ return GL_INVALID_OPERATION;
+ break;
default:
return GL_INVALID_OPERATION;
}
case GL_R32F:
break;
case GL_RED:
- if (_mesa_has_rg_textures(ctx) &&
- _mesa_has_OES_texture_float(ctx))
- break;
- /* fallthrough */
+ if (!_mesa_has_rg_textures(ctx) ||
+ !_mesa_has_OES_texture_float(ctx))
+ return GL_INVALID_OPERATION;
+ break;
default:
return GL_INVALID_OPERATION;
}
bool normalized = false, is_float = false, is_signed = false;
int num_channels = 0, type_size = 0;
+ if (format == GL_COLOR_INDEX)
+ return MESA_FORMAT_NONE;
+
/* Extract array format type information from the OpenGL data type */
switch (type) {
case GL_UNSIGNED_BYTE: