vulkan/cmd_queue: Auto-generate more vk_cmd_enqueue_unless_primary_Cmd*

Instead of one MANUAL_COMMANDS, we now have two deny-lists:
MANUAL_COMMANDS and NO_ENQUEUE_COMMANDS.  The former is for things which
have a manually typed implementation in vk_cmd_enqueue.c and the later
is for things we want to ignore entirely.  This lets us auto-generate
vk_cmd_enqueue_unless_primary_Cmd* entrypoints for the manually typed
vk_cmd_enqueue_Cmd* entrypoints.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14406>
This commit is contained in:
Jason Ekstrand
2022-03-17 11:00:27 -05:00
committed by Marge Bot
parent 3cffffc441
commit 6cb95877b5

View File

@@ -35,13 +35,11 @@ from mako.template import Template
# '{file_without_suffix}_depend_files'.
from vk_entrypoints import get_entrypoints_from_xml, EntrypointParam
# These have hand-typed implementations in vk_cmd_enqueue.c
MANUAL_COMMANDS = [
# This script doesn't know how to copy arrays in structs in arrays
'CmdPushDescriptorSetKHR',
# pData's size cannot be calculated from the xml
'CmdPushDescriptorSetWithTemplateKHR',
# The size of the elements is specified in a stride param
'CmdDrawMultiEXT',
'CmdDrawMultiIndexedEXT',
@@ -49,6 +47,11 @@ MANUAL_COMMANDS = [
# The VkPipelineLayout object could be released before the command is
# executed
'CmdBindDescriptorSets',
]
NO_ENQUEUE_COMMANDS = [
# pData's size cannot be calculated from the xml
'CmdPushDescriptorSetWithTemplateKHR',
# These don't return void
'CmdSetPerformanceMarkerINTEL',
@@ -131,7 +134,7 @@ struct vk_cmd_queue_entry {
};
% for c in commands:
% if c.name in manual_commands:
% if c.name in manual_commands or c.name in no_enqueue_commands:
<% continue %>
% endif
% if c.guard is not None:
@@ -207,7 +210,7 @@ const char *vk_cmd_queue_type_names[] = {
};
% for c in commands:
% if c.name in manual_commands:
% if c.name in manual_commands or c.name in no_enqueue_commands:
<% continue %>
% endif
% if c.guard is not None:
@@ -311,7 +314,7 @@ vk_cmd_queue_execute(struct vk_cmd_queue *queue,
}
% for c in commands:
% if c.name in manual_commands:
% if c.name in no_enqueue_commands:
/* TODO: Generate vk_cmd_enqueue_${c.name}() */
<% continue %>
% endif
@@ -320,6 +323,10 @@ vk_cmd_queue_execute(struct vk_cmd_queue *queue,
#ifdef ${c.guard}
% endif
<% assert c.return_type == 'void' %>
% if c.name in manual_commands:
/* vk_cmd_enqueue_${c.name}() is hand-typed in vk_cmd_enqueue.c */
% else:
VKAPI_ATTR void VKAPI_CALL
vk_cmd_enqueue_${c.name}(${c.decl_params()})
{
@@ -332,6 +339,7 @@ vk_cmd_enqueue_${c.name}(${c.decl_params()})
${c.call_params(1)});
% endif
}
% endif
VKAPI_ATTR void VKAPI_CALL
vk_cmd_enqueue_unless_primary_${c.name}(${c.decl_params()})
@@ -551,6 +559,7 @@ def main():
'get_struct_free': get_struct_free,
'types': types,
'manual_commands': MANUAL_COMMANDS,
'no_enqueue_commands': NO_ENQUEUE_COMMANDS,
'remove_suffix': remove_suffix,
}