mesa: Add ARB_direct_state_access checks in texture functions
Signed-off-by: Fredrik Höglund <fredrik@kde.org> Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
@@ -158,6 +158,13 @@ _mesa_GenerateTextureMipmap(GLuint texture)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGenerateTextureMipmap(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture, "glGenerateTextureMipmap");
|
||||
if (!texObj)
|
||||
return;
|
||||
|
||||
@@ -1108,6 +1108,13 @@ _mesa_GetTextureImage(GLuint texture, GLint level, GLenum format,
|
||||
GLenum err;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetTextureImage(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* This has been moved here because a format/type mismatch can cause a NULL
|
||||
* texImage object, which in turn causes the mismatch error to be
|
||||
@@ -1344,6 +1351,13 @@ _mesa_GetCompressedTextureImage(GLuint texture, GLint level,
|
||||
GLint image_stride;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetCompressedTextureImage(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glGetCompressedTextureImage");
|
||||
if (!texObj)
|
||||
|
||||
@@ -3624,6 +3624,13 @@ texturesubimage(struct gl_context *ctx, GLuint dims,
|
||||
_mesa_lookup_enum_by_nr(format),
|
||||
_mesa_lookup_enum_by_nr(type), pixels);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureSubImage%uD(GL_ARB_direct_state_access "
|
||||
"is not supported)", dims);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get the texture object by Name. */
|
||||
texObj = _mesa_lookup_texture(ctx, texture);
|
||||
if (!texObj) {
|
||||
@@ -4183,6 +4190,12 @@ _mesa_CopyTextureSubImage1D(GLuint texture, GLint level,
|
||||
const char *self = "glCopyTextureSubImage1D";
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(GL_ARB_direct_state_access is not supported)", self);
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture, self);
|
||||
if (!texObj)
|
||||
return;
|
||||
@@ -4207,6 +4220,12 @@ _mesa_CopyTextureSubImage2D(GLuint texture, GLint level,
|
||||
const char *self = "glCopyTextureSubImage2D";
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(GL_ARB_direct_state_access is not supported)", self);
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture, self);
|
||||
if (!texObj)
|
||||
return;
|
||||
@@ -4234,6 +4253,12 @@ _mesa_CopyTextureSubImage3D(GLuint texture, GLint level,
|
||||
const char *self = "glCopyTextureSubImage3D";
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(GL_ARB_direct_state_access is not supported)", self);
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture, self);
|
||||
if (!texObj)
|
||||
return;
|
||||
@@ -4829,6 +4854,13 @@ _mesa_CompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset,
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCompressedTextureSubImage1D(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glCompressedTextureSubImage1D");
|
||||
if (!texObj)
|
||||
@@ -4907,6 +4939,13 @@ _mesa_CompressedTextureSubImage2D(GLuint texture, GLint level, GLint xoffset,
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCompressedTextureSubImage2D(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glCompressedTextureSubImage2D");
|
||||
if (!texObj)
|
||||
@@ -4985,6 +5024,13 @@ _mesa_CompressedTextureSubImage3D(GLuint texture, GLint level, GLint xoffset,
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCompressedTextureSubImage3D(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glCompressedTextureSubImage3D");
|
||||
if (!texObj)
|
||||
@@ -5469,6 +5515,13 @@ _mesa_TextureBuffer(GLuint texture, GLenum internalFormat, GLuint buffer)
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureBuffer(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (buffer) {
|
||||
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glTextureBuffer");
|
||||
if (!bufObj)
|
||||
@@ -5497,6 +5550,13 @@ _mesa_TextureBufferRange(GLuint texture, GLenum internalFormat, GLuint buffer,
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureBufferRange(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (buffer) {
|
||||
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
|
||||
"glTextureBufferRange");
|
||||
@@ -5801,6 +5861,13 @@ _mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples,
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureStorage2DMultisample(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glTextureStorage2DMultisample");
|
||||
if (!texObj)
|
||||
@@ -5821,6 +5888,13 @@ _mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples,
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureStorage3DMultisample(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get the texture object by Name. */
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glTextureStorage3DMultisample");
|
||||
|
||||
@@ -1317,6 +1317,13 @@ _mesa_CreateTextures(GLenum target, GLsizei n, GLuint *textures)
|
||||
GLint targetIndex;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glCreateTextures(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* The 4.5 core profile spec (30.10.2014) doesn't specify what
|
||||
* glCreateTextures should do with invalid targets, which was probably an
|
||||
@@ -1808,6 +1815,13 @@ _mesa_BindTextureUnit(GLuint unit, GLuint texture)
|
||||
_mesa_debug(ctx, "glBindTextureUnit %s %d\n",
|
||||
_mesa_lookup_enum_by_nr(GL_TEXTURE0+unit), (GLint) texture);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glBindTextureUnit(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Section 8.1 (Texture Objects) of the OpenGL 4.5 core profile spec
|
||||
* (20141030) says:
|
||||
* "When texture is zero, each of the targets enumerated at the
|
||||
|
||||
@@ -1108,6 +1108,13 @@ _mesa_TextureParameterfv(GLuint texture, GLenum pname, const GLfloat *params)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureParameterfv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -1124,6 +1131,13 @@ _mesa_TextureParameterf(GLuint texture, GLenum pname, GLfloat param)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureParameterf(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -1140,6 +1154,13 @@ _mesa_TextureParameteri(GLuint texture, GLenum pname, GLint param)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureParameteri(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -1157,6 +1178,13 @@ _mesa_TextureParameteriv(GLuint texture, GLenum pname,
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureParameteriv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -1174,6 +1202,13 @@ _mesa_TextureParameterIiv(GLuint texture, GLenum pname, const GLint *params)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureParameterIiv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -1191,6 +1226,13 @@ _mesa_TextureParameterIuiv(GLuint texture, GLenum pname, const GLuint *params)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureParameterIuiv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -1650,6 +1692,13 @@ _mesa_GetTextureLevelParameterfv(GLuint texture, GLint level,
|
||||
GLint iparam;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetTextureLevelParameterfv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glGetTextureLevelParameterfv");
|
||||
if (!texObj)
|
||||
@@ -1668,6 +1717,13 @@ _mesa_GetTextureLevelParameteriv(GLuint texture, GLint level,
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetTextureLevelParameteriv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture,
|
||||
"glGetTextureLevelParameteriv");
|
||||
if (!texObj)
|
||||
@@ -2227,6 +2283,13 @@ _mesa_GetTextureParameterfv(GLuint texture, GLenum pname, GLfloat *params)
|
||||
struct gl_texture_object *obj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetTextureParameterfv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
obj = get_texobj_by_name(ctx, texture, GL_TRUE);
|
||||
if (!obj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -2244,6 +2307,13 @@ _mesa_GetTextureParameteriv(GLuint texture, GLenum pname, GLint *params)
|
||||
struct gl_texture_object *obj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetTextureParameteriv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
obj = get_texobj_by_name(ctx, texture, GL_TRUE);
|
||||
if (!obj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -2261,6 +2331,13 @@ _mesa_GetTextureParameterIiv(GLuint texture, GLenum pname, GLint *params)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetTextureParameterIiv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_TRUE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
@@ -2279,6 +2356,13 @@ _mesa_GetTextureParameterIuiv(GLuint texture, GLenum pname, GLuint *params)
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGetTextureParameterIuiv(GL_ARB_direct_state_access "
|
||||
"is not supported)");
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = get_texobj_by_name(ctx, texture, GL_TRUE);
|
||||
if (!texObj) {
|
||||
/* User passed a non-generated name. */
|
||||
|
||||
@@ -507,6 +507,13 @@ texturestorage(GLuint dims, GLuint texture, GLsizei levels,
|
||||
_mesa_lookup_enum_by_nr(internalformat),
|
||||
width, height, depth);
|
||||
|
||||
if (!ctx->Extensions.ARB_direct_state_access) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTextureStorage%uD(GL_ARB_direct_state_access "
|
||||
"is not supported)", dims);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check the format to make sure it is sized. */
|
||||
if (!_mesa_is_legal_tex_storage_format(ctx, internalformat)) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
|
||||
Reference in New Issue
Block a user