xref: /aosp_15_r20/external/mesa3d/src/virtio/vulkan/vn_pipeline.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2019 Google LLC
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  *
5*61046927SAndroid Build Coastguard Worker  * based in part on anv and radv which are:
6*61046927SAndroid Build Coastguard Worker  * Copyright © 2015 Intel Corporation
7*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Red Hat.
8*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Bas Nieuwenhuizen
9*61046927SAndroid Build Coastguard Worker  */
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #ifndef VN_PIPELINE_H
12*61046927SAndroid Build Coastguard Worker #define VN_PIPELINE_H
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker #include "vn_common.h"
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker struct vn_shader_module {
17*61046927SAndroid Build Coastguard Worker    struct vn_object_base base;
18*61046927SAndroid Build Coastguard Worker };
19*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_shader_module,
20*61046927SAndroid Build Coastguard Worker                                base.base,
21*61046927SAndroid Build Coastguard Worker                                VkShaderModule,
22*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_SHADER_MODULE)
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker struct vn_pipeline_layout {
25*61046927SAndroid Build Coastguard Worker    struct vn_object_base base;
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker    struct vn_descriptor_set_layout *push_descriptor_set_layout;
28*61046927SAndroid Build Coastguard Worker    bool has_push_constant_ranges;
29*61046927SAndroid Build Coastguard Worker    struct vn_refcount refcount;
30*61046927SAndroid Build Coastguard Worker };
31*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_pipeline_layout,
32*61046927SAndroid Build Coastguard Worker                                base.base,
33*61046927SAndroid Build Coastguard Worker                                VkPipelineLayout,
34*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_PIPELINE_LAYOUT)
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker struct vn_pipeline_cache {
37*61046927SAndroid Build Coastguard Worker    struct vn_object_base base;
38*61046927SAndroid Build Coastguard Worker };
39*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_pipeline_cache,
40*61046927SAndroid Build Coastguard Worker                                base.base,
41*61046927SAndroid Build Coastguard Worker                                VkPipelineCache,
42*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_PIPELINE_CACHE)
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker enum vn_pipeline_type {
45*61046927SAndroid Build Coastguard Worker    VN_PIPELINE_TYPE_GRAPHICS,
46*61046927SAndroid Build Coastguard Worker    VN_PIPELINE_TYPE_COMPUTE,
47*61046927SAndroid Build Coastguard Worker };
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker struct vn_pipeline {
50*61046927SAndroid Build Coastguard Worker    struct vn_object_base base;
51*61046927SAndroid Build Coastguard Worker    enum vn_pipeline_type type;
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker    /**
54*61046927SAndroid Build Coastguard Worker     * The VkPipelineLayout provided directly (without linking) at pipeline
55*61046927SAndroid Build Coastguard Worker     * creation. Null if none was provided.
56*61046927SAndroid Build Coastguard Worker     *
57*61046927SAndroid Build Coastguard Worker     * We track the pipeline layout here to extend its and its children's
58*61046927SAndroid Build Coastguard Worker     * lifetime, NOT because this is the actual layout used by the pipeline.
59*61046927SAndroid Build Coastguard Worker     *
60*61046927SAndroid Build Coastguard Worker     * WARNING. This may not be the actual layout used by the pipeline. The
61*61046927SAndroid Build Coastguard Worker     * Vulkan 1.3.254 spec says:
62*61046927SAndroid Build Coastguard Worker     *
63*61046927SAndroid Build Coastguard Worker     *    The final effective pipeline layout is effectively the union of the
64*61046927SAndroid Build Coastguard Worker     *    linked pipeline layouts. When binding descriptor sets for this
65*61046927SAndroid Build Coastguard Worker     *    pipeline, the pipeline layout used must be compatible with this
66*61046927SAndroid Build Coastguard Worker     *    union.
67*61046927SAndroid Build Coastguard Worker     */
68*61046927SAndroid Build Coastguard Worker    struct vn_pipeline_layout *layout;
69*61046927SAndroid Build Coastguard Worker };
70*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_pipeline,
71*61046927SAndroid Build Coastguard Worker                                base.base,
72*61046927SAndroid Build Coastguard Worker                                VkPipeline,
73*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_PIPELINE)
74*61046927SAndroid Build Coastguard Worker 
75*61046927SAndroid Build Coastguard Worker #endif /* VN_PIPELINE_H */
76