mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-11 08:21:34 -04:00
vulkan: Add support for render timer using timestamp queries
This commit is contained in:
parent
8a9e3a84b5
commit
35c35530a3
4 changed files with 105 additions and 0 deletions
|
|
@ -295,6 +295,11 @@ static bool render_pass_submit(struct wlr_render_pass *wlr_pass) {
|
|||
|
||||
vkCmdEndRenderPass(render_cb->vk);
|
||||
|
||||
if (pass->timer != NULL) {
|
||||
vkCmdWriteTimestamp(render_cb->vk, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
pass->timer->query_pool, 1);
|
||||
}
|
||||
|
||||
size_t pass_textures_len = pass->textures.size / sizeof(struct wlr_vk_render_pass_texture);
|
||||
size_t render_wait_cap = (1 + pass_textures_len) * WLR_DMABUF_MAX_PLANES;
|
||||
render_wait = calloc(render_wait_cap, sizeof(*render_wait));
|
||||
|
|
@ -1280,6 +1285,14 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend
|
|||
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_ACCESS_SHADER_READ_BIT);
|
||||
}
|
||||
|
||||
struct wlr_vk_render_timer *timer = NULL;
|
||||
if (options != NULL && options->timer != NULL) {
|
||||
timer = wl_container_of(options->timer, timer, base);
|
||||
vkCmdResetQueryPool(cb->vk, timer->query_pool, 0, 2);
|
||||
vkCmdWriteTimestamp(cb->vk, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||
timer->query_pool, 0);
|
||||
}
|
||||
|
||||
int width = buffer->wlr_buffer->width;
|
||||
int height = buffer->wlr_buffer->height;
|
||||
VkRect2D rect = { .extent = { width, height } };
|
||||
|
|
@ -1308,5 +1321,6 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend
|
|||
pass->render_buffer_out = buffer_out;
|
||||
pass->render_setup = render_setup;
|
||||
pass->command_buffer = cb;
|
||||
pass->timer = timer;
|
||||
return pass;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue