tu: Move event related related code to tu_event.cc/h
Match the structure of NVK and RADV. Pull all event related code from tu_device.cc/h and tu_cmd_buffer.cc/h into one location. Signed-off-by: Valentine Burley <valentine.burley@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29630>
This commit is contained in:
committed by
Marge Bot
parent
14b0cb6b9f
commit
a6a0730bd5
@@ -28,6 +28,7 @@ libtu_files = files(
|
||||
'tu_device.cc',
|
||||
'tu_descriptor_set.cc',
|
||||
'tu_dynamic_rendering.cc',
|
||||
'tu_event.cc',
|
||||
'tu_formats.cc',
|
||||
'tu_image.cc',
|
||||
'tu_knl.cc',
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include "tu_clear_blit.h"
|
||||
#include "tu_cs.h"
|
||||
#include "tu_event.h"
|
||||
#include "tu_image.h"
|
||||
#include "tu_tracepoints.h"
|
||||
|
||||
@@ -6232,7 +6233,7 @@ tu_CmdEndRendering(VkCommandBuffer commandBuffer)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
tu_barrier(struct tu_cmd_buffer *cmd,
|
||||
const VkDependencyInfo *dep_info)
|
||||
{
|
||||
@@ -6356,9 +6357,9 @@ tu_CmdPipelineBarrier2(VkCommandBuffer commandBuffer,
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
write_event(struct tu_cmd_buffer *cmd, struct tu_event *event,
|
||||
VkPipelineStageFlags2 stageMask, unsigned value)
|
||||
void
|
||||
tu_write_event(struct tu_cmd_buffer *cmd, struct tu_event *event,
|
||||
VkPipelineStageFlags2 stageMask, unsigned value)
|
||||
{
|
||||
struct tu_cs *cs = &cmd->cs;
|
||||
|
||||
@@ -6395,64 +6396,7 @@ write_event(struct tu_cmd_buffer *cmd, struct tu_event *event,
|
||||
tu_cs_emit(cs, value);
|
||||
}
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdSetEvent2(VkCommandBuffer commandBuffer,
|
||||
VkEvent _event,
|
||||
const VkDependencyInfo *pDependencyInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
VkPipelineStageFlags2 src_stage_mask = 0;
|
||||
|
||||
for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++)
|
||||
src_stage_mask |= pDependencyInfo->pMemoryBarriers[i].srcStageMask;
|
||||
for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++)
|
||||
src_stage_mask |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask;
|
||||
for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++)
|
||||
src_stage_mask |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask;
|
||||
|
||||
write_event<CHIP>(cmd, event, src_stage_mask, 1);
|
||||
}
|
||||
TU_GENX(tu_CmdSetEvent2);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdResetEvent2(VkCommandBuffer commandBuffer,
|
||||
VkEvent _event,
|
||||
VkPipelineStageFlags2 stageMask)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
|
||||
write_event<CHIP>(cmd, event, stageMask, 0);
|
||||
}
|
||||
TU_GENX(tu_CmdResetEvent2);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdWaitEvents2(VkCommandBuffer commandBuffer,
|
||||
uint32_t eventCount,
|
||||
const VkEvent *pEvents,
|
||||
const VkDependencyInfo* pDependencyInfos)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
struct tu_cs *cs = cmd->state.pass ? &cmd->draw_cs : &cmd->cs;
|
||||
|
||||
for (uint32_t i = 0; i < eventCount; i++) {
|
||||
VK_FROM_HANDLE(tu_event, event, pEvents[i]);
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_WAIT_REG_MEM, 6);
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_0_FUNCTION(WRITE_EQ) |
|
||||
CP_WAIT_REG_MEM_0_POLL(POLL_MEMORY));
|
||||
tu_cs_emit_qw(cs, event->bo->iova); /* POLL_ADDR_LO/HI */
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_3_REF(1));
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_4_MASK(~0u));
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_5_DELAY_LOOP_CYCLES(20));
|
||||
}
|
||||
|
||||
tu_barrier(cmd, pDependencyInfos);
|
||||
}
|
||||
TU_GENX(tu_write_event);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
@@ -6519,7 +6463,7 @@ tu_CmdWriteBufferMarker2AMD(VkCommandBuffer commandBuffer,
|
||||
VkDeviceSize dstOffset,
|
||||
uint32_t marker)
|
||||
{
|
||||
/* Almost the same as write_event, but also allowed in renderpass */
|
||||
/* Almost the same as tu_write_event, but also allowed in renderpass */
|
||||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
VK_FROM_HANDLE(tu_buffer, buffer, dstBuffer);
|
||||
|
||||
|
||||
@@ -717,6 +717,16 @@ struct tu_fdm_bin_patchpoint {
|
||||
tu_fdm_bin_apply_t apply;
|
||||
};
|
||||
|
||||
|
||||
void
|
||||
tu_barrier(struct tu_cmd_buffer *cmd,
|
||||
const VkDependencyInfo *dep_info);
|
||||
|
||||
template <chip CHIP>
|
||||
void
|
||||
tu_write_event(struct tu_cmd_buffer *cmd, struct tu_event *event,
|
||||
VkPipelineStageFlags2 stageMask, unsigned value);
|
||||
|
||||
static inline void
|
||||
_tu_create_fdm_bin_patchpoint(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
|
||||
@@ -3062,91 +3062,6 @@ tu_QueueBindSparse(VkQueue _queue,
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_CreateEvent(VkDevice _device,
|
||||
const VkEventCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkEvent *pEvent)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
|
||||
struct tu_event *event = (struct tu_event *)
|
||||
vk_object_alloc(&device->vk, pAllocator, sizeof(*event),
|
||||
VK_OBJECT_TYPE_EVENT);
|
||||
if (!event)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
VkResult result = tu_bo_init_new(device, &event->bo, 0x1000,
|
||||
TU_BO_ALLOC_NO_FLAGS, "event");
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_alloc;
|
||||
|
||||
result = tu_bo_map(device, event->bo, NULL);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_map;
|
||||
|
||||
TU_RMV(event_create, device, pCreateInfo, event);
|
||||
|
||||
*pEvent = tu_event_to_handle(event);
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
||||
fail_map:
|
||||
tu_bo_finish(device, event->bo);
|
||||
fail_alloc:
|
||||
vk_object_free(&device->vk, pAllocator, event);
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_DestroyEvent(VkDevice _device,
|
||||
VkEvent _event,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
|
||||
if (!event)
|
||||
return;
|
||||
|
||||
TU_RMV(resource_destroy, device, event);
|
||||
|
||||
tu_bo_finish(device, event->bo);
|
||||
vk_object_free(&device->vk, pAllocator, event);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_GetEventStatus(VkDevice _device, VkEvent _event)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
|
||||
if (vk_device_is_lost(&device->vk))
|
||||
return VK_ERROR_DEVICE_LOST;
|
||||
|
||||
if (*(uint64_t*) event->bo->map == 1)
|
||||
return VK_EVENT_SET;
|
||||
return VK_EVENT_RESET;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_SetEvent(VkDevice _device, VkEvent _event)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
*(uint64_t*) event->bo->map = 1;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_ResetEvent(VkDevice _device, VkEvent _event)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
*(uint64_t*) event->bo->map = 0;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_CreateBuffer(VkDevice _device,
|
||||
const VkBufferCreateInfo *pCreateInfo,
|
||||
|
||||
@@ -476,12 +476,6 @@ struct tu_framebuffer
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(tu_framebuffer, base, VkFramebuffer,
|
||||
VK_OBJECT_TYPE_FRAMEBUFFER)
|
||||
|
||||
struct tu_event
|
||||
{
|
||||
struct vk_object_base base;
|
||||
struct tu_bo *bo;
|
||||
};
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(tu_event, base, VkEvent, VK_OBJECT_TYPE_EVENT)
|
||||
|
||||
struct tu_sampler {
|
||||
struct vk_object_base base;
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
* Copyright © 2016 Red Hat.
|
||||
* Copyright © 2016 Bas Nieuwenhuizen
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* based in part on anv driver which is:
|
||||
* Copyright © 2015 Intel Corporation
|
||||
*/
|
||||
|
||||
#include "tu_event.h"
|
||||
|
||||
#include "tu_cmd_buffer.h"
|
||||
#include "tu_rmv.h"
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_CreateEvent(VkDevice _device,
|
||||
const VkEventCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkEvent *pEvent)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
|
||||
struct tu_event *event = (struct tu_event *)
|
||||
vk_object_alloc(&device->vk, pAllocator, sizeof(*event),
|
||||
VK_OBJECT_TYPE_EVENT);
|
||||
if (!event)
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
VkResult result = tu_bo_init_new(device, &event->bo, 0x1000,
|
||||
TU_BO_ALLOC_NO_FLAGS, "event");
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_alloc;
|
||||
|
||||
result = tu_bo_map(device, event->bo, NULL);
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail_map;
|
||||
|
||||
TU_RMV(event_create, device, pCreateInfo, event);
|
||||
|
||||
*pEvent = tu_event_to_handle(event);
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
||||
fail_map:
|
||||
tu_bo_finish(device, event->bo);
|
||||
fail_alloc:
|
||||
vk_object_free(&device->vk, pAllocator, event);
|
||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_DestroyEvent(VkDevice _device,
|
||||
VkEvent _event,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
|
||||
if (!event)
|
||||
return;
|
||||
|
||||
TU_RMV(resource_destroy, device, event);
|
||||
|
||||
tu_bo_finish(device, event->bo);
|
||||
vk_object_free(&device->vk, pAllocator, event);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_GetEventStatus(VkDevice _device, VkEvent _event)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
|
||||
if (vk_device_is_lost(&device->vk))
|
||||
return VK_ERROR_DEVICE_LOST;
|
||||
|
||||
if (*(uint64_t*) event->bo->map == 1)
|
||||
return VK_EVENT_SET;
|
||||
return VK_EVENT_RESET;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_SetEvent(VkDevice _device, VkEvent _event)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
*(uint64_t*) event->bo->map = 1;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_ResetEvent(VkDevice _device, VkEvent _event)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
*(uint64_t*) event->bo->map = 0;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdSetEvent2(VkCommandBuffer commandBuffer,
|
||||
VkEvent _event,
|
||||
const VkDependencyInfo *pDependencyInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
VkPipelineStageFlags2 src_stage_mask = 0;
|
||||
|
||||
for (uint32_t i = 0; i < pDependencyInfo->memoryBarrierCount; i++)
|
||||
src_stage_mask |= pDependencyInfo->pMemoryBarriers[i].srcStageMask;
|
||||
for (uint32_t i = 0; i < pDependencyInfo->bufferMemoryBarrierCount; i++)
|
||||
src_stage_mask |= pDependencyInfo->pBufferMemoryBarriers[i].srcStageMask;
|
||||
for (uint32_t i = 0; i < pDependencyInfo->imageMemoryBarrierCount; i++)
|
||||
src_stage_mask |= pDependencyInfo->pImageMemoryBarriers[i].srcStageMask;
|
||||
|
||||
tu_write_event<CHIP>(cmd, event, src_stage_mask, 1);
|
||||
}
|
||||
TU_GENX(tu_CmdSetEvent2);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdResetEvent2(VkCommandBuffer commandBuffer,
|
||||
VkEvent _event,
|
||||
VkPipelineStageFlags2 stageMask)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
VK_FROM_HANDLE(tu_event, event, _event);
|
||||
|
||||
tu_write_event<CHIP>(cmd, event, stageMask, 0);
|
||||
}
|
||||
TU_GENX(tu_CmdResetEvent2);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdWaitEvents2(VkCommandBuffer commandBuffer,
|
||||
uint32_t eventCount,
|
||||
const VkEvent *pEvents,
|
||||
const VkDependencyInfo* pDependencyInfos)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
struct tu_cs *cs = cmd->state.pass ? &cmd->draw_cs : &cmd->cs;
|
||||
|
||||
for (uint32_t i = 0; i < eventCount; i++) {
|
||||
VK_FROM_HANDLE(tu_event, event, pEvents[i]);
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_WAIT_REG_MEM, 6);
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_0_FUNCTION(WRITE_EQ) |
|
||||
CP_WAIT_REG_MEM_0_POLL(POLL_MEMORY));
|
||||
tu_cs_emit_qw(cs, event->bo->iova); /* POLL_ADDR_LO/HI */
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_3_REF(1));
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_4_MASK(~0u));
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_5_DELAY_LOOP_CYCLES(20));
|
||||
}
|
||||
|
||||
tu_barrier(cmd, pDependencyInfos);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright © 2016 Red Hat.
|
||||
* Copyright © 2016 Bas Nieuwenhuizen
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* based in part on anv driver which is:
|
||||
* Copyright © 2015 Intel Corporation
|
||||
*/
|
||||
|
||||
#ifndef TU_EVENT_H
|
||||
#define TU_EVENT_H
|
||||
|
||||
#include "tu_common.h"
|
||||
|
||||
struct tu_event
|
||||
{
|
||||
struct vk_object_base base;
|
||||
struct tu_bo *bo;
|
||||
};
|
||||
|
||||
VK_DEFINE_NONDISP_HANDLE_CASTS(tu_event, base, VkEvent, VK_OBJECT_TYPE_EVENT)
|
||||
|
||||
#endif /* TU_EVENT_H */
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "tu_cmd_buffer.h"
|
||||
#include "tu_cs.h"
|
||||
#include "tu_device.h"
|
||||
#include "tu_event.h"
|
||||
#include "tu_image.h"
|
||||
#include "tu_query.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user