From fa2627aefbc2a553b988451a32e1040e58b710fb Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 10 Apr 2025 14:45:53 +0300 Subject: [PATCH] vulkan/runtime: add a multialloc variant for pipeline create Signed-off-by: Lionel Landwerlin Reviewed-by: Faith Ekstrand Part-of: --- src/vulkan/runtime/vk_pipeline.c | 37 ++++++++++++++++++++++++++------ src/vulkan/runtime/vk_pipeline.h | 7 ++++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/vulkan/runtime/vk_pipeline.c b/src/vulkan/runtime/vk_pipeline.c index 9610112776c..ce7a37c3151 100644 --- a/src/vulkan/runtime/vk_pipeline.c +++ b/src/vulkan/runtime/vk_pipeline.c @@ -346,6 +346,17 @@ vk_pipeline_robustness_state_fill(const struct vk_device *device, rs->images = vk_device_default_robust_image_behavior(device); } +static void +vk_pipeline_init(struct vk_pipeline *pipeline, + const struct vk_pipeline_ops *ops, + VkPipelineBindPoint bind_point, + VkPipelineCreateFlags2KHR flags) +{ + pipeline->ops = ops; + pipeline->bind_point = bind_point; + pipeline->flags = flags; +} + void * vk_pipeline_zalloc(struct vk_device *device, const struct vk_pipeline_ops *ops, @@ -354,15 +365,29 @@ vk_pipeline_zalloc(struct vk_device *device, const VkAllocationCallbacks *alloc, size_t size) { - struct vk_pipeline *pipeline; - - pipeline = vk_object_zalloc(device, alloc, size, VK_OBJECT_TYPE_PIPELINE); + struct vk_pipeline *pipeline = + vk_object_zalloc(device, alloc, size, VK_OBJECT_TYPE_PIPELINE); if (pipeline == NULL) return NULL; - pipeline->ops = ops; - pipeline->bind_point = bind_point; - pipeline->flags = flags; + vk_pipeline_init(pipeline, ops, bind_point, flags); + + return pipeline; +} + +void *vk_pipeline_multizalloc(struct vk_device *device, + struct vk_multialloc *ma, + const struct vk_pipeline_ops *ops, + VkPipelineBindPoint bind_point, + VkPipelineCreateFlags2KHR flags, + const VkAllocationCallbacks *alloc) +{ + struct vk_pipeline *pipeline = + vk_object_multizalloc(device, ma, alloc, VK_OBJECT_TYPE_PIPELINE); + if (!pipeline) + return NULL; + + vk_pipeline_init(pipeline, ops, bind_point, flags); return pipeline; } diff --git a/src/vulkan/runtime/vk_pipeline.h b/src/vulkan/runtime/vk_pipeline.h index de382462857..7ba0e51f0fe 100644 --- a/src/vulkan/runtime/vk_pipeline.h +++ b/src/vulkan/runtime/vk_pipeline.h @@ -206,6 +206,13 @@ void *vk_pipeline_zalloc(struct vk_device *device, const VkAllocationCallbacks *alloc, size_t size); +void *vk_pipeline_multizalloc(struct vk_device *device, + struct vk_multialloc *ma, + const struct vk_pipeline_ops *ops, + VkPipelineBindPoint bind_point, + VkPipelineCreateFlags2KHR flags, + const VkAllocationCallbacks *alloc); + void vk_pipeline_free(struct vk_device *device, const VkAllocationCallbacks *alloc, struct vk_pipeline *pipeline);