xref: /aosp_15_r20/external/mesa3d/src/virtio/vulkan/vn_render_pass.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2019 Google LLC
3  * SPDX-License-Identifier: MIT
4  *
5  * based in part on anv and radv which are:
6  * Copyright © 2015 Intel Corporation
7  * Copyright © 2016 Red Hat.
8  * Copyright © 2016 Bas Nieuwenhuizen
9  */
10 
11 #ifndef VN_RENDER_PASS_H
12 #define VN_RENDER_PASS_H
13 
14 #include "vn_common.h"
15 
16 struct vn_present_src_attachment {
17    uint32_t index;
18 
19    VkPipelineStageFlags src_stage_mask;
20    VkAccessFlags src_access_mask;
21 
22    VkPipelineStageFlags dst_stage_mask;
23    VkAccessFlags dst_access_mask;
24 };
25 
26 struct vn_subpass {
27    VkImageAspectFlags attachment_aspects;
28    uint32_t view_mask;
29 };
30 
31 struct vn_render_pass {
32    struct vn_object_base base;
33 
34    VkExtent2D granularity;
35 
36    uint32_t present_count;
37    uint32_t present_acquire_count;
38    uint32_t present_release_count;
39    uint32_t subpass_count;
40 
41    /* Attachments where initialLayout or finalLayout was
42     * VK_IMAGE_LAYOUT_PRESENT_SRC_KHR.
43     */
44    struct vn_present_src_attachment *present_attachments;
45 
46    /* Slice of present_attachments where initialLayout was
47     * VK_IMAGE_LAYOUT_PRESENT_SRC_KHR.
48     */
49    struct vn_present_src_attachment *present_acquire_attachments;
50 
51    /* Slice of present_attachments where finalLayout was
52     * VK_IMAGE_LAYOUT_PRESENT_SRC_KHR.
53     */
54    struct vn_present_src_attachment *present_release_attachments;
55 
56    struct vn_subpass *subpasses;
57 };
58 
59 VK_DEFINE_NONDISP_HANDLE_CASTS(vn_render_pass,
60                                base.base,
61                                VkRenderPass,
62                                VK_OBJECT_TYPE_RENDER_PASS)
63 
64 struct vn_framebuffer {
65    struct vn_object_base base;
66 
67    uint32_t image_view_count;
68    VkImageView image_views[];
69 };
70 VK_DEFINE_NONDISP_HANDLE_CASTS(vn_framebuffer,
71                                base.base,
72                                VkFramebuffer,
73                                VK_OBJECT_TYPE_FRAMEBUFFER)
74 
75 static inline uint32_t
vn_render_pass_get_subpass_view_mask(const struct vn_render_pass * render_pass,uint32_t subpass_index)76 vn_render_pass_get_subpass_view_mask(const struct vn_render_pass *render_pass,
77                                      uint32_t subpass_index)
78 {
79    assert(subpass_index < render_pass->subpass_count);
80    return render_pass->subpasses[subpass_index].view_mask;
81 }
82 
83 #endif /* VN_RENDER_PASS_H */
84