This patch regresses about 3000 dEQP [2,3,3.1] tests on virgl. Full setup is dEQP running on virgl with vtest that is running RadeonSI. So QEMU is not in the picture. All instances of the Mesa driver is from the same tree and have the patch applied.
Cheers, Jakob. On Wed, Sep 12, 2018 at 12:05 PM Erik Faye-Lund <erik.faye-l...@collabora.com> wrote: > > If we update the program-state etc, we risk compiling needless shaders, > which can cost quite a bit of performance. > > Signed-off-by: Erik Faye-Lund <erik.faye-l...@collabora.com> > --- > This was motivated by seeing an unexpected shader-compile with > nonsensical state on start-up in glxgears. > > src/mesa/main/clear.c | 34 ++++++++++++++++++++-------------- > 1 file changed, 20 insertions(+), 14 deletions(-) > > diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c > index 6beff9ed84..3d2ca490c9 100644 > --- a/src/mesa/main/clear.c > +++ b/src/mesa/main/clear.c > @@ -35,6 +35,7 @@ > #include "context.h" > #include "enums.h" > #include "fbobject.h" > +#include "framebuffer.h" > #include "get.h" > #include "macros.h" > #include "mtypes.h" > @@ -135,10 +136,10 @@ color_buffer_writes_enabled(const struct gl_context > *ctx, unsigned idx) > * \param mask bit-mask indicating the buffers to be cleared. > * > * Flushes the vertices and verifies the parameter. > - * If __struct gl_contextRec::NewState is set then calls _mesa_update_state() > - * to update gl_frame_buffer::_Xmin, etc. If the rasterization mode is set > to > - * GL_RENDER then requests the driver to clear the buffers, via the > - * dd_function_table::Clear callback. > + * If __struct gl_contextRec::NewState contains _NEW_BUFFERS then calls > + * _mesa_update_framebuffer() to update gl_frame_buffer::_Xmin, etc. If the > + * rasterization mode is set to GL_RENDER then requests the driver to clear > + * the buffers, via the dd_function_table::Clear callback. > */ > static ALWAYS_INLINE void > clear(struct gl_context *ctx, GLbitfield mask, bool no_error) > @@ -165,8 +166,9 @@ clear(struct gl_context *ctx, GLbitfield mask, bool > no_error) > } > } > > - if (ctx->NewState) { > - _mesa_update_state( ctx ); /* update _Xmin, etc */ > + if (ctx->NewState & _NEW_BUFFERS) { > + _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer); /* > update _Xmin, etc */ > + ctx->NewState &= ~_NEW_BUFFERS; > } > > if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) > { > @@ -346,8 +348,9 @@ clear_bufferiv(struct gl_context *ctx, GLenum buffer, > GLint drawbuffer, > FLUSH_VERTICES(ctx, 0); > FLUSH_CURRENT(ctx, 0); > > - if (ctx->NewState) { > - _mesa_update_state( ctx ); > + if (ctx->NewState & _NEW_BUFFERS) { > + _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer); > + ctx->NewState &= ~_NEW_BUFFERS; > } > > switch (buffer) { > @@ -460,8 +463,9 @@ clear_bufferuiv(struct gl_context *ctx, GLenum buffer, > GLint drawbuffer, > FLUSH_VERTICES(ctx, 0); > FLUSH_CURRENT(ctx, 0); > > - if (ctx->NewState) { > - _mesa_update_state( ctx ); > + if (ctx->NewState & _NEW_BUFFERS) { > + _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer); > + ctx->NewState &= ~_NEW_BUFFERS; > } > > switch (buffer) { > @@ -549,8 +553,9 @@ clear_bufferfv(struct gl_context *ctx, GLenum buffer, > GLint drawbuffer, > FLUSH_VERTICES(ctx, 0); > FLUSH_CURRENT(ctx, 0); > > - if (ctx->NewState) { > - _mesa_update_state( ctx ); > + if (ctx->NewState & _NEW_BUFFERS) { > + _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer); > + ctx->NewState &= ~_NEW_BUFFERS; > } > > switch (buffer) { > @@ -691,8 +696,9 @@ clear_bufferfi(struct gl_context *ctx, GLenum buffer, > GLint drawbuffer, > if (ctx->RasterDiscard) > return; > > - if (ctx->NewState) { > - _mesa_update_state( ctx ); > + if (ctx->NewState & _NEW_BUFFERS) { > + _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer); > + ctx->NewState &= ~_NEW_BUFFERS; > } > > if (ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer) > -- > 2.17.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev