xref: /aosp_15_r20/external/mesa3d/src/amd/vulkan/radv_pipeline.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Red Hat.
3*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Bas Nieuwenhuizen
4*61046927SAndroid Build Coastguard Worker  *
5*61046927SAndroid Build Coastguard Worker  * based in part on anv driver which is:
6*61046927SAndroid Build Coastguard Worker  * Copyright © 2015 Intel Corporation
7*61046927SAndroid Build Coastguard Worker  *
8*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
9*61046927SAndroid Build Coastguard Worker  */
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #ifndef RADV_PIPELINE_H
12*61046927SAndroid Build Coastguard Worker #define RADV_PIPELINE_H
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker #include "util/mesa-sha1.h"
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker #include "nir.h"
17*61046927SAndroid Build Coastguard Worker 
18*61046927SAndroid Build Coastguard Worker #include "vk_pipeline.h"
19*61046927SAndroid Build Coastguard Worker #include "vk_pipeline_cache.h"
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker #include "radv_radeon_winsys.h"
22*61046927SAndroid Build Coastguard Worker 
23*61046927SAndroid Build Coastguard Worker struct radv_device;
24*61046927SAndroid Build Coastguard Worker struct radv_shader_stage_key;
25*61046927SAndroid Build Coastguard Worker struct radv_shader_stage;
26*61046927SAndroid Build Coastguard Worker struct radv_pipeline_layout;
27*61046927SAndroid Build Coastguard Worker struct radv_graphics_state_key;
28*61046927SAndroid Build Coastguard Worker struct radv_shader_layout;
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker enum radv_pipeline_type {
31*61046927SAndroid Build Coastguard Worker    RADV_PIPELINE_GRAPHICS,
32*61046927SAndroid Build Coastguard Worker    RADV_PIPELINE_GRAPHICS_LIB,
33*61046927SAndroid Build Coastguard Worker    /* Compute pipeline */
34*61046927SAndroid Build Coastguard Worker    RADV_PIPELINE_COMPUTE,
35*61046927SAndroid Build Coastguard Worker    /* Raytracing pipeline */
36*61046927SAndroid Build Coastguard Worker    RADV_PIPELINE_RAY_TRACING,
37*61046927SAndroid Build Coastguard Worker    RADV_PIPELINE_TYPE_COUNT,
38*61046927SAndroid Build Coastguard Worker };
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker struct radv_pipeline {
41*61046927SAndroid Build Coastguard Worker    struct vk_object_base base;
42*61046927SAndroid Build Coastguard Worker    uint8_t sha1[SHA1_DIGEST_LENGTH];
43*61046927SAndroid Build Coastguard Worker    enum radv_pipeline_type type;
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker    VkPipelineCreateFlags2KHR create_flags;
46*61046927SAndroid Build Coastguard Worker 
47*61046927SAndroid Build Coastguard Worker    struct vk_pipeline_cache_object *cache_object;
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker    bool is_internal;
50*61046927SAndroid Build Coastguard Worker    bool need_indirect_descriptor_sets;
51*61046927SAndroid Build Coastguard Worker    struct radv_shader *shaders[MESA_VULKAN_SHADER_STAGES];
52*61046927SAndroid Build Coastguard Worker    struct radv_shader *gs_copy_shader;
53*61046927SAndroid Build Coastguard Worker 
54*61046927SAndroid Build Coastguard Worker    uint32_t user_data_0[MESA_VULKAN_SHADER_STAGES];
55*61046927SAndroid Build Coastguard Worker 
56*61046927SAndroid Build Coastguard Worker    /* Unique pipeline hash identifier. */
57*61046927SAndroid Build Coastguard Worker    uint64_t pipeline_hash;
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker    /* Pipeline layout info. */
60*61046927SAndroid Build Coastguard Worker    uint32_t push_constant_size;
61*61046927SAndroid Build Coastguard Worker    uint32_t dynamic_offset_count;
62*61046927SAndroid Build Coastguard Worker };
63*61046927SAndroid Build Coastguard Worker 
64*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(radv_pipeline, base, VkPipeline, VK_OBJECT_TYPE_PIPELINE)
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker #define RADV_DECL_PIPELINE_DOWNCAST(pipe_type, pipe_enum)                                                              \
67*61046927SAndroid Build Coastguard Worker    static inline struct radv_##pipe_type##_pipeline *radv_pipeline_to_##pipe_type(struct radv_pipeline *pipeline)      \
68*61046927SAndroid Build Coastguard Worker    {                                                                                                                   \
69*61046927SAndroid Build Coastguard Worker       assert(pipeline->type == pipe_enum);                                                                             \
70*61046927SAndroid Build Coastguard Worker       return (struct radv_##pipe_type##_pipeline *)pipeline;                                                           \
71*61046927SAndroid Build Coastguard Worker    }
72*61046927SAndroid Build Coastguard Worker 
73*61046927SAndroid Build Coastguard Worker bool radv_pipeline_capture_shaders(const struct radv_device *device, VkPipelineCreateFlags2KHR flags);
74*61046927SAndroid Build Coastguard Worker 
75*61046927SAndroid Build Coastguard Worker bool radv_shader_need_indirect_descriptor_sets(const struct radv_shader *shader);
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker bool radv_pipeline_capture_shader_stats(const struct radv_device *device, VkPipelineCreateFlags2KHR flags);
78*61046927SAndroid Build Coastguard Worker 
79*61046927SAndroid Build Coastguard Worker void radv_pipeline_init(struct radv_device *device, struct radv_pipeline *pipeline, enum radv_pipeline_type type);
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker void radv_pipeline_destroy(struct radv_device *device, struct radv_pipeline *pipeline,
82*61046927SAndroid Build Coastguard Worker                            const VkAllocationCallbacks *allocator);
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker struct radv_shader_stage_key radv_pipeline_get_shader_key(const struct radv_device *device,
85*61046927SAndroid Build Coastguard Worker                                                           const VkPipelineShaderStageCreateInfo *stage,
86*61046927SAndroid Build Coastguard Worker                                                           VkPipelineCreateFlags2KHR flags, const void *pNext);
87*61046927SAndroid Build Coastguard Worker 
88*61046927SAndroid Build Coastguard Worker void radv_pipeline_stage_init(VkPipelineCreateFlags2KHR pipeline_flags,
89*61046927SAndroid Build Coastguard Worker                               const VkPipelineShaderStageCreateInfo *sinfo, const struct radv_pipeline_layout *layout,
90*61046927SAndroid Build Coastguard Worker                               const struct radv_shader_stage_key *stage_key, struct radv_shader_stage *out_stage);
91*61046927SAndroid Build Coastguard Worker 
92*61046927SAndroid Build Coastguard Worker void radv_shader_layout_init(const struct radv_pipeline_layout *pipeline_layout, gl_shader_stage stage,
93*61046927SAndroid Build Coastguard Worker                              struct radv_shader_layout *layout);
94*61046927SAndroid Build Coastguard Worker 
95*61046927SAndroid Build Coastguard Worker void radv_postprocess_nir(struct radv_device *device, const struct radv_graphics_state_key *gfx_state,
96*61046927SAndroid Build Coastguard Worker                           struct radv_shader_stage *stage);
97*61046927SAndroid Build Coastguard Worker 
98*61046927SAndroid Build Coastguard Worker bool radv_shader_should_clear_lds(const struct radv_device *device, const nir_shader *shader);
99*61046927SAndroid Build Coastguard Worker 
100*61046927SAndroid Build Coastguard Worker VkPipelineShaderStageCreateInfo *radv_copy_shader_stage_create_info(struct radv_device *device, uint32_t stageCount,
101*61046927SAndroid Build Coastguard Worker                                                                     const VkPipelineShaderStageCreateInfo *pStages,
102*61046927SAndroid Build Coastguard Worker                                                                     void *mem_ctx);
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker void radv_pipeline_hash(const struct radv_device *device, const struct radv_pipeline_layout *pipeline_layout,
105*61046927SAndroid Build Coastguard Worker                         struct mesa_sha1 *ctx);
106*61046927SAndroid Build Coastguard Worker 
107*61046927SAndroid Build Coastguard Worker void radv_pipeline_hash_shader_stage(VkPipelineCreateFlags2KHR pipeline_flags,
108*61046927SAndroid Build Coastguard Worker                                      const VkPipelineShaderStageCreateInfo *sinfo,
109*61046927SAndroid Build Coastguard Worker                                      const struct radv_shader_stage_key *stage_key, struct mesa_sha1 *ctx);
110*61046927SAndroid Build Coastguard Worker 
111*61046927SAndroid Build Coastguard Worker #endif /* RADV_PIPELINE_H */
112