[Mesa-dev] [PATCH 46/57] mesa: Add ARB_direct_state_access checks in FBO functions

Fredrik Höglund fredrik at kde.org
Mon May 11 10:27:12 PDT 2015


Signed-off-by: Fredrik Höglund <fredrik at kde.org>
---
 src/mesa/main/blit.c     |  7 +++++
 src/mesa/main/buffers.c  | 21 +++++++++++++++
 src/mesa/main/clear.c    | 32 +++++++++++++++++++++++
 src/mesa/main/fbobject.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 127 insertions(+)

diff --git a/src/mesa/main/blit.c b/src/mesa/main/blit.c
index db8fee5..fac9724 100644
--- a/src/mesa/main/blit.c
+++ b/src/mesa/main/blit.c
@@ -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, "
diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index 0536266..c83459a 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -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");
diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c
index 426caea..c6999f7 100644
--- a/src/mesa/main/clear.c
+++ b/src/mesa/main/clear.c
@@ -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);
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index c2bc081..65e194c 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -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."
-- 
2.1.4



More information about the mesa-dev mailing list