[Mesa-dev] [PATCH v2 4/4] meson: build "radv" vulkan driver for radeon hardware

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Mon Sep 25 21:26:01 UTC 2017


On Mon, Sep 25, 2017 at 9:58 AM, Dylan Baker <dylan at pnwbakers.com> wrote:
> Hi Bas,
>
> I'll add a local workaround, but really I want to get this fix into meson proper
> (I wrote LLVM dependency handling for meson just for mesa). Does LLVM generally
> add "svn" to the end of the version if it's build from svn?

AFAICT yes, and the shared  library then also has that in the name, so
we just need to prune it for the macros.

e.g. llvm-config --version = "6.0.0svn" and the distro package has the
following LLVM dso's:

llvm-libs-svn /usr/lib/libLLVM-6.0.0svn-r313497.so
llvm-libs-svn /usr/lib/libLLVM-6.0svn.so
llvm-libs-svn /usr/lib/libLLVM.so.6.0.0svn-r313497

- Bas

>
> Dylan
>
> Quoting Bas Nieuwenhuizen (2017-09-23 21:16:36)
>> Hi Dylan,
>>
>> Awesome work. I noticed though that when llvm-config gives 6.0.0svn we
>> don't strip the svn away when passing to HAVE_LLVM and
>> MESA_LLVM_VERSION_PATCH, which results in compile errors.
>>
>> - Bas
>>
>> On Sun, Sep 24, 2017 at 12:08 AM, Dylan Baker <dylan at pnwbakers.com> wrote:
>> > I have tested this, and as of v2 it actually works. I'll update the commitment message.
>> >
>> > Dylan
>> >
>> > On September 23, 2017 8:39:06 AM PDT, Dylan Baker <dylan at pnwbakers.com> wrote:
>> >>This builds and installs, but I haven't had a chance to test it yet.
>> >>
>> >>v2: - enable radv by default
>> >>    - add shader cache support and enforce that it's built for radv
>> >>
>> >>Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
>> >>---
>> >> meson.build                       |  27 ++++++++-
>> >> meson_options.txt                 |   4 +-
>> >> src/{ => amd/addrlib}/meson.build |  69 ++++++++++++---------
>> >> src/{ => amd/common}/meson.build  |  65 ++++++++++++--------
>> >> src/{ => amd}/meson.build         |  33 ++--------
>> >>src/amd/vulkan/meson.build        | 124
>> >>++++++++++++++++++++++++++++++++++++++
>> >> src/meson.build                   |   2 +-
>> >> 7 files changed, 240 insertions(+), 84 deletions(-)
>> >> copy src/{ => amd/addrlib}/meson.build (51%)
>> >> copy src/{ => amd/common}/meson.build (51%)
>> >> copy src/{ => amd}/meson.build (65%)
>> >> create mode 100644 src/amd/vulkan/meson.build
>> >>
>> >>diff --git a/meson.build b/meson.build
>> >>index 09e53957fe9..0b3e6f61545 100644
>> >>--- a/meson.build
>> >>+++ b/meson.build
>> >>@@ -71,6 +71,12 @@ if get_option('buildtype').startswith('debug')
>> >>   pre_args += '-DDEBUG'
>> >> endif
>> >>
>> >>+if get_option('shader-cache')
>> >>+  pre_args += '-DENABLE_SHADER_CACHE'
>> >>+elif with_amd_vk
>> >>+  error('Radv requires shader cache support')
>> >>+endif
>> >>+
>> >> # Check for GCC style builtins
>> >>foreach b : ['bswap32', 'bswap64', 'clz', 'clzll', 'ctz', 'expect',
>> >>'ffs',
>> >>              'ffsll', 'popcount', 'popcountll', 'unreachable']
>> >>@@ -79,7 +85,7 @@ foreach b : ['bswap32', 'bswap64', 'clz', 'clzll',
>> >>'ctz', 'expect', 'ffs',
>> >>   endif
>> >> endforeach
>> >>
>> >>-# check for GCC __attribute__ s
>> >>+# check for GCC __attribute__
>> >> foreach a : ['const', 'flatten', 'malloc', 'pure', 'unused',
>> >>              'warn_unused_result', 'weak',]
>> >>   if cc.compiles('int foo(void) __attribute__((@0@));'.format(a),
>> >>@@ -291,6 +297,23 @@ dep_m = cc.find_library('m', required : false)
>> >> # TODO: conditionalize libdrm requirement
>> >> dep_libdrm = dependency('libdrm', version : '>= 2.4.75')
>> >> pre_args += '-DHAVE_LIBDRM'
>> >>+dep_libdrm_amdgpu = []
>> >>+if with_amd_vk
>> >>+  dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>=
>> >>2.4.82')
>> >>+endif
>> >>+
>> >>+dep_llvm = dependency('llvm', version : '>= 3.9.0', required : false)
>> >>+if not dep_llvm.found()
>> >>+  if with_amd_vk
>> >>+    error('Radv requires llvm.')
>> >>+  endif
>> >>+else
>> >>+  _llvm_version = dep_llvm.version().split('.')
>> >>+  pre_args += [
>> >>+    '-DHAVE_LLVM=0x0 at 0@@1@@2@'.format(_llvm_version[0],
>> >>_llvm_version[1], _llvm_version[2]),
>> >>+    '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_version[2]),
>> >>+  ]
>> >>+endif
>> >>
>> >> # TODO: make this conditional
>> >> dep_valgrind = dependency('valgrind', required : false)
>> >>@@ -304,8 +327,6 @@ endif
>> >>
>> >> # TODO: llvm-prefix and llvm-shared-libs
>> >>
>> >>-# TODO: llvm dependency (that's all native now, yay!)
>> >>-
>> >> # TODO: unwind (llvm [radeon, gallivm] and gallium)
>> >>
>> >> # TODO: flags for opengl, gles, dri
>> >>diff --git a/meson_options.txt b/meson_options.txt
>> >>index e52cec31f11..854cba851d7 100644
>> >>--- a/meson_options.txt
>> >>+++ b/meson_options.txt
>> >>@@ -20,8 +20,10 @@
>> >>
>> >> option('platforms',      type : 'string',  value : 'x11,wayland',
>> >>description : 'comma separated list of window systems to support.
>> >>wayland, x11, surfaceless, drm, etc.')
>> >>-option('vulkan-drivers', type : 'string',  value : 'intel',
>> >>+option('vulkan-drivers', type : 'string',  value : 'intel,amd',
>> >>      description : 'comma separated list of vulkan drivers to build.')
>> >>+option('shader-cache',    type : 'boolean', vaule : true,
>> >>+       description : 'Build with on-disk shader cache support')
>> >> option('vulkan_icd_dir', type : 'string',  value : '',
>> >>description : 'Location relative to prefix to put vulkan icds on
>> >>install. Default: $datadir/vulkan/icd.d')
>> >> option('valgrind',       type : 'boolean', vaule : true,
>> >>diff --git a/src/meson.build b/src/amd/addrlib/meson.build
>> >>similarity index 51%
>> >>copy from src/meson.build
>> >>copy to src/amd/addrlib/meson.build
>> >>index 4c82eec70f1..a6cad1207b0 100644
>> >>--- a/src/meson.build
>> >>+++ b/src/amd/addrlib/meson.build
>> >>@@ -18,31 +18,46 @@
>> >># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> >>DEALINGS IN THE
>> >> # SOFTWARE.
>> >>
>> >>-# TODO: libglsl_util
>> >>+files_addrlib = files(
>> >>+  'addrinterface.cpp',
>> >>+  'addrinterface.h',
>> >>+  'addrtypes.h',
>> >>+  'core/addrcommon.h',
>> >>+  'core/addrelemlib.cpp',
>> >>+  'core/addrelemlib.h',
>> >>+  'core/addrlib.cpp',
>> >>+  'core/addrlib.h',
>> >>+  'core/addrlib1.cpp',
>> >>+  'core/addrlib1.h',
>> >>+  'core/addrlib2.cpp',
>> >>+  'core/addrlib2.h',
>> >>+  'core/addrobject.cpp',
>> >>+  'core/addrobject.h',
>> >>+  'gfx9/chip/gfx9_enum.h',
>> >>+  'gfx9/coord.cpp',
>> >>+  'gfx9/coord.h',
>> >>+  'gfx9/gfx9addrlib.cpp',
>> >>+  'gfx9/gfx9addrlib.h',
>> >>+  'gfx9/rbmap.cpp',
>> >>+  'gfx9/rbmap.h',
>> >>+  'inc/chip/gfx9/gfx9_gb_reg.h',
>> >>+  'inc/chip/r800/si_gb_reg.h',
>> >>+  'inc/lnx_common_defs.h',
>> >>+  'r800/chip/si_ci_vi_merged_enum.h',
>> >>+  'r800/ciaddrlib.cpp',
>> >>+  'r800/ciaddrlib.h',
>> >>+  'r800/egbaddrlib.cpp',
>> >>+  'r800/egbaddrlib.h',
>> >>+  'r800/siaddrlib.cpp',
>> >>+  'r800/siaddrlib.h',
>> >>+)
>> >>
>> >>-# TODO: git_sha. There's a meson builtin for this
>> >>-
>> >>-inc_common = include_directories(
>> >>-  '../include', '.', 'mapi', 'mesa', 'gallium/include',
>> >>'gallium/auxiliary')
>> >>-inc_mesa = include_directories('mesa')
>> >>-inc_mapi = include_directories('mapi')
>> >>-
>> >>-subdir('gtest')
>> >>-subdir('util')
>> >>-#subdir('mapi/glapi/gen')
>> >>-# TODO: mapi
>> >>-# TODO: opengl
>> >>-# TODO: glx
>> >>-# TODO: osmesa
>> >>-subdir('compiler')
>> >>-subdir('egl/wayland/wayland-drm')
>> >>-subdir('vulkan')
>> >>-# TODO: amd
>> >>-subdir('intel')
>> >>-# TODO: vc4
>> >>-# TODO: opengl_common
>> >>-# TODO: dri_glx
>> >>-# TODO: gbm
>> >>-# TODO: egl
>> >>-# TODO: radv
>> >>-# TODO: gallium
>> >>+libamdgpu_addrlib = static_library(
>> >>+  'addrlib',
>> >>+  files_addrlib,
>> >>+  include_directories : include_directories(
>> >>+    'core', 'inc/chip/gfx9', 'inc/chip/r800', 'gfx9/chip',
>> >>'r800/chip',
>> >>+    '../common', '../../'),
>> >>+  cpp_args : [cpp_vis_args, '-DBRAHMA_BUILD=1'],
>> >>+  build_by_default : false,
>> >>+)
>> >>diff --git a/src/meson.build b/src/amd/common/meson.build
>> >>similarity index 51%
>> >>copy from src/meson.build
>> >>copy to src/amd/common/meson.build
>> >>index 4c82eec70f1..842b42f897e 100644
>> >>--- a/src/meson.build
>> >>+++ b/src/amd/common/meson.build
>> >>@@ -18,31 +18,46 @@
>> >># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> >>DEALINGS IN THE
>> >> # SOFTWARE.
>> >>
>> >>-# TODO: libglsl_util
>> >>+inc_amd_common = include_directories('.')
>> >>
>> >>-# TODO: git_sha. There's a meson builtin for this
>> >>+sid_tables_h = custom_target(
>> >>+  'sid_tables_h',
>> >>+  input : ['sid_tables.py', 'sid.h', 'gfx9d.h'],
>> >>+  output : 'sid_tables.h',
>> >>+  command : [prog_python2, '@INPUT@'],
>> >>+  capture : true,
>> >>+)
>> >>
>> >>-inc_common = include_directories(
>> >>-  '../include', '.', 'mapi', 'mesa', 'gallium/include',
>> >>'gallium/auxiliary')
>> >>-inc_mesa = include_directories('mesa')
>> >>-inc_mapi = include_directories('mapi')
>> >>+amd_common_files = files(
>> >>+  'ac_binary.c',
>> >>+  'ac_binary.h',
>> >>+  'ac_exp_param.h',
>> >>+  'ac_llvm_build.c',
>> >>+  'ac_llvm_build.h',
>> >>+  'ac_llvm_helper.cpp',
>> >>+  'ac_llvm_util.c',
>> >>+  'ac_llvm_util.h',
>> >>+  'ac_shader_abi.h',
>> >>+  'ac_shader_info.c',
>> >>+  'ac_shader_info.h',
>> >>+  'ac_nir_to_llvm.c',
>> >>+  'ac_nir_to_llvm.h',
>> >>+  'ac_gpu_info.c',
>> >>+  'ac_gpu_info.h',
>> >>+  'ac_surface.c',
>> >>+  'ac_surface.h',
>> >>+  'ac_debug.c',
>> >>+  'ac_debug.h',
>> >>+)
>> >>
>> >>-subdir('gtest')
>> >>-subdir('util')
>> >>-#subdir('mapi/glapi/gen')
>> >>-# TODO: mapi
>> >>-# TODO: opengl
>> >>-# TODO: glx
>> >>-# TODO: osmesa
>> >>-subdir('compiler')
>> >>-subdir('egl/wayland/wayland-drm')
>> >>-subdir('vulkan')
>> >>-# TODO: amd
>> >>-subdir('intel')
>> >>-# TODO: vc4
>> >>-# TODO: opengl_common
>> >>-# TODO: dri_glx
>> >>-# TODO: gbm
>> >>-# TODO: egl
>> >>-# TODO: radv
>> >>-# TODO: gallium
>> >>+libamd_common = static_library(
>> >>+  'amd_common',
>> >>+  [amd_common_files, sid_tables_h, nir_opcodes_h],
>> >>+  include_directories : [inc_common, inc_compiler, inc_nir, inc_mesa,
>> >>inc_mapi,
>> >>+                         inc_amd],
>> >>+  dependencies : [dep_llvm, dep_thread, dep_elf, dep_libdrm_amdgpu,
>> >>+                  dep_valgrind],
>> >>+  c_args : [c_vis_args],
>> >>+  cpp_args : [cpp_vis_args],
>> >>+  build_by_default : false,
>> >>+)
>> >>diff --git a/src/meson.build b/src/amd/meson.build
>> >>similarity index 65%
>> >>copy from src/meson.build
>> >>copy to src/amd/meson.build
>> >>index 4c82eec70f1..f96a9aac095 100644
>> >>--- a/src/meson.build
>> >>+++ b/src/amd/meson.build
>> >>@@ -18,31 +18,10 @@
>> >># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> >>DEALINGS IN THE
>> >> # SOFTWARE.
>> >>
>> >>-# TODO: libglsl_util
>> >>+inc_amd = include_directories('.')
>> >>
>> >>-# TODO: git_sha. There's a meson builtin for this
>> >>-
>> >>-inc_common = include_directories(
>> >>-  '../include', '.', 'mapi', 'mesa', 'gallium/include',
>> >>'gallium/auxiliary')
>> >>-inc_mesa = include_directories('mesa')
>> >>-inc_mapi = include_directories('mapi')
>> >>-
>> >>-subdir('gtest')
>> >>-subdir('util')
>> >>-#subdir('mapi/glapi/gen')
>> >>-# TODO: mapi
>> >>-# TODO: opengl
>> >>-# TODO: glx
>> >>-# TODO: osmesa
>> >>-subdir('compiler')
>> >>-subdir('egl/wayland/wayland-drm')
>> >>-subdir('vulkan')
>> >>-# TODO: amd
>> >>-subdir('intel')
>> >>-# TODO: vc4
>> >>-# TODO: opengl_common
>> >>-# TODO: dri_glx
>> >>-# TODO: gbm
>> >>-# TODO: egl
>> >>-# TODO: radv
>> >>-# TODO: gallium
>> >>+subdir('addrlib')
>> >>+subdir('common')
>> >>+if with_amd_vk
>> >>+  subdir('vulkan')
>> >>+endif
>> >>diff --git a/src/amd/vulkan/meson.build b/src/amd/vulkan/meson.build
>> >>new file mode 100644
>> >>index 00000000000..02a2703a5c1
>> >>--- /dev/null
>> >>+++ b/src/amd/vulkan/meson.build
>> >>@@ -0,0 +1,124 @@
>> >>+# Copyright �� 2017 Intel Corporation
>> >>+
>> >>+# Permission is hereby granted, free of charge, to any person
>> >>obtaining a copy
>> >>+# of this software and associated documentation files (the
>> >>"Software"), to deal
>> >>+# in the Software without restriction, including without limitation
>> >>the rights
>> >>+# to use, copy, modify, merge, publish, distribute, sublicense, and/or
>> >>sell
>> >>+# copies of the Software, and to permit persons to whom the Software
>> >>is
>> >>+# furnished to do so, subject to the following conditions:
>> >>+
>> >>+# The above copyright notice and this permission notice shall be
>> >>included in
>> >>+# all copies or substantial portions of the Software.
>> >>+
>> >>+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> >>EXPRESS OR
>> >>+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> >>MERCHANTABILITY,
>> >>+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>> >>SHALL THE
>> >>+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
>> >>OTHER
>> >>+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> >>ARISING FROM,
>> >>+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> >>DEALINGS IN THE
>> >>+# SOFTWARE.
>> >>+
>> >>+radv_entrypoints = custom_target(
>> >>+  'radv_entrypoints.[ch]',
>> >>+  input : ['radv_entrypoints_gen.py', vk_api_xml],
>> >>+  output : ['radv_entrypoints.h', 'radv_entrypoints.c'],
>> >>+  command : [prog_python2, '@INPUT0@', '--xml', '@INPUT1@',
>> >>+             '--outdir', meson.current_build_dir()],
>> >>+)
>> >>+
>> >>+vk_format_table_c = custom_target(
>> >>+  'vk_format_table.c',
>> >>+  input : ['vk_format_table.py', 'vk_format_layout.csv'],
>> >>+  output : 'vk_format_table.c',
>> >>+  command : [prog_python2, '@INPUT@'],
>> >>+  depend_files : files('vk_format_parse.py'),
>> >>+  capture : true,
>> >>+)
>> >>+
>> >>+libradv_files = files(
>> >>+  'winsys/amdgpu/radv_amdgpu_bo.c',
>> >>+  'winsys/amdgpu/radv_amdgpu_bo.h',
>> >>+  'winsys/amdgpu/radv_amdgpu_cs.c',
>> >>+  'winsys/amdgpu/radv_amdgpu_cs.h',
>> >>+  'winsys/amdgpu/radv_amdgpu_surface.c',
>> >>+  'winsys/amdgpu/radv_amdgpu_surface.h',
>> >>+  'winsys/amdgpu/radv_amdgpu_winsys.c',
>> >>+  'winsys/amdgpu/radv_amdgpu_winsys.h',
>> >>+  'winsys/amdgpu/radv_amdgpu_winsys_public.h',
>> >>+  'radv_cmd_buffer.c',
>> >>+  'radv_cs.h',
>> >>+  'radv_debug.c',
>> >>+  'radv_debug.h',
>> >>+  'radv_device.c',
>> >>+  'radv_descriptor_set.c',
>> >>+  'radv_descriptor_set.h',
>> >>+  'radv_formats.c',
>> >>+  'radv_image.c',
>> >>+  'radv_meta.c',
>> >>+  'radv_meta.h',
>> >>+  'radv_meta_blit.c',
>> >>+  'radv_meta_blit2d.c',
>> >>+  'radv_meta_buffer.c',
>> >>+  'radv_meta_bufimage.c',
>> >>+  'radv_meta_clear.c',
>> >>+  'radv_meta_copy.c',
>> >>+  'radv_meta_decompress.c',
>> >>+  'radv_meta_fast_clear.c',
>> >>+  'radv_meta_resolve.c',
>> >>+  'radv_meta_resolve_cs.c',
>> >>+  'radv_meta_resolve_fs.c',
>> >>+  'radv_pass.c',
>> >>+  'radv_pipeline.c',
>> >>+  'radv_pipeline_cache.c',
>> >>+  'radv_private.h',
>> >>+  'radv_radeon_winsys.h',
>> >>+  'radv_shader.c',
>> >>+  'radv_shader.h',
>> >>+  'radv_query.c',
>> >>+  'radv_util.c',
>> >>+  'radv_util.h',
>> >>+  'radv_wsi.c',
>> >>+  'si_cmd_buffer.c',
>> >>+  'vk_format.h',
>> >>+)
>> >>+
>> >>+radv_deps = []
>> >>+radv_flags = []
>> >>+
>> >>+if with_platform_x11
>> >>+  radv_deps += dep_xcb_dri3
>> >>+  radv_flags += [
>> >>+    '-DVK_USE_PLATFORM_XCB_KHR',
>> >>+    '-DVK_USE_PLATFORM_XLIB_KHR',
>> >>+  ]
>> >>+  libradv_files += files('radv_wsi_x11.c')
>> >>+endif
>> >>+
>> >>+if with_platform_wayland
>> >>+  radv_deps += dep_wayland_client
>> >>+  radv_flags += '-DVK_USE_PLATFORM_WAYLAND_KHR'
>> >>+  libradv_files += files('radv_wsi_wayland.c')
>> >>+endif
>> >>+
>> >>+libvulkan_radeon = shared_library(
>> >>+  'vulkan_radeon',
>> >>+  [libradv_files, radv_entrypoints, nir_opcodes_h, vk_format_table_c],
>> >>+  include_directories : [inc_common, inc_amd, inc_amd_common,
>> >>inc_compiler,
>> >>+                         inc_vulkan_util, inc_vulkan_wsi],
>> >>+  link_with : [libamd_common, libamdgpu_addrlib, libvulkan_util,
>> >>+               libvulkan_wsi, libnir, libmesa_util],
>> >>+  dependencies : [dep_llvm, dep_libdrm_amdgpu, dep_thread, dep_elf,
>> >>dep_dl,
>> >>+                  dep_m, dep_valgrind],
>> >>+  c_args : [c_vis_args, no_override_init_args, radv_flags],
>> >>+  link_args : [ld_args_bsymbolic, ld_args_gc_sections],
>> >>+  install : true,
>> >>+)
>> >>+
>> >>+radv_data = configuration_data()
>> >>+radv_data.set('install_libdir', join_paths(get_option('prefix'),
>> >>get_option('libdir')))
>> >>+configure_file(
>> >>+  configuration : radv_data,
>> >>+  input : 'radeon_icd.json.in',
>> >>+  output : 'radeon_icd. at 0@.json'.format(target_machine.cpu()),
>> >>+  install_dir : with_vulkan_icd_dir,
>> >>+)
>> >>diff --git a/src/meson.build b/src/meson.build
>> >>index 4c82eec70f1..76ff497e565 100644
>> >>--- a/src/meson.build
>> >>+++ b/src/meson.build
>> >>@@ -37,7 +37,7 @@ subdir('util')
>> >> subdir('compiler')
>> >> subdir('egl/wayland/wayland-drm')
>> >> subdir('vulkan')
>> >>-# TODO: amd
>> >>+subdir('amd')
>> >> subdir('intel')
>> >> # TODO: vc4
>> >> # TODO: opengl_common
>> > _______________________________________________
>> > mesa-dev mailing list
>> > mesa-dev at lists.freedesktop.org
>> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list