fd/decode: Build generate_rd executable rather

A seperate meson project with mesa as a subproject was required to
compile the generate_rd executable for replaying rddecompiler
generated source. That approach was overly complicated, now the
generate_rd executable is now compiled as a part of building the
freedreno tools with a blank generate-rd.cc file that can be replaced
with the source generated by rddecompiler.

Signed-off-by: Mark Collins <mark@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28253>
This commit is contained in:
Mark Collins
2024-03-18 14:30:29 +00:00
committed by Marge Bot
parent bdd89dad1c
commit 69d347e42f
4 changed files with 32 additions and 49 deletions

View File

@@ -467,7 +467,7 @@ Given the address space bounds the generated program creates a new ``rd`` which
could be used to override cmdstream with 'replay'. Generated ``rd`` is not replayable could be used to override cmdstream with 'replay'. Generated ``rd`` is not replayable
on its own and depends on buffers provided by the source ``rd``. on its own and depends on buffers provided by the source ``rd``.
C source could be compiled using rdcompiler-meson.build as an example. C source could be compiled by putting it into src/freedreno/decode/generate-rd.cc.
The workflow would look like this: The workflow would look like this:
@@ -476,15 +476,15 @@ The workflow would look like this:
.. code-block:: sh .. code-block:: sh
./rddecompiler -s %cmd_stream_n% example.rd > generate_rd.c ./rddecompiler -s %cmd_stream_n% example.rd > src/freedreno/decode/generate-rd.cc
3. Edit the command stream; 3. Edit the command stream;;
4. Compile it back, see rdcompiler-meson.build for the instructions; 4. Compile and deploy freedreno tools;
5. Plug the generator into cmdstream replay: 5. Plug the generator into cmdstream replay:
.. code-block:: sh .. code-block:: sh
./replay --override=%cmd_stream_№% --generator=~/generate_rd ./replay --override=%cmd_stream_№% --generator=generate_rd
6. Repeat 3-5. 6. Repeat 3-5.

View File

@@ -0,0 +1,7 @@
/* This is a placeholder file that should be replaced with the contents
* generated by the rddecompiler from a trace file.
*/
int main(int argc, char **argv)
{
return 1;
}

View File

@@ -140,6 +140,26 @@ if dep_libarchive.found()
build_by_default: with_tools.contains('freedreno'), build_by_default: with_tools.contains('freedreno'),
install: install_fd_decode_tools, install: install_fd_decode_tools,
) )
generate_rd = executable(
'generate_rd',
[
'generate-rd.cc'
],
include_directories: [
inc_freedreno,
inc_freedreno_rnn,
inc_include,
inc_src,
],
link_with: [
libfreedreno_cffdec,
],
dependencies : [
idep_nir,
],
install: install_fd_decode_tools,
)
else else
warning('libarchive not found, not building replay or rddecompiler') warning('libarchive not found, not building replay or rddecompiler')
endif endif

View File

@@ -1,44 +0,0 @@
# An example meson.build for .rd decompiled into C source via rddecompiler.
# It uses Mesa as a subproject since the generated sources depend on
# generated headers with registers info and on some utils.
# Before compiling, create "subprojects" directory and create a link
# to mesa there.
project('generate_rd', ['c', 'cpp'], default_options : ['c_std=c11', 'cpp_std=c++17'])
mesa_options = ['gallium-drivers=',
'vulkan-drivers=',
'glx=disabled',
'tools=freedreno']
if host_machine.system() == 'android'
mesa_options += ['platforms=android',
'platform-sdk-version=28',
'android-stub=true']
endif
mesa_proj = subproject('mesa', default_options : mesa_options)
add_project_arguments(mesa_proj.get_variable('pre_args'), language : ['c', 'cpp'])
add_project_arguments(mesa_proj.get_variable('c_args'), language : ['c'])
add_project_arguments(mesa_proj.get_variable('c_cpp_args'), language : ['c', 'cpp'])
add_project_arguments(mesa_proj.get_variable('cpp_args'), language : ['cpp'])
generate_rd = executable(
'generate_rd',
[
'generate_rd.cc'
],
include_directories: [
mesa_proj.get_variable('inc_freedreno'),
mesa_proj.get_variable('inc_freedreno_rnn'),
mesa_proj.get_variable('inc_include'),
mesa_proj.get_variable('inc_src'),
],
link_with: [
mesa_proj.get_variable('libfreedreno_cffdec'),
],
dependencies : [
mesa_proj.get_variable('idep_nir'),
],
)