summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaura Ekstrand <[email protected]>2015-02-05 13:43:12 -0800
committerFredrik Höglund <[email protected]>2015-05-14 15:48:15 +0200
commita0329c7b40de3db22d22c74793a7c268e8904e53 (patch)
tree95f450d9349b840b3207b74b0ec145b9f9779ddf
parentbbd9c55d0217c697cbe090057bfbf830b551ed36 (diff)
main: Fake entry point for glClearNamedFramebufferfi.
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 <[email protected]> Signed-off-by: Fredrik Höglund <[email protected]>
-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 2bb3c716087..8bafe3f0bb0 100644
--- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
+++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
@@ -218,6 +218,13 @@
<param name="value" type="const GLfloat *" />
</function>
+ <function name="ClearNamedFramebufferfi" offset="assign">
+ <param name="framebuffer" type="GLuint" />
+ <param name="buffer" type="GLenum" />
+ <param name="depth" type="GLfloat" />
+ <param name="stencil" type="GLint" />
+ </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 81e255e5ee7..426caea4709 100644
--- a/src/mesa/main/clear.c
+++ b/src/mesa/main/clear.c
@@ -682,3 +682,21 @@ _mesa_ClearBufferfi(GLenum buffer, GLint drawbuffer,
ctx->Stencil.Clear = clearStencilSave;
}
}
+
+
+/**
+ * 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_ClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer,
+ GLfloat depth, GLint stencil)
+{
+ GLint oldfb;
+
+ _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
+ _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
+ _mesa_ClearBufferfi(buffer, 0, depth, stencil);
+ _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, (GLuint) oldfb);
+}
diff --git a/src/mesa/main/clear.h b/src/mesa/main/clear.h
index 582159fea0f..c29850676ca 100644
--- a/src/mesa/main/clear.h
+++ b/src/mesa/main/clear.h
@@ -73,4 +73,8 @@ extern void GLAPIENTRY
_mesa_ClearBufferfi(GLenum buffer, GLint drawbuffer,
GLfloat depth, GLint stencil);
+extern void GLAPIENTRY
+_mesa_ClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer,
+ GLfloat depth, GLint stencil);
+
#endif
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index 1f25869d1ee..a119d0874a6 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -989,6 +989,7 @@ const struct function gl_core_functions_possible[] = {
{ "glClearNamedFramebufferiv", 45, -1 },
{ "glClearNamedFramebufferuiv", 45, -1 },
{ "glClearNamedFramebufferfv", 45, -1 },
+ { "glClearNamedFramebufferfi", 45, -1 },
{ "glBlitNamedFramebuffer", 45, -1 },
{ "glCheckNamedFramebufferStatus", 45, -1 },
{ "glGetNamedFramebufferAttachmentParameteriv", 45, -1 },