+ * For fences created with PIPE_FLUSH_FENCE_FD (exported fd) or
+ * by create_fence_fd() (imported fd), return the native fence fd
+ * associated with the fence. This may return -1 for fences
+ * created with PIPE_FLUSH_DEFERRED if the fence command has not
+ * been flushed yet.
+ */
+ int (*fence_get_fd)(struct pipe_screen *screen,
+ struct pipe_fence_handle *fence);
+
+ /**
+ * Returns a driver-specific query.
+ *
+ * If \p info is NULL, the number of available queries is returned.
+ * Otherwise, the driver query at the specified \p index is returned
+ * in \p info. The function returns non-zero on success.
+ */
+ int (*get_driver_query_info)(struct pipe_screen *screen,
+ unsigned index,
+ struct pipe_driver_query_info *info);
+
+ /**
+ * Returns a driver-specific query group.
+ *
+ * If \p info is NULL, the number of available groups is returned.
+ * Otherwise, the driver query group at the specified \p index is returned
+ * in \p info. The function returns non-zero on success.
+ */
+ int (*get_driver_query_group_info)(struct pipe_screen *screen,
+ unsigned index,
+ struct pipe_driver_query_group_info *info);
+
+ /**
+ * Query information about memory usage.
+ */
+ void (*query_memory_info)(struct pipe_screen *screen,
+ struct pipe_memory_info *info);
+
+ /**
+ * Get IR specific compiler options struct. For PIPE_SHADER_IR_NIR this
+ * returns a 'struct nir_shader_compiler_options'. Drivers reporting
+ * NIR as the preferred IR must implement this.
+ */
+ const void *(*get_compiler_options)(struct pipe_screen *screen,
+ enum pipe_shader_ir ir,
+ enum pipe_shader_type shader);
+
+ /**
+ * Returns a pointer to a driver-specific on-disk shader cache. If the
+ * driver failed to create the cache or does not support an on-disk shader
+ * cache NULL is returned. The callback itself may also be NULL if the
+ * driver doesn't support an on-disk shader cache.
+ */
+ struct disk_cache *(*get_disk_shader_cache)(struct pipe_screen *screen);
+
+ /**
+ * Create a new texture object from the given template info, taking
+ * format modifiers into account. \p modifiers specifies a list of format
+ * modifier tokens, as defined in drm_fourcc.h. The driver then picks the
+ * best modifier among these and creates the resource. \p count must
+ * contain the size of \p modifiers array.
+ *
+ * Returns NULL if an entry in \p modifiers is unsupported by the driver,
+ * or if only DRM_FORMAT_MOD_INVALID is provided.
+ */
+ struct pipe_resource * (*resource_create_with_modifiers)(
+ struct pipe_screen *,
+ const struct pipe_resource *templat,
+ const uint64_t *modifiers, int count);
+
+ /**
+ * Get supported modifiers for a format.
+ * If \p max is 0, the total number of supported modifiers for the supplied
+ * format is returned in \p count, with no modification to \p modifiers.
+ * Otherwise, \p modifiers is filled with upto \p max supported modifier
+ * codes, and \p count with the number of modifiers copied.
+ * The \p external_only array is used to return whether the format and
+ * modifier combination can only be used with an external texture target.
+ */
+ void (*query_dmabuf_modifiers)(struct pipe_screen *screen,
+ enum pipe_format format, int max,
+ uint64_t *modifiers,
+ unsigned int *external_only, int *count);
+
+ /**
+ * Create a memory object from a winsys handle
+ *
+ * The underlying memory is most often allocated in by a foregin API.
+ * Then the underlying memory object is then exported through interfaces
+ * compatible with EXT_external_resources.
+ *
+ * Note: For WINSYS_HANDLE_TYPE_FD handles, the caller retains ownership
+ * of the fd.
+ *
+ * \param handle A handle representing the memory object to import