mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02: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;
|
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
|
static void
|
||||||
tu_render_pass_calc_hash(struct tu_render_pass *pass)
|
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_cond_config(pass);
|
||||||
tu_render_pass_gmem_config(pass, device->physical_device);
|
tu_render_pass_gmem_config(pass, device->physical_device);
|
||||||
tu_render_pass_bandwidth_config(pass);
|
tu_render_pass_bandwidth_config(pass);
|
||||||
|
tu_render_pass_calc_views(pass);
|
||||||
tu_render_pass_calc_hash(pass);
|
tu_render_pass_calc_hash(pass);
|
||||||
|
|
||||||
for (unsigned i = 0; i < pCreateInfo->dependencyCount; ++i) {
|
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_cond_config(pass);
|
||||||
tu_render_pass_gmem_config(pass, device->physical_device);
|
tu_render_pass_gmem_config(pass, device->physical_device);
|
||||||
tu_render_pass_bandwidth_config(pass);
|
tu_render_pass_bandwidth_config(pass);
|
||||||
|
tu_render_pass_calc_views(pass);
|
||||||
tu_render_pass_calc_hash(pass);
|
tu_render_pass_calc_hash(pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1185,6 +1196,8 @@ tu_setup_dynamic_inheritance(struct tu_cmd_buffer *cmd_buffer,
|
||||||
} else {
|
} else {
|
||||||
subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED;
|
subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tu_render_pass_calc_views(pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
VKAPI_ATTR void VKAPI_CALL
|
VKAPI_ATTR void VKAPI_CALL
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,8 @@ struct tu_render_pass
|
||||||
uint32_t gmem_bandwidth_per_pixel;
|
uint32_t gmem_bandwidth_per_pixel;
|
||||||
uint32_t sysmem_bandwidth_per_pixel;
|
uint32_t sysmem_bandwidth_per_pixel;
|
||||||
|
|
||||||
|
unsigned num_views;
|
||||||
|
|
||||||
struct tu_subpass_attachment *subpass_attachments;
|
struct tu_subpass_attachment *subpass_attachments;
|
||||||
|
|
||||||
struct tu_render_pass_attachment *attachments;
|
struct tu_render_pass_attachment *attachments;
|
||||||
|
|
|
||||||
|
|
@ -122,13 +122,7 @@ tu_tiling_config_update_tile_layout(struct tu_framebuffer *fb,
|
||||||
* used.
|
* used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uint32_t layers = fb->layers;
|
uint32_t layers = MAX2(fb->layers, pass->num_views);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If there is more than one layer, we need to make sure that the layer
|
/* 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
|
* stride is expressible as an offset in RB_BLIT_BASE_GMEM which ignores
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue