From 12b015940fda30a215861a76fa9614a3d9730423 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 6 Feb 2024 18:27:49 +0100 Subject: [PATCH] radv: implement vkCmdUpdatePipelineIndirectBufferNV() Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index d07af135364..a8ae1619648 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -11745,9 +11745,18 @@ radv_CmdBindPipelineShaderGroupNV(VkCommandBuffer commandBuffer, VkPipelineBindP /* VK_NV_device_generated_commands_compute */ VKAPI_ATTR void VKAPI_CALL radv_CmdUpdatePipelineIndirectBufferNV(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, - VkPipeline pipeline) + VkPipeline _pipeline) { - unreachable("radv: unimplemented vkCmdUpdatePipelineIndirectBufferNV"); + RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); + RADV_FROM_HANDLE(radv_pipeline, pipeline, _pipeline); + const struct radv_compute_pipeline *compute_pipeline = radv_pipeline_to_compute(pipeline); + const uint64_t va = compute_pipeline->indirect.va; + struct radv_compute_pipeline_metadata metadata; + + radv_get_compute_pipeline_metadata(cmd_buffer->device, compute_pipeline, &metadata); + + assert(sizeof(metadata) <= compute_pipeline->indirect.size); + radv_write_data(cmd_buffer, V_370_ME, va, sizeof(metadata) / 4, (const uint32_t *)&metadata, false); } /* VK_EXT_descriptor_buffer */