Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/HansKristian-Work/vkd3d-proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Rebohle <philip.rebohle@tu-dortmund.de>2022-02-01 19:20:20 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2022-09-08 17:33:08 +0300
commit5a02feac1f47f1e44a86007fe65a01e0839b77c7 (patch)
treeb5c1dc041e9b438b6363b5df687faf77252da71b
parent319ce2b0456eaa7a44f62e9bafc151c8e6e53bef (diff)
vkd3d: Implement indirect mesh shader dispatches.
Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
-rw-r--r--libs/vkd3d/command.c21
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);