aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/features.txt2
-rw-r--r--src/mapi/glapi/gen/ARB_framebuffer_no_attachments.xml12
-rw-r--r--src/mapi/glapi/gen/static_data.py4
-rw-r--r--src/mesa/main/fbobject.c76
-rw-r--r--src/mesa/main/fbobject.h8
-rw-r--r--src/mesa/main/tests/dispatch_sanity.cpp4
6 files changed, 102 insertions, 4 deletions
diff --git a/docs/features.txt b/docs/features.txt
index 9cf76533fc2..9463b17a043 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -378,7 +378,7 @@ GL_EXT_direct_state_access additions from other extensions (complete list):
GL_ARB_bindless_texture DONE
GL_ARB_buffer_storage DONE
GL_ARB_clear_buffer_object not started
- GL_ARB_framebuffer_no_attachments not started
+ GL_ARB_framebuffer_no_attachments DONE
GL_ARB_gpu_shader_fp64 not started
GL_ARB_instanced_arrays not started
GL_ARB_internalformat_query2 DONE
diff --git a/src/mapi/glapi/gen/ARB_framebuffer_no_attachments.xml b/src/mapi/glapi/gen/ARB_framebuffer_no_attachments.xml
index 55ad7642ff5..13c2501702c 100644
--- a/src/mapi/glapi/gen/ARB_framebuffer_no_attachments.xml
+++ b/src/mapi/glapi/gen/ARB_framebuffer_no_attachments.xml
@@ -27,6 +27,18 @@
<param name="params" type="GLint *" output="true" />
</function>
+ <function name="NamedFramebufferParameteriEXT">
+ <param name="framebuffer" type="GLuint" />
+ <param name="pname" type="GLenum" />
+ <param name="param" type="GLint" />
+ </function>
+
+ <function name="GetNamedFramebufferParameterivEXT">
+ <param name="framebuffer" type="GLuint" />
+ <param name="pname" type="GLenum" />
+ <param name="params" type="GLint*" />
+ </function>
+
</category>
</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/static_data.py b/src/mapi/glapi/gen/static_data.py
index 6e84132e563..fe9f94ae97f 100644
--- a/src/mapi/glapi/gen/static_data.py
+++ b/src/mapi/glapi/gen/static_data.py
@@ -1615,7 +1615,9 @@ offsets = {
"GetVertexArrayIntegervEXT": 1579,
"GetVertexArrayPointervEXT": 1580,
"GetVertexArrayIntegeri_vEXT": 1581,
- "GetVertexArrayPointeri_vEXT": 1582
+ "GetVertexArrayPointeri_vEXT": 1582,
+ "NamedFramebufferParameteriEXT": 1583,
+ "GetNamedFramebufferParameterivEXT": 1584,
}
functions = [
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 2aeb48dfe7d..ea89565cfe2 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -4733,6 +4733,65 @@ _mesa_NamedFramebufferParameteri(GLuint framebuffer, GLenum pname,
}
+/* Helper function for ARB_framebuffer_no_attachments functions interacting with EXT_direct_state_access */
+static struct gl_framebuffer *
+lookup_named_framebuffer_ext_dsa(struct gl_context *ctx, GLuint framebuffer, const char* caller)
+{
+ struct gl_framebuffer *fb = NULL;
+
+ if (framebuffer) {
+ /* The ARB_framebuffer_no_attachments spec says:
+ *
+ * "The error INVALID_VALUE is generated if <framebuffer> is not
+ * a name returned by GenFramebuffers. If a framebuffer object
+ * named <framebuffer> does not yet exist, it will be created."
+ *
+ * This is different from the EXT_direct_state_access spec which says:
+ *
+ * "If the framebuffer object named by the framebuffer parameter has not
+ * been previously bound or has been deleted since the last binding,
+ * the GL first creates a new state vector in the same manner as when
+ * BindFramebuffer creates a new framebuffer object"
+ *
+ * So first we verify that the name exists.
+ */
+ fb = _mesa_lookup_framebuffer(ctx, framebuffer);
+ if (!fb) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "%s(frameBuffer)", caller);
+ return NULL;
+ }
+ /* Then, make sure it's initialized */
+ if (fb == &DummyFramebuffer) {
+ fb = ctx->Driver.NewFramebuffer(ctx, framebuffer);
+ _mesa_HashLockMutex(ctx->Shared->FrameBuffers);
+ _mesa_HashInsert(ctx->Shared->FrameBuffers, framebuffer, fb);
+ _mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
+ }
+ }
+ else
+ fb = ctx->WinSysDrawBuffer;
+
+ return fb;
+}
+
+
+void GLAPIENTRY
+_mesa_NamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname,
+ GLint param)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_framebuffer *fb =
+ lookup_named_framebuffer_ext_dsa(ctx, framebuffer,
+ "glNamedFramebufferParameteriEXT");
+
+ if (!fb)
+ return;
+
+ framebuffer_parameteri(ctx, fb, pname, param,
+ "glNamedFramebufferParameteriEXT");
+}
+
+
void GLAPIENTRY
_mesa_GetFramebufferParameterivEXT(GLuint framebuffer, GLenum pname,
GLint *param)
@@ -4798,6 +4857,23 @@ _mesa_GetNamedFramebufferParameteriv(GLuint framebuffer, GLenum pname,
}
+void GLAPIENTRY
+_mesa_GetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname,
+ GLint *param)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_framebuffer *fb =
+ lookup_named_framebuffer_ext_dsa(ctx, framebuffer,
+ "glGetNamedFramebufferParameterivEXT");
+
+ if (!fb)
+ return;
+
+ get_framebuffer_parameteriv(ctx, fb, pname, param,
+ "glGetNamedFramebufferParameterivEXT");
+}
+
+
static void
invalidate_framebuffer_storage(struct gl_context *ctx,
struct gl_framebuffer *fb,
diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
index bd1f7e4a537..6c8c4f0dc61 100644
--- a/src/mesa/main/fbobject.h
+++ b/src/mesa/main/fbobject.h
@@ -369,6 +369,10 @@ _mesa_NamedFramebufferParameteri(GLuint framebuffer, GLenum pname,
GLint param);
extern void GLAPIENTRY
+_mesa_NamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname,
+ GLint param);
+
+extern void GLAPIENTRY
_mesa_GetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GLenum pname,
GLint *params);
@@ -380,6 +384,10 @@ extern void GLAPIENTRY
_mesa_GetNamedFramebufferParameteriv(GLuint framebuffer, GLenum pname,
GLint *param);
+extern void GLAPIENTRY
+_mesa_GetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname,
+ GLint *param);
+
void GLAPIENTRY
_mesa_InvalidateSubFramebuffer_no_error(GLenum target, GLsizei numAttachments,
const GLenum *attachments, GLint x,
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index e6cefabd386..390e3ef381f 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -874,8 +874,8 @@ const struct function common_desktop_functions_possible[] = {
// { "glVertexArrayVertexBindingDivisorEXT", 43, -1 }, // XXX: Add to xml
{ "glFramebufferParameteri", 43, -1 },
{ "glGetFramebufferParameteriv", 43, -1 },
-// { "glNamedFramebufferParameteriEXT", 43, -1 }, // XXX: Add to xml
-// { "glGetNamedFramebufferParameterivEXT", 43, -1 }, // XXX: Add to xml
+ { "glNamedFramebufferParameteriEXT", 43, -1 },
+ { "glGetNamedFramebufferParameterivEXT", 43, -1 },
// { "glGetInternalformati64v", 43, -1 }, // XXX: Add to xml
{ "glInvalidateTexSubImage", 43, -1 },
{ "glInvalidateTexImage", 43, -1 },