mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
anv: replace query flush before gpu copy by semaphore wait
All the flushes should already have happened, we just need CS to wait for the operations to complete. Just use a MI_SEMAPHORE_WAIT to check the availability bit is set. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Felix DeGrood <felix.j.degrood@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22178>
This commit is contained in:
parent
abc4111d19
commit
bb49610973
1 changed files with 12 additions and 2 deletions
|
|
@ -1479,8 +1479,7 @@ void genX(CmdCopyQueryPoolResults)(
|
|||
"CopyQueryPoolResults");
|
||||
}
|
||||
|
||||
if ((flags & VK_QUERY_RESULT_WAIT_BIT) ||
|
||||
(cmd_buffer->state.pending_pipe_bits & ANV_PIPE_FLUSH_BITS) ||
|
||||
if ((cmd_buffer->state.pending_pipe_bits & ANV_PIPE_FLUSH_BITS) ||
|
||||
/* Occlusion & timestamp queries are written using a PIPE_CONTROL and
|
||||
* because we're about to copy values from MI commands, we need to
|
||||
* stall the command streamer to make sure the PIPE_CONTROL values have
|
||||
|
|
@ -1503,6 +1502,17 @@ void genX(CmdCopyQueryPoolResults)(
|
|||
struct anv_address dest_addr = anv_address_add(buffer->address, destOffset);
|
||||
for (uint32_t i = 0; i < queryCount; i++) {
|
||||
struct anv_address query_addr = anv_query_address(pool, firstQuery + i);
|
||||
|
||||
/* Wait for the availability write to land before we go read the data */
|
||||
if (flags & VK_QUERY_RESULT_WAIT_BIT) {
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(MI_SEMAPHORE_WAIT), sem) {
|
||||
sem.WaitMode = PollingMode;
|
||||
sem.CompareOperation = COMPARE_SAD_EQUAL_SDD;
|
||||
sem.SemaphoreDataDword = true;
|
||||
sem.SemaphoreAddress = query_addr;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t idx = 0;
|
||||
switch (pool->type) {
|
||||
case VK_QUERY_TYPE_OCCLUSION:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue