From 6c0a8ddb6fbd07f8cc7783c734c3fa8b2e3ffe32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 19 Dec 2020 03:14:01 -0500 Subject: [PATCH] mesa: optimize glPopAttrib(GL_VIEWPORT_BIT) We can just copy the variables because they are already clamped to ctx->Const limits. Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/mesa/main/attrib.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c index 7229b3f1a18..92dc1d3d1ac 100644 --- a/src/mesa/main/attrib.c +++ b/src/mesa/main/attrib.c @@ -1140,9 +1140,18 @@ _mesa_PopAttrib(void) for (i = 0; i < ctx->Const.MaxViewports; i++) { const struct gl_viewport_attrib *vp = &attr->Viewport.ViewportArray[i]; - _mesa_set_viewport(ctx, i, vp->X, vp->Y, vp->Width, - vp->Height); - _mesa_set_depth_range(ctx, i, vp->Near, vp->Far); + + if (memcmp(&ctx->ViewportArray[i].X, &vp->X, sizeof(float) * 6)) { + ctx->NewState |= _NEW_VIEWPORT; + ctx->NewDriverState |= ctx->DriverFlags.NewViewport; + + memcpy(&ctx->ViewportArray[i].X, &vp->X, sizeof(float) * 6); + + if (ctx->Driver.Viewport) + ctx->Driver.Viewport(ctx); + if (ctx->Driver.DepthRange) + ctx->Driver.DepthRange(ctx); + } } if (ctx->Extensions.NV_conservative_raster) {