summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2018-08-29 12:40:12 +1000
committerTimothy Arceri <[email protected]>2018-08-30 07:57:38 +1000
commit781a78914c798dc64005b37c6ca1224ce06803fc (patch)
tree2d3b6729253201e76750125502feff6370b471ce /src/mesa/main
parent93b8b987d096d53c5451178bdab07af654a95bd1 (diff)
mesa: enable ARB_direct_state_access in compat for GL3.1+
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. Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/arrayobj.c9
-rw-r--r--src/mesa/main/extensions_table.h2
-rw-r--r--src/mesa/main/fbobject.c13
3 files changed, 17 insertions, 7 deletions
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 013756455fd..3c8f126c368 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -59,7 +59,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,