On 01/10/2014 05:40 PM, Ian Romanick wrote:
> From: Ian Romanick <ian.d.roman...@intel.com>
> 
> In _mesa_Viewport and _mesa_DepthRange, make sure that
> ctx->Driver.Viewport is only called once instead of once per viewport or
> depth range.
> 
> Signed-off-by: Ian Romanick <ian.d.roman...@intel.com>
> ---
>  src/mesa/main/viewport.c | 30 ++++++++++++++++++++++++++++--
>  1 file changed, 28 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/main/viewport.c b/src/mesa/main/viewport.c
> index cc031b0..13b469a 100644
> --- a/src/mesa/main/viewport.c
> +++ b/src/mesa/main/viewport.c
> @@ -74,6 +74,7 @@ set_viewport_no_notify(struct gl_context *ctx, unsigned 
> idx, GLint x, GLint y,
>  void GLAPIENTRY
>  _mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
>  {
> +   unsigned i;
>     GET_CURRENT_CONTEXT(ctx);
>     FLUSH_VERTICES(ctx, 0);
>  
> @@ -86,7 +87,19 @@ _mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei 
> height)
>        return;
>     }
>  
> -   set_viewport_no_notify(ctx, 0, x, y, width, height);
> +   /* The GL_ARB_viewport_array spec says:
> +    *
> +    *     "Viewport sets the parameters for all viewports to the same values
> +    *     and is equivalent (assuming no errors are generated) to:
> +    *
> +    *     for (uint i = 0; i < MAX_VIEWPORTS; i++)
> +    *         ViewportIndexedf(i, 1, (float)x, (float)y, (float)w, 
> (float)h);"
> +    *
> +    * Set all of the viewports supported by the implementation, but only
> +    * signal the driver once at the end.
> +    */
> +   for (i = 0; i < ctx->Const.MaxViewports; i++)
> +      set_viewport_no_notify(ctx, i, x, y, width, height);
>  
>     if (ctx->Driver.Viewport) {
>        /* Many drivers will use this call to check for window size changes
> @@ -170,6 +183,7 @@ _mesa_set_depth_range(struct gl_context *ctx, unsigned 
> idx,
>  void GLAPIENTRY
>  _mesa_DepthRange(GLclampd nearval, GLclampd farval)
>  {
> +   unsigned i;
>     GET_CURRENT_CONTEXT(ctx);
>  
>     FLUSH_VERTICES(ctx, 0);
> @@ -177,7 +191,19 @@ _mesa_DepthRange(GLclampd nearval, GLclampd farval)
>     if (MESA_VERBOSE&VERBOSE_API)
>        _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval);
>  
> -   set_depth_range_no_notify(ctx, 0, nearval, farval);
> +   /* The GL_ARB_viewport_array spec says:
> +    *
> +    *     "DepthRange sets the depth range for all viewports to the same
> +    *     values and is equivalent (assuming no errors are generated) to:
> +    *
> +    *     for (uint i = 0; i < MAX_VIEWPORTS; i++)
> +    *         DepthRangeIndexed(i, n, f);"
> +    *
> +    * Set the depth range for all of the viewports supported by the
> +    * implementation, but only signal the driver once at the end.
> +    */
> +   for (i = 0; i < ctx->Const.MaxViewports; i++)
> +      set_depth_range_no_notify(ctx, 0, nearval, farval);

Zero?  Don't you mean i?

     set_depth_range_no_notify(ctx, i, nearval, farval);

>  
>     if (ctx->Driver.DepthRange) {
>        ctx->Driver.DepthRange(ctx);
> 
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to