Date: Thu, 26 Nov 2020 20:21:30 +0000 (UTC) From: Jan Beich <jbeich@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r556348 - head/graphics/mesa-devel/files Message-ID: <202011262021.0AQKLU55015538@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jbeich Date: Thu Nov 26 20:21:30 2020 New Revision: 556348 URL: https://svnweb.freebsd.org/changeset/ports/556348 Log: graphics/mesa-devel: work around userptr for anv on gen < 8 and iris compute Vulkan on Intel Broadwell or later uses softpin but older need userptr: /* We only allow 48-bit addresses with softpin because knowing the actual * address is required for the vertex cache flush workaround. */ device->supports_48bit_addresses = (device->info.gen >= 8) && device->has_softpin && device->gtt_size > (4ULL << 30 /* GiB */); device->use_softpin = device->has_softpin && device->supports_48bit_addresses; PR: 244877 Submitted by: Austin Shafer <ashafer@badland.io> Added: head/graphics/mesa-devel/files/patch-userptr (contents, props changed) Added: head/graphics/mesa-devel/files/patch-userptr ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/mesa-devel/files/patch-userptr Thu Nov 26 20:21:30 2020 (r556348) @@ -0,0 +1,51 @@ +Try unsynchronized userptr if regular one fails. +https://github.com/FreeBSDDesktop/kms-drm/issues/197 + +--- src/gallium/drivers/iris/iris_bufmgr.c.orig 2020-11-25 20:08:15 UTC ++++ src/gallium/drivers/iris/iris_bufmgr.c +@@ -624,8 +624,20 @@ iris_bo_create_userptr(struct iris_bufmgr *bufmgr, con + .user_ptr = (uintptr_t)ptr, + .user_size = size, + }; +- if (gen_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_USERPTR, &arg)) ++ ++ int ret; ++retry: ++ ret = gen_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_USERPTR, &arg); ++ if (ret) { ++ if (errno == ENODEV && arg.flags == 0) { ++ arg.flags = I915_USERPTR_UNSYNCHRONIZED; ++ goto retry; ++ } ++ if (geteuid() != 0) { ++ fprintf(stderr, "%s", "ioctl(I915_GEM_USERPTR) failed. Try running as root but expect poor stability.\n"); ++ } + goto err_free; ++ } + bo->gem_handle = arg.handle; + + /* Check the buffer for validity before we try and use it in a batch */ +--- src/intel/vulkan/anv_gem.c.orig 2020-11-25 20:08:15 UTC +--- src/intel/vulkan/anv_gem.c +@@ -146,9 +146,19 @@ anv_gem_userptr(struct anv_device *device, void *mem, + .flags = 0, + }; + +- int ret = gen_ioctl(device->fd, DRM_IOCTL_I915_GEM_USERPTR, &userptr); +- if (ret == -1) ++ int ret; ++retry: ++ ret = gen_ioctl(device->fd, DRM_IOCTL_I915_GEM_USERPTR, &userptr); ++ if (ret == -1) { ++ if (errno == ENODEV && userptr.flags == 0) { ++ userptr.flags = I915_USERPTR_UNSYNCHRONIZED; ++ goto retry; ++ } ++ if (geteuid() != 0) { ++ fprintf(stderr, "%s", "ioctl(I915_GEM_USERPTR) failed. Try running as root but expect poor stability.\n"); ++ } + return 0; ++ } + + return userptr.handle; + }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202011262021.0AQKLU55015538>