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

Marek Olšák maraeo at gmail.com
Wed Aug 29 15:41:25 UTC 2018


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Tue, Aug 28, 2018 at 10:40 PM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
> 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