drm/i915/ringbuffer: Specialise SNB+ request emission for semaphores
As gen6_emit_request() only differs from i9xx_emit_request() when semaphores are enabled, only use the specialised vfunc in that scenario. v2: Reorder semaphore init so as to keep engine->emit_request default vfunc selection compact. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: http://patchwork.freedesktop.org/patch/msgid/1469432687-22756-27-git-send-email-chris@chris-wilson.co.uk Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1470174640-18242-18-git-send-email-chris@chris-wilson.co.uk
This commit is contained in:
parent
b0411e7d45
commit
618e4ca7b1
|
@ -1444,22 +1444,20 @@ static int i9xx_emit_request(struct drm_i915_gem_request *req)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gen6_emit_request - Update the semaphore mailbox registers
|
* gen6_sema_emit_request - Update the semaphore mailbox registers
|
||||||
*
|
*
|
||||||
* @request - request to write to the ring
|
* @request - request to write to the ring
|
||||||
*
|
*
|
||||||
* Update the mailbox registers in the *other* rings with the current seqno.
|
* Update the mailbox registers in the *other* rings with the current seqno.
|
||||||
* This acts like a signal in the canonical semaphore.
|
* This acts like a signal in the canonical semaphore.
|
||||||
*/
|
*/
|
||||||
static int gen6_emit_request(struct drm_i915_gem_request *req)
|
static int gen6_sema_emit_request(struct drm_i915_gem_request *req)
|
||||||
{
|
{
|
||||||
if (req->engine->semaphore.signal) {
|
int ret;
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = req->engine->semaphore.signal(req);
|
ret = req->engine->semaphore.signal(req);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
|
|
||||||
return i9xx_emit_request(req);
|
return i9xx_emit_request(req);
|
||||||
}
|
}
|
||||||
|
@ -2785,11 +2783,14 @@ static void intel_ring_init_irq(struct drm_i915_private *dev_priv,
|
||||||
static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
|
static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
|
||||||
struct intel_engine_cs *engine)
|
struct intel_engine_cs *engine)
|
||||||
{
|
{
|
||||||
|
intel_ring_init_irq(dev_priv, engine);
|
||||||
|
intel_ring_init_semaphores(dev_priv, engine);
|
||||||
|
|
||||||
engine->init_hw = init_ring_common;
|
engine->init_hw = init_ring_common;
|
||||||
|
|
||||||
engine->emit_request = i9xx_emit_request;
|
engine->emit_request = i9xx_emit_request;
|
||||||
if (INTEL_GEN(dev_priv) >= 6)
|
if (i915.semaphores)
|
||||||
engine->emit_request = gen6_emit_request;
|
engine->emit_request = gen6_sema_emit_request;
|
||||||
engine->submit_request = i9xx_submit_request;
|
engine->submit_request = i9xx_submit_request;
|
||||||
|
|
||||||
if (INTEL_GEN(dev_priv) >= 8)
|
if (INTEL_GEN(dev_priv) >= 8)
|
||||||
|
@ -2802,9 +2803,6 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
|
||||||
engine->emit_bb_start = i830_emit_bb_start;
|
engine->emit_bb_start = i830_emit_bb_start;
|
||||||
else
|
else
|
||||||
engine->emit_bb_start = i915_emit_bb_start;
|
engine->emit_bb_start = i915_emit_bb_start;
|
||||||
|
|
||||||
intel_ring_init_irq(dev_priv, engine);
|
|
||||||
intel_ring_init_semaphores(dev_priv, engine);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int intel_init_render_ring_buffer(struct intel_engine_cs *engine)
|
int intel_init_render_ring_buffer(struct intel_engine_cs *engine)
|
||||||
|
|
Loading…
Reference in New Issue