[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