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)76vn_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