[Intel-gfx] [RFC 1/2] drm/i915: Engine discovery uAPI

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Apr 24 08:07:03 UTC 2017


On 18/04/2017 21:13, Chris Wilson wrote:
> On Tue, Apr 18, 2017 at 05:56:14PM +0100, Tvrtko Ursulin wrote:
>> +enum drm_i915_gem_engine_class {
>> +	DRM_I915_ENGINE_CLASS_OTHER = 0,
>> +	DRM_I915_ENGINE_CLASS_RENDER = 1,
>> +	DRM_I915_ENGINE_CLASS_COPY = 2,
>> +	DRM_I915_ENGINE_CLASS_VIDEO_DECODE = 3,
>> +	DRM_I915_ENGINE_CLASS_VIDEO_ENHANCE = 4,
>> +	DRM_I915_ENGINE_CLASS_MAX /* non-ABI */
>> +};
>> +
>> +struct drm_i915_engine_info {
>> +	/** Engine instance number. */
>> +	__u32	instance;
>> +	__u32	rsvd;
>> +
>> +	/** Engine specific info. */
>> +#define DRM_I915_ENGINE_HAS_HEVC	BIT(0)
>> +	__u64 info;
>> +};
>
> So the main question is how can we extend this in future, keeping
> forwards/backwards compat?
>
> I think if we put a query version into info and then the kernel supplies
> an array matching that version (or reports the most recent version
> supported if the request is too modern.)
>
> The kernel has to keep all the old struct variants and exporters
> indefinitely.

Versioning sounds good to me.

> Another alternative would get an ENGINE_GETPARAM where we just have a
> switch of all possibily questions. Maybe better as a CONTEXT_GETPARAM if
> we start thinking about allowing CONTEXT_SETPARAM to fine tune
> individual clients.

This idea I did not get - what is the switch of all possible questions? 
You mean new ioctl like ENGINE_GETPARAM which would return a list of 
queries supported by CONTEXT_GETPARAM? Which would effectively be a 
dispatcher-in-dispatcher kind of thing?

>> +struct drm_i915_gem_engine_info {
>> +	/** in: Engine class to probe (enum drm_i915_gem_engine_class). */
>> +	__u32 engine_class;
>
> __u32 [in/out] version ? (see above)
>
>> +
>> +	/** out: Actual number of hardware engines. */
>> +	__u32 num_engines;
>> +
>> +	/**
>> +	 * in: Number of struct drm_i915_engine_ifo entries in the provided
>> +	 * info array.
>> +	 */
>> +	__u32 info_size;
>
> This is superfluous with num_engines. The standard 2 pass, discovery of
> size, followed by allocation and final query.

This is also fine. I was one the fence whether to actually condense it 
to one field in the first posting or not myself.

Regards,

Tvrtko


More information about the Intel-gfx mailing list