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 | 19 +++++++++++++++++++ > src/mesa/main/clear.h | 4 ++++ > src/mesa/main/tests/dispatch_sanity.cpp | 1 + > 4 files changed, 31 insertions(+) > > diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml > b/src/mapi/glapi/gen/ARB_direct_state_access.xml > index 0939b8b..0ab0db4 100644 > --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml > +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml > @@ -156,6 +156,13 @@ > <param name="height" type="GLsizei" /> > </function> > > + <function name="ClearNamedFramebufferiv" offset="assign"> > + <param name="framebuffer" type="GLuint" /> > + <param name="buffer" type="GLenum" /> > + <param name="drawbuffer" type="GLint" /> > + <param name="value" type="const 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 8d707bc..40bf0be 100644 > --- a/src/mesa/main/clear.c > +++ b/src/mesa/main/clear.c > @@ -34,6 +34,8 @@ > #include "clear.h" > #include "context.h" > #include "enums.h" > +#include "fbobject.h" > +#include "get.h" > #include "macros.h" > #include "mtypes.h" > #include "state.h" > @@ -398,6 +400,23 @@ _mesa_ClearBufferiv(GLenum buffer, GLint drawbuffer, > const GLint *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_ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, > + GLint drawbuffer, const GLint *value) > +{ > + GLint oldfb; > + > + _mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb); > + _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer); > + _mesa_ClearBufferiv(buffer, drawbuffer, value); > + _mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, (GLuint) oldfb); > +} > + > > /** > * New in GL 3.0 > diff --git a/src/mesa/main/clear.h b/src/mesa/main/clear.h > index 96ce47b..d0b6133 100644 > --- a/src/mesa/main/clear.h > +++ b/src/mesa/main/clear.h > @@ -52,6 +52,10 @@ extern void GLAPIENTRY > _mesa_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value); > > extern void GLAPIENTRY > +_mesa_ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, > + GLint drawbuffer, const GLint *value); > + > +extern void GLAPIENTRY > _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value); > > extern void GLAPIENTRY > diff --git a/src/mesa/main/tests/dispatch_sanity.cpp > b/src/mesa/main/tests/dispatch_sanity.cpp > index 312e253..a24f571 100644 > --- a/src/mesa/main/tests/dispatch_sanity.cpp > +++ b/src/mesa/main/tests/dispatch_sanity.cpp > @@ -976,6 +976,7 @@ const struct function gl_core_functions_possible[] = { > { "glNamedFramebufferTextureLayer", 45, -1 }, > { "glInvalidateNamedFramebufferSubData", 45, -1 }, > { "glInvalidateNamedFramebufferData", 45, -1 }, > + { "glClearNamedFramebufferiv", 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