[PATCH RFC 102/111] staging: etnaviv: separate GPU pipes from execution state

Christian Gmeiner christian.gmeiner at gmail.com
Tue Apr 7 08:13:53 PDT 2015


2015-04-07 17:01 GMT+02:00 Lucas Stach <l.stach at pengutronix.de>:
> Am Dienstag, den 07.04.2015, 16:51 +0200 schrieb Jon Nettleton:
>>
>>
>> On Tue, Apr 7, 2015 at 4:38 PM, Alex Deucher <alexdeucher at gmail.com>
>> wrote:
>>         On Tue, Apr 7, 2015 at 3:46 AM, Lucas Stach
>>         <l.stach at pengutronix.de> wrote:
>>         > Am Sonntag, den 05.04.2015, 21:41 +0200 schrieb Christian
>>         Gmeiner:
>>         >> 2015-04-02 18:37 GMT+02:00 Russell King - ARM Linux
>>         <linux at arm.linux.org.uk>:
>>         >> > On Thu, Apr 02, 2015 at 05:30:44PM +0200, Lucas Stach
>>         wrote:
>>         >> >> While this isn't the case on i.MX6 a single GPU pipe can
>>         have
>>         >> >> multiple rendering backend states, which can be selected
>>         by the
>>         >> >> pipe switch command, so there is no strict mapping
>>         between the
>>         >> >> user "pipes" and the PIPE_2D/PIPE_3D execution states.
>>         >> >
>>         >> > This is good, because on Dove we have a single Vivante
>>         core which
>>         >> > supports both 2D and 3D together.  It's always bugged me
>>         that
>>         >> > etnadrm has not treated cores separately from their
>>         capabilities.
>>         >> >
>>         >>
>>         >> Today I finally got the idea how this multiple pipe stuff
>>         should be
>>         >> done the right way - thanks Russell.
>>         >> So maybe you/we need to rework how the driver is designed
>>         regarding
>>         >> cores and pipes.
>>         >>
>>         >> On the imx6 we should get 3 device nodes each only
>>         supporting one pipe
>>         >> type. On the dove we
>>         >> should get only one device node supporting 2 pipes types.
>>         What do you think?
>>         >>
>>         > Sorry, but I strongly object against the idea of having
>>         multiple DRM
>>         > device nodes for the different pipes.
>>         >
>>         > If we need the GPU2D and GPU3D to work together (and I can
>>         already see
>>         > use-cases where we need to use the GPU2D in MESA to do
>>         things the GPU3D
>>         > is incapable of) we would then need a lot more DMA-BUFs to
>>         get buffers
>>         > across the devices. This is a waste of resources and
>>         complicates things
>>         > a lot as we would then have to deal with DMA-BUF fences just
>>         to get the
>>         > synchronization right, which is a no-brainer if we are on
>>         the same DRM
>>         > device.
>>         >
>>         > Also it does not allow us to make any simplifications to the
>>         userspace
>>         > API, so I can't really see any benefit.
>>         >
>>         > Also on Dove I think one would expect to get a single pipe
>>         capable of
>>         > executing in both 2D and 3D state. If userspace takes
>>         advantage of that
>>         > one could leave the sync between both engines to the FE,
>>         which is a good
>>         > thing as this allows the kernel to do less work. I don't see
>>         why we
>>         > should throw this away.
>>
>>         Just about all modern GPUs support varying combinations of
>>         independent
>>         pipelines and we currently support this just fine via a single
>>         device
>>         node in other drm drivers.  E.g., modern radeons support one
>>         or more
>>         gfx, compute, dma, video decode and video encode engines.
>>         What
>>         combination is present depends on the asic.
>>
>>
>>
>>
>> That reminds me.  We should also have in the back of our heads that
>> compute is supported by the newer Vivante chips.  We will also need to
>> support multiple independent 3d cores as that support has shown up in
>> the V5 galcore drivers.
>>
> AFAIK compute is just another state of the 3D pipe where instead of
> issuing a draw command you would kick the thread walker.
>
> Multicore with a single FE is just a single pipe with chip selects set
> to the available backends and mirrored pagetables for the MMUs. With
> more than one FE you get more than one pipe which is more like a SLI
> setup on the desktop, where userspace has to deal with splitting the
> render targets into portions for each GPU.
> One more reason to keep things in one DRM device, as I think no one
> wants to deal with syncing pagetables across different devices.
>

I don't get you naming scheme - sorry.

For me one Core has a single FE. This single FE can have one pipe or
multiple pipes. A pipe is the execution unit select via SELECT_PIPE
command (2d, 3d, ..).

In the Dove use case we have:
- 1 Core with one FE
- 2 pipelines

In the imx6 case we have:
- 3 Cores (each has only one FE)
- every FE only support one type of pipeline.

And each Core(/FE) has its own device node. Does this make any sense?

greets
--
Christian Gmeiner, MSc

https://soundcloud.com/christian-gmeiner


More information about the dri-devel mailing list