[Intel-gfx] [RFC] drm/i915: Emit to ringbuffer directly
Chris Wilson
chris at chris-wilson.co.uk
Fri Sep 9 13:45:11 UTC 2016
On Fri, Sep 09, 2016 at 09:32:50AM +0100, Tvrtko Ursulin wrote:
>
> On 08/09/16 17:40, Chris Wilson wrote:
> >On Thu, Sep 08, 2016 at 04:12:55PM +0100, Tvrtko Ursulin wrote:
> >>From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> >>
> >>This removes the usage of intel_ring_emit in favour of
> >>directly writing to the ring buffer.
> >
> >I have the same patch! But I called it out, for historical reasons.
>
> Yes I know we talked about it in the past but I did not think you
> will find time to actually write it amongst all the other things.
>
> >Oh, except mine uses out[0]...out[N] because gcc prefers that over
> >*out++ = ...
>
> It copes just fine with the latter here, for example:
>
> *rbuf++ = cmd;
> *rbuf++ = I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT;
> *rbuf++ = 0; /* upper addr */
> *rbuf++ = 0; /* value */
>
> Is:
>
> 3e9: 89 10 mov %edx,(%rax)
> 3eb: c7 40 04 04 01 00 00 movl $0x104,0x4(%rax)
> 3f2: c7 40 08 00 00 00 00 movl $0x0,0x8(%rax)
> 3f9: c7 40 0c 00 00 00 00 movl $0x0,0xc(%rax)
Last time Dave suggested using something like
i915_gem_request_emit(req, (struct cmd_packet){ dw0, dw1, dw2 });
I tried mocking something up, but just found gcc was constructing the
struct on the stack and then copying across, and generating far more
code than the sequence above. Worth seeing if that is better (or if my
mockup was just bad).
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list