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