mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-16 00:18:20 +02:00
panvk: Use the new FB code for tile size selection
The only functional change is that the new code doesn't reserve space for dummy allocations. However, the old code never actually took dummy allocations into account when placing RTs so they end up overlapping anyway and it's not causing problems. Also, we set rt_count when there are no attachments and that doesn't reserve dummy space so clearly running with zero attachments is fine. Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Acked-by: Eric R. Smith <eric.smith@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39759>
This commit is contained in:
parent
225135ed10
commit
c6ebf3cc59
3 changed files with 19 additions and 12 deletions
|
|
@ -2337,7 +2337,7 @@ prepare_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_info *draw)
|
|||
return result;
|
||||
|
||||
if (!cmdbuf->vk.dynamic_graphics_state.rs.rasterizer_discard_enable) {
|
||||
const struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
const struct pan_fb_layout *fb = &cmdbuf->state.gfx.render.fb.layout;
|
||||
uint32_t *nr_samples = &cmdbuf->state.gfx.render.fb.nr_samples;
|
||||
uint32_t rasterization_samples =
|
||||
cmdbuf->vk.dynamic_graphics_state.ms.rasterization_samples;
|
||||
|
|
@ -2357,8 +2357,8 @@ prepare_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_info *draw)
|
|||
* XXX: This currently can happen in case we resume a render pass with no
|
||||
* attachements and without any draw as the FBD is emitted when suspending.
|
||||
*/
|
||||
assert(fbinfo->nr_samples == 0 ||
|
||||
fbinfo->nr_samples == cmdbuf->state.gfx.render.fb.nr_samples);
|
||||
assert(fb->sample_count == 0 ||
|
||||
fb->sample_count == cmdbuf->state.gfx.render.fb.nr_samples);
|
||||
}
|
||||
|
||||
if (!inherits_render_ctx(cmdbuf)) {
|
||||
|
|
|
|||
|
|
@ -1298,7 +1298,7 @@ prepare_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_data *draw)
|
|||
}
|
||||
|
||||
if (!rs->rasterizer_discard_enable) {
|
||||
const struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
const struct pan_fb_layout *fb = &cmdbuf->state.gfx.render.fb.layout;
|
||||
uint32_t *nr_samples = &cmdbuf->state.gfx.render.fb.nr_samples;
|
||||
uint32_t rasterization_samples =
|
||||
cmdbuf->vk.dynamic_graphics_state.ms.rasterization_samples;
|
||||
|
|
@ -1318,8 +1318,8 @@ prepare_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_data *draw)
|
|||
* XXX: This currently can happen in case we resume a render pass with no
|
||||
* attachements and without any draw as the FBD is emitted when suspending.
|
||||
*/
|
||||
assert(fbinfo->nr_samples == 0 ||
|
||||
fbinfo->nr_samples == cmdbuf->state.gfx.render.fb.nr_samples);
|
||||
assert(fb->sample_count == 0 ||
|
||||
fb->sample_count == cmdbuf->state.gfx.render.fb.nr_samples);
|
||||
|
||||
result = panvk_per_arch(cmd_alloc_fb_desc)(cmdbuf);
|
||||
if (result != VK_SUCCESS)
|
||||
|
|
|
|||
|
|
@ -553,24 +553,31 @@ panvk_per_arch(cmd_init_render_state)(struct panvk_cmd_buffer *cmdbuf,
|
|||
void
|
||||
panvk_per_arch(cmd_select_tile_size)(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
struct panvk_rendering_state *render = &cmdbuf->state.gfx.render;
|
||||
struct pan_fb_layout *fb = &render->fb.layout;
|
||||
|
||||
/* In case we never emitted tiler/framebuffer descriptors, we emit the
|
||||
* current sample count and compute tile size */
|
||||
if (fbinfo->nr_samples == 0) {
|
||||
fbinfo->nr_samples = cmdbuf->state.gfx.render.fb.nr_samples;
|
||||
GENX(pan_select_tile_size)(fbinfo);
|
||||
assert(fb->sample_count == render->fb.info.nr_samples);
|
||||
if (fb->sample_count == 0) {
|
||||
fb->sample_count = render->fb.nr_samples;
|
||||
render->fb.info.nr_samples = render->fb.nr_samples;
|
||||
|
||||
GENX(pan_select_fb_tile_size)(fb);
|
||||
|
||||
#if PAN_ARCH != 6
|
||||
if (fbinfo->cbuf_allocation > fbinfo->tile_buf_budget) {
|
||||
if (fb->tile_rt_alloc_B > fb->tile_rt_budget_B) {
|
||||
vk_perf(VK_LOG_OBJS(&cmdbuf->vk.base),
|
||||
"Using too much tile-memory, disabling pipelining");
|
||||
}
|
||||
#endif
|
||||
|
||||
render->fb.info.tile_size = fb->tile_size_px;
|
||||
render->fb.info.cbuf_allocation = fb->tile_rt_alloc_B;
|
||||
} else {
|
||||
/* In case we already emitted tiler/framebuffer descriptors, we ensure
|
||||
* that the sample count didn't change (this should never happen) */
|
||||
assert(fbinfo->nr_samples == cmdbuf->state.gfx.render.fb.nr_samples);
|
||||
assert(fb->sample_count == render->fb.nr_samples);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue