intel/devinfo: Add function to check for DRM_I915_GEM_GET_TILING.
authorRafael Antognolli <rafael.antognolli@intel.com>
Wed, 3 Jun 2020 17:19:50 +0000 (17:19 +0000)
committerJordan Justen <jordan.l.justen@intel.com>
Mon, 22 Jun 2020 18:42:00 +0000 (11:42 -0700)
Future (discrete) platforms won't have support for get/set tiling. This
function allows our drivers to query for that, by simply trying to get
the tiling from a dummy buffer.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4956>

src/intel/dev/gen_device_info.c
src/intel/dev/gen_device_info.h

index 8fd87b5d53dd15c2ae428c6f73f0ab6bcd1153d4..917f493a6728b446ab948b35505d73b785fa5879 100644 (file)
@@ -1408,6 +1408,33 @@ gen_get_aperture_size(int fd, uint64_t *size)
    return ret;
 }
 
+static bool
+gen_has_get_tiling(int fd)
+{
+   int ret;
+
+   struct drm_i915_gem_create gem_create = {
+      .size = 4096,
+   };
+
+   if (gen_ioctl(fd, DRM_IOCTL_I915_GEM_CREATE, &gem_create)) {
+      unreachable("Failed to create GEM BO");
+      return false;
+   }
+
+   struct drm_i915_gem_get_tiling get_tiling = {
+      .handle = gem_create.handle,
+   };
+   ret = gen_ioctl(fd, DRM_IOCTL_I915_GEM_SET_TILING, &get_tiling);
+
+   struct drm_gem_close close = {
+      .handle = gem_create.handle,
+   };
+   gen_ioctl(fd, DRM_IOCTL_GEM_CLOSE, &close);
+
+   return ret == 0;
+}
+
 bool
 gen_get_device_info_from_fd(int fd, struct gen_device_info *devinfo)
 {
@@ -1476,6 +1503,7 @@ gen_get_device_info_from_fd(int fd, struct gen_device_info *devinfo)
    }
 
    gen_get_aperture_size(fd, &devinfo->aperture_bytes);
+   devinfo->has_tiling_uapi = gen_has_get_tiling(fd);
 
    return true;
 }
index 37e9c4231faac9332d8a795b3f71fdfd46435c9a..d3514a195e76b3113d452a34aeaeb43294e18762 100644 (file)
@@ -80,6 +80,7 @@ struct gen_device_info
    bool has_resource_streamer;
    bool disable_ccs_repack;
    bool has_aux_map;
+   bool has_tiling_uapi;
 
    /**
     * \name Intel hardware quirks