[Mesa-dev] [PATCH v2] mesa: enable ARB_direct_state_access in compat for GL3.1+

Timothy Arceri tarceri at itsqueeze.com
Wed Aug 29 02:40:12 UTC 2018


We could enable it for lower versions of GL but this allows us
to just use the existing version/extension checks that are already
used by the core profile.

v2: fix potential crash in no error path
---
 src/mapi/glapi/gen/apiexec.py    | 194 +++++++++++++++----------------
 src/mesa/main/arrayobj.c         |   9 ++
 src/mesa/main/extensions_table.h |   2 +-
 src/mesa/main/fbobject.c         |  13 ++-
 4 files changed, 114 insertions(+), 104 deletions(-)

diff --git a/src/mapi/glapi/gen/apiexec.py b/src/mapi/glapi/gen/apiexec.py
index b163d88549b..e2fc124be22 100644
--- a/src/mapi/glapi/gen/apiexec.py
+++ b/src/mapi/glapi/gen/apiexec.py
@@ -152,103 +152,103 @@ functions = {
 
     # OpenGL 4.5 / GL_ARB_direct_state_access.   Mesa can expose the extension
     # with core profile.
-    "CreateTransformFeedbacks": exec_info(compatibility=45, core=31),
-    "TransformFeedbackBufferBase": exec_info(compatibility=45, core=31),
-    "TransformFeedbackBufferRange": exec_info(compatibility=45, core=31),
-    "GetTransformFeedbackiv": exec_info(compatibility=45, core=31),
-    "GetTransformFeedbacki_v": exec_info(compatibility=45, core=31),
-    "GetTransformFeedbacki64_v": exec_info(compatibility=45, core=31),
-    "CreateBuffers": exec_info(compatibility=45, core=31),
-    "NamedBufferStorage": exec_info(compatibility=45, core=31),
-    "NamedBufferData": exec_info(compatibility=45, core=31),
-    "NamedBufferSubData": exec_info(compatibility=45, core=31),
-    "CopyNamedBufferSubData": exec_info(compatibility=45, core=31),
-    "ClearNamedBufferData": exec_info(compatibility=45, core=31),
-    "ClearNamedBufferSubData": exec_info(compatibility=45, core=31),
-    "MapNamedBuffer": exec_info(compatibility=45, core=31),
-    "MapNamedBufferRange": exec_info(compatibility=45, core=31),
-    "UnmapNamedBuffer": exec_info(compatibility=45, core=31),
-    "FlushMappedNamedBufferRange": exec_info(compatibility=45, core=31),
-    "GetNamedBufferParameteriv": exec_info(compatibility=45, core=31),
-    "GetNamedBufferParameteri64v": exec_info(compatibility=45, core=31),
-    "GetNamedBufferPointerv": exec_info(compatibility=45, core=31),
-    "GetNamedBufferSubData": exec_info(compatibility=45, core=31),
-    "CreateFramebuffers": exec_info(compatibility=45, core=31),
-    "NamedFramebufferRenderbuffer": exec_info(compatibility=45, core=31),
-    "NamedFramebufferParameteri": exec_info(compatibility=45, core=31),
-    "NamedFramebufferTexture": exec_info(compatibility=45, core=31),
-    "NamedFramebufferTextureLayer": exec_info(compatibility=45, core=31),
-    "NamedFramebufferDrawBuffer": exec_info(compatibility=45, core=31),
-    "NamedFramebufferDrawBuffers": exec_info(compatibility=45, core=31),
-    "NamedFramebufferReadBuffer": exec_info(compatibility=45, core=31),
-    "InvalidateNamedFramebufferData": exec_info(compatibility=45, core=31),
-    "InvalidateNamedFramebufferSubData": exec_info(compatibility=45, core=31),
-    "ClearNamedFramebufferiv": exec_info(compatibility=45, core=31),
-    "ClearNamedFramebufferuiv": exec_info(compatibility=45, core=31),
-    "ClearNamedFramebufferfv": exec_info(compatibility=45, core=31),
-    "ClearNamedFramebufferfi": exec_info(compatibility=45, core=31),
-    "BlitNamedFramebuffer": exec_info(compatibility=45, core=31),
-    "CheckNamedFramebufferStatus": exec_info(compatibility=45, core=31),
-    "GetNamedFramebufferParameteriv": exec_info(compatibility=45, core=31),
-    "GetNamedFramebufferAttachmentParameteriv": exec_info(compatibility=45, core=31),
-    "CreateRenderbuffers": exec_info(compatibility=45, core=31),
-    "NamedRenderbufferStorage": exec_info(compatibility=45, core=31),
-    "NamedRenderbufferStorageMultisample": exec_info(compatibility=45, core=31),
-    "GetNamedRenderbufferParameteriv": exec_info(compatibility=45, core=31),
-    "CreateTextures": exec_info(compatibility=45, core=31),
-    "TextureBuffer": exec_info(compatibility=45, core=31),
-    "TextureBufferRange": exec_info(compatibility=45, core=31),
-    "TextureStorage1D": exec_info(compatibility=45, core=31),
-    "TextureStorage2D": exec_info(compatibility=45, core=31),
-    "TextureStorage3D": exec_info(compatibility=45, core=31),
-    "TextureStorage2DMultisample": exec_info(compatibility=45, core=31),
-    "TextureStorage3DMultisample": exec_info(compatibility=45, core=31),
-    "TextureSubImage1D": exec_info(compatibility=45, core=31),
-    "TextureSubImage2D": exec_info(compatibility=45, core=31),
-    "TextureSubImage3D": exec_info(compatibility=45, core=31),
-    "CompressedTextureSubImage1D": exec_info(compatibility=45, core=31),
-    "CompressedTextureSubImage2D": exec_info(compatibility=45, core=31),
-    "CompressedTextureSubImage3D": exec_info(compatibility=45, core=31),
-    "CopyTextureSubImage1D": exec_info(compatibility=45, core=31),
-    "CopyTextureSubImage2D": exec_info(compatibility=45, core=31),
-    "CopyTextureSubImage3D": exec_info(compatibility=45, core=31),
-    "TextureParameterf": exec_info(compatibility=45, core=31),
-    "TextureParameterfv": exec_info(compatibility=45, core=31),
-    "TextureParameteri": exec_info(compatibility=45, core=31),
-    "TextureParameterIiv": exec_info(compatibility=45, core=31),
-    "TextureParameterIuiv": exec_info(compatibility=45, core=31),
-    "TextureParameteriv": exec_info(compatibility=45, core=31),
-    "GenerateTextureMipmap": exec_info(compatibility=45, core=31),
-    "BindTextureUnit": exec_info(compatibility=45, core=31),
-    "GetTextureImage": exec_info(compatibility=45, core=31),
-    "GetCompressedTextureImage": exec_info(compatibility=45, core=31),
-    "GetTextureLevelParameterfv": exec_info(compatibility=45, core=31),
-    "GetTextureLevelParameteriv": exec_info(compatibility=45, core=31),
-    "GetTextureParameterfv": exec_info(compatibility=45, core=31),
-    "GetTextureParameterIiv": exec_info(compatibility=45, core=31),
-    "GetTextureParameterIuiv": exec_info(compatibility=45, core=31),
-    "GetTextureParameteriv": exec_info(compatibility=45, core=31),
-    "CreateVertexArrays": exec_info(compatibility=45, core=31),
-    "DisableVertexArrayAttrib": exec_info(compatibility=45, core=31),
-    "EnableVertexArrayAttrib": exec_info(compatibility=45, core=31),
-    "VertexArrayElementBuffer": exec_info(compatibility=45, core=31),
-    "VertexArrayVertexBuffer": exec_info(compatibility=45, core=31),
-    "VertexArrayVertexBuffers": exec_info(compatibility=45, core=31),
-    "VertexArrayAttribFormat": exec_info(compatibility=45, core=31),
-    "VertexArrayAttribIFormat": exec_info(compatibility=45, core=31),
-    "VertexArrayAttribLFormat": exec_info(compatibility=45, core=31),
-    "VertexArrayAttribBinding": exec_info(compatibility=45, core=31),
-    "VertexArrayBindingDivisor": exec_info(compatibility=45, core=31),
-    "GetVertexArrayiv": exec_info(compatibility=45, core=31),
-    "GetVertexArrayIndexediv": exec_info(compatibility=45, core=31),
-    "GetVertexArrayIndexed64iv": exec_info(compatibility=45, core=31),
-    "CreateSamplers": exec_info(compatibility=45, core=31),
-    "CreateProgramPipelines": exec_info(compatibility=45, core=31),
-    "CreateQueries": exec_info(compatibility=45, core=31),
-    "GetQueryBufferObjectiv": exec_info(compatibility=45, core=31),
-    "GetQueryBufferObjectuiv": exec_info(compatibility=45, core=31),
-    "GetQueryBufferObjecti64v": exec_info(compatibility=45, core=31),
-    "GetQueryBufferObjectui64v": exec_info(compatibility=45, core=31),
+    "CreateTransformFeedbacks": exec_info(compatibility=31, core=31),
+    "TransformFeedbackBufferBase": exec_info(compatibility=31, core=31),
+    "TransformFeedbackBufferRange": exec_info(compatibility=31, core=31),
+    "GetTransformFeedbackiv": exec_info(compatibility=31, core=31),
+    "GetTransformFeedbacki_v": exec_info(compatibility=31, core=31),
+    "GetTransformFeedbacki64_v": exec_info(compatibility=31, core=31),
+    "CreateBuffers": exec_info(compatibility=31, core=31),
+    "NamedBufferStorage": exec_info(compatibility=31, core=31),
+    "NamedBufferData": exec_info(compatibility=31, core=31),
+    "NamedBufferSubData": exec_info(compatibility=31, core=31),
+    "CopyNamedBufferSubData": exec_info(compatibility=31, core=31),
+    "ClearNamedBufferData": exec_info(compatibility=31, core=31),
+    "ClearNamedBufferSubData": exec_info(compatibility=31, core=31),
+    "MapNamedBuffer": exec_info(compatibility=31, core=31),
+    "MapNamedBufferRange": exec_info(compatibility=31, core=31),
+    "UnmapNamedBuffer": exec_info(compatibility=31, core=31),
+    "FlushMappedNamedBufferRange": exec_info(compatibility=31, core=31),
+    "GetNamedBufferParameteriv": exec_info(compatibility=31, core=31),
+    "GetNamedBufferParameteri64v": exec_info(compatibility=31, core=31),
+    "GetNamedBufferPointerv": exec_info(compatibility=31, core=31),
+    "GetNamedBufferSubData": exec_info(compatibility=31, core=31),
+    "CreateFramebuffers": exec_info(compatibility=31, core=31),
+    "NamedFramebufferRenderbuffer": exec_info(compatibility=31, core=31),
+    "NamedFramebufferParameteri": exec_info(compatibility=31, core=31),
+    "NamedFramebufferTexture": exec_info(compatibility=31, core=31),
+    "NamedFramebufferTextureLayer": exec_info(compatibility=31, core=31),
+    "NamedFramebufferDrawBuffer": exec_info(compatibility=31, core=31),
+    "NamedFramebufferDrawBuffers": exec_info(compatibility=31, core=31),
+    "NamedFramebufferReadBuffer": exec_info(compatibility=31, core=31),
+    "InvalidateNamedFramebufferData": exec_info(compatibility=31, core=31),
+    "InvalidateNamedFramebufferSubData": exec_info(compatibility=31, core=31),
+    "ClearNamedFramebufferiv": exec_info(compatibility=31, core=31),
+    "ClearNamedFramebufferuiv": exec_info(compatibility=31, core=31),
+    "ClearNamedFramebufferfv": exec_info(compatibility=31, core=31),
+    "ClearNamedFramebufferfi": exec_info(compatibility=31, core=31),
+    "BlitNamedFramebuffer": exec_info(compatibility=31, core=31),
+    "CheckNamedFramebufferStatus": exec_info(compatibility=31, core=31),
+    "GetNamedFramebufferParameteriv": exec_info(compatibility=31, core=31),
+    "GetNamedFramebufferAttachmentParameteriv": exec_info(compatibility=31, core=31),
+    "CreateRenderbuffers": exec_info(compatibility=31, core=31),
+    "NamedRenderbufferStorage": exec_info(compatibility=31, core=31),
+    "NamedRenderbufferStorageMultisample": exec_info(compatibility=31, core=31),
+    "GetNamedRenderbufferParameteriv": exec_info(compatibility=31, core=31),
+    "CreateTextures": exec_info(compatibility=31, core=31),
+    "TextureBuffer": exec_info(compatibility=31, core=31),
+    "TextureBufferRange": exec_info(compatibility=31, core=31),
+    "TextureStorage1D": exec_info(compatibility=31, core=31),
+    "TextureStorage2D": exec_info(compatibility=31, core=31),
+    "TextureStorage3D": exec_info(compatibility=31, core=31),
+    "TextureStorage2DMultisample": exec_info(compatibility=31, core=31),
+    "TextureStorage3DMultisample": exec_info(compatibility=31, core=31),
+    "TextureSubImage1D": exec_info(compatibility=31, core=31),
+    "TextureSubImage2D": exec_info(compatibility=31, core=31),
+    "TextureSubImage3D": exec_info(compatibility=31, core=31),
+    "CompressedTextureSubImage1D": exec_info(compatibility=31, core=31),
+    "CompressedTextureSubImage2D": exec_info(compatibility=31, core=31),
+    "CompressedTextureSubImage3D": exec_info(compatibility=31, core=31),
+    "CopyTextureSubImage1D": exec_info(compatibility=31, core=31),
+    "CopyTextureSubImage2D": exec_info(compatibility=31, core=31),
+    "CopyTextureSubImage3D": exec_info(compatibility=31, core=31),
+    "TextureParameterf": exec_info(compatibility=31, core=31),
+    "TextureParameterfv": exec_info(compatibility=31, core=31),
+    "TextureParameteri": exec_info(compatibility=31, core=31),
+    "TextureParameterIiv": exec_info(compatibility=31, core=31),
+    "TextureParameterIuiv": exec_info(compatibility=31, core=31),
+    "TextureParameteriv": exec_info(compatibility=31, core=31),
+    "GenerateTextureMipmap": exec_info(compatibility=31, core=31),
+    "BindTextureUnit": exec_info(compatibility=31, core=31),
+    "GetTextureImage": exec_info(compatibility=31, core=31),
+    "GetCompressedTextureImage": exec_info(compatibility=31, core=31),
+    "GetTextureLevelParameterfv": exec_info(compatibility=31, core=31),
+    "GetTextureLevelParameteriv": exec_info(compatibility=31, core=31),
+    "GetTextureParameterfv": exec_info(compatibility=31, core=31),
+    "GetTextureParameterIiv": exec_info(compatibility=31, core=31),
+    "GetTextureParameterIuiv": exec_info(compatibility=31, core=31),
+    "GetTextureParameteriv": exec_info(compatibility=31, core=31),
+    "CreateVertexArrays": exec_info(compatibility=31, core=31),
+    "DisableVertexArrayAttrib": exec_info(compatibility=31, core=31),
+    "EnableVertexArrayAttrib": exec_info(compatibility=31, core=31),
+    "VertexArrayElementBuffer": exec_info(compatibility=31, core=31),
+    "VertexArrayVertexBuffer": exec_info(compatibility=31, core=31),
+    "VertexArrayVertexBuffers": exec_info(compatibility=31, core=31),
+    "VertexArrayAttribFormat": exec_info(compatibility=31, core=31),
+    "VertexArrayAttribIFormat": exec_info(compatibility=31, core=31),
+    "VertexArrayAttribLFormat": exec_info(compatibility=31, core=31),
+    "VertexArrayAttribBinding": exec_info(compatibility=31, core=31),
+    "VertexArrayBindingDivisor": exec_info(compatibility=31, core=31),
+    "GetVertexArrayiv": exec_info(compatibility=31, core=31),
+    "GetVertexArrayIndexediv": exec_info(compatibility=31, core=31),
+    "GetVertexArrayIndexed64iv": exec_info(compatibility=31, core=31),
+    "CreateSamplers": exec_info(compatibility=31, core=31),
+    "CreateProgramPipelines": exec_info(compatibility=31, core=31),
+    "CreateQueries": exec_info(compatibility=31, core=31),
+    "GetQueryBufferObjectiv": exec_info(compatibility=31, core=31),
+    "GetQueryBufferObjectuiv": exec_info(compatibility=31, core=31),
+    "GetQueryBufferObjecti64v": exec_info(compatibility=31, core=31),
+    "GetQueryBufferObjectui64v": exec_info(compatibility=31, core=31),
 
     # GL_ARB_gpu_shader_int64 - nominally requires OpenGL 4.0, and Mesa
     # only supports 4.0 in core profile.
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 5ee68cf9e94..a23031fe182 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -196,7 +196,16 @@ _mesa_vao_attribute_map[ATTRIBUTE_MAP_MODE_MAX][VERT_ATTRIB_MAX] =
 struct gl_vertex_array_object *
 _mesa_lookup_vao(struct gl_context *ctx, GLuint id)
 {
+   /* The ARB_direct_state_access specification says:
+    *
+    *    "<vaobj> is [compatibility profile:
+    *     zero, indicating the default vertex array object, or]
+    *     the name of the vertex array object."
+    */
    if (id == 0) {
+      if (ctx->API == API_OPENGL_COMPAT)
+         return ctx->Array.DefaultVAO;
+
       return NULL;
    } else {
       struct gl_vertex_array_object *vao;
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 115af796bcc..8f1bd4929f8 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -58,7 +58,7 @@ EXT(ARB_depth_buffer_float                  , ARB_depth_buffer_float
 EXT(ARB_depth_clamp                         , ARB_depth_clamp                        , GLL, GLC,  x ,  x , 2003)
 EXT(ARB_depth_texture                       , ARB_depth_texture                      , GLL,  x ,  x ,  x , 2001)
 EXT(ARB_derivative_control                  , ARB_derivative_control                 , GLL, GLC,  x ,  x , 2014)
-EXT(ARB_direct_state_access                 , dummy_true                             ,  45, GLC,  x ,  x , 2014)
+EXT(ARB_direct_state_access                 , dummy_true                             ,  31, GLC,  x ,  x , 2014)
 EXT(ARB_draw_buffers                        , dummy_true                             , GLL, GLC,  x ,  x , 2002)
 EXT(ARB_draw_buffers_blend                  , ARB_draw_buffers_blend                 , GLL, GLC,  x ,  x , 2009)
 EXT(ARB_draw_elements_base_vertex           , ARB_draw_elements_base_vertex          , GLL, GLC,  x ,  x , 2009)
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 284990d7d00..51e137dce9b 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -3292,13 +3292,14 @@ check_texture_target(struct gl_context *ctx, GLenum target,
    case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
       return true;
    case GL_TEXTURE_CUBE_MAP:
-      /* We don't need to check the extension (GL_ARB_direct_state_access) or
-       * GL version (4.5) for GL_TEXTURE_CUBE_MAP because DSA is always
-       * enabled in core profile.  This can be called from
-       * _mesa_FramebufferTextureLayer in compatibility profile (OpenGL 3.0),
-       * so we do have to check the profile.
+      /* GL_TEXTURE_CUBE_MAP is only allowed by OpenGL 4.5 here, which
+       * includes the DSA API.
+       *
+       * Because DSA is only enabled for GL 3.1+ and this can be called
+       * from _mesa_FramebufferTextureLayer in compatibility profile,
+       * we need to check the version.
        */
-      return ctx->API == API_OPENGL_CORE;
+      return _mesa_is_desktop_gl(ctx) && ctx->Version >= 31;
    }
 
    _mesa_error(ctx, GL_INVALID_OPERATION,
-- 
2.17.1



More information about the mesa-dev mailing list