xref: /aosp_15_r20/external/mesa3d/src/intel/vulkan/grl/meson.build (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1# Copyright © 2021 Intel Corporation
2# SPDX-License-Identifier: MIT
3
4fs = import('fs')
5
6grl_lib_files = [
7  'gpu/libs/libraries.grl',
8]
9
10grl_grl_files = [
11  'gpu/build_leaf.grl',
12  'gpu/build_primref.grl',
13#  'gpu/build_refit.grl',
14  'gpu/copy.grl',
15#  'gpu/grl_api_interface_verify.grl',
16  'gpu/misc.grl',
17#  'gpu/morton_builder.grl',
18#  'gpu/msb_radix_bitonic_sort.grl',
19  'gpu/new_sah_builder.grl',
20  'gpu/postbuild_info.grl',
21#  'gpu/presplit.grl',
22#  'gpu/radix_sort.grl',
23#  'gpu/rebraid.grl',
24#  'gpu/traversal_shader.grl',
25]
26
27grl_lib_args = []
28foreach libfile : grl_lib_files
29  grl_lib_args += '--library'
30  grl_lib_args += files(libfile)
31endforeach
32
33grl_genX_files = [
34  'genX_grl_dispatch.c',
35  'genX_grl_uuid.cpp',
36]
37
38grl_lib_args = []
39foreach libfile : grl_lib_files
40  grl_lib_args += '--library'
41  grl_lib_args += files(libfile)
42endforeach
43
44grl_cl_kernel_h = custom_target(
45  'grl_cl_kernel.h',
46  input : ['grl_cl_kernel_gen.py', grl_grl_files, grl_lib_files],
47  output : 'grl_cl_kernel.h',
48  command : [
49    prog_python, '@INPUT0@', '--out-h', '@OUTPUT@',
50    grl_lib_args, files(grl_grl_files),
51  ],
52)
53
54has_ply = run_command(
55  prog_python, '-c',
56  '''
57import ply
58  ''', check : false)
59if has_ply.returncode() != 0
60  error('Python (3.x) ply module required to build GRL kernels.')
61endif
62
63r = run_command(prog_python, 'grl_cl_kernel_gen.py',
64                grl_lib_args, '--ls-kernels', grl_grl_files, check : false)
65assert(r.returncode() == 0, 'Failed to fetch GRL CL kernels')
66grl_kernels = r.stdout().strip().split()
67
68grl_metakernel_c = []
69grl_metakernel_h = []
70foreach grl_file : grl_grl_files
71  base_outfile = 'grl_metakernel_' + fs.replace_suffix(fs.name(grl_file), '')
72  outfiles = custom_target(
73    base_outfile,
74    input : ['grl_metakernel_gen.py', grl_file, grl_lib_files],
75    output : [base_outfile + '.h', base_outfile + '.c'],
76    command : [
77      prog_python, '@INPUT0@', '--out-h', '@OUTPUT0@',
78      '--out-c', '@OUTPUT1@', grl_lib_args, '@INPUT1@',
79    ],
80  )
81  grl_metakernel_h += outfiles[0]
82  grl_metakernel_c += outfiles[1]
83endforeach
84
85grl_genX_libs = []
86foreach t : [['125', 'gfx125', 'dg2'], ['200', 'gfx20', 'lnl'], ]
87  verX10 = t[0]
88  genX_prefix = t[1]
89  platform = t[2]
90
91  grl_compiled_cl_kernels = []
92  foreach k : grl_kernels
93    # get_cl_files dumps out filename:entrypoint:libfile1,libfile2,libfile3
94    cl_file = k.split(':')[0]
95    entrypoint = k.split(':')[1]
96    library_files = k.split(':')[2]
97    kernel_prefix = '_'.join([
98      genX_prefix,
99      fs.replace_suffix(cl_file, '').replace('gpu/', '').replace('/', '_'),
100      entrypoint
101    ])
102    input_args = [ files(cl_file), ]
103    if library_files != ''
104      foreach lib_file : library_files.split(',')
105        input_args += [ lib_file ]
106      endforeach
107    endif
108    prepended_input_args = []
109    foreach input_arg : input_args
110      prepended_input_args += ['--in', input_arg]
111    endforeach
112    outfile = kernel_prefix + '.h'
113    grl_compiled_cl_kernels += custom_target(
114      outfile,
115      input : cl_file,
116      output : outfile,
117      command : [
118        prog_intel_clc, '-p', platform, '--prefix', kernel_prefix,
119        '-e', entrypoint, prepended_input_args, '-o', '@OUTPUT@', '--',
120        '-cl-std=cl2.0', '-D__OPENCL_VERSION__=200',
121        '-DMAX_HW_SIMD_WIDTH=16', '-DMAX_WORKGROUP_SIZE=16',
122        '-I' + join_paths(meson.current_source_dir(), 'gpu'),
123        '-I' + join_paths(meson.current_source_dir(), 'include'),
124      ],
125      env: ['MESA_SHADER_CACHE_DISABLE=true',
126            'MESA_SPIRV_LOG_LEVEL=error'],
127      depends : dep_prog_intel_clc
128    )
129  endforeach
130
131  grl_cl_kernel_c = custom_target(
132    'grl_@0@_cl_kernel.c'.format(genX_prefix),
133    input : ['grl_cl_kernel_gen.py', grl_grl_files, grl_lib_files],
134    output : 'grl_@0@_cl_kernel.c'.format(genX_prefix),
135    command : [
136      prog_python, '@INPUT0@', '--out-c', '@OUTPUT@',
137      grl_lib_args, '--prefix', genX_prefix, files(grl_grl_files),
138    ],
139  )
140
141  grl_genX_libs += static_library(
142    'grl_@0@'.format(genX_prefix),
143    [grl_cl_kernel_h, grl_compiled_cl_kernels, grl_cl_kernel_c,
144     grl_genX_files, grl_metakernel_c, grl_metakernel_h],
145    include_directories : [
146      inc_include, inc_src,
147      inc_intel,
148    ],
149    c_args : [
150      no_override_init_args, sse2_args,
151      '-DGFX_VERx10=@0@'.format(verX10),
152    ],
153    cpp_args : [
154      sse2_args,
155      '-DGFX_VERx10=@0@'.format(verX10),
156    ],
157    dependencies : [
158      dep_valgrind, idep_nir_headers, idep_vulkan_util_headers, idep_vulkan_wsi_headers,
159      idep_vulkan_runtime_headers, idep_anv_headers, idep_genxml,
160    ],
161    gnu_symbol_visibility : 'hidden',
162  )
163endforeach
164
165libgrl_deps = [
166  dep_valgrind,
167  idep_nir_headers,
168  idep_vulkan_util_headers,
169  idep_vulkan_wsi_headers,
170]
171
172libgrl = static_library(
173  'grl',
174  [grl_cl_kernel_h],
175  include_directories : [
176    inc_include, inc_src, inc_intel,
177  ],
178  link_whole : [grl_genX_libs],
179  dependencies : [libgrl_deps, idep_anv_headers],
180)
181idep_grl = declare_dependency(
182  link_with : libgrl,
183  dependencies : libgrl_deps,
184  sources : [grl_metakernel_h, grl_cl_kernel_h],
185  include_directories : include_directories('include', 'gpu'),
186)
187