Mesa (main): radv: add a new helper to initialize various type of pipelines

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Apr 8 06:39:44 UTC 2022


Module: Mesa
Branch: main
Commit: 59466d40a36a6c84ef8d45274a92c8cec88b141f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=59466d40a36a6c84ef8d45274a92c8cec88b141f

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Mon Apr  4 12:28:49 2022 +0200

radv: add a new helper to initialize various type of pipelines

This is common to graphics, compute and library pipelines.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15792>

---

 src/amd/vulkan/radv_pipeline.c    | 28 +++++++++++++++++-----------
 src/amd/vulkan/radv_pipeline_rt.c |  3 +--
 src/amd/vulkan/radv_private.h     |  3 +++
 3 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index ad4140fd1bd..9015f6ea86e 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -6412,16 +6412,25 @@ radv_pipeline_init_extra(struct radv_pipeline *pipeline,
    }
 }
 
+void
+radv_pipeline_init(struct radv_device *device, struct radv_pipeline *pipeline,
+                    enum radv_pipeline_type type)
+{
+   vk_object_base_init(&device->vk, &pipeline->base, VK_OBJECT_TYPE_PIPELINE);
+
+   pipeline->device = device;
+   pipeline->type = type;
+}
+
 static VkResult
-radv_pipeline_init(struct radv_pipeline *pipeline, struct radv_device *device,
-                   struct radv_pipeline_cache *cache,
-                   const VkGraphicsPipelineCreateInfo *pCreateInfo,
-                   const struct radv_graphics_pipeline_create_info *extra)
+radv_graphics_pipeline_init(struct radv_pipeline *pipeline, struct radv_device *device,
+                            struct radv_pipeline_cache *cache,
+                            const VkGraphicsPipelineCreateInfo *pCreateInfo,
+                            const struct radv_graphics_pipeline_create_info *extra)
 {
    RADV_FROM_HANDLE(radv_pipeline_layout, pipeline_layout, pCreateInfo->layout);
    VkResult result;
 
-   pipeline->device = device;
    pipeline->graphics.last_vgt_api_stage = MESA_SHADER_NONE;
 
    /* Mark all states declared dynamic at pipeline creation. */
@@ -6560,10 +6569,9 @@ radv_graphics_pipeline_create_nonlegacy(VkDevice _device, VkPipelineCache _cache
    if (pipeline == NULL)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   vk_object_base_init(&device->vk, &pipeline->base, VK_OBJECT_TYPE_PIPELINE);
-   pipeline->type = RADV_PIPELINE_GRAPHICS;
+   radv_pipeline_init(device, pipeline, RADV_PIPELINE_GRAPHICS);
 
-   result = radv_pipeline_init(pipeline, device, cache, pCreateInfo, extra);
+   result = radv_graphics_pipeline_init(pipeline, device, cache, pCreateInfo, extra);
    if (result != VK_SUCCESS) {
       radv_pipeline_destroy(device, pipeline, pAllocator);
       return result;
@@ -6772,10 +6780,8 @@ radv_compute_pipeline_create(VkDevice _device, VkPipelineCache _cache,
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
    }
 
-   vk_object_base_init(&device->vk, &pipeline->base, VK_OBJECT_TYPE_PIPELINE);
-   pipeline->type = RADV_PIPELINE_COMPUTE;
+   radv_pipeline_init(device, pipeline, RADV_PIPELINE_COMPUTE);
 
-   pipeline->device = device;
    pipeline->graphics.last_vgt_api_stage = MESA_SHADER_NONE;
    pipeline->compute.rt_stack_sizes = rt_stack_sizes;
    pipeline->compute.group_count = rt_group_count;
diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c
index 57a369750c3..6e7d30dd625 100644
--- a/src/amd/vulkan/radv_pipeline_rt.c
+++ b/src/amd/vulkan/radv_pipeline_rt.c
@@ -100,8 +100,7 @@ radv_rt_pipeline_library_create(VkDevice _device, VkPipelineCache _cache,
    if (pipeline == NULL)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   vk_object_base_init(&device->vk, &pipeline->base, VK_OBJECT_TYPE_PIPELINE);
-   pipeline->type = RADV_PIPELINE_LIBRARY;
+   radv_pipeline_init(device, pipeline, RADV_PIPELINE_LIBRARY);
 
    VkRayTracingPipelineCreateInfoKHR local_create_info =
       radv_create_merged_rt_create_info(pCreateInfo);
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 963af6e84c5..9906b792537 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1961,6 +1961,9 @@ struct radv_graphics_pipeline_create_info {
    uint32_t custom_blend_mode;
 };
 
+void radv_pipeline_init(struct radv_device *device, struct radv_pipeline *pipeline,
+                        enum radv_pipeline_type type);
+
 VkResult radv_graphics_pipeline_create(VkDevice device, VkPipelineCache cache,
                                        const VkGraphicsPipelineCreateInfo *pCreateInfo,
                                        const struct radv_graphics_pipeline_create_info *extra,



More information about the mesa-commit mailing list