mesa: Add ARB_direct_state_access checks in FBO functions
authorFredrik Höglund <fredrik@kde.org>
Sun, 10 May 2015 18:48:11 +0000 (20:48 +0200)
committerFredrik Höglund <fredrik@kde.org>
Thu, 14 May 2015 13:48:17 +0000 (15:48 +0200)
Signed-off-by: Fredrik Höglund <fredrik@kde.org>
Reviewed-by: Adam Jackson <ajax@redhat.com>
src/mesa/main/blit.c
src/mesa/main/buffers.c
src/mesa/main/clear.c
src/mesa/main/fbobject.c

index db8fee5a414f6a382a85ee4fb20acae106340135..fac97245082246b0bd5739066a1da981abd6c540 100644 (file)
@@ -540,6 +540,13 @@ _mesa_BlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
    GET_CURRENT_CONTEXT(ctx);
    struct gl_framebuffer *readFb, *drawFb;
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glBlitNamedFramebuffer(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    if (MESA_VERBOSE & VERBOSE_API)
       _mesa_debug(ctx,
                   "glBlitNamedFramebuffer(%u %u %d, %d, %d, %d, "
index 0536266d7564ce9222a4dc5bef7e33a97b49dbcf..c83459addf72efa6ef03e75cd46ade7337691874 100644 (file)
@@ -303,6 +303,13 @@ _mesa_NamedFramebufferDrawBuffer(GLuint framebuffer, GLenum buf)
    GET_CURRENT_CONTEXT(ctx);
    struct gl_framebuffer *fb;
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glNamedFramebufferDrawBuffer(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    if (framebuffer) {
       fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
                                         "glNamedFramebufferDrawBuffer");
@@ -513,6 +520,13 @@ _mesa_NamedFramebufferDrawBuffers(GLuint framebuffer, GLsizei n,
    GET_CURRENT_CONTEXT(ctx);
    struct gl_framebuffer *fb;
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glNamedFramebufferDrawBuffers(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    if (framebuffer) {
       fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
                                         "glNamedFramebufferDrawBuffers");
@@ -750,6 +764,13 @@ _mesa_NamedFramebufferReadBuffer(GLuint framebuffer, GLenum src)
    GET_CURRENT_CONTEXT(ctx);
    struct gl_framebuffer *fb;
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glNamedFramebufferReadBuffer(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    if (framebuffer) {
       fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
                                         "glNamedFramebufferReadBuffer");
index 426caea470903dddce970400216862c12fd52d28..c6999f7fdb6ad437c60db4c26fb4f3bf204f69b0 100644 (file)
@@ -412,6 +412,14 @@ _mesa_ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer,
 {
    GLint oldfb;
 
+   GET_CURRENT_CONTEXT(ctx);
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glClearNamedFramebufferiv(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
    _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
    _mesa_ClearBufferiv(buffer, drawbuffer, value);
@@ -502,6 +510,14 @@ _mesa_ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer,
 {
    GLint oldfb;
 
+   GET_CURRENT_CONTEXT(ctx);
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glClearNamedFramebufferuiv(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
    _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
    _mesa_ClearBufferuiv(buffer, drawbuffer, value);
@@ -613,6 +629,14 @@ _mesa_ClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer,
 {
    GLint oldfb;
 
+   GET_CURRENT_CONTEXT(ctx);
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glClearNamedFramebufferfv(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
    _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
    _mesa_ClearBufferfv(buffer, drawbuffer, value);
@@ -695,6 +719,14 @@ _mesa_ClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer,
 {
    GLint oldfb;
 
+   GET_CURRENT_CONTEXT(ctx);
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glClearNamedFramebufferfi(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
    _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
    _mesa_ClearBufferfi(buffer, 0, depth, stencil);
index c2bc081cf1adf9aca12c342b4502e4a51a1150f2..65e194cb74904f64fa2a20d8f342333c42292f9b 100644 (file)
@@ -2454,6 +2454,12 @@ create_framebuffers(GLsizei n, GLuint *framebuffers, bool dsa)
 
    const char *func = dsa ? "glCreateFramebuffers" : "glGenFramebuffers";
 
+   if (dsa && !ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "%s(GL_ARB_direct_state_access is not supported)", func);
+      return;
+   }
+
    if (n < 0) {
       _mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", func);
       return;
@@ -2552,6 +2558,13 @@ _mesa_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target)
    struct gl_framebuffer *fb;
    GET_CURRENT_CONTEXT(ctx);
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glCheckNamedFramebufferStatus(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return 0;
+   }
+
    /* Validate the target (for conformance's sake) and grab a reference to the
     * default framebuffer in case framebuffer = 0.
     * Section 9.4 Framebuffer Completeness of the OpenGL 4.5 core spec
@@ -3097,6 +3110,12 @@ _mesa_NamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment,
 
    const char *func = "glNamedFramebufferTextureLayer";
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "%s(GL_ARB_direct_state_access is not supported)", func);
+      return;
+   }
+
    /* Get the framebuffer object */
    fb = _mesa_lookup_framebuffer_err(ctx, framebuffer, func);
    if (!fb)
@@ -3182,6 +3201,12 @@ _mesa_NamedFramebufferTexture(GLuint framebuffer, GLenum attachment,
 
    const char *func = "glNamedFramebufferTexture";
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "%s(GL_ARB_direct_state_access is not supported)", func);
+      return;
+   }
+
    if (!_mesa_has_geometry_shaders(ctx)) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
                   "unsupported function (glNamedFramebufferTexture) called");
@@ -3307,6 +3332,13 @@ _mesa_NamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment,
    struct gl_renderbuffer *rb;
    GET_CURRENT_CONTEXT(ctx);
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glNamedFramebufferRenderbuffer(GL_ARB_direct_state_access "
+                  "is not supported)");
+      return;
+   }
+
    fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
                                      "glNamedFramebufferRenderbuffer");
 
@@ -3639,6 +3671,13 @@ _mesa_GetNamedFramebufferAttachmentParameteriv(GLuint framebuffer,
    GET_CURRENT_CONTEXT(ctx);
    struct gl_framebuffer *buffer;
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glGetNamedFramebufferAttachmentParameteriv("
+                  "GL_ARB_direct_state_access is not supported)");
+      return;
+   }
+
    if (framebuffer) {
       buffer = _mesa_lookup_framebuffer_err(ctx, framebuffer,
                               "glGetNamedFramebufferAttachmentParameteriv");
@@ -3671,6 +3710,13 @@ _mesa_NamedFramebufferParameteri(GLuint framebuffer, GLenum pname,
    (void) pname;
    (void) param;
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glNamedFramebufferParameteri("
+                  "GL_ARB_direct_state_access is not supported)");
+      return;
+   }
+
    _mesa_error(ctx, GL_INVALID_OPERATION,
                "glNamedFramebufferParameteri not supported "
                "(ARB_framebuffer_no_attachments not implemented)");
@@ -3687,6 +3733,13 @@ _mesa_GetNamedFramebufferParameteriv(GLuint framebuffer, GLenum pname,
    (void) pname;
    (void) param;
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glNamedFramebufferParameteriv("
+                  "GL_ARB_direct_state_access is not supported)");
+      return;
+   }
+
    _mesa_error(ctx, GL_INVALID_OPERATION,
                "glGetNamedFramebufferParameteriv not supported "
                "(ARB_framebuffer_no_attachments not implemented)");
@@ -3855,6 +3908,13 @@ _mesa_InvalidateNamedFramebufferSubData(GLuint framebuffer,
    struct gl_framebuffer *fb;
    GET_CURRENT_CONTEXT(ctx);
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glInvalidateNamedFramebufferSubData("
+                  "GL_ARB_direct_state_access is not supported)");
+      return;
+   }
+
    /* The OpenGL 4.5 core spec (02.02.2015) says (in Section 17.4 Whole
     * Framebuffer Operations, PDF page 522): "If framebuffer is zero, the
     * default draw framebuffer is affected."
@@ -3916,6 +3976,13 @@ _mesa_InvalidateNamedFramebufferData(GLuint framebuffer,
    struct gl_framebuffer *fb;
    GET_CURRENT_CONTEXT(ctx);
 
+   if (!ctx->Extensions.ARB_direct_state_access) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glInvalidateNamedFramebufferData("
+                  "GL_ARB_direct_state_access is not supported)");
+      return;
+   }
+
    /* The OpenGL 4.5 core spec (02.02.2015) says (in Section 17.4 Whole
     * Framebuffer Operations, PDF page 522): "If framebuffer is zero, the
     * default draw framebuffer is affected."