From 91c21c8cba26755ac67f24d2c2dcd88e8429c2f7 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 6 Feb 2024 18:21:45 +0100 Subject: [PATCH] radv: add support for VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV This stores the VA/size of the indirect buffer to be used in vkCmdUpdatePipelineIndirectBufferNV. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_pipeline_compute.c | 8 ++++++++ src/amd/vulkan/radv_private.h | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/src/amd/vulkan/radv_pipeline_compute.c b/src/amd/vulkan/radv_pipeline_compute.c index 7fe48f9716d..0e3b95c3267 100644 --- a/src/amd/vulkan/radv_pipeline_compute.c +++ b/src/amd/vulkan/radv_pipeline_compute.c @@ -317,6 +317,14 @@ radv_compute_pipeline_create(VkDevice _device, VkPipelineCache _cache, const VkC radv_compute_pipeline_init(device, pipeline, pipeline_layout, pipeline->base.shaders[MESA_SHADER_COMPUTE]); + if (pipeline->base.create_flags & VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV) { + const VkComputePipelineIndirectBufferInfoNV *indirect_buffer = + vk_find_struct_const(pCreateInfo->pNext, COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV); + + pipeline->indirect.va = indirect_buffer->deviceAddress; + pipeline->indirect.size = indirect_buffer->size; + } + *pPipeline = radv_pipeline_to_handle(&pipeline->base); radv_rmv_log_compute_pipeline_create(device, &pipeline->base, pipeline->base.is_internal); return VK_SUCCESS; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 42d5e5aeac8..aaab9c169ee 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2341,6 +2341,11 @@ struct radv_graphics_pipeline { struct radv_compute_pipeline { struct radv_pipeline base; + + struct { + uint64_t va; + uint64_t size; + } indirect; }; struct radv_ray_tracing_group {