drm/i915: Allow contexts to share a single timeline across all engines
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 22 Mar 2019 09:23:25 +0000 (09:23 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 22 Mar 2019 13:12:38 +0000 (13:12 +0000)
commitea593dbba4c8ed841630fa5445202627e1046ba6
tree99a69fa921000464f8b5993618fd67ca2aecf5ec
parentb91715417244a7e478304425ba671bfafee9c43e
drm/i915: Allow contexts to share a single timeline across all engines

Previously, our view has been always to run the engines independently
within a context. (Multiple engines happened before we had contexts and
timelines, so they always operated independently and that behaviour
persisted into contexts.) However, at the user level the context often
represents a single timeline (e.g. GL contexts) and userspace must
ensure that the individual engines are serialised to present that
ordering to the client (or forgot about this detail entirely and hope no
one notices - a fair ploy if the client can only directly control one
engine themselves ;)

In the next patch, we will want to construct a set of engines that
operate as one, that have a single timeline interwoven between them, to
present a single virtual engine to the user. (They submit to the virtual
engine, then we decide which engine to execute on based.)

To that end, we want to be able to create contexts which have a single
timeline (fence context) shared between all engines, rather than multiple
timelines.

v2: Move the specialised timeline ordering to its own function.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190322092325.5883-4-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem_context.c
drivers/gpu/drm/i915/i915_gem_context_types.h
drivers/gpu/drm/i915/i915_request.c
drivers/gpu/drm/i915/i915_request.h
drivers/gpu/drm/i915/i915_sw_fence.c
drivers/gpu/drm/i915/i915_sw_fence.h
drivers/gpu/drm/i915/intel_lrc.c
drivers/gpu/drm/i915/selftests/mock_context.c
include/uapi/drm/i915_drm.h