mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-10 09:40:28 +01:00
tu: Precompute maximum views across all subpasses
We'll need this to know how many viewports to create. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20304>
This commit is contained in:
parent
2668ba0ecd
commit
7673fcf206
3 changed files with 16 additions and 7 deletions
|
|
@ -513,6 +513,15 @@ static void update_samples(struct tu_subpass *subpass,
|
|||
subpass->samples = samples;
|
||||
}
|
||||
|
||||
static void
|
||||
tu_render_pass_calc_views(struct tu_render_pass *pass)
|
||||
{
|
||||
uint32_t view_mask = 0;
|
||||
for (unsigned i = 0; i < pass->subpass_count; i++)
|
||||
view_mask |= pass->subpasses[i].multiview_mask;
|
||||
pass->num_views = util_last_bit(view_mask);
|
||||
}
|
||||
|
||||
static void
|
||||
tu_render_pass_calc_hash(struct tu_render_pass *pass)
|
||||
{
|
||||
|
|
@ -952,6 +961,7 @@ tu_CreateRenderPass2(VkDevice _device,
|
|||
tu_render_pass_cond_config(pass);
|
||||
tu_render_pass_gmem_config(pass, device->physical_device);
|
||||
tu_render_pass_bandwidth_config(pass);
|
||||
tu_render_pass_calc_views(pass);
|
||||
tu_render_pass_calc_hash(pass);
|
||||
|
||||
for (unsigned i = 0; i < pCreateInfo->dependencyCount; ++i) {
|
||||
|
|
@ -1126,6 +1136,7 @@ tu_setup_dynamic_render_pass(struct tu_cmd_buffer *cmd_buffer,
|
|||
tu_render_pass_cond_config(pass);
|
||||
tu_render_pass_gmem_config(pass, device->physical_device);
|
||||
tu_render_pass_bandwidth_config(pass);
|
||||
tu_render_pass_calc_views(pass);
|
||||
tu_render_pass_calc_hash(pass);
|
||||
}
|
||||
|
||||
|
|
@ -1185,6 +1196,8 @@ tu_setup_dynamic_inheritance(struct tu_cmd_buffer *cmd_buffer,
|
|||
} else {
|
||||
subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED;
|
||||
}
|
||||
|
||||
tu_render_pass_calc_views(pass);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
|
|
|
|||
|
|
@ -107,6 +107,8 @@ struct tu_render_pass
|
|||
uint32_t gmem_bandwidth_per_pixel;
|
||||
uint32_t sysmem_bandwidth_per_pixel;
|
||||
|
||||
unsigned num_views;
|
||||
|
||||
struct tu_subpass_attachment *subpass_attachments;
|
||||
|
||||
struct tu_render_pass_attachment *attachments;
|
||||
|
|
|
|||
|
|
@ -122,13 +122,7 @@ tu_tiling_config_update_tile_layout(struct tu_framebuffer *fb,
|
|||
* used.
|
||||
*/
|
||||
|
||||
uint32_t layers = fb->layers;
|
||||
if (pass->subpasses[0].multiview_mask) {
|
||||
uint32_t view_mask = 0;
|
||||
for (unsigned i = 0; i < pass->subpass_count; i++)
|
||||
view_mask |= pass->subpasses[i].multiview_mask;
|
||||
layers = util_logbase2(view_mask) + 1;
|
||||
}
|
||||
uint32_t layers = MAX2(fb->layers, pass->num_views);
|
||||
|
||||
/* If there is more than one layer, we need to make sure that the layer
|
||||
* stride is expressible as an offset in RB_BLIT_BASE_GMEM which ignores
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue