[Mesa-dev] [PATCH] nvc0: create screen fence objects with coherent attribute

Martin Peres martin.peres at free.fr
Fri Jun 19 04:45:24 PDT 2015


On 19/06/2015 11:56, Alexandre Courbot wrote:
> This is required on non-coherent architectures to ensure the value of
> the fence is correct at all times. Failure to do this results in the
> display freezing for a few seconds every now and then on Tegra.
>
> The NOUVEAU_BO_COHERENT is a no-op for coherent architectures, so behavior
> on x86 should not be affected by this patch.
>
> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
> ---
>   src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 8 ++++++--
>   1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> index 5936d05a5b93..307cf5f9cd75 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -610,6 +610,7 @@ nvc0_screen_create(struct nouveau_device *dev)
>      struct nouveau_pushbuf *push;
>      uint64_t value;
>      uint32_t obj_class;
> +   uint32_t flags;
>      int ret;
>      unsigned i;
>   
> @@ -660,8 +661,11 @@ nvc0_screen_create(struct nouveau_device *dev)
>      screen->base.base.get_video_param = nouveau_vp3_screen_get_video_param;
>      screen->base.base.is_video_format_supported = nouveau_vp3_screen_video_supported;
>   
> -   ret = nouveau_bo_new(dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0, 4096, NULL,
> -                        &screen->fence.bo);
> +   flags = NOUVEAU_BO_GART | NOUVEAU_BO_MAP;
> +   if (dev->drm_version >= 0x01000202)
> +      flags |= NOUVEAU_BO_COHERENT;


Don't forget that you also need to require an up to date version of 
libdrm if you don't want to fail at compilation time :) Not sure what 
the policy would be here. You may be able to ask for a release.

With the bump in the required version of libdrm, this patch is:

Reviewed-by: Martin Peres <martin.peres at free.fr>

> +
> +   ret = nouveau_bo_new(dev, flags, 0, 4096, NULL, &screen->fence.bo);
>      if (ret)
>         goto fail;
>      nouveau_bo_map(screen->fence.bo, 0, NULL);



More information about the mesa-dev mailing list