svn commit: r556348 - head/graphics/mesa-devel/files
Jan Beich
jbeich at FreeBSD.org
Thu Nov 26 20:21:31 UTC 2020
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 at 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;
+ }
More information about the svn-ports-head
mailing list