[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