mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-19 10:38:30 +02:00
panvk/csf: add vk_sync to panvk_queue
It will be used to synchronize gpu timestamp writes and trace event processing. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32360>
This commit is contained in:
parent
39824d70b8
commit
b9631adb0e
2 changed files with 37 additions and 0 deletions
|
|
@ -70,6 +70,11 @@ struct panvk_queue {
|
|||
struct panvk_priv_mem debug_syncobjs;
|
||||
struct panvk_priv_mem tiler_oom_regs_save;
|
||||
|
||||
struct {
|
||||
struct vk_sync *sync;
|
||||
uint64_t next_value;
|
||||
} utrace;
|
||||
|
||||
struct panvk_subqueue subqueues[PANVK_SUBQUEUE_COUNT];
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#include "panvk_cmd_buffer.h"
|
||||
#include "panvk_macros.h"
|
||||
#include "panvk_queue.h"
|
||||
#include "panvk_utrace.h"
|
||||
|
||||
#include "util/bitscan.h"
|
||||
#include "vk_drm_syncobj.h"
|
||||
|
|
@ -339,6 +340,28 @@ finish_subqueue(struct panvk_queue *queue, enum panvk_subqueue_id subqueue)
|
|||
finish_subqueue_tracing(queue, subqueue);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
init_utrace(struct panvk_queue *queue)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(queue->vk.base.device);
|
||||
const struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
VkResult result;
|
||||
|
||||
const struct vk_sync_type *sync_type = phys_dev->sync_types[0];
|
||||
assert(sync_type && vk_sync_type_is_drm_syncobj(sync_type) &&
|
||||
(sync_type->features & VK_SYNC_FEATURE_TIMELINE));
|
||||
|
||||
result = vk_sync_create(&dev->vk, sync_type, VK_SYNC_IS_TIMELINE, 0,
|
||||
&queue->utrace.sync);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
queue->utrace.next_value = 1;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
init_subqueue(struct panvk_queue *queue, enum panvk_subqueue_id subqueue)
|
||||
{
|
||||
|
|
@ -479,9 +502,14 @@ init_subqueue(struct panvk_queue *queue, enum panvk_subqueue_id subqueue)
|
|||
static void
|
||||
cleanup_queue(struct panvk_queue *queue)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(queue->vk.base.device);
|
||||
|
||||
for (uint32_t i = 0; i < PANVK_SUBQUEUE_COUNT; i++)
|
||||
finish_subqueue(queue, i);
|
||||
|
||||
if (queue->utrace.sync)
|
||||
vk_sync_destroy(&dev->vk, queue->utrace.sync);
|
||||
|
||||
finish_render_desc_ringbuf(queue);
|
||||
|
||||
panvk_pool_free_mem(&queue->tiler_oom_regs_save);
|
||||
|
|
@ -535,6 +563,10 @@ init_queue(struct panvk_queue *queue)
|
|||
if (result != VK_SUCCESS)
|
||||
goto err_cleanup_queue;
|
||||
|
||||
result = init_utrace(queue);
|
||||
if (result != VK_SUCCESS)
|
||||
goto err_cleanup_queue;
|
||||
|
||||
for (uint32_t i = 0; i < PANVK_SUBQUEUE_COUNT; i++) {
|
||||
result = init_subqueue(queue, i);
|
||||
if (result != VK_SUCCESS)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue