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:
@@ -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.
|
||||||
|
|
||||||
|
7
src/freedreno/decode/generate-rd.cc
Normal file
7
src/freedreno/decode/generate-rd.cc
Normal 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;
|
||||||
|
}
|
@@ -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
|
||||||
|
@@ -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'),
|
|
||||||
],
|
|
||||||
)
|
|
Reference in New Issue
Block a user