diff options
author | Jason Ekstrand <jason.ekstrand@collabora.com> | 2022-03-08 16:45:55 -0600 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-03-10 15:52:10 +0000 |
commit | 719b949575dabfddd56bedbffb7a188555401a31 (patch) | |
tree | 236810a1bb27f3e50b35c38e7c08eff0563ba870 | |
parent | 47fc0b39c79c26e14e58a4206f580e1ae94e2c24 (diff) |
vulkan/cmd_queue: Generate enqueue entrypoints
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15311>
-rw-r--r-- | src/vulkan/runtime/meson.build | 15 | ||||
-rw-r--r-- | src/vulkan/runtime/vk_device.h | 6 | ||||
-rw-r--r-- | src/vulkan/util/vk_cmd_queue_gen.py | 28 |
3 files changed, 48 insertions, 1 deletions
diff --git a/src/vulkan/runtime/meson.build b/src/vulkan/runtime/meson.build index b9c4ed759c1..b1fbef54deb 100644 --- a/src/vulkan/runtime/meson.build +++ b/src/vulkan/runtime/meson.build @@ -108,6 +108,18 @@ vk_cmd_queue = custom_target( depend_files : vk_cmd_queue_gen_depend_files, ) +vk_cmd_enqueue_entrypoints = custom_target( + 'vk_cmd_enqueue_entrypoints', + input : [vk_entrypoints_gen, vk_api_xml], + output : ['vk_cmd_enqueue_entrypoints.h', 'vk_cmd_enqueue_entrypoints.c'], + command : [ + prog_python, '@INPUT0@', '--xml', '@INPUT1@', '--proto', '--weak', + '--out-h', '@OUTPUT0@', '--out-c', '@OUTPUT1@', + '--prefix', 'vk_cmd_enqueue', + ], + depend_files : vk_entrypoints_gen_depend_files, +) + vk_dispatch_trampolines = custom_target( 'vk_dispatch_trampolines', input : [vk_dispatch_trampolines_gen, vk_api_xml], @@ -132,7 +144,8 @@ vk_physical_device_features = custom_target( libvulkan_runtime = static_library( 'vulkan_runtime', - [vulkan_runtime_files, vk_common_entrypoints, vk_cmd_queue, + [vulkan_runtime_files, vk_common_entrypoints, + vk_cmd_queue, vk_cmd_enqueue_entrypoints, vk_dispatch_trampolines, vk_physical_device_features], include_directories : [inc_include, inc_src, inc_gallium], dependencies : vulkan_runtime_deps, diff --git a/src/vulkan/runtime/vk_device.h b/src/vulkan/runtime/vk_device.h index a74d4a06cc9..9dced009cc8 100644 --- a/src/vulkan/runtime/vk_device.h +++ b/src/vulkan/runtime/vk_device.h @@ -45,6 +45,12 @@ struct vk_device { struct vk_device_dispatch_table dispatch_table; + /** Command dispatch table + * + * This is used for emulated secondary command buffer support. + */ + const struct vk_device_dispatch_table *command_dispatch_table; + /* For VK_EXT_private_data */ uint32_t private_data_next_index; diff --git a/src/vulkan/util/vk_cmd_queue_gen.py b/src/vulkan/util/vk_cmd_queue_gen.py index 2911eae34a0..8e4312846ca 100644 --- a/src/vulkan/util/vk_cmd_queue_gen.py +++ b/src/vulkan/util/vk_cmd_queue_gen.py @@ -185,6 +185,8 @@ TEMPLATE_C = Template(COPYRIGHT + """ #include <vulkan/vulkan.h> #include "vk_alloc.h" +#include "vk_cmd_enqueue_entrypoints.h" +#include "vk_command_buffer.h" const char *vk_cmd_queue_type_names[] = { % for c in commands: @@ -272,6 +274,32 @@ vk_free_queue(struct vk_cmd_queue *queue) } } +% for c in commands: +% if c.name in manual_commands: +/* TODO: Generate vk_cmd_enqueue_${c.name}() */ +<% continue %> +% endif + +% if c.guard is not None: +#ifdef ${c.guard} +% endif +<% assert c.return_type == 'void' %> +VKAPI_ATTR void VKAPI_CALL +vk_cmd_enqueue_${c.name}(${c.decl_params()}) +{ + VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer); + +% if len(c.params) == 1: + vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->cmd_queue); +% else: + vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->cmd_queue, + ${c.call_params(1)}); +% endif +} +% if c.guard is not None: +#endif // ${c.guard} +% endif +% endfor """, output_encoding='utf-8') def remove_prefix(text, prefix): |