<p dir="ltr">On Aug 20, 2016 5:00 AM, "Emil Velikov" <<a href="mailto:emil.l.velikov@gmail.com">emil.l.velikov@gmail.com</a>> wrote:<br>
><br>
> On 20 August 2016 at 07:25, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> wrote:<br>
> > On Aug 19, 2016 18:05, "Eric Engestrom" <<a href="mailto:eric.engestrom@imgtec.com">eric.engestrom@imgtec.com</a>> wrote:<br>
> >><br>
> >> On Fri, Aug 19, 2016 at 09:04:14AM -0700, Jason Ekstrand wrote:<br>
> >> > Not providing a path allows the ICD to work on multi-arch systems but<br>
> >> > breaks it if you install anywhere other than /usr/lib.  Given that users<br>
> >> > may be installing locally in .local or similar, we probably do want to<br>
> >> > provide a filename.  Distros can carry a revert of this commit if they<br>
> >> > want<br>
> >> > an intel_icd.json file without the path.<br>
> >> ><br>
> Not sure I understand what this patch fixes that the Vulkan spec does<br>
> not have a recommendation or two for. Can anyone elaborate step by<br>
> step what we're having here, please ?<br>
><br>
> Furthermore this sounds like a developer only thing, so perhaps we<br>
> should restrict it there ? As-is we're effectively annoying some/most<br>
> distros.</p>
<p dir="ltr">That a sticky question.  I believe including the full path is the "correct" thing to do.  That is what the ICD file is there for after all.  Distros, however, may choose to do differently for a packaged system-wide install due to multi-arch issues.</p>
<p dir="ltr">The problem with a full path is because of an oversight in the defining of the ICD file format, namely that they provided no way of specifying the architecture of the .so.  This makes it very difficult to install both 32 and 64-bit versions side-by-side.  The solution that ajax chose to use in his early fedora packages was to place libvulkan_Intel.so in the regular library install path and not specify any path beyond the filename.  This way the loader will call dlopen("libvulkan_Intel.so") and regular search paths will be used.  Since the operating system sets those paths up correctly, the correct version of libvulkan_Intel.so is loaded and off you go.</p>
<p dir="ltr">Personally, I think the more correct way to handle this would be with an architecture field in the ICD json file.  Proposing that and fixing up the loader to handle has been on my to-do list for some time but has been eclipsed by other things.</p>
<p dir="ltr">> >> > Signed-off-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
> >> > Cc: Mark Janes <<a href="mailto:mark.a.janes@intel.com">mark.a.janes@intel.com</a>><br>
> >><br>
> >> I have one question (below), but this patch is good regardless:<br>
> >> Reviewed-by: Eric Engestrom <<a href="mailto:eric.engestrom@imgtec.com">eric.engestrom@imgtec.com</a>><br>
> >><br>
> >> > ---<br>
> >> >  src/intel/vulkan/.gitignore                            | 1 +<br>
> >> >  src/intel/vulkan/Makefile.am                           | 7 ++++++-<br>
> >> >  src/intel/vulkan/{intel_icd.json => <a href="http://intel_icd.json.in">intel_icd.json.in</a>} | 2 +-<br>
> >> >  3 files changed, 8 insertions(+), 2 deletions(-)<br>
> >> >  rename src/intel/vulkan/{intel_icd.json => <a href="http://intel_icd.json.in">intel_icd.json.in</a>} (59%)<br>
> >> ><br>
> >> > diff --git a/src/intel/vulkan/.gitignore b/src/intel/vulkan/.gitignore<br>
> >> > index bde5cd8..a099ff6 100644<br>
> >> > --- a/src/intel/vulkan/.gitignore<br>
> >> > +++ b/src/intel/vulkan/.gitignore<br>
> >> > @@ -3,3 +3,4 @@<br>
> >> >  /anv_entrypoints.h<br>
> >> >  /anv_timestamp.h<br>
> >> >  /dev_icd.json<br>
> >> > +/intel_icd.json<br>
> >> > diff --git a/src/intel/vulkan/Makefile.am b/src/intel/vulkan/Makefile.am<br>
> >> > index ad0148d..9fef960 100644<br>
> >> > --- a/src/intel/vulkan/Makefile.am<br>
> >> > +++ b/src/intel/vulkan/Makefile.am<br>
> >> > @@ -141,7 +141,7 @@ anv_timestamp.h:<br>
> >> >       $(AM_V_GEN) echo "#define ANV_TIMESTAMP \"$(TIMESTAMP_CMD)\"" > $@<br>
> >> ><br>
> >> >  BUILT_SOURCES = $(VULKAN_GENERATED_FILES)<br>
> >> > -CLEANFILES = $(BUILT_SOURCES) dev_icd.json<br>
> >> > +CLEANFILES = $(BUILT_SOURCES) dev_icd.json intel_icd.json<br>
> >> >  EXTRA_DIST = \<br>
> >> >       $(top_srcdir)/include/vulkan/vk_icd.h \<br>
> >> >       anv_entrypoints_gen.py \<br>
> >> > @@ -170,6 +170,11 @@ dev_icd.json : <a href="http://dev_icd.json.in">dev_icd.json.in</a><br>
> >> >               -e "s#@build_libdir@#${abs_top_builddir}/${LIB_DIR}#" \<br>
> >> >               < $(srcdir)/<a href="http://dev_icd.json.in">dev_icd.json.in</a> > $@<br>
> >> ><br>
> >> > +intel_icd.json : <a href="http://intel_icd.json.in">intel_icd.json.in</a><br>
> >> > +     $(AM_V_GEN) $(SED) \<br>
> >> > +             -e "s#@install_libdir@#${libdir}#" \<br>
> >> > +             < $(srcdir)/<a href="http://intel_icd.json.in">intel_icd.json.in</a> > $@<br>
> >><br>
> >> I think I may have already asked when dev_icd.json was added, but why<br>
> >> use a relative path for the dependency and a full path when reading it?<br>
> >> Why not use the full path for the dep and read `< $<` instead?<br>
> ><br>
> > No good reason that I know of other than copy+paste of the one above. We<br>
> > could probably make that change.  Emil?<br>
> ><br>
> IIRC '< $<' was only applicable in some cases according to POSIX make.<br>
> One the relative/full path, I think that non-gnumake implementations<br>
> were having issues with the proposed solution. If anyone can confirm<br>
> that it works I'm ok with changing it.<br>
><br>
> Thanks<br>
> Emil<br>
</p>