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 * SPDX-License-Identifier: MIT 5*61046927SAndroid Build Coastguard Worker * 6*61046927SAndroid Build Coastguard Worker * based in part on anv driver which is: 7*61046927SAndroid Build Coastguard Worker * Copyright © 2015 Intel Corporation 8*61046927SAndroid Build Coastguard Worker */ 9*61046927SAndroid Build Coastguard Worker 10*61046927SAndroid Build Coastguard Worker #ifndef TU_PASS_H 11*61046927SAndroid Build Coastguard Worker #define TU_PASS_H 12*61046927SAndroid Build Coastguard Worker 13*61046927SAndroid Build Coastguard Worker #include "tu_common.h" 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard Worker enum tu_gmem_layout 16*61046927SAndroid Build Coastguard Worker { 17*61046927SAndroid Build Coastguard Worker /* Use all of GMEM for attachments */ 18*61046927SAndroid Build Coastguard Worker TU_GMEM_LAYOUT_FULL, 19*61046927SAndroid Build Coastguard Worker /* Avoid using the region of GMEM that the CCU needs */ 20*61046927SAndroid Build Coastguard Worker TU_GMEM_LAYOUT_AVOID_CCU, 21*61046927SAndroid Build Coastguard Worker /* Number of layouts we have, also the value set when we don't know the layout in a secondary. */ 22*61046927SAndroid Build Coastguard Worker TU_GMEM_LAYOUT_COUNT, 23*61046927SAndroid Build Coastguard Worker }; 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Worker struct tu_subpass_barrier { 26*61046927SAndroid Build Coastguard Worker VkPipelineStageFlags2 src_stage_mask; 27*61046927SAndroid Build Coastguard Worker VkPipelineStageFlags2 dst_stage_mask; 28*61046927SAndroid Build Coastguard Worker VkAccessFlags2 src_access_mask; 29*61046927SAndroid Build Coastguard Worker VkAccessFlags2 dst_access_mask; 30*61046927SAndroid Build Coastguard Worker bool incoherent_ccu_color, incoherent_ccu_depth; 31*61046927SAndroid Build Coastguard Worker }; 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker struct tu_subpass_attachment 34*61046927SAndroid Build Coastguard Worker { 35*61046927SAndroid Build Coastguard Worker uint32_t attachment; 36*61046927SAndroid Build Coastguard Worker 37*61046927SAndroid Build Coastguard Worker /* For input attachments, true if it needs to be patched to refer to GMEM 38*61046927SAndroid Build Coastguard Worker * in GMEM mode. This is false if it hasn't already been written as an 39*61046927SAndroid Build Coastguard Worker * attachment. 40*61046927SAndroid Build Coastguard Worker */ 41*61046927SAndroid Build Coastguard Worker bool patch_input_gmem; 42*61046927SAndroid Build Coastguard Worker }; 43*61046927SAndroid Build Coastguard Worker 44*61046927SAndroid Build Coastguard Worker struct tu_subpass 45*61046927SAndroid Build Coastguard Worker { 46*61046927SAndroid Build Coastguard Worker uint32_t input_count; 47*61046927SAndroid Build Coastguard Worker uint32_t color_count; 48*61046927SAndroid Build Coastguard Worker uint32_t resolve_count; 49*61046927SAndroid Build Coastguard Worker bool resolve_depth_stencil; 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker bool legacy_dithering_enabled; 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker bool feedback_loop_color; 54*61046927SAndroid Build Coastguard Worker bool feedback_loop_ds; 55*61046927SAndroid Build Coastguard Worker 56*61046927SAndroid Build Coastguard Worker /* True if we must invalidate UCHE thanks to a feedback loop. */ 57*61046927SAndroid Build Coastguard Worker bool feedback_invalidate; 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Worker /* In other words - framebuffer fetch support */ 60*61046927SAndroid Build Coastguard Worker bool raster_order_attachment_access; 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard Worker struct tu_subpass_attachment *input_attachments; 63*61046927SAndroid Build Coastguard Worker struct tu_subpass_attachment *color_attachments; 64*61046927SAndroid Build Coastguard Worker struct tu_subpass_attachment *resolve_attachments; 65*61046927SAndroid Build Coastguard Worker struct tu_subpass_attachment depth_stencil_attachment; 66*61046927SAndroid Build Coastguard Worker /* When using dynamic rendering depth and stencil attachments may be 67*61046927SAndroid Build Coastguard Worker * set to unused independently, so we need to track this bit of 68*61046927SAndroid Build Coastguard Worker * information separately for each of them. 69*61046927SAndroid Build Coastguard Worker * 70*61046927SAndroid Build Coastguard Worker * Due to VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08916 and 71*61046927SAndroid Build Coastguard Worker * VUID-vkCmdDraw-dynamicRenderingUnusedAttachments-08917 we can set 72*61046927SAndroid Build Coastguard Worker * these values at cmdBeginRendering() time. 73*61046927SAndroid Build Coastguard Worker */ 74*61046927SAndroid Build Coastguard Worker bool depth_used; 75*61046927SAndroid Build Coastguard Worker bool stencil_used; 76*61046927SAndroid Build Coastguard Worker 77*61046927SAndroid Build Coastguard Worker VkSampleCountFlagBits samples; 78*61046927SAndroid Build Coastguard Worker 79*61046927SAndroid Build Coastguard Worker uint32_t srgb_cntl; 80*61046927SAndroid Build Coastguard Worker uint32_t multiview_mask; 81*61046927SAndroid Build Coastguard Worker 82*61046927SAndroid Build Coastguard Worker struct tu_subpass_barrier start_barrier; 83*61046927SAndroid Build Coastguard Worker }; 84*61046927SAndroid Build Coastguard Worker 85*61046927SAndroid Build Coastguard Worker struct tu_render_pass_attachment 86*61046927SAndroid Build Coastguard Worker { 87*61046927SAndroid Build Coastguard Worker VkFormat format; 88*61046927SAndroid Build Coastguard Worker VkSampleCountFlagBits samples; 89*61046927SAndroid Build Coastguard Worker uint32_t cpp; 90*61046927SAndroid Build Coastguard Worker VkImageAspectFlags clear_mask; 91*61046927SAndroid Build Coastguard Worker uint32_t clear_views; 92*61046927SAndroid Build Coastguard Worker bool load; 93*61046927SAndroid Build Coastguard Worker bool store; 94*61046927SAndroid Build Coastguard Worker bool gmem; 95*61046927SAndroid Build Coastguard Worker int32_t gmem_offset[TU_GMEM_LAYOUT_COUNT]; 96*61046927SAndroid Build Coastguard Worker bool will_be_resolved; 97*61046927SAndroid Build Coastguard Worker /* for D32S8 separate stencil: */ 98*61046927SAndroid Build Coastguard Worker bool load_stencil; 99*61046927SAndroid Build Coastguard Worker bool store_stencil; 100*61046927SAndroid Build Coastguard Worker 101*61046927SAndroid Build Coastguard Worker bool cond_load_allowed; 102*61046927SAndroid Build Coastguard Worker bool cond_store_allowed; 103*61046927SAndroid Build Coastguard Worker 104*61046927SAndroid Build Coastguard Worker int32_t gmem_offset_stencil[TU_GMEM_LAYOUT_COUNT]; 105*61046927SAndroid Build Coastguard Worker 106*61046927SAndroid Build Coastguard Worker /* The subpass id in which the attachment will be used first/last. */ 107*61046927SAndroid Build Coastguard Worker uint32_t first_subpass_idx; 108*61046927SAndroid Build Coastguard Worker uint32_t last_subpass_idx; 109*61046927SAndroid Build Coastguard Worker }; 110*61046927SAndroid Build Coastguard Worker 111*61046927SAndroid Build Coastguard Worker struct tu_render_pass 112*61046927SAndroid Build Coastguard Worker { 113*61046927SAndroid Build Coastguard Worker struct vk_object_base base; 114*61046927SAndroid Build Coastguard Worker 115*61046927SAndroid Build Coastguard Worker uint32_t attachment_count; 116*61046927SAndroid Build Coastguard Worker uint32_t subpass_count; 117*61046927SAndroid Build Coastguard Worker uint32_t gmem_pixels[TU_GMEM_LAYOUT_COUNT]; 118*61046927SAndroid Build Coastguard Worker uint32_t tile_align_w; 119*61046927SAndroid Build Coastguard Worker uint32_t min_cpp; 120*61046927SAndroid Build Coastguard Worker uint64_t autotune_hash; 121*61046927SAndroid Build Coastguard Worker 122*61046927SAndroid Build Coastguard Worker /* memory bandwidth costs (in bytes) for gmem / sysmem rendering */ 123*61046927SAndroid Build Coastguard Worker uint32_t gmem_bandwidth_per_pixel; 124*61046927SAndroid Build Coastguard Worker uint32_t sysmem_bandwidth_per_pixel; 125*61046927SAndroid Build Coastguard Worker 126*61046927SAndroid Build Coastguard Worker unsigned num_views; 127*61046927SAndroid Build Coastguard Worker 128*61046927SAndroid Build Coastguard Worker struct tu_subpass_attachment fragment_density_map; 129*61046927SAndroid Build Coastguard Worker 130*61046927SAndroid Build Coastguard Worker struct tu_subpass_attachment *subpass_attachments; 131*61046927SAndroid Build Coastguard Worker 132*61046927SAndroid Build Coastguard Worker struct tu_render_pass_attachment *attachments; 133*61046927SAndroid Build Coastguard Worker bool has_cond_load_store; 134*61046927SAndroid Build Coastguard Worker bool has_fdm; 135*61046927SAndroid Build Coastguard Worker 136*61046927SAndroid Build Coastguard Worker struct tu_subpass_barrier end_barrier; 137*61046927SAndroid Build Coastguard Worker struct tu_subpass subpasses[0]; 138*61046927SAndroid Build Coastguard Worker }; 139*61046927SAndroid Build Coastguard Worker 140*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(tu_render_pass, base, VkRenderPass, 141*61046927SAndroid Build Coastguard Worker VK_OBJECT_TYPE_RENDER_PASS) 142*61046927SAndroid Build Coastguard Worker 143*61046927SAndroid Build Coastguard Worker void tu_setup_dynamic_render_pass(struct tu_cmd_buffer *cmd_buffer, 144*61046927SAndroid Build Coastguard Worker const VkRenderingInfo *pRenderingInfo); 145*61046927SAndroid Build Coastguard Worker 146*61046927SAndroid Build Coastguard Worker void tu_setup_dynamic_inheritance(struct tu_cmd_buffer *cmd_buffer, 147*61046927SAndroid Build Coastguard Worker const VkCommandBufferInheritanceRenderingInfo *info); 148*61046927SAndroid Build Coastguard Worker 149*61046927SAndroid Build Coastguard Worker uint32_t 150*61046927SAndroid Build Coastguard Worker tu_subpass_get_attachment_to_resolve(const struct tu_subpass *subpass, uint32_t index); 151*61046927SAndroid Build Coastguard Worker 152*61046927SAndroid Build Coastguard Worker #endif /* TU_PASS_H */ 153