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