diff options
author | Philip Rebohle <philip.rebohle@tu-dortmund.de> | 2022-02-01 19:20:20 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-09-08 17:33:08 +0300 |
commit | 5a02feac1f47f1e44a86007fe65a01e0839b77c7 (patch) | |
tree | b5c1dc041e9b438b6363b5df687faf77252da71b | |
parent | 319ce2b0456eaa7a44f62e9bafc151c8e6e53bef (diff) |
vkd3d: Implement indirect mesh shader dispatches.
Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
-rw-r--r-- | libs/vkd3d/command.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index 693d0b08..0a321321 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -10548,6 +10548,7 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l break; case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH: type = VKD3D_PREDICATE_COMMAND_DISPATCH_INDIRECT; indirect_va = d3d12_resource_get_va(arg_impl, arg_buffer_offset); break; @@ -10621,6 +10622,26 @@ static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(d3d12_command_l } break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH: + if (!d3d12_command_list_begin_render_pass(list)) + { + WARN("Failed to begin render pass, ignoring draw.\n"); + break; + } + + if (count_buffer || list->predicate_va) + { + VK_CALL(vkCmdDrawMeshTasksIndirectCountEXT(list->vk_command_buffer, arg_impl->res.vk_buffer, + arg_buffer_offset + arg_impl->mem.offset, scratch.buffer, scratch.offset, + max_command_count, signature_desc->ByteStride)); + } + else + { + VK_CALL(vkCmdDrawMeshTasksIndirectEXT(list->vk_command_buffer, + scratch.buffer, scratch.offset, 1, 0)); + } + break; + case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: if (max_command_count != 1) FIXME("Ignoring command count %u.\n", max_command_count); |