1b8e80941Smrg# Copyright © 2017-2018 Intel Corporation 2b8e80941Smrg 3b8e80941Smrg# Permission is hereby granted, free of charge, to any person obtaining a copy 4b8e80941Smrg# of this software and associated documentation files (the "Software"), to deal 5b8e80941Smrg# in the Software without restriction, including without limitation the rights 6b8e80941Smrg# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7b8e80941Smrg# copies of the Software, and to permit persons to whom the Software is 8b8e80941Smrg# furnished to do so, subject to the following conditions: 9b8e80941Smrg 10b8e80941Smrg# The above copyright notice and this permission notice shall be included in 11b8e80941Smrg# all copies or substantial portions of the Software. 12b8e80941Smrg 13b8e80941Smrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14b8e80941Smrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15b8e80941Smrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16b8e80941Smrg# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17b8e80941Smrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18b8e80941Smrg# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19b8e80941Smrg# SOFTWARE. 20b8e80941Smrg 21b8e80941Smrgfiles_swr_common = files( 22b8e80941Smrg 'rasterizer/common/formats.cpp', 23b8e80941Smrg 'rasterizer/common/formats.h', 24b8e80941Smrg 'rasterizer/common/intrin.h', 25b8e80941Smrg 'rasterizer/common/isa.hpp', 26b8e80941Smrg 'rasterizer/common/os.cpp', 27b8e80941Smrg 'rasterizer/common/os.h', 28b8e80941Smrg 'rasterizer/common/rdtsc_buckets.cpp', 29b8e80941Smrg 'rasterizer/common/rdtsc_buckets.h', 30b8e80941Smrg 'rasterizer/common/rdtsc_buckets_shared.h', 31b8e80941Smrg 'rasterizer/common/rdtsc_buckets_shared.h', 32b8e80941Smrg 'rasterizer/common/simd16intrin.h', 33b8e80941Smrg 'rasterizer/common/simdintrin.h', 34b8e80941Smrg 'rasterizer/common/simdlib.hpp', 35b8e80941Smrg 'rasterizer/common/simdlib_interface.hpp', 36b8e80941Smrg 'rasterizer/common/simdlib_types.hpp', 37b8e80941Smrg 'rasterizer/common/swr_assert.cpp', 38b8e80941Smrg 'rasterizer/common/swr_assert.h', 39b8e80941Smrg) 40b8e80941Smrg 41b8e80941Smrgfiles_swr_mesa = files( 42b8e80941Smrg 'swr_loader.cpp', 43b8e80941Smrg 'swr_clear.cpp', 44b8e80941Smrg 'swr_context.cpp', 45b8e80941Smrg 'swr_context.h', 46b8e80941Smrg 'swr_draw.cpp', 47b8e80941Smrg 'swr_public.h', 48b8e80941Smrg 'swr_resource.h', 49b8e80941Smrg 'swr_screen.cpp', 50b8e80941Smrg 'swr_screen.h', 51b8e80941Smrg 'swr_state.cpp', 52b8e80941Smrg 'swr_state.h', 53b8e80941Smrg 'swr_tex_sample.cpp', 54b8e80941Smrg 'swr_tex_sample.h', 55b8e80941Smrg 'swr_scratch.h', 56b8e80941Smrg 'swr_scratch.cpp', 57b8e80941Smrg 'swr_shader.cpp', 58b8e80941Smrg 'swr_shader.h', 59b8e80941Smrg 'swr_memory.h', 60b8e80941Smrg 'swr_fence.h', 61b8e80941Smrg 'swr_fence.cpp', 62b8e80941Smrg 'swr_fence_work.h', 63b8e80941Smrg 'swr_fence_work.cpp', 64b8e80941Smrg 'swr_query.h', 65b8e80941Smrg 'swr_query.cpp', 66b8e80941Smrg 'rasterizer/jitter/blend_jit.cpp', 67b8e80941Smrg 'rasterizer/jitter/blend_jit.h', 68b8e80941Smrg 'rasterizer/jitter/builder.cpp', 69b8e80941Smrg 'rasterizer/jitter/builder.h', 70b8e80941Smrg 'rasterizer/jitter/builder_math.h', 71b8e80941Smrg 'rasterizer/jitter/builder_mem.cpp', 72b8e80941Smrg 'rasterizer/jitter/builder_mem.h', 73b8e80941Smrg 'rasterizer/jitter/builder_gfx_mem.cpp', 74b8e80941Smrg 'rasterizer/jitter/builder_gfx_mem.h', 75b8e80941Smrg 'rasterizer/jitter/builder_misc.cpp', 76b8e80941Smrg 'rasterizer/jitter/builder_misc.h', 77b8e80941Smrg 'rasterizer/jitter/fetch_jit.cpp', 78b8e80941Smrg 'rasterizer/jitter/fetch_jit.h', 79b8e80941Smrg 'rasterizer/jitter/jit_api.h', 80b8e80941Smrg 'rasterizer/jitter/JitManager.cpp', 81b8e80941Smrg 'rasterizer/jitter/JitManager.h', 82b8e80941Smrg 'rasterizer/jitter/streamout_jit.cpp', 83b8e80941Smrg 'rasterizer/jitter/streamout_jit.h', 84b8e80941Smrg 'rasterizer/jitter/shader_lib/DebugOutput.cpp', 85b8e80941Smrg 'rasterizer/jitter/functionpasses/lower_x86.cpp', 86b8e80941Smrg) 87b8e80941Smrg 88b8e80941Smrgfiles_swr_arch = files( 89b8e80941Smrg 'rasterizer/archrast/archrast.cpp', 90b8e80941Smrg 'rasterizer/archrast/archrast.h', 91b8e80941Smrg 'rasterizer/archrast/eventmanager.h', 92b8e80941Smrg 'rasterizer/core/api.cpp', 93b8e80941Smrg 'rasterizer/core/api.h', 94b8e80941Smrg 'rasterizer/core/arena.h', 95b8e80941Smrg 'rasterizer/core/backend.cpp', 96b8e80941Smrg 'rasterizer/core/backend_clear.cpp', 97b8e80941Smrg 'rasterizer/core/backend_sample.cpp', 98b8e80941Smrg 'rasterizer/core/backend_singlesample.cpp', 99b8e80941Smrg 'rasterizer/core/backend.h', 100b8e80941Smrg 'rasterizer/core/backend_impl.h', 101b8e80941Smrg 'rasterizer/core/binner.cpp', 102b8e80941Smrg 'rasterizer/core/binner.h', 103b8e80941Smrg 'rasterizer/core/blend.h', 104b8e80941Smrg 'rasterizer/core/clip.cpp', 105b8e80941Smrg 'rasterizer/core/clip.h', 106b8e80941Smrg 'rasterizer/core/conservativeRast.h', 107b8e80941Smrg 'rasterizer/core/context.h', 108b8e80941Smrg 'rasterizer/core/depthstencil.h', 109b8e80941Smrg 'rasterizer/core/fifo.hpp', 110b8e80941Smrg 'rasterizer/core/format_conversion.h', 111b8e80941Smrg 'rasterizer/core/format_traits.h', 112b8e80941Smrg 'rasterizer/core/format_types.h', 113b8e80941Smrg 'rasterizer/core/format_utils.h', 114b8e80941Smrg 'rasterizer/core/frontend.cpp', 115b8e80941Smrg 'rasterizer/core/frontend.h', 116b8e80941Smrg 'rasterizer/core/knobs.h', 117b8e80941Smrg 'rasterizer/core/knobs_init.h', 118b8e80941Smrg 'rasterizer/core/multisample.h', 119b8e80941Smrg 'rasterizer/core/pa_avx.cpp', 120b8e80941Smrg 'rasterizer/core/pa.h', 121b8e80941Smrg 'rasterizer/core/rasterizer.cpp', 122b8e80941Smrg 'rasterizer/core/rasterizer.h', 123b8e80941Smrg 'rasterizer/core/rasterizer_impl.h', 124b8e80941Smrg 'rasterizer/core/rdtsc_core.cpp', 125b8e80941Smrg 'rasterizer/core/rdtsc_core.h', 126b8e80941Smrg 'rasterizer/core/ringbuffer.h', 127b8e80941Smrg 'rasterizer/core/state.h', 128b8e80941Smrg 'rasterizer/core/state_funcs.h', 129b8e80941Smrg 'rasterizer/core/tessellator.h', 130b8e80941Smrg 'rasterizer/core/threads.cpp', 131b8e80941Smrg 'rasterizer/core/threads.h', 132b8e80941Smrg 'rasterizer/core/tilemgr.cpp', 133b8e80941Smrg 'rasterizer/core/tilemgr.h', 134b8e80941Smrg 'rasterizer/core/tileset.h', 135b8e80941Smrg 'rasterizer/core/utils.h', 136b8e80941Smrg 'rasterizer/memory/ClearTile.cpp', 137b8e80941Smrg 'rasterizer/memory/Convert.h', 138b8e80941Smrg 'rasterizer/memory/LoadTile.cpp', 139b8e80941Smrg 'rasterizer/memory/LoadTile.h', 140b8e80941Smrg 'rasterizer/memory/LoadTile_Linear.cpp', 141b8e80941Smrg 'rasterizer/memory/LoadTile_TileX.cpp', 142b8e80941Smrg 'rasterizer/memory/LoadTile_TileY.cpp', 143b8e80941Smrg 'rasterizer/memory/StoreTile.cpp', 144b8e80941Smrg 'rasterizer/memory/StoreTile.h', 145b8e80941Smrg 'rasterizer/memory/StoreTile_Linear2.cpp', 146b8e80941Smrg 'rasterizer/memory/StoreTile_Linear.cpp', 147b8e80941Smrg 'rasterizer/memory/StoreTile_TileW.cpp', 148b8e80941Smrg 'rasterizer/memory/StoreTile_TileX2.cpp', 149b8e80941Smrg 'rasterizer/memory/StoreTile_TileX.cpp', 150b8e80941Smrg 'rasterizer/memory/StoreTile_TileY2.cpp', 151b8e80941Smrg 'rasterizer/memory/StoreTile_TileY.cpp', 152b8e80941Smrg 'rasterizer/memory/TilingFunctions.h', 153b8e80941Smrg 'rasterizer/memory/tilingtraits.h', 154b8e80941Smrg 'rasterizer/memory/InitMemory.h', 155b8e80941Smrg 'rasterizer/memory/InitMemory.cpp', 156b8e80941Smrg) 157b8e80941Smrg 158b8e80941Smrgswr_context_files = files('swr_context.h') 159b8e80941Smrgswr_state_files = files('rasterizer/core/state.h') 160b8e80941Smrgswr_event_proto_files = files('rasterizer/archrast/events.proto') 161b8e80941Smrgswr_event_pproto_files = files('rasterizer/archrast/events_private.proto') 162b8e80941Smrgswr_gen_backend_files = files('rasterizer/codegen/templates/gen_backend.cpp') 163b8e80941Smrgswr_gen_rasterizer_files = files('rasterizer/codegen/templates/gen_rasterizer.cpp') 164b8e80941Smrgswr_gen_header_init_files = files('rasterizer/codegen/templates/gen_header_init.hpp') 165b8e80941Smrg 166b8e80941Smrgswr_gen_llvm_ir_macros_py = files('rasterizer/codegen/gen_llvm_ir_macros.py') 167b8e80941Smrgswr_gen_backends_py = files('rasterizer/codegen/gen_backends.py') 168b8e80941Smrg 169b8e80941Smrgswr_gen_builder_depends = files( 170b8e80941Smrg 'rasterizer/codegen/templates/gen_builder.hpp', 171b8e80941Smrg 'rasterizer/codegen/gen_common.py' 172b8e80941Smrg ) 173b8e80941Smrg 174b8e80941Smrg 175b8e80941Smrgsubdir('rasterizer/jitter') 176b8e80941Smrgsubdir('rasterizer/codegen') 177b8e80941Smrgsubdir('rasterizer/core/backends') 178b8e80941Smrg 179b8e80941Smrgswr_incs = include_directories( 180b8e80941Smrg 'rasterizer/codegen', 'rasterizer/core', 'rasterizer/jitter', 181b8e80941Smrg 'rasterizer/archrast', 'rasterizer', 182b8e80941Smrg) 183b8e80941Smrg 184b8e80941Smrgswr_cpp_args = [cpp_vis_args] 185b8e80941Smrgif cpp.has_argument('-fno-strict-aliasing') 186b8e80941Smrg swr_cpp_args += '-fno-strict-aliasing' 187b8e80941Smrgendif 188b8e80941Smrg 189b8e80941Smrgswr_arch_libs = [] 190b8e80941Smrgswr_arch_defines = [] 191b8e80941Smrg 192b8e80941Smrgswr_avx_args = cpp.first_supported_argument( 193b8e80941Smrg '-mavx', '-target-cpu=sandybridge', '-march=core-avx', '-tp=sandybridge', 194b8e80941Smrg) 195b8e80941Smrgif swr_avx_args == [] 196b8e80941Smrg error('Cannot find AVX support for swr. (these are required for SWR an all architectures.)') 197b8e80941Smrgendif 198b8e80941Smrgif with_swr_arches.contains('avx') 199b8e80941Smrg swr_arch_defines += '-DHAVE_SWR_AVX' 200b8e80941Smrg swr_arch_libs += shared_library( 201b8e80941Smrg 'swrAVX', 202b8e80941Smrg [files_swr_common, files_swr_arch], 203b8e80941Smrg cpp_args : [swr_cpp_args, swr_avx_args, '-DKNOB_ARCH=KNOB_ARCH_AVX'], 204b8e80941Smrg link_args : [ld_args_gc_sections], 205b8e80941Smrg include_directories : [swr_incs], 206b8e80941Smrg dependencies : [dep_thread, dep_llvm], 207b8e80941Smrg version : '0.0.0', 208b8e80941Smrg install : true, 209b8e80941Smrg ) 210b8e80941Smrgendif 211b8e80941Smrg 212b8e80941Smrgif with_swr_arches.contains('avx2') 213b8e80941Smrg swr_avx2_args = cpp.first_supported_argument( 214b8e80941Smrg '-march=core-avx2', '-target-cpu=haswell', '-tp=haswell', 215b8e80941Smrg ) 216b8e80941Smrg if swr_avx2_args == [] 217b8e80941Smrg if cpp.has_argument(['-mavx2', '-mfma', '-mbmi2', '-mf16c']) 218b8e80941Smrg swr_avx2_args = ['-mavx2', '-mfma', '-mbmi2', '-mf16c'] 219b8e80941Smrg else 220b8e80941Smrg error('Cannot find AVX2 support for swr.') 221b8e80941Smrg endif 222b8e80941Smrg endif 223b8e80941Smrg 224b8e80941Smrg swr_arch_defines += '-DHAVE_SWR_AVX2' 225b8e80941Smrg swr_arch_libs += shared_library( 226b8e80941Smrg 'swrAVX2', 227b8e80941Smrg [files_swr_common, files_swr_arch], 228b8e80941Smrg cpp_args : [swr_cpp_args, swr_avx2_args, '-DKNOB_ARCH=KNOB_ARCH_AVX2'], 229b8e80941Smrg link_args : [ld_args_gc_sections], 230b8e80941Smrg include_directories : [swr_incs], 231b8e80941Smrg dependencies : [dep_thread, dep_llvm], 232b8e80941Smrg version : '0.0.0', 233b8e80941Smrg install : true, 234b8e80941Smrg ) 235b8e80941Smrgendif 236b8e80941Smrg 237b8e80941Smrgif with_swr_arches.contains('knl') 238b8e80941Smrg swr_knl_args = cpp.first_supported_argument( 239b8e80941Smrg '-march=knl', '-target-cpu=mic-knl', '-xMIC-AVX512', 240b8e80941Smrg ) 241b8e80941Smrg if swr_knl_args == [] 242b8e80941Smrg error('Cannot find KNL support for swr.') 243b8e80941Smrg endif 244b8e80941Smrg 245b8e80941Smrg swr_arch_defines += '-DHAVE_SWR_KNL' 246b8e80941Smrg swr_arch_libs += shared_library( 247b8e80941Smrg 'swrKNL', 248b8e80941Smrg [files_swr_common, files_swr_arch], 249b8e80941Smrg cpp_args : [ 250b8e80941Smrg swr_cpp_args, swr_knl_args, '-DKNOB_ARCH=KNOB_ARCH_AVX512', 251b8e80941Smrg '-DSIMD_ARCH_KNIGHTS', 252b8e80941Smrg ], 253b8e80941Smrg link_args : [ld_args_gc_sections], 254b8e80941Smrg include_directories : [swr_incs], 255b8e80941Smrg dependencies : [dep_thread, dep_llvm], 256b8e80941Smrg version : '0.0.0', 257b8e80941Smrg install : true, 258b8e80941Smrg ) 259b8e80941Smrgendif 260b8e80941Smrg 261b8e80941Smrgif with_swr_arches.contains('skx') 262b8e80941Smrg swr_skx_args = cpp.first_supported_argument( 263b8e80941Smrg '-march=skylake-avx512', '-target-cpu=x86-skylake', '-xCORE-AVX512', 264b8e80941Smrg ) 265b8e80941Smrg if swr_skx_args == [] 266b8e80941Smrg error('Cannot find SKX support for swr.') 267b8e80941Smrg endif 268b8e80941Smrg 269b8e80941Smrg swr_arch_defines += '-DHAVE_SWR_SKX' 270b8e80941Smrg swr_arch_libs += shared_library( 271b8e80941Smrg 'swrSKX', 272b8e80941Smrg [files_swr_common, files_swr_arch], 273b8e80941Smrg cpp_args : [swr_cpp_args, swr_skx_args, '-DKNOB_ARCH=KNOB_ARCH_AVX512'], 274b8e80941Smrg link_args : [ld_args_gc_sections], 275b8e80941Smrg include_directories : [swr_incs], 276b8e80941Smrg dependencies : [dep_thread, dep_llvm], 277b8e80941Smrg version : '0.0.0', 278b8e80941Smrg install : true, 279b8e80941Smrg ) 280b8e80941Smrgendif 281b8e80941Smrg 282b8e80941Smrgif swr_arch_libs == [] 283b8e80941Smrg error('SWR configured, but no SWR architectures configured') 284b8e80941Smrgendif 285b8e80941Smrg 286b8e80941Smrg# The swr_avx_args are needed for intrensic usage in swr api headers. 287b8e80941Smrglibmesaswr = static_library( 288b8e80941Smrg 'mesaswr', 289b8e80941Smrg [files_swr_mesa, files_swr_common, gen_knobs_h, gen_knobs_cpp, 290b8e80941Smrg gen_builder_hpp, gen_builder_meta_hpp, gen_builder_intrin_hpp], 291b8e80941Smrg cpp_args : [cpp_vis_args, swr_cpp_args, swr_avx_args, swr_arch_defines], 292b8e80941Smrg include_directories : [inc_common, swr_incs], 293b8e80941Smrg dependencies : dep_llvm, 294b8e80941Smrg) 295b8e80941Smrg 296b8e80941Smrgdriver_swr = declare_dependency( 297b8e80941Smrg compile_args : '-DGALLIUM_SWR', 298b8e80941Smrg link_with : libmesaswr, 299b8e80941Smrg) 300