From dcb5cfbfcc4431b6f72002fd7743cbd274dc43d2 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 7 Aug 2024 01:02:39 +0300 Subject: [PATCH] vulkan/runtime: add a multialloc vk_shader allocator Signed-off-by: Lionel Landwerlin Reviewed-by: Faith Ekstrand Part-of: --- src/vulkan/runtime/vk_shader.c | 33 ++++++++++++++++++++++++++++++--- src/vulkan/runtime/vk_shader.h | 5 +++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/vulkan/runtime/vk_shader.c b/src/vulkan/runtime/vk_shader.c index a85467b0beb..3f5ed17fe3d 100644 --- a/src/vulkan/runtime/vk_shader.c +++ b/src/vulkan/runtime/vk_shader.c @@ -36,6 +36,17 @@ #include "nir.h" +static void +vk_shader_init(struct vk_shader *shader, + struct vk_device *device, + const struct vk_shader_ops *ops, + gl_shader_stage stage) +{ + vk_object_base_init(device, &shader->base, VK_OBJECT_TYPE_SHADER_EXT); + shader->ops = ops; + shader->stage = stage; +} + void * vk_shader_zalloc(struct vk_device *device, const struct vk_shader_ops *ops, @@ -58,9 +69,25 @@ vk_shader_zalloc(struct vk_device *device, if (shader == NULL) return NULL; - vk_object_base_init(device, &shader->base, VK_OBJECT_TYPE_SHADER_EXT); - shader->ops = ops; - shader->stage = stage; + vk_shader_init(shader, device, ops, stage); + + return shader; +} + +void * +vk_shader_multizalloc(struct vk_device *device, + struct vk_multialloc *ma, + const struct vk_shader_ops *ops, + gl_shader_stage stage, + const VkAllocationCallbacks *alloc) +{ + struct vk_shader *shader = + vk_multialloc_zalloc2(ma, &device->alloc, alloc, + VK_SYSTEM_ALLOCATION_SCOPE_DEVICE); + if (!shader) + return NULL; + + vk_shader_init(shader, device, ops, stage); return shader; } diff --git a/src/vulkan/runtime/vk_shader.h b/src/vulkan/runtime/vk_shader.h index 24e1b40f668..b01d4ddfa9d 100644 --- a/src/vulkan/runtime/vk_shader.h +++ b/src/vulkan/runtime/vk_shader.h @@ -152,6 +152,11 @@ void *vk_shader_zalloc(struct vk_device *device, gl_shader_stage stage, const VkAllocationCallbacks *alloc, size_t size); +void *vk_shader_multizalloc(struct vk_device *device, + struct vk_multialloc *ma, + const struct vk_shader_ops *ops, + gl_shader_stage stage, + const VkAllocationCallbacks *alloc); void vk_shader_free(struct vk_device *device, const VkAllocationCallbacks *alloc, struct vk_shader *shader);