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