mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-26 00:20:37 +02:00
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:
parent
5b0c2339d5
commit
a06b0213c8
2 changed files with 18 additions and 14 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue