Re: [Mesa-dev] i965: The future of blorp

2016-04-19 Thread Chad Versace
On Sat 16 Apr 2016, Jason Ekstrand wrote:
> All,
> With Topi's gen8/9 blorp patches on the list, I wanted to start a brief
> discussion about the future of blorp in the hopes of us all being on the
> same page and not stepping on each other's toes.  I think everyone is now
> agreed that blorp is the future and GL meta should die.
> 
> As we continue to work on the Vulkan driver, its need for blorp-like things
> increases.  We currently have all of the blits and resolves implemented in
> a Vulkan-based meta scheme.  While Vulkan doesn't have the same meta
> problems as GL (It's actually fairly clean), it still isn't a perfect fit.
> The illusion of being able to use a hardware-agnostic API breaks down
> fairly quickly when you start doing hardware-specific things.  One example
> is HiZ resolves on gen7:  We can, in theory, add HiZ op bits to our
> side-band data structure that we pass to create_pipeline but a HiZ resolve
> pipeline isn't really that much like a normal pipeline.  You can make the
> argument that "we're re-using the normal pipeline creation code" or you can
> make the argument that "we're duplicating blorp".  In my brain, the second
> argument is starting to win.

In my brain too. As we go down the rabbithole of implementing HiZ and
fast clears in Vulkan meta, I feel that we'll duplicate blorp, and
duplicate it badly.

> Where am I going with this?  What I think I'd eventually like to see is
> some sort of a unified blorp that can be used in both drivers.  (Note: That
> unified blorp might still end up being Vulkan meta; I'm still not sure.)
> Sure, it may mean doing state setup 3 places instead of 2 but it also means
> getting the HiZ and fast-clear pipelines right 1 place instead of 2 and I
> feel that's a bit more important.

I agree. Getting HiZ and fast-clear right in one place, for both GL and
VK, and having the implementation disentangled from the the normal
pipeline codepaths, is a goal worth pursuing.

> As it currently stands, here's my plan:

[...]

The plan sounds good to me.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] i965: The future of blorp

2016-04-18 Thread Pohjolainen, Topi
On Sat, Apr 16, 2016 at 12:12:46PM -0700, Jason Ekstrand wrote:
>All,
>With Topi's gen8/9 blorp patches on the list, I wanted to start a brief
>discussion about the future of blorp in the hopes of us all being on
>the same page and not stepping on each other's toes.  I think everyone
>is now agreed that blorp is the future and GL meta should die.
>As we continue to work on the Vulkan driver, its need for blorp-like
>things increases.  We currently have all of the blits and resolves
>implemented in a Vulkan-based meta scheme.  While Vulkan doesn't have
>the same meta problems as GL (It's actually fairly clean), it still
>isn't a perfect fit.  The illusion of being able to use a
>hardware-agnostic API breaks down fairly quickly when you start doing
>hardware-specific things.  One example is HiZ resolves on gen7:  We
>can, in theory, add HiZ op bits to our side-band data structure that we
>pass to create_pipeline but a HiZ resolve pipeline isn't really that
>much like a normal pipeline.  You can make the argument that "we're
>re-using the normal pipeline creation code" or you can make the
>argument that "we're duplicating blorp".  In my brain, the second
>argument is starting ti win.
>Where am I going with this?  What I think I'd eventually like to see is
>some sort of a unified blorp that can be used in both drivers.  (Note:
>That unified blorp might still end up being Vulkan meta; I'm still not
>sure.)  Sure, it may mean doing state setup 3 places instead of 2 but
>it also means getting the HiZ and fast-clear pipelines right 1 place
>instead of 2 and I feel that's a bit more important.
>As it currently stands, here's my plan:
> 1) Get Topi's gen8/9 blorp patches reviewed and merged.
> 2) Rework blorp to start using NIR shaders whenever possible.  I know
>Topi had a project at one point that tried to get us using GLSL shaders
>in blorp which ran into some problems.  With the compiler APIs
>refactored to accept NIR directly, turning a NIR shader into a binary
>is trivial.  We've had great success using NIR directly for building
>shaders for Vulkan meta and I think doing that in blorp would also be
>good.  This would also provide our first blorp code-sharing point
>between Vulkan and GL as a lot of the NIR code to build those shaders
>could be shared.

Sounds good to me. We are missing 16x msaa support in blorp blits. Ken and I
quickly discussed implementing that in glsl later (perhaps using the version
we have for meta). Using NIR would allow us to skip all the scanning and
parsing.
In general moving from blorp hand-crafted compiler to NIR (or glsl) is the
right direction in my opinion.

> 3) Start using the XML-generated packing structs for doing blorp state
>setup.  Again, we've had great success in the Vulkan driver with
>Kristian's XML-generated packing structs.  Using them in blorp where
>it's practical would substantially reduce the amount of code we have
>for blorp state setup and possibly let us unify gen7-9 (not sure how
>much we can unify, but certainly some).

I've been thinking of re-using normal i965 upload logic. I've experimented
with that in past - all that is needed is to make the interface more explicit
instead of just passing current driver state to the emitters.
Having said that I'm equally pro for using something that worked for you guys
in Vulkan.

> 4) Figure out how to make blorp work in both drivers.  This is a bit
>open-ended as the two drivers have vastly different batch-submission
>and relocation-tracking models.  That said, I've been kicking this one
>around in my brain quite a bit lately and I think I'm starting to
>converge on something resembling a solution.
>I think each of the changes listed above has merit without the others,
>so if we decide to bail on the unified blorp plan at some point, we've
>still accomplished something. Thoughts?  Opinions?  Rotten tomatoes?
>As far as who does it, I'm more than willing to pick up the work and
>make it happen.  If others want to chip in, that's fine too.
>--Jason

I'm at least pretty open how to proceed. Having more eyes on blorp and
especially on the compiler side certainly wouldn't hurt :)
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] i965: The future of blorp

2016-04-16 Thread Jason Ekstrand
All,
With Topi's gen8/9 blorp patches on the list, I wanted to start a brief
discussion about the future of blorp in the hopes of us all being on the
same page and not stepping on each other's toes.  I think everyone is now
agreed that blorp is the future and GL meta should die.

As we continue to work on the Vulkan driver, its need for blorp-like things
increases.  We currently have all of the blits and resolves implemented in
a Vulkan-based meta scheme.  While Vulkan doesn't have the same meta
problems as GL (It's actually fairly clean), it still isn't a perfect fit.
The illusion of being able to use a hardware-agnostic API breaks down
fairly quickly when you start doing hardware-specific things.  One example
is HiZ resolves on gen7:  We can, in theory, add HiZ op bits to our
side-band data structure that we pass to create_pipeline but a HiZ resolve
pipeline isn't really that much like a normal pipeline.  You can make the
argument that "we're re-using the normal pipeline creation code" or you can
make the argument that "we're duplicating blorp".  In my brain, the second
argument is starting ti win.

Where am I going with this?  What I think I'd eventually like to see is
some sort of a unified blorp that can be used in both drivers.  (Note: That
unified blorp might still end up being Vulkan meta; I'm still not sure.)
Sure, it may mean doing state setup 3 places instead of 2 but it also means
getting the HiZ and fast-clear pipelines right 1 place instead of 2 and I
feel that's a bit more important.

As it currently stands, here's my plan:

 1) Get Topi's gen8/9 blorp patches reviewed and merged.

 2) Rework blorp to start using NIR shaders whenever possible.  I know Topi
had a project at one point that tried to get us using GLSL shaders in blorp
which ran into some problems.  With the compiler APIs refactored to accept
NIR directly, turning a NIR shader into a binary is trivial.  We've had
great success using NIR directly for building shaders for Vulkan meta and I
think doing that in blorp would also be good.  This would also provide our
first blorp code-sharing point between Vulkan and GL as a lot of the NIR
code to build those shaders could be shared.

 3) Start using the XML-generated packing structs for doing blorp state
setup.  Again, we've had great success in the Vulkan driver with Kristian's
XML-generated packing structs.  Using them in blorp where it's practical
would substantially reduce the amount of code we have for blorp state setup
and possibly let us unify gen7-9 (not sure how much we can unify, but
certainly some).

 4) Figure out how to make blorp work in both drivers.  This is a bit
open-ended as the two drivers have vastly different batch-submission and
relocation-tracking models.  That said, I've been kicking this one around
in my brain quite a bit lately and I think I'm starting to converge on
something resembling a solution.

I think each of the changes listed above has merit without the others, so
if we decide to bail on the unified blorp plan at some point, we've still
accomplished something. Thoughts?  Opinions?  Rotten tomatoes?

As far as who does it, I'm more than willing to pick up the work and make
it happen.  If others want to chip in, that's fine too.

--Jason
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev