anv: switch events to use 0/!0 values for unsignaled/signaled

RESOURCE_BARRIER cannot write a particular value, just a HW generated
ID.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38707>
This commit is contained in:
Lionel Landwerlin 2024-10-22 21:36:23 +03:00 committed by Marge Bot
parent 5b0c2339d5
commit a06b0213c8
2 changed files with 18 additions and 14 deletions

View file

@ -23,7 +23,7 @@ VkResult anv_CreateEvent(
event->flags = pCreateInfo->flags;
event->state = anv_state_pool_alloc(&device->dynamic_state_pool,
sizeof(uint64_t), 8);
*(uint64_t *)event->state.map = VK_EVENT_RESET;
*(uint64_t *)event->state.map = 0;
ANV_RMV(event_create, device, event, pCreateInfo->flags, false);
@ -60,7 +60,7 @@ VkResult anv_GetEventStatus(
if (vk_device_is_lost(&device->vk))
return VK_ERROR_DEVICE_LOST;
return *(uint64_t *)event->state.map;
return *(uint64_t *)event->state.map ? VK_EVENT_SET : VK_EVENT_RESET;
}
VkResult anv_SetEvent(
@ -69,7 +69,7 @@ VkResult anv_SetEvent(
{
ANV_FROM_HANDLE(anv_event, event, _event);
*(uint64_t *)event->state.map = VK_EVENT_SET;
*(uint64_t *)event->state.map = 1;
return VK_SUCCESS;
}
@ -80,7 +80,7 @@ VkResult anv_ResetEvent(
{
ANV_FROM_HANDLE(anv_event, event, _event);
*(uint64_t *)event->state.map = VK_EVENT_RESET;
*(uint64_t *)event->state.map = 0;
return VK_SUCCESS;
}

View file

@ -6316,16 +6316,14 @@ void genX(CmdSetEvent2)(
cmd_buffer_barrier_video(cmd_buffer, 1, pDependencyInfo,
anv_state_pool_state_address(
&cmd_buffer->device->dynamic_state_pool,
event->state),
VK_EVENT_SET);
event->state), 1);
break;
case INTEL_ENGINE_CLASS_COPY:
cmd_buffer_barrier_blitter(cmd_buffer, 1, pDependencyInfo,
anv_state_pool_state_address(
&cmd_buffer->device->dynamic_state_pool,
event->state),
VK_EVENT_SET);
event->state), 1);
break;
case INTEL_ENGINE_CLASS_RENDER:
@ -6347,8 +6345,7 @@ void genX(CmdSetEvent2)(
cmd_buffer->state.current_pipeline, WriteImmediateData,
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
event->state),
VK_EVENT_SET, pc_bits,
"vkCmdSetEvent2");
1, pc_bits, "vkCmdSetEvent2");
break;
}
@ -6365,6 +6362,10 @@ void genX(CmdResetEvent2)(
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
ANV_FROM_HANDLE(anv_event, event, _event);
/* Write a 0 as reset value, for PIPE_CONTROL/MI_FLUSH_DW we can write 1 as
* signal value. RESOURCE_BARRIER can write a non 0 value.
*/
switch (cmd_buffer->batch.engine_class) {
case INTEL_ENGINE_CLASS_VIDEO:
case INTEL_ENGINE_CLASS_COPY:
@ -6373,7 +6374,7 @@ void genX(CmdResetEvent2)(
flush.Address = anv_state_pool_state_address(
&cmd_buffer->device->dynamic_state_pool,
event->state);
flush.ImmediateData = VK_EVENT_RESET;
flush.ImmediateData = 0;
}
break;
@ -6388,12 +6389,15 @@ void genX(CmdResetEvent2)(
pc_bits |= ANV_PIPE_CS_STALL_BIT;
}
/* We have to use PIPE_CONTROL here as RESOURCE_BARRIER cannot write a 0
* value.
*/
genX(batch_emit_pipe_control_write)
(&cmd_buffer->batch, cmd_buffer->device->info,
cmd_buffer->state.current_pipeline, WriteImmediateData,
anv_state_pool_state_address(&cmd_buffer->device->dynamic_state_pool,
event->state),
VK_EVENT_RESET,
0,
pc_bits,
"vkCmdResetEvent2");
break;
@ -6417,8 +6421,8 @@ void genX(CmdWaitEvents2)(
anv_batch_emit(&cmd_buffer->batch, GENX(MI_SEMAPHORE_WAIT), sem) {
sem.WaitMode = PollingMode;
sem.CompareOperation = COMPARE_SAD_EQUAL_SDD;
sem.SemaphoreDataDword = VK_EVENT_SET;
sem.CompareOperation = COMPARE_SAD_NOT_EQUAL_SDD;
sem.SemaphoreDataDword = 0;
sem.SemaphoreAddress = anv_state_pool_state_address(
&cmd_buffer->device->dynamic_state_pool,
event->state);