[Mesa-dev] [PATCH 1/4] meson: Build SWR driver

Eric Engestrom eric.engestrom at imgtec.com
Mon Dec 11 15:49:07 UTC 2017


On Friday, 2017-12-08 16:27:19 -0800, Dylan Baker wrote:
> This enables the SWR driver, but doesn't actually hook it up to any of
> the targets yet. I felt like this patch was big and complicated enough
> without adding that.
> 
> Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
> ---
>  meson.build                                        |  12 +-
>  meson_options.txt                                  |   6 +
>  src/gallium/drivers/swr/meson.build                | 286 +++++++++++++++++++++
>  .../drivers/swr/rasterizer/codegen/meson.build     | 205 +++++++++++++++
>  src/gallium/meson.build                            |   8 +
>  5 files changed, 511 insertions(+), 6 deletions(-)
>  create mode 100644 src/gallium/drivers/swr/meson.build
>  create mode 100644 src/gallium/drivers/swr/rasterizer/codegen/meson.build
> 
> diff --git a/meson.build b/meson.build
> index 6e5ae4d24e9..842d441199e 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -47,6 +47,7 @@ with_valgrind = get_option('valgrind')
>  with_libunwind = get_option('libunwind')
>  with_asm = get_option('asm')
>  with_osmesa = get_option('osmesa')
> +with_swr_arches = get_option('swr-arches').split(',')
>  if get_option('texture-float')
>    pre_args += '-DTEXTURE_FLOAT_ENABLED'
>    message('WARNING: Floating-point texture enabled. Please consult docs/patents.txt and your lawyer before building mesa.')
> @@ -155,6 +156,7 @@ if _drivers != ''
>    with_gallium_i915 = _split.contains('i915')
>    with_gallium_svga = _split.contains('svga')
>    with_gallium_virgl = _split.contains('virgl')
> +  with_gallium_swr = _split.contains('swr')
>    with_gallium = true
>  endif
>  
> @@ -181,7 +183,7 @@ if _vulkan_drivers != ''
>    with_any_vk = with_amd_vk or with_intel_vk
>  endif
>  
> -if with_dri_swrast and with_gallium_softpipe
> +if with_dri_swrast and (with_gallium_softpipe or with_gallium_swr)
>    error('Only one swrast provider can be built')
>  endif
>  if with_dri_i915 and with_gallium_i915
> @@ -975,7 +977,7 @@ _llvm = get_option('llvm')
>  if _llvm == 'auto'
>    dep_llvm = dependency(
>      'llvm', version : '>= 3.9.0', modules : llvm_modules,
> -    required : with_amd_vk or with_gallium_radeonsi,
> +    required : with_amd_vk or with_gallium_radeonsi or with_gallium_swr,
>    )
>    with_llvm = dep_llvm.found()
>  elif _llvm == 'true'
> @@ -997,8 +999,8 @@ if with_llvm
>      '-DHAVE_LLVM=0x0 at 0@@1@@2@'.format(_llvm_version[0], _llvm_version[1], _llvm_patch),
>      '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch),
>    ]
> -elif with_amd_vk or with_gallium_radeonsi
> -  error('The following drivers requires LLVM: Radv, RadeonSI. One of these is enabled, but LLVM is disabled.')
> +elif with_amd_vk or with_gallium_radeonsi or with_gallium_swr
> +  error('The following drivers requires LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.')
>  endif
>  
>  dep_glvnd = []
> @@ -1158,8 +1160,6 @@ endif
>  
>  # TODO: various libdirs
>  
> -# TODO: swr
> -
>  # TODO: gallium driver dirs
>  
>  # FIXME: this is a workaround for #2326
> diff --git a/meson_options.txt b/meson_options.txt
> index 39b137cbeaf..74fbfbe0330 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -261,3 +261,9 @@ option(
>    choices : ['8', '16', '32'],
>    description : 'Number of channel bits for OSMesa.'
>  )
> +option(
> +  'swr-arches',
> +  type : 'string',
> +  value : 'avx,avx2',
> +  description : 'Comma delemeited swr architectures. choices : avx,avx2,knl,skx'

"delimited"

> +)
> diff --git a/src/gallium/drivers/swr/meson.build b/src/gallium/drivers/swr/meson.build
> new file mode 100644
> index 00000000000..6a3f6236815
> --- /dev/null
> +++ b/src/gallium/drivers/swr/meson.build
> @@ -0,0 +1,286 @@
> +# 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.
> +
> +files_swr_common = files(
> +  'rasterizer/common/formats.cpp',
> +  'rasterizer/common/formats.h',
> +  'rasterizer/common/intrin.h',
> +  'rasterizer/common/isa.hpp',
> +  'rasterizer/common/os.cpp',
> +  'rasterizer/common/os.h',
> +  'rasterizer/common/rdtsc_buckets.cpp',
> +  'rasterizer/common/rdtsc_buckets.h',
> +  'rasterizer/common/rdtsc_buckets_shared.h',
> +  'rasterizer/common/rdtsc_buckets_shared.h',
> +  'rasterizer/common/simd16intrin.h',
> +  'rasterizer/common/simdintrin.h',
> +  'rasterizer/common/simdlib.hpp',
> +  'rasterizer/common/simdlib_interface.hpp',
> +  'rasterizer/common/simdlib_types.hpp',
> +  'rasterizer/common/swr_assert.cpp',
> +  'rasterizer/common/swr_assert.h',
> +)
> +
> +files_swr_mesa = files(
> +  'swr_loader.cpp',
> +  'swr_clear.cpp',
> +  'swr_context.cpp',
> +  'swr_context.h',
> +  'swr_draw.cpp',
> +  'swr_public.h',
> +  'swr_resource.h',
> +  'swr_screen.cpp',
> +  'swr_screen.h',
> +  'swr_state.cpp',
> +  'swr_state.h',
> +  'swr_tex_sample.cpp',
> +  'swr_tex_sample.h',
> +  'swr_scratch.h',
> +  'swr_scratch.cpp',
> +  'swr_shader.cpp',
> +  'swr_shader.h',
> +  'swr_memory.h',
> +  'swr_fence.h',
> +  'swr_fence.cpp',
> +  'swr_fence_work.h',
> +  'swr_fence_work.cpp',
> +  'swr_query.h',
> +  'swr_query.cpp',
> +  'rasterizer/jitter/blend_jit.cpp',
> +  'rasterizer/jitter/blend_jit.h',
> +  'rasterizer/jitter/builder.cpp',
> +  'rasterizer/jitter/builder.h',
> +  'rasterizer/jitter/builder_math.h',
> +  'rasterizer/jitter/builder_misc.cpp',
> +  'rasterizer/jitter/builder_misc.h',
> +  'rasterizer/jitter/fetch_jit.cpp',
> +  'rasterizer/jitter/fetch_jit.h',
> +  'rasterizer/jitter/jit_api.h',
> +  'rasterizer/jitter/JitManager.cpp',
> +  'rasterizer/jitter/JitManager.h',
> +  'rasterizer/jitter/streamout_jit.cpp',
> +  'rasterizer/jitter/streamout_jit.h',
> +)
> +
> +files_swr_arch = files(
> +  'rasterizer/archrast/archrast.cpp',
> +  'rasterizer/archrast/archrast.h',
> +  'rasterizer/archrast/eventmanager.h',
> +  'rasterizer/core/api.cpp',
> +  'rasterizer/core/api.h',
> +  'rasterizer/core/arena.h',
> +  'rasterizer/core/backend.cpp',
> +  'rasterizer/core/backend_clear.cpp',
> +  'rasterizer/core/backend_sample.cpp',
> +  'rasterizer/core/backend_singlesample.cpp',
> +  'rasterizer/core/backend.h',
> +  'rasterizer/core/backend_impl.h',
> +  'rasterizer/core/binner.cpp',
> +  'rasterizer/core/binner.h',
> +  'rasterizer/core/blend.h',
> +  'rasterizer/core/clip.cpp',
> +  'rasterizer/core/clip.h',
> +  'rasterizer/core/conservativeRast.h',
> +  'rasterizer/core/context.h',
> +  'rasterizer/core/depthstencil.h',
> +  'rasterizer/core/fifo.hpp',
> +  'rasterizer/core/format_conversion.h',
> +  'rasterizer/core/format_traits.h',
> +  'rasterizer/core/format_types.h',
> +  'rasterizer/core/format_utils.h',
> +  'rasterizer/core/frontend.cpp',
> +  'rasterizer/core/frontend.h',
> +  'rasterizer/core/knobs.h',
> +  'rasterizer/core/knobs_init.h',
> +  'rasterizer/core/multisample.h',
> +  'rasterizer/core/pa_avx.cpp',
> +  'rasterizer/core/pa.h',
> +  'rasterizer/core/rasterizer.cpp',
> +  'rasterizer/core/rasterizer.h',
> +  'rasterizer/core/rasterizer_impl.h',
> +  'rasterizer/core/rdtsc_core.cpp',
> +  'rasterizer/core/rdtsc_core.h',
> +  'rasterizer/core/ringbuffer.h',
> +  'rasterizer/core/state.h',
> +  'rasterizer/core/state_funcs.h',
> +  'rasterizer/core/tessellator.h',
> +  'rasterizer/core/threads.cpp',
> +  'rasterizer/core/threads.h',
> +  'rasterizer/core/tilemgr.cpp',
> +  'rasterizer/core/tilemgr.h',
> +  'rasterizer/core/utils.h',
> +  'rasterizer/memory/ClearTile.cpp',
> +  'rasterizer/memory/Convert.h',
> +  'rasterizer/memory/LoadTile.cpp',
> +  'rasterizer/memory/LoadTile.h',
> +  'rasterizer/memory/LoadTile_Linear.cpp',
> +  'rasterizer/memory/LoadTile_TileX.cpp',
> +  'rasterizer/memory/LoadTile_TileY.cpp',
> +  'rasterizer/memory/StoreTile.cpp',
> +  'rasterizer/memory/StoreTile.h',
> +  'rasterizer/memory/StoreTile_Linear2.cpp',
> +  'rasterizer/memory/StoreTile_Linear.cpp',
> +  'rasterizer/memory/StoreTile_TileW.cpp',
> +  'rasterizer/memory/StoreTile_TileX2.cpp',
> +  'rasterizer/memory/StoreTile_TileX.cpp',
> +  'rasterizer/memory/StoreTile_TileY2.cpp',
> +  'rasterizer/memory/StoreTile_TileY.cpp',
> +  'rasterizer/memory/TilingFunctions.h',
> +  'rasterizer/memory/tilingtraits.h',
> +)
> +
> +subdir('rasterizer/codegen')
> +
> +swr_incs = include_directories(
> +  'rasterizer/codegen', 'rasterizer/core', 'rasterizer/jitter',
> +  'rasterizer/archrast', 'rasterizer',
> +)
> +
> +swr_cpp_args = [cpp_vis_args]
> +if cpp.has_argument('-fno-strict-aliasing')
> +  swr_cpp_args += '-fno-strict-aliasing'
> +endif
> +
> +swr_arch_libs = []
> +swr_arch_defines = []
> +
> +swr_avx_args = cpp.first_supported_argument(
> +  '-target-cpu=sandybridge', '-mavx', '-march=core-avx', '-tp=sandybridge',
> +  prefix : '''
> +    #if !defined(__AVX__)
> +    # errror

`#error` (one too many "r")
same with all the other ones, copy/pasted I assume.

> +    #endif ''',
> +)
> +if swr_avx_args == []
> +  error('Cannot find AVX support for swr. (these are required for SWR an all architectures.)')
> +endif
> +if with_swr_arches.contains('avx')
> +  swr_arch_defines += '-DHAVE_SWR_AVX'
> +  swr_arch_libs += shared_library(
> +    'swrAVX',
> +    files_swr_common,
> +    cpp_args : [swr_cpp_args, swr_avx_args, '-DKNOB_ARCH=KNOB_ARCH_AVX'],
> +    link_args : [ld_args_gc_sections],
> +    include_directories : [swr_incs],
> +    dependencies : [dep_thread, dep_llvm],
> +    install : true,
> +  )
> +endif
> +
> +if with_swr_arches.contains('avx2')
> +  swr_avx2_args = cpp.first_supported_argument(
> +    '-target-cpu=haswell', '-march=core-avx2', '-tp=haswell',
> +    prefix : '''
> +      #if !defined(__AVX2__)
> +      # errror
> +      #endif ''',
> +  )
> +  if swr_avx2_args == []
> +    if cpp.has_argument(['-mavx2', '-mfma', '-mbmi2', '-mf16c'],
> +                        prefix : '''
> +                          #if !defined(__AVX2__)
> +                          # errror
> +                          #endif ''')
> +      swr_avx2_args = ['-mavx2', '-mfma', '-mbmi2', '-mf16c']
> +    else
> +      error('Cannot find AVX2 support for swr.')
> +    endif
> +  endif
> +
> +  swr_arch_defines += '-DHAVE_SWR_AVX2'
> +  swr_arch_libs += shared_library(
> +    'swrAVX2',
> +    files_swr_common,
> +    cpp_args : [swr_cpp_args, swr_avx2_args, '-DKNOB_ARCH=KNOB_ARCH_AVX2'],
> +    link_args : [ld_args_gc_sections],
> +    include_directories : [swr_incs],
> +    dependencies : [dep_thread, dep_llvm],
> +    install : true,
> +  )
> +endif
> +
> +if with_swr_arches.contains('knl')
> +  swr_knl_args = cpp.first_supported_argument(
> +    '-target-cpu=mic-knl', '-march=knl', '-xMIC-AVX512',
> +    prefix : '''
> +      #if !defined(__AVX512F__) || !defined(__AVX512ER__)
> +      # errror
> +      #endif ''',
> +  )
> +  if swr_knl_args == []
> +    error('Cannot find KNL support for swr.')
> +  endif
> +
> +  swr_arch_defines += '-DHAVE_SWR_KNL'
> +  swr_arch_libs += shared_library(
> +    'swrKNL',
> +    files_swr_common,
> +    cpp_args : [
> +      swr_cpp_args, swr_knl_args, '-DKNOB_ARCH=KNOB_ARCH_AVX512',
> +      '-DKNOB_ARCH_KNIGHTS',
> +    ],
> +    link_args : [ld_args_gc_sections],
> +    include_directories : [swr_incs],
> +    dependencies : [dep_thread, dep_llvm],
> +    install : true,
> +  )
> +endif
> +
> +if with_swr_arches.contains('skx')
> +  swr_skx_args = cpp.first_supported_argument(
> +    '-target-cpu=x86-skylake', '-march=skylake-avx512', '-xCORE-AVX512',
> +    prefix : '''
> +      #if !defined(__AVX512F__) || !defined(__AVX512BW__)
> +      # errror
> +      #endif ''',
> +  )
> +  if swr_skx_args == []
> +    error('Cannot find SKX support for swr.')
> +  endif
> +
> +  swr_arch_defines += '-DHAVE_SWR_SKX'
> +  swr_arch_libs += shared_library(
> +    'swrSKX',
> +    files_swr_common,
> +    cpp_args : [swr_cpp_args, swr_skx_args, '-DKNOB_ARCH=KNOB_ARCH_AVX512'],
> +    link_args : [ld_args_gc_sections],
> +    include_directories : [swr_incs],
> +    dependencies : [dep_thread, dep_llvm],
> +    install : true,
> +  )
> +endif
> +
> +if swr_arch_libs == []
> +  error('SWR configured, but no SWR architectures configured')
> +endif
> +
> +# The swr_avx_args are needed for intrensic usage in swr api headers.
> +libmesaswr = static_library(
> +  'mesaswr',
> +  [files_swr_mesa, files_swr_common, gen_knobs_h, gen_knobs_cpp,
> +   gen_builder_hpp, gen_builder_x86_hpp],
> +  cpp_args : [cpp_vis_args, swr_cpp_args, swr_avx_args, swr_arch_defines],
> +  include_directories : [inc_common, swr_incs],
> +)
> +
> +driver_swr = declare_dependency(
> +  compile_args : '-DGALLIUM_SWR',
> +  link_with : libmesaswr,
> +)
> diff --git a/src/gallium/drivers/swr/rasterizer/codegen/meson.build b/src/gallium/drivers/swr/rasterizer/codegen/meson.build
> new file mode 100644
> index 00000000000..74465b8b2b1
> --- /dev/null
> +++ b/src/gallium/drivers/swr/rasterizer/codegen/meson.build
> @@ -0,0 +1,205 @@
> +# 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.
> +
> +gen_knobs_cpp = custom_target(
> +  'gen_knobs.cpp',
> +  input : ['gen_knobs.py'],
> +  output : 'gen_knobs.cpp',
> +  command : [prog_python2, '@INPUT0@', '--output', '@OUTPUT@', '--gen_cpp'],
> +  depend_files : files(
> +    'knob_defs.py', 'gen_common.py',
> +    'templates/gen_knobs.cpp',
> +  ),
> +)
> +
> +gen_knobs_h = custom_target(
> +  'gen_knobs.h',
> +  input : ['gen_knobs.py'],
> +  output : 'gen_knobs.h',
> +  command : [prog_python2, '@INPUT0@', '--output', '@OUTPUT@', '--gen_h'],
> +  depend_files : files(
> +    'knob_defs.py', 'gen_common.py',
> +    'templates/gen_knobs.h',
> +  ),
> +)
> +
> +gen_builder_hpp = custom_target(
> +  'gen_builder.hpp',
> +  input : [
> +    'gen_llvm_ir_macros.py', 
> +    join_paths(
> +      dep_llvm.get_configtool_variable('includedir'), 'llvm', 'IR',
> +      'IRBuilder.h'
> +    )
> +  ],
> +  output : 'gen_builder.hpp',
> +  command : [
> +    prog_python2, '@INPUT0@', '--input', '@INPUT1@', '--output', '@OUTPUT@',
> +    '--gen_h', '--output-dir', meson.current_build_dir()
> +  ],
> +  depend_files : files(
> +    'templates/gen_builder.hpp',
> +    'gen_common.py',
> +  ),
> +  build_by_default : true,
> +)
> +
> +gen_builder_x86_hpp = custom_target(
> +  'gen_builder_x86.hpp',
> +  input : 'gen_llvm_ir_macros.py',
> +  output : 'gen_builder_x86.hpp',
> +  command : [
> +    prog_python2, '@INPUT0@', '--gen_x86_h', '--output', '@OUTPUT@',
> +    '--output-dir', meson.current_build_dir()
> +  ],
> +  depend_files : files(
> +    'templates/gen_builder.hpp',
> +    'gen_common.py',
> +  ),
> +)
> +files_swr_common += [
> +  gen_builder_hpp, gen_builder_x86_hpp, gen_knobs_h, gen_knobs_cpp
> +]
> +
> +files_swr_common += custom_target(
> +  'gen_swr_context_llvm.h',
> +  input : ['gen_llvm_types.py', '../../swr_context.h'],

Didn't we say we didn't want to go back up?
I'd prefer adding a few variables for these

> +  output : 'gen_swr_context_llvm.h',
> +  command : [prog_python2, '@INPUT0@', '--input', '@INPUT1@', '--output', '@OUTPUT@'],
> +  depend_files : files('templates/gen_llvm.hpp'),
> +)
> +
> +files_swr_common += custom_target(
> +  'gen_state_llvm.h',
> +  input : ['gen_llvm_types.py', '../core/state.h'],
> +  output : 'gen_state_llvm.h',
> +  command : [prog_python2, '@INPUT0@', '--input', '@INPUT1@', '--output', '@OUTPUT@'],
> +  depend_files : files(
> +    'templates/gen_llvm.hpp',
> +    'gen_common.py',
> +  ),
> +)
> +
> +files_swr_common += custom_target(
> +  'gen_ar_event.hpp',
> +  input : [
> +    'gen_archrast.py', '../archrast/events.proto'
> +  ],
> +  output : 'gen_ar_event.hpp',
> +  command : [
> +    prog_python2, '@INPUT0@', '--proto', '@INPUT1@', '--output', '@OUTPUT@',
> +    '--gen_event_hpp'
> +  ],
> +  depend_files : files(
> +    'templates/gen_ar_event.hpp',
> +    'gen_common.py',
> +  ),
> +)
> +
> +files_swr_common += custom_target(
> +  'gen_ar_event.cpp',
> +  input : [
> +    'gen_archrast.py', '../archrast/events.proto'
> +  ],
> +  output : 'gen_ar_event.cpp',
> +  command : [
> +    prog_python2, '@INPUT0@', '--proto', '@INPUT1@', '--output', '@OUTPUT@',
> +    '--gen_event_cpp'
> +  ],
> +  depend_files : files(
> +    'templates/gen_ar_event.cpp',
> +    'gen_common.py',
> +  ),
> +)
> +
> +files_swr_common += custom_target(
> +  'gen_ar_eventhandler.hpp',
> +  input : [
> +    'gen_archrast.py', '../archrast/events.proto'
> +  ],
> +  output : 'gen_ar_eventhandler.hpp',
> +  command : [
> +    prog_python2, '@INPUT0@', '--proto', '@INPUT1@', '--output', '@OUTPUT@',
> +    '--gen_eventhandler_h'
> +  ],
> +  depend_files : files(
> +    'templates/gen_ar_eventhandler.hpp',
> +    'gen_common.py',
> +  ),
> +)
> +
> +files_swr_common += custom_target(
> +  'gen_ar_eventhandlerfile.hpp',
> +  input : [
> +    'gen_archrast.py', '../archrast/events.proto'
> +  ],
> +  output : 'gen_ar_eventhandlerfile.hpp',
> +  command : [
> +    prog_python2, '@INPUT0@', '--proto', '@INPUT1@', '--output', '@OUTPUT@',
> +    '--gen_eventhandlerfile_h'
> +  ],
> +  depend_files : files(
> +    'templates/gen_ar_eventhandlerfile.hpp',
> +    'gen_common.py',
> +  ),
> +)
> +
> +files_swr_common += custom_target(
> +  'gen_backend_pixel',
> +  input : 'gen_backends.py',
> +  output : [
> +    'gen_BackendPixelRate0.cpp', 'gen_BackendPixelRate1.cpp',
> +    'gen_BackendPixelRate2.cpp', 'gen_BackendPixelRate3.cpp',
> +    'gen_BackendPixelRate.hpp',
> +  ],
> +  command : [
> +    prog_python2, '@INPUT@',
> +    '--outdir', meson.current_build_dir(),
> +    '--dim', '5', '2', '3', '2', '2', '2',
> +    '--numfiles', '4',
> +    '--cpp', '--hpp',
> +  ],
> +  depend_files : files(
> +    'templates/gen_backend.cpp',
> +    'templates/gen_header_init.hpp',
> +  ),
> +)
> +
> +files_swr_common += custom_target(
> +  'gen_backend_raster',
> +  input : 'gen_backends.py',
> +  output : [
> +    'gen_rasterizer0.cpp', 'gen_rasterizer1.cpp',
> +    'gen_rasterizer2.cpp', 'gen_rasterizer3.cpp',
> +    'gen_rasterizer.hpp',
> +  ],
> +  command : [
> +    prog_python2, '@INPUT@',
> +    '--outdir', meson.current_build_dir(),
> +    '--rast',
> +    '--dim', '5', '2', '2', '3', '5', '2',
> +    '--numfiles', '4',
> +    '--cpp', '--hpp',
> +  ],
> +  depend_files : files(
> +    'templates/gen_rasterizer.cpp',
> +    'templates/gen_header_init.hpp',
> +  ),
> +)
> diff --git a/src/gallium/meson.build b/src/gallium/meson.build
> index 2baca8a97ca..3e2fd095710 100644
> --- a/src/gallium/meson.build
> +++ b/src/gallium/meson.build
> @@ -32,6 +32,14 @@ subdir('winsys/sw/null')
>  subdir('winsys/sw/dri')
>  subdir('winsys/sw/kms-dri')
>  subdir('winsys/sw/wrapper')
> +if with_gallium_swr
> +  if meson.version().version_compare('< 0.44.0')
> +    error('SWR requires meson 0.44.0 or greater.')
> +  endif

Mixed feelings about this, but I guess I'd rather land this now and
remove these three lines later.

> +  subdir('drivers/swr')
> +else
> +  driver_swr = declare_dependency()
> +endif
>  if with_gallium_softpipe
>    subdir('drivers/softpipe')
>    if with_llvm
> -- 
> 2.15.1
> 


More information about the mesa-dev mailing list