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 {