This patch is: Reviewed-by: Fredrik Höglund <fred...@kde.org>
On Wednesday 04 March 2015, Laura Ekstrand wrote: > 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. > --- > src/mapi/glapi/gen/ARB_direct_state_access.xml | 7 +++++++ > src/mesa/main/clear.c | 17 +++++++++++++++++ > src/mesa/main/clear.h | 4 ++++ > src/mesa/main/tests/dispatch_sanity.cpp | 1 + > 4 files changed, 29 insertions(+) > > diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml > b/src/mapi/glapi/gen/ARB_direct_state_access.xml > index 4cdf2f6..3f8ce50 100644 > --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml > +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml > @@ -177,6 +177,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 b5e22e3..eb283d9 100644 > --- a/src/mesa/main/clear.c > +++ b/src/mesa/main/clear.c > @@ -679,3 +679,20 @@ _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 582159f..c298506 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 d5a3773..91989ee 100644 > --- a/src/mesa/main/tests/dispatch_sanity.cpp > +++ b/src/mesa/main/tests/dispatch_sanity.cpp > @@ -979,6 +979,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 }, > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev