Re: [Mesa-dev] [PATCH v4 11/13] meson: build gallium omx state tracker

2017-11-20 Thread Dylan Baker
Quoting Emil Velikov (2017-11-17 04:19:22)
> Hi Dylan,
> 
> On 17 November 2017 at 00:27, Dylan Baker  wrote:
> 
> > +  elif not (with_gallium_r600 or with_gallium_radeonsi or 
> > with_gallium_nouveau)
> 
> 
> > +  elif not (with_gallium_r600 or with_gallium_radeonsi or 
> > with_gallium_nouveau)
> > +error('OMX state tracker requires at least one of the following 
> > gallium drivers: r600, radeonsi, nouveau.')
> 
> We had this type of dual tracking (once in configure and second in the
> makefile) in the past for the autotools setup.
> Sadly it was getting out of sync fairly often so Matt removed it.

Now that I've had some more time ot think about it it, one of the things we can
do (Eric Anholt suggested it as well), is move some of this logic out of
$top/meson.build and down into the lower meson.build scripts, maybe
src/gallium/targets/*/meson.build, which would make it harder for people to miss
them since the two pieces of logic would be together.

> 
> In the odd case where an empty* target is build we'll effectively nuke
> it as part of the hardlink generation process.
> 
> If you agreed, I won't bother respinning the series for that. One can
> relax things as follow-up.
> 
> * A target where no driver is actually present, only the state-tracker
> bits are there.
> 
> > --- a/src/gallium/meson.build
> > +++ b/src/gallium/meson.build
> > @@ -105,6 +105,9 @@ endif
> >  if with_gallium_xvmc
> >subdir('state_trackers/xvmc')
> >  endif
> > +if with_gallium_omx
> > +  subdir('state_trackers/omx_bellagio')
> > +endif
> 
> > -# TODO: OMX
> > +if with_gallium_omx
> > +  subdir('targets/omx-bellagio')
> > +endif
> Grouping the state-tracker and target within the same if block will
> make things easier to read.
> Admittedly it's minor polish, so we can do that at later stage.
> 
> Last but not least: thanks for removing the overlinking for va/vdpau.
> 
> Emil


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


Re: [Mesa-dev] [PATCH v4 11/13] meson: build gallium omx state tracker

2017-11-17 Thread Dylan Baker
Quoting Emil Velikov (2017-11-17 04:19:22)
> Hi Dylan,
> 
> On 17 November 2017 at 00:27, Dylan Baker  wrote:
> 
> > +  elif not (with_gallium_r600 or with_gallium_radeonsi or 
> > with_gallium_nouveau)
> 
> 
> > +  elif not (with_gallium_r600 or with_gallium_radeonsi or 
> > with_gallium_nouveau)
> > +error('OMX state tracker requires at least one of the following 
> > gallium drivers: r600, radeonsi, nouveau.')
> 
> We had this type of dual tracking (once in configure and second in the
> makefile) in the past for the autotools setup.
> Sadly it was getting out of sync fairly often so Matt removed it.

How often do new drivers get added to media state trackers (real question)? It
seems like the kind of thing that doesn't happen all that often and good review
should catch.

> 
> In the odd case where an empty* target is build we'll effectively nuke
> it as part of the hardlink generation process.

That seems... ugly. And it builds more than we need to since we wouldn't
actually end up installing the state tracker. It would also confuse the heck out
of me if I had turned OMX on and then didn't get an OMX driver or an error.

> 
> If you agreed, I won't bother respinning the series for that. One can
> relax things as follow-up.
> 
> * A target where no driver is actually present, only the state-tracker
> bits are there.
> 
> > --- a/src/gallium/meson.build
> > +++ b/src/gallium/meson.build
> > @@ -105,6 +105,9 @@ endif
> >  if with_gallium_xvmc
> >subdir('state_trackers/xvmc')
> >  endif
> > +if with_gallium_omx
> > +  subdir('state_trackers/omx_bellagio')
> > +endif
> 
> > -# TODO: OMX
> > +if with_gallium_omx
> > +  subdir('targets/omx-bellagio')
> > +endif
> Grouping the state-tracker and target within the same if block will
> make things easier to read.
> Admittedly it's minor polish, so we can do that at later stage.

I have some patches built on top of this that do that grouping, as well as some
other cleanups that I'm pretty happy with the result of for handling linking
drivers into state trackers.

> 
> Last but not least: thanks for removing the overlinking for va/vdpau.
> 
> Emil


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


Re: [Mesa-dev] [PATCH v4 11/13] meson: build gallium omx state tracker

2017-11-17 Thread Emil Velikov
Hi Dylan,

On 17 November 2017 at 00:27, Dylan Baker  wrote:

> +  elif not (with_gallium_r600 or with_gallium_radeonsi or 
> with_gallium_nouveau)


> +  elif not (with_gallium_r600 or with_gallium_radeonsi or 
> with_gallium_nouveau)
> +error('OMX state tracker requires at least one of the following gallium 
> drivers: r600, radeonsi, nouveau.')

We had this type of dual tracking (once in configure and second in the
makefile) in the past for the autotools setup.
Sadly it was getting out of sync fairly often so Matt removed it.

In the odd case where an empty* target is build we'll effectively nuke
it as part of the hardlink generation process.

If you agreed, I won't bother respinning the series for that. One can
relax things as follow-up.

* A target where no driver is actually present, only the state-tracker
bits are there.

> --- a/src/gallium/meson.build
> +++ b/src/gallium/meson.build
> @@ -105,6 +105,9 @@ endif
>  if with_gallium_xvmc
>subdir('state_trackers/xvmc')
>  endif
> +if with_gallium_omx
> +  subdir('state_trackers/omx_bellagio')
> +endif

> -# TODO: OMX
> +if with_gallium_omx
> +  subdir('targets/omx-bellagio')
> +endif
Grouping the state-tracker and target within the same if block will
make things easier to read.
Admittedly it's minor polish, so we can do that at later stage.

Last but not least: thanks for removing the overlinking for va/vdpau.

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


[Mesa-dev] [PATCH v4 11/13] meson: build gallium omx state tracker

2017-11-16 Thread Dylan Baker
v2: - set with_gallium_omx when -Dgallium-omx=true
- Fix detection of omx plugins dir
- only use cflags from pkg-config, don't add linker flags.

Signed-off-by: Dylan Baker 
---
 meson.build| 60 -
 meson_options.txt  | 13 
 src/gallium/meson.build|  7 +-
 .../state_trackers/omx_bellagio/meson.build| 30 +
 src/gallium/targets/omx-bellagio/meson.build   | 77 ++
 5 files changed, 185 insertions(+), 2 deletions(-)
 create mode 100644 src/gallium/state_trackers/omx_bellagio/meson.build
 create mode 100644 src/gallium/targets/omx-bellagio/meson.build

diff --git a/meson.build b/meson.build
index 9e4460e15c5..2fffd66861d 100644
--- a/meson.build
+++ b/meson.build
@@ -429,6 +429,64 @@ if xvmc_drivers_path == ''
   xvmc_drivers_path = get_option('libdir')
 endif
 
+dep_omx = []
+_omx = get_option('gallium-omx')
+if _omx == 'auto'
+  if not ['linux', 'bsd'].contains(host_machine.system())
+with_gallium_omx = false
+  elif not with_platform_x11
+with_gallium_omx = false
+  elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau)
+with_gallium_omx = false
+  else
+dep_omx = dependency('libomxil-bellagio', required : false)
+with_gallium_omx = dep_omx.found()
+  endif
+elif _omx == 'true'
+  if not ['linux', 'bsd'].contains(host_machine.system())
+error('OMX state tracker can only be built on unix-like OSes.')
+  elif not (with_platform_x11 or with_platform_drm)
+error('OMX state tracker requires X11 or drm platform support.')
+with_gallium_omx = false
+  elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau)
+error('OMX state tracker requires at least one of the following gallium 
drivers: r600, radeonsi, nouveau.')
+  endif
+  dep_omx = dependency('libomxil-bellagio')
+  with_gallium_omx = true
+else
+  with_gallium_omx = false
+endif
+
+omx_drivers_path = get_option('omx-libs-path')
+if with_gallium_omx
+  # Figure out where to put the omx driver.
+  # FIXME: this could all be vastly simplified by adding a 'defined_variable'
+  # argument to meson's get_pkgconfig_variable method.
+  if omx_drivers_path == ''
+_omx_libdir = dep_omx.get_pkgconfig_variable('libdir')
+_omx_drivers_dir = dep_omx.get_pkgconfig_variable('pluginsdir')
+if _omx_libdir == get_option('libdir')
+  omx_drivers_path = _omx_drivers_dir
+else
+  _omx_base_dir = []
+  # This will fail on windows. Does OMX run on windows?
+  _omx_libdir = _omx_libdir.split('/')
+  _omx_drivers_dir = _omx_drivers_dir.split('/')
+  foreach o : _omx_drivers_dir
+if not _omx_libdir.contains(o)
+  _omx_base_dir += o
+endif
+  endforeach
+  omx_drivers_path = join_paths(get_option('libdir'), _omx_base_dir)
+endif
+  endif
+endif
+if with_gallium_omx
+  dep_omx = declare_dependency(
+compile_args : dep_omx.get_pkgconfig_variable('cflags').split()
+  )
+endif
+
 gl_pkgconfig_c_flags = []
 if with_platform_x11
   if with_any_vk or (with_glx == 'dri' and with_dri_platform == 'drm')
@@ -936,7 +994,7 @@ if with_platform_x11
 dep_xxf86vm = dependency('xxf86vm', required : false)
   endif
   if (with_any_vk or (with_glx == 'dri' and with_dri_platform == 'drm') or
-  (with_gallium_vdpau or with_gallium_xvmc))
+  (with_gallium_vdpau or with_gallium_xvmc or with_gallium_omx))
 dep_xcb = dependency('xcb')
 dep_x11_xcb = dependency('x11-xcb')
 dep_xcb_dri2 = dependency('xcb-dri2', version : '>= 1.8')
diff --git a/meson_options.txt b/meson_options.txt
index f0de44e751b..8ee216d5b8a 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -75,6 +75,19 @@ option(
   value : '',
   description : 'path to put xvmc libraries. defaults to $libdir.'
 )
+option(
+  'gallium-omx',
+  type : 'combo',
+  value : 'auto',
+  choices : ['auto', 'true', 'false'],
+  description : 'enable gallium omx bellagio state tracker.',
+)
+option(
+  'omx-libs-path',
+  type : 'string',
+  value : '',
+  description : 'path to put omx libraries. defaults to omx-bellagio 
pkg-config pluginsdir.'
+)
 option(
   'vulkan-drivers',
   type : 'string',
diff --git a/src/gallium/meson.build b/src/gallium/meson.build
index a8317a53552..c17dba51ff2 100644
--- a/src/gallium/meson.build
+++ b/src/gallium/meson.build
@@ -105,6 +105,9 @@ endif
 if with_gallium_xvmc
   subdir('state_trackers/xvmc')
 endif
+if with_gallium_omx
+  subdir('state_trackers/omx_bellagio')
+endif
 # TODO: SWR
 # TODO: clover
 if with_dri and with_gallium
@@ -122,7 +125,9 @@ endif
 if with_gallium_xvmc
   subdir('targets/xvmc')
 endif
-# TODO: OMX
+if with_gallium_omx
+  subdir('targets/omx-bellagio')
+endif
 # TODO: VA
 # TODO: xa
 # TODO: nine
diff --git a/src/gallium/state_trackers/omx_bellagio/meson.build 
b/src/gallium/state_trackers/omx_bellagio/meson.build
new file mode