[Mesa-dev] [PATCH 1/2] llvmpipe: fix depth clamping wrt reversed near/far values

Ilia Mirkin imirkin at alum.mit.edu
Mon Aug 15 05:33:35 UTC 2016


Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

On Sun, Aug 14, 2016 at 11:41 PM,  <sroland at vmware.com> wrote:
> From: Roland Scheidegger <sroland at vmware.com>
>
> This wasn't handled before (the result was that no matter what value got
> clamped, it always ended up as the near value in this case) (if clamping
> actually happened).
> Fix this by using the util helper for that (the math is otherwise "mostly"
> the same, mostly because there could actually be differences due to float
> rounding, but I don't even know which one would be more correct).
> ---
>  src/gallium/drivers/llvmpipe/lp_setup.c | 12 +++---------
>  1 file changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c
> index 0a45db9..7cb4f7b 100644
> --- a/src/gallium/drivers/llvmpipe/lp_setup.c
> +++ b/src/gallium/drivers/llvmpipe/lp_setup.c
> @@ -39,6 +39,7 @@
>  #include "util/u_inlines.h"
>  #include "util/u_memory.h"
>  #include "util/u_pack_color.h"
> +#include "util/u_viewport.h"
>  #include "draw/draw_pipe.h"
>  #include "os/os_time.h"
>  #include "lp_context.h"
> @@ -771,15 +772,8 @@ lp_setup_set_viewports(struct lp_setup_context *setup,
>     for (i = 0; i < num_viewports; i++) {
>        float min_depth;
>        float max_depth;
> -
> -      if (lp->rasterizer->clip_halfz == 0) {
> -         float half_depth = viewports[i].scale[2];
> -         min_depth = viewports[i].translate[2] - half_depth;
> -         max_depth = min_depth + half_depth * 2.0f;
> -      } else {
> -         min_depth = viewports[i].translate[2];
> -         max_depth = min_depth + viewports[i].scale[2];
> -      }
> +      util_viewport_zmin_zmax(&viewports[i], lp->rasterizer->clip_halfz,
> +                              &min_depth, &max_depth);
>
>        if (setup->viewports[i].min_depth != min_depth ||
>            setup->viewports[i].max_depth != max_depth) {
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list