summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaura Ekstrand <laura@jlekstrand.net>2015-02-05 13:30:50 -0800
committerFredrik Höglund <fredrik@kde.org>2015-05-14 15:48:15 +0200
commit43db4b8465c203f9748cd2a7e08d8242573116f1 (patch)
treeb4fe37dbb85c85578113812437bd26a4adc4732e
parent6236c477990d67499f494b3c95844217fbd9a3dd (diff)
main: Fake entry point for glClearNamedFramebufferuiv.
Mesa's ClearBuffer framework is very complicated and thoroughly married to the object binding model. Moreover, the OpenGL spec for ClearBuffer is also very complicated. At some point, we should implement buffer clearing for arbitrary framebuffer objects, but for now, we will just wrap ClearBuffer. Reviewed-by: Fredrik Höglund <fredrik@kde.org> Signed-off-by: Fredrik Höglund <fredrik@kde.org>
-rw-r--r--src/mapi/glapi/gen/ARB_direct_state_access.xml7
-rw-r--r--src/mesa/main/clear.c18
-rw-r--r--src/mesa/main/clear.h4
-rw-r--r--src/mesa/main/tests/dispatch_sanity.cpp1
4 files changed, 30 insertions, 0 deletions
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
index c793c9e9c7..95fda9676f 100644
--- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
+++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
@@ -204,6 +204,13 @@
<param name="value" type="const GLint *" />
</function>
+ <function name="ClearNamedFramebufferuiv" offset="assign">
+ <param name="framebuffer" type="GLuint" />
+ <param name="buffer" type="GLenum" />
+ <param name="drawbuffer" type="GLint" />
+ <param name="value" type="const GLuint *" />
+ </function>
+
<function name="BlitNamedFramebuffer" offset="assign">
<param name="readFramebuffer" type="GLuint" />
<param name="drawFramebuffer" type="GLuint" />
diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c
index 4e029cf258..05bbf1564b 100644
--- a/src/mesa/main/clear.c
+++ b/src/mesa/main/clear.c
@@ -492,6 +492,24 @@ _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
/**
+ * The ClearBuffer framework is so complicated and so riddled with the
+ * assumption that the framebuffer is bound that, for now, we will just fake
+ * direct state access clearing for the user.
+ */
+void GLAPIENTRY
+_mesa_ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer,
+ GLint drawbuffer, const GLuint *value)
+{
+ GLint oldfb;
+
+ _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
+ _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
+ _mesa_ClearBufferuiv(buffer, drawbuffer, value);
+ _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, (GLuint) oldfb);
+}
+
+
+/**
* New in GL 3.0
* Clear fixed-pt or float color buffer or depth buffer (not stencil).
*/
diff --git a/src/mesa/main/clear.h b/src/mesa/main/clear.h
index d0b6133535..b74c2275cb 100644
--- a/src/mesa/main/clear.h
+++ b/src/mesa/main/clear.h
@@ -59,6 +59,10 @@ extern void GLAPIENTRY
_mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
extern void GLAPIENTRY
+_mesa_ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer,
+ GLint drawbuffer, const GLuint *value);
+
+extern void GLAPIENTRY
_mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
extern void GLAPIENTRY
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index 149c8b456b..60d0fe9a11 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -987,6 +987,7 @@ const struct function gl_core_functions_possible[] = {
{ "glInvalidateNamedFramebufferSubData", 45, -1 },
{ "glInvalidateNamedFramebufferData", 45, -1 },
{ "glClearNamedFramebufferiv", 45, -1 },
+ { "glClearNamedFramebufferuiv", 45, -1 },
{ "glBlitNamedFramebuffer", 45, -1 },
{ "glCheckNamedFramebufferStatus", 45, -1 },
{ "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },