xref: /aosp_15_r20/external/mesa3d/src/freedreno/decode/meson.build (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker# Copyright © 2020 Google, Inc
2*61046927SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard Workerif with_tests
5*61046927SAndroid Build Coastguard Worker  diff = find_program('diff')
6*61046927SAndroid Build Coastguard Workerendif
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker# Shared cmdstream decoding:
9*61046927SAndroid Build Coastguard Workerlibfreedreno_cffdec = static_library(
10*61046927SAndroid Build Coastguard Worker  'freedreno_cffdec',
11*61046927SAndroid Build Coastguard Worker  [
12*61046927SAndroid Build Coastguard Worker    'buffers.c',
13*61046927SAndroid Build Coastguard Worker    'buffers.h',
14*61046927SAndroid Build Coastguard Worker    'cffdec.c',
15*61046927SAndroid Build Coastguard Worker    'cffdec.h',
16*61046927SAndroid Build Coastguard Worker    'pager.c',
17*61046927SAndroid Build Coastguard Worker    'pager.h',
18*61046927SAndroid Build Coastguard Worker    'rnnutil.c',
19*61046927SAndroid Build Coastguard Worker    'rnnutil.h',
20*61046927SAndroid Build Coastguard Worker    'util.h',
21*61046927SAndroid Build Coastguard Worker  ],
22*61046927SAndroid Build Coastguard Worker  include_directories: [
23*61046927SAndroid Build Coastguard Worker    inc_freedreno,
24*61046927SAndroid Build Coastguard Worker    inc_freedreno_rnn,
25*61046927SAndroid Build Coastguard Worker    inc_include,
26*61046927SAndroid Build Coastguard Worker    inc_src,
27*61046927SAndroid Build Coastguard Worker  ],
28*61046927SAndroid Build Coastguard Worker  c_args : [ no_override_init_args ],
29*61046927SAndroid Build Coastguard Worker  gnu_symbol_visibility: 'hidden',
30*61046927SAndroid Build Coastguard Worker  dependencies: [],
31*61046927SAndroid Build Coastguard Worker  link_with: [
32*61046927SAndroid Build Coastguard Worker    libfreedreno_rnn,
33*61046927SAndroid Build Coastguard Worker    libfreedreno_ir2,  # for disasm_a2xx
34*61046927SAndroid Build Coastguard Worker    libfreedreno_ir3,  # for disasm_a3xx
35*61046927SAndroid Build Coastguard Worker    _libmesa_util,
36*61046927SAndroid Build Coastguard Worker  ],
37*61046927SAndroid Build Coastguard Worker  build_by_default: false,
38*61046927SAndroid Build Coastguard Worker)
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Workerif dep_libarchive.found()
41*61046927SAndroid Build Coastguard Worker  libfreedreno_io = static_library(
42*61046927SAndroid Build Coastguard Worker    'freedreno_io',
43*61046927SAndroid Build Coastguard Worker    [
44*61046927SAndroid Build Coastguard Worker      'io.c',
45*61046927SAndroid Build Coastguard Worker      'io.h',
46*61046927SAndroid Build Coastguard Worker    ],
47*61046927SAndroid Build Coastguard Worker    include_directories: [],
48*61046927SAndroid Build Coastguard Worker    c_args : [no_override_init_args],
49*61046927SAndroid Build Coastguard Worker    gnu_symbol_visibility: 'hidden',
50*61046927SAndroid Build Coastguard Worker    dependencies: [
51*61046927SAndroid Build Coastguard Worker      dep_libarchive,
52*61046927SAndroid Build Coastguard Worker    ],
53*61046927SAndroid Build Coastguard Worker    build_by_default: false,
54*61046927SAndroid Build Coastguard Worker  )
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker  foreach kmd : freedreno_kmds
57*61046927SAndroid Build Coastguard Worker    if not (kmd in ['kgsl', 'msm', 'wsl'])
58*61046927SAndroid Build Coastguard Worker      warning('replay not supported for ' + kmd + ' KMD')
59*61046927SAndroid Build Coastguard Worker      continue
60*61046927SAndroid Build Coastguard Worker    endif
61*61046927SAndroid Build Coastguard Worker
62*61046927SAndroid Build Coastguard Worker    # Only append the KMD name if there are multiple KMDs
63*61046927SAndroid Build Coastguard Worker    if freedreno_kmds.length() == 1
64*61046927SAndroid Build Coastguard Worker      replay_name = 'replay'
65*61046927SAndroid Build Coastguard Worker    else
66*61046927SAndroid Build Coastguard Worker      replay_name = 'replay-' + kmd
67*61046927SAndroid Build Coastguard Worker    endif
68*61046927SAndroid Build Coastguard Worker
69*61046927SAndroid Build Coastguard Worker    replay_flags = []
70*61046927SAndroid Build Coastguard Worker    replay_deps = []
71*61046927SAndroid Build Coastguard Worker    if kmd == 'kgsl'
72*61046927SAndroid Build Coastguard Worker      replay_flags += '-DFD_REPLAY_KGSL'
73*61046927SAndroid Build Coastguard Worker    elif kmd == 'msm'
74*61046927SAndroid Build Coastguard Worker      replay_flags += '-DFD_REPLAY_MSM'
75*61046927SAndroid Build Coastguard Worker      replay_deps += dep_libdrm
76*61046927SAndroid Build Coastguard Worker    elif kmd == 'wsl'
77*61046927SAndroid Build Coastguard Worker      replay_flags += '-DFD_REPLAY_WSL'
78*61046927SAndroid Build Coastguard Worker    endif
79*61046927SAndroid Build Coastguard Worker
80*61046927SAndroid Build Coastguard Worker    replay = executable(
81*61046927SAndroid Build Coastguard Worker      replay_name,
82*61046927SAndroid Build Coastguard Worker      [
83*61046927SAndroid Build Coastguard Worker        'replay.c'
84*61046927SAndroid Build Coastguard Worker      ],
85*61046927SAndroid Build Coastguard Worker      include_directories: [
86*61046927SAndroid Build Coastguard Worker        inc_freedreno,
87*61046927SAndroid Build Coastguard Worker        inc_include,
88*61046927SAndroid Build Coastguard Worker        inc_src,
89*61046927SAndroid Build Coastguard Worker      ],
90*61046927SAndroid Build Coastguard Worker      c_args : [no_override_init_args, replay_flags],
91*61046927SAndroid Build Coastguard Worker      gnu_symbol_visibility: 'hidden',
92*61046927SAndroid Build Coastguard Worker      dependencies: replay_deps,
93*61046927SAndroid Build Coastguard Worker      link_with: [
94*61046927SAndroid Build Coastguard Worker        libfreedreno_cffdec,
95*61046927SAndroid Build Coastguard Worker        libfreedreno_io,
96*61046927SAndroid Build Coastguard Worker      ],
97*61046927SAndroid Build Coastguard Worker      build_by_default: with_tools.contains('freedreno'),
98*61046927SAndroid Build Coastguard Worker      install: install_fd_decode_tools,
99*61046927SAndroid Build Coastguard Worker    )
100*61046927SAndroid Build Coastguard Worker  endforeach
101*61046927SAndroid Build Coastguard Worker
102*61046927SAndroid Build Coastguard Worker  rddecompiler = executable(
103*61046927SAndroid Build Coastguard Worker    'rddecompiler',
104*61046927SAndroid Build Coastguard Worker    [
105*61046927SAndroid Build Coastguard Worker      'rddecompiler.c',
106*61046927SAndroid Build Coastguard Worker      freedreno_xml_header_files,
107*61046927SAndroid Build Coastguard Worker    ],
108*61046927SAndroid Build Coastguard Worker    include_directories: [
109*61046927SAndroid Build Coastguard Worker      inc_freedreno,
110*61046927SAndroid Build Coastguard Worker      inc_freedreno_rnn,
111*61046927SAndroid Build Coastguard Worker      inc_include,
112*61046927SAndroid Build Coastguard Worker      inc_src,
113*61046927SAndroid Build Coastguard Worker    ],
114*61046927SAndroid Build Coastguard Worker    c_args : [no_override_init_args],
115*61046927SAndroid Build Coastguard Worker    gnu_symbol_visibility: 'hidden',
116*61046927SAndroid Build Coastguard Worker    dependencies: [
117*61046927SAndroid Build Coastguard Worker      dep_libdrm,
118*61046927SAndroid Build Coastguard Worker    ],
119*61046927SAndroid Build Coastguard Worker    link_with: [
120*61046927SAndroid Build Coastguard Worker      libfreedreno_cffdec,
121*61046927SAndroid Build Coastguard Worker      libfreedreno_io,
122*61046927SAndroid Build Coastguard Worker    ],
123*61046927SAndroid Build Coastguard Worker    build_by_default: with_tools.contains('freedreno'),
124*61046927SAndroid Build Coastguard Worker    install: install_fd_decode_tools,
125*61046927SAndroid Build Coastguard Worker  )
126*61046927SAndroid Build Coastguard Worker
127*61046927SAndroid Build Coastguard Worker  generate_rd = executable(
128*61046927SAndroid Build Coastguard Worker    'generate_rd',
129*61046927SAndroid Build Coastguard Worker    [
130*61046927SAndroid Build Coastguard Worker      'generate-rd.cc'
131*61046927SAndroid Build Coastguard Worker    ],
132*61046927SAndroid Build Coastguard Worker    include_directories: [
133*61046927SAndroid Build Coastguard Worker      inc_freedreno,
134*61046927SAndroid Build Coastguard Worker      inc_freedreno_rnn,
135*61046927SAndroid Build Coastguard Worker      inc_include,
136*61046927SAndroid Build Coastguard Worker      inc_src,
137*61046927SAndroid Build Coastguard Worker    ],
138*61046927SAndroid Build Coastguard Worker    link_with: [
139*61046927SAndroid Build Coastguard Worker      libfreedreno_cffdec,
140*61046927SAndroid Build Coastguard Worker    ],
141*61046927SAndroid Build Coastguard Worker    dependencies : [
142*61046927SAndroid Build Coastguard Worker      idep_nir,
143*61046927SAndroid Build Coastguard Worker    ],
144*61046927SAndroid Build Coastguard Worker    install: install_fd_decode_tools,
145*61046927SAndroid Build Coastguard Worker  )
146*61046927SAndroid Build Coastguard Workerelse
147*61046927SAndroid Build Coastguard Worker  warning('libarchive not found, not building replay or rddecompiler')
148*61046927SAndroid Build Coastguard Workerendif
149*61046927SAndroid Build Coastguard Worker
150*61046927SAndroid Build Coastguard Workerif dep_lua.found() and dep_libarchive.found()
151*61046927SAndroid Build Coastguard Worker  cffdump = executable(
152*61046927SAndroid Build Coastguard Worker    'cffdump',
153*61046927SAndroid Build Coastguard Worker    [
154*61046927SAndroid Build Coastguard Worker      'cffdump.c',
155*61046927SAndroid Build Coastguard Worker      'script.c',
156*61046927SAndroid Build Coastguard Worker      'script.h'
157*61046927SAndroid Build Coastguard Worker    ],
158*61046927SAndroid Build Coastguard Worker    include_directories: [
159*61046927SAndroid Build Coastguard Worker      inc_freedreno,
160*61046927SAndroid Build Coastguard Worker      inc_freedreno_rnn,
161*61046927SAndroid Build Coastguard Worker      inc_include,
162*61046927SAndroid Build Coastguard Worker      inc_src,
163*61046927SAndroid Build Coastguard Worker    ],
164*61046927SAndroid Build Coastguard Worker    c_args : [no_override_init_args],
165*61046927SAndroid Build Coastguard Worker    gnu_symbol_visibility: 'hidden',
166*61046927SAndroid Build Coastguard Worker    dependencies: [
167*61046927SAndroid Build Coastguard Worker      dep_lua,
168*61046927SAndroid Build Coastguard Worker    ],
169*61046927SAndroid Build Coastguard Worker    link_with: [
170*61046927SAndroid Build Coastguard Worker      libfreedreno_cffdec,
171*61046927SAndroid Build Coastguard Worker      libfreedreno_io,
172*61046927SAndroid Build Coastguard Worker    ],
173*61046927SAndroid Build Coastguard Worker    build_by_default: with_tools.contains('freedreno'),
174*61046927SAndroid Build Coastguard Worker    install: install_fd_decode_tools,
175*61046927SAndroid Build Coastguard Worker  )
176*61046927SAndroid Build Coastguard Worker
177*61046927SAndroid Build Coastguard Worker  if with_tests
178*61046927SAndroid Build Coastguard Worker    # dump only a single frame, and single tile pass, to keep the
179*61046927SAndroid Build Coastguard Worker    # reference output size managable
180*61046927SAndroid Build Coastguard Worker    cffdump_tests = [
181*61046927SAndroid Build Coastguard Worker      ['fd-clouds', ['--frame', '0', '--once']],
182*61046927SAndroid Build Coastguard Worker      ['es2gears-a320', ['--frame', '0', '--once']],
183*61046927SAndroid Build Coastguard Worker      ['glxgears-a420', ['--frame', '1', '--once']],
184*61046927SAndroid Build Coastguard Worker      ['compute-a540', ['--once']],
185*61046927SAndroid Build Coastguard Worker      ['dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d', ['--once']],
186*61046927SAndroid Build Coastguard Worker      ['dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list', ['--frame', '0', '--once']],
187*61046927SAndroid Build Coastguard Worker      # Test a lua script to ensure we don't break scripting API
188*61046927SAndroid Build Coastguard Worker      ['shadow', ['--script', files('scripts/parse-submits.lua')]],
189*61046927SAndroid Build Coastguard Worker    ]
190*61046927SAndroid Build Coastguard Worker    foreach cffdump_test: cffdump_tests
191*61046927SAndroid Build Coastguard Worker      name = cffdump_test[0]
192*61046927SAndroid Build Coastguard Worker      args = cffdump_test[1]
193*61046927SAndroid Build Coastguard Worker
194*61046927SAndroid Build Coastguard Worker      log = custom_target(name + '.log',
195*61046927SAndroid Build Coastguard Worker        output: name + '.log',
196*61046927SAndroid Build Coastguard Worker        command: [cffdump, '--unit-test', args, files('../.gitlab-ci/traces/' + name + '.rd.gz')],
197*61046927SAndroid Build Coastguard Worker        capture: true,
198*61046927SAndroid Build Coastguard Worker      )
199*61046927SAndroid Build Coastguard Worker      test('cffdump-' + name,
200*61046927SAndroid Build Coastguard Worker        diff,
201*61046927SAndroid Build Coastguard Worker        args: ['-u', files('../.gitlab-ci/reference/' + name + '.log'), log],
202*61046927SAndroid Build Coastguard Worker        suite: 'freedreno',
203*61046927SAndroid Build Coastguard Worker        workdir: dir_source_root
204*61046927SAndroid Build Coastguard Worker      )
205*61046927SAndroid Build Coastguard Worker
206*61046927SAndroid Build Coastguard Worker    endforeach
207*61046927SAndroid Build Coastguard Worker  endif
208*61046927SAndroid Build Coastguard Workerelse
209*61046927SAndroid Build Coastguard Worker  warning('lua or libarchive not found, not building cffdump')
210*61046927SAndroid Build Coastguard Workerendif
211*61046927SAndroid Build Coastguard Worker
212*61046927SAndroid Build Coastguard Workercrashdec = executable(
213*61046927SAndroid Build Coastguard Worker  'crashdec',
214*61046927SAndroid Build Coastguard Worker  [
215*61046927SAndroid Build Coastguard Worker    'crashdec.c',
216*61046927SAndroid Build Coastguard Worker    'crashdec.h',
217*61046927SAndroid Build Coastguard Worker    'crashdec-hfi.c',
218*61046927SAndroid Build Coastguard Worker    'crashdec-mempool.c',
219*61046927SAndroid Build Coastguard Worker    'crashdec-prefetch.c',
220*61046927SAndroid Build Coastguard Worker  ],
221*61046927SAndroid Build Coastguard Worker  include_directories: [
222*61046927SAndroid Build Coastguard Worker    inc_freedreno,
223*61046927SAndroid Build Coastguard Worker    inc_freedreno_rnn,
224*61046927SAndroid Build Coastguard Worker    inc_include,
225*61046927SAndroid Build Coastguard Worker    inc_src,
226*61046927SAndroid Build Coastguard Worker  ],
227*61046927SAndroid Build Coastguard Worker  gnu_symbol_visibility: 'hidden',
228*61046927SAndroid Build Coastguard Worker  dependencies: [],
229*61046927SAndroid Build Coastguard Worker  link_with: [
230*61046927SAndroid Build Coastguard Worker    libfreedreno_cffdec,
231*61046927SAndroid Build Coastguard Worker  ],
232*61046927SAndroid Build Coastguard Worker  build_by_default: with_tools.contains('freedreno'),
233*61046927SAndroid Build Coastguard Worker  install: install_fd_decode_tools,
234*61046927SAndroid Build Coastguard Worker)
235*61046927SAndroid Build Coastguard Worker
236*61046927SAndroid Build Coastguard Workerif with_tests
237*61046927SAndroid Build Coastguard Worker  crashdec_tests = [
238*61046927SAndroid Build Coastguard Worker    ['crash', ['-sf']],
239*61046927SAndroid Build Coastguard Worker    ['crash_prefetch', ['-sf']],
240*61046927SAndroid Build Coastguard Worker    ['prefetch-test', ['-sf']],
241*61046927SAndroid Build Coastguard Worker  ]
242*61046927SAndroid Build Coastguard Worker  foreach crashdec_test: crashdec_tests
243*61046927SAndroid Build Coastguard Worker    name = crashdec_test[0]
244*61046927SAndroid Build Coastguard Worker    args = crashdec_test[1]
245*61046927SAndroid Build Coastguard Worker
246*61046927SAndroid Build Coastguard Worker    log = custom_target(name + '.log',
247*61046927SAndroid Build Coastguard Worker      output: name + '.log',
248*61046927SAndroid Build Coastguard Worker      command: [crashdec, args, files('../.gitlab-ci/traces/' + name + '.devcore')],
249*61046927SAndroid Build Coastguard Worker      capture: true,
250*61046927SAndroid Build Coastguard Worker      env: {'GALLIUM_DUMP_CPU': 'false'},
251*61046927SAndroid Build Coastguard Worker    )
252*61046927SAndroid Build Coastguard Worker
253*61046927SAndroid Build Coastguard Worker    test('crashdec-' + name,
254*61046927SAndroid Build Coastguard Worker      diff,
255*61046927SAndroid Build Coastguard Worker      args: ['-u', files('../.gitlab-ci/reference/' + name + '.log'), log],
256*61046927SAndroid Build Coastguard Worker      suite: 'freedreno',
257*61046927SAndroid Build Coastguard Worker      workdir: dir_source_root
258*61046927SAndroid Build Coastguard Worker    )
259*61046927SAndroid Build Coastguard Worker
260*61046927SAndroid Build Coastguard Worker  endforeach
261*61046927SAndroid Build Coastguard Workerendif
262*61046927SAndroid Build Coastguard Worker
263*61046927SAndroid Build Coastguard Workerif dep_libarchive.found()
264*61046927SAndroid Build Coastguard Worker  pgmdump = executable(
265*61046927SAndroid Build Coastguard Worker    'pgmdump',
266*61046927SAndroid Build Coastguard Worker    'pgmdump.c',
267*61046927SAndroid Build Coastguard Worker    include_directories: [
268*61046927SAndroid Build Coastguard Worker      inc_freedreno,
269*61046927SAndroid Build Coastguard Worker      inc_include,
270*61046927SAndroid Build Coastguard Worker      inc_src,
271*61046927SAndroid Build Coastguard Worker    ],
272*61046927SAndroid Build Coastguard Worker    gnu_symbol_visibility: 'hidden',
273*61046927SAndroid Build Coastguard Worker    dependencies: [],
274*61046927SAndroid Build Coastguard Worker    link_with: [
275*61046927SAndroid Build Coastguard Worker      libfreedreno_cffdec,
276*61046927SAndroid Build Coastguard Worker      libfreedreno_io,
277*61046927SAndroid Build Coastguard Worker      libfreedreno_ir2,  # for disasm_a2xx
278*61046927SAndroid Build Coastguard Worker      libfreedreno_ir3,  # for disasm_a3xx
279*61046927SAndroid Build Coastguard Worker    ],
280*61046927SAndroid Build Coastguard Worker    build_by_default: with_tools.contains('freedreno'),
281*61046927SAndroid Build Coastguard Worker    install: false,
282*61046927SAndroid Build Coastguard Worker  )
283*61046927SAndroid Build Coastguard Worker  pgmdump2 = executable(
284*61046927SAndroid Build Coastguard Worker    'pgmdump2',
285*61046927SAndroid Build Coastguard Worker    'pgmdump2.c',
286*61046927SAndroid Build Coastguard Worker    include_directories: [
287*61046927SAndroid Build Coastguard Worker      inc_freedreno,
288*61046927SAndroid Build Coastguard Worker      inc_include,
289*61046927SAndroid Build Coastguard Worker      inc_src,
290*61046927SAndroid Build Coastguard Worker    ],
291*61046927SAndroid Build Coastguard Worker    gnu_symbol_visibility: 'hidden',
292*61046927SAndroid Build Coastguard Worker    dependencies: [],
293*61046927SAndroid Build Coastguard Worker    link_with: [
294*61046927SAndroid Build Coastguard Worker      libfreedreno_cffdec,
295*61046927SAndroid Build Coastguard Worker      libfreedreno_io,
296*61046927SAndroid Build Coastguard Worker      libfreedreno_ir2,  # for disasm_a2xx
297*61046927SAndroid Build Coastguard Worker      libfreedreno_ir3,  # for disasm_a3xx
298*61046927SAndroid Build Coastguard Worker    ],
299*61046927SAndroid Build Coastguard Worker    build_by_default: with_tools.contains('freedreno'),
300*61046927SAndroid Build Coastguard Worker    install: false,
301*61046927SAndroid Build Coastguard Worker  )
302*61046927SAndroid Build Coastguard Workerelse
303*61046927SAndroid Build Coastguard Worker  warning('libarchive not found, not building pgmdump')
304*61046927SAndroid Build Coastguard Workerendif
305