[Mesa-dev] [PATCH 48/57] mesa: Add ARB_direct_state_access checks in texture functions

Fredrik Höglund fredrik at kde.org
Mon May 11 10:27:14 PDT 2015


Signed-off-by: Fredrik Höglund <fredrik at kde.org>
---
 src/mesa/main/genmipmap.c   |  7 ++++
 src/mesa/main/texgetimage.c | 14 ++++++++
 src/mesa/main/teximage.c    | 74 +++++++++++++++++++++++++++++++++++++++
 src/mesa/main/texobj.c      | 14 ++++++++
 src/mesa/main/texparam.c    | 84 +++++++++++++++++++++++++++++++++++++++++++++
 src/mesa/main/texstorage.c  |  7 ++++
 6 files changed, 200 insertions(+)

diff --git a/src/mesa/main/genmipmap.c b/src/mesa/main/genmipmap.c
index 9aef090..32b9460 100644
--- a/src/mesa/main/genmipmap.c
+++ b/src/mesa/main/genmipmap.c
@@ -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;
diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
index 92b4d67..f582a7f 100644
--- a/src/mesa/main/texgetimage.c
+++ b/src/mesa/main/texgetimage.c
@@ -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)
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 7bc1da7..7616fd7 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -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");
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index c563f1e..d51e695 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -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
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
index d74134f..1fa5830 100644
--- a/src/mesa/main/texparam.c
+++ b/src/mesa/main/texparam.c
@@ -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. */
diff --git a/src/mesa/main/texstorage.c b/src/mesa/main/texstorage.c
index 53cb2c0..dee74a8 100644
--- a/src/mesa/main/texstorage.c
+++ b/src/mesa/main/texstorage.c
@@ -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,
-- 
2.1.4



More information about the mesa-dev mailing list