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