summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@collabora.com>2022-03-08 16:45:55 -0600
committerMarge Bot <emma+marge@anholt.net>2022-03-10 15:52:10 +0000
commit719b949575dabfddd56bedbffb7a188555401a31 (patch)
tree236810a1bb27f3e50b35c38e7c08eff0563ba870
parent47fc0b39c79c26e14e58a4206f580e1ae94e2c24 (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.build15
-rw-r--r--src/vulkan/runtime/vk_device.h6
-rw-r--r--src/vulkan/util/vk_cmd_queue_gen.py28
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):