radv: Remove qf argument from radv_cp_wait_mem
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37775>
This commit is contained in:
@@ -1556,28 +1556,28 @@ radv_flush_gang_follower_semaphore(struct radv_cmd_buffer *cmd_buffer)
|
||||
}
|
||||
|
||||
ALWAYS_INLINE static void
|
||||
radv_wait_gang_semaphore(struct radv_cmd_buffer *cmd_buffer, struct radv_cmd_stream *cs,
|
||||
const enum radv_queue_family qf, const uint32_t va_off, const uint32_t value)
|
||||
radv_wait_gang_semaphore(struct radv_cmd_buffer *cmd_buffer, struct radv_cmd_stream *cs, const uint32_t va_off,
|
||||
const uint32_t value)
|
||||
{
|
||||
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
|
||||
|
||||
assert(cmd_buffer->gang.sem.va);
|
||||
radeon_check_space(device->ws, cs->b, 7);
|
||||
radv_cp_wait_mem(cs, qf, WAIT_REG_MEM_GREATER_OR_EQUAL, cmd_buffer->gang.sem.va + va_off, value, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, cmd_buffer->gang.sem.va + va_off, value, 0xffffffff);
|
||||
}
|
||||
|
||||
ALWAYS_INLINE static void
|
||||
radv_wait_gang_leader(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
/* Follower waits for the semaphore which the gang leader wrote. */
|
||||
radv_wait_gang_semaphore(cmd_buffer, cmd_buffer->gang.cs, RADV_QUEUE_COMPUTE, 0, cmd_buffer->gang.sem.leader_value);
|
||||
radv_wait_gang_semaphore(cmd_buffer, cmd_buffer->gang.cs, 0, cmd_buffer->gang.sem.leader_value);
|
||||
}
|
||||
|
||||
ALWAYS_INLINE static void
|
||||
radv_wait_gang_follower(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
/* Gang leader waits for the semaphore which the follower wrote. */
|
||||
radv_wait_gang_semaphore(cmd_buffer, cmd_buffer->cs, cmd_buffer->qf, 4, cmd_buffer->gang.sem.follower_value);
|
||||
radv_wait_gang_semaphore(cmd_buffer, cmd_buffer->cs, 4, cmd_buffer->gang.sem.follower_value);
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -14536,7 +14536,7 @@ radv_CmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const Vk
|
||||
|
||||
ASSERTED unsigned cdw_max = radeon_check_space(device->ws, cs->b, 7);
|
||||
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_EQUAL, va, 1, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_EQUAL, va, 1, 0xffffffff);
|
||||
assert(cs->b->cdw <= cdw_max);
|
||||
}
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@ gfx10_cs_emit_cache_flush(struct radv_cmd_stream *cs, enum amd_gfx_level gfx_lev
|
||||
S_490_SEQ(gcr_seq),
|
||||
EOP_DST_SEL_MEM, EOP_DATA_SEL_VALUE_32BIT, flush_va, *flush_cnt, gfx9_eop_bug_va);
|
||||
|
||||
radv_cp_wait_mem(cs, qf, WAIT_REG_MEM_EQUAL, flush_va, *flush_cnt, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_EQUAL, flush_va, *flush_cnt, 0xffffffff);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -499,7 +499,7 @@ radv_cs_emit_cache_flush(struct radeon_winsys *ws, struct radv_cmd_stream *cs, e
|
||||
|
||||
radv_cs_emit_write_event_eop(cs, gfx_level, cb_db_event, tc_flags, EOP_DST_SEL_MEM, EOP_DATA_SEL_VALUE_32BIT,
|
||||
flush_va, *flush_cnt, gfx9_eop_bug_va);
|
||||
radv_cp_wait_mem(cs, qf, WAIT_REG_MEM_EQUAL, flush_va, *flush_cnt, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_EQUAL, flush_va, *flush_cnt, 0xffffffff);
|
||||
}
|
||||
|
||||
/* VGT state sync */
|
||||
|
||||
@@ -338,12 +338,12 @@ radv_gfx12_emit_buffered_regs(struct radv_device *device, struct radv_cmd_stream
|
||||
}
|
||||
|
||||
ALWAYS_INLINE static void
|
||||
radv_cp_wait_mem(struct radv_cmd_stream *cs, const enum radv_queue_family qf, const uint32_t op, const uint64_t va,
|
||||
const uint32_t ref, const uint32_t mask)
|
||||
radv_cp_wait_mem(struct radv_cmd_stream *cs, const uint32_t op, const uint64_t va, const uint32_t ref,
|
||||
const uint32_t mask)
|
||||
{
|
||||
assert(op == WAIT_REG_MEM_EQUAL || op == WAIT_REG_MEM_NOT_EQUAL || op == WAIT_REG_MEM_GREATER_OR_EQUAL);
|
||||
|
||||
if (qf == RADV_QUEUE_GENERAL || qf == RADV_QUEUE_COMPUTE) {
|
||||
if (cs->hw_ip == AMD_IP_GFX || cs->hw_ip == AMD_IP_COMPUTE) {
|
||||
radeon_begin(cs);
|
||||
radeon_emit(PKT3(PKT3_WAIT_REG_MEM, 5, false));
|
||||
radeon_emit(op | WAIT_REG_MEM_MEM_SPACE(1));
|
||||
@@ -353,7 +353,7 @@ radv_cp_wait_mem(struct radv_cmd_stream *cs, const enum radv_queue_family qf, co
|
||||
radeon_emit(mask); /* mask */
|
||||
radeon_emit(4); /* poll interval */
|
||||
radeon_end();
|
||||
} else if (qf == RADV_QUEUE_TRANSFER) {
|
||||
} else if (cs->hw_ip == AMD_IP_SDMA) {
|
||||
radv_sdma_emit_wait_mem(cs, op, va, ref, mask);
|
||||
} else {
|
||||
UNREACHABLE("unsupported queue family");
|
||||
|
||||
@@ -766,7 +766,7 @@ radv_pc_end_query(struct radv_cmd_buffer *cmd_buffer, struct radv_pc_query_pool
|
||||
uint64_t perf_ctr_va = radv_buffer_get_va(device->perf_counter_bo) + PERF_CTR_BO_FENCE_OFFSET;
|
||||
radv_cs_emit_write_event_eop(cs, pdev->info.gfx_level, V_028A90_BOTTOM_OF_PIPE_TS, 0, EOP_DST_SEL_MEM,
|
||||
EOP_DATA_SEL_VALUE_32BIT, perf_ctr_va, 1, cmd_buffer->gfx9_fence_va);
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_EQUAL, perf_ctr_va, 1, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_EQUAL, perf_ctr_va, 1, 0xffffffff);
|
||||
|
||||
radv_pc_wait_idle(cmd_buffer);
|
||||
radv_pc_stop_and_sample(cmd_buffer, pool, va, true);
|
||||
|
||||
+13
-14
@@ -393,7 +393,7 @@ radv_copy_occlusion_query_result(struct radv_cmd_buffer *cmd_buffer, struct radv
|
||||
radeon_check_space(device->ws, cs->b, 7);
|
||||
|
||||
/* Waits on the upper word of the last DB entry */
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va, 0x80000000, 0xffffffff);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -796,7 +796,7 @@ radv_copy_pipeline_stat_query_result(struct radv_cmd_buffer *cmd_buffer, struct
|
||||
uint64_t avail_va = va + pool->availability_offset + 4 * query;
|
||||
|
||||
/* This waits on the ME. All copies below are done on the ME */
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_EQUAL, avail_va, 1, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_EQUAL, avail_va, 1, 0xffffffff);
|
||||
|
||||
if (pool->uses_ace && pdev->emulate_mesh_shader_queries) {
|
||||
const uint64_t src_va = va + query * pool->stride;
|
||||
@@ -805,8 +805,8 @@ radv_copy_pipeline_stat_query_result(struct radv_cmd_buffer *cmd_buffer, struct
|
||||
|
||||
radeon_check_space(device->ws, cs->b, 7 * 2);
|
||||
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, start_va, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, stop_va, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, start_va, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, stop_va, 0x80000000, 0xffffffff);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1050,7 +1050,7 @@ radv_copy_tfb_query_result(struct radv_cmd_buffer *cmd_buffer, struct radv_query
|
||||
|
||||
/* Wait on the upper word of all results. */
|
||||
for (unsigned j = 0; j < 4; j++, src_va += 8) {
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 4, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 4, 0x80000000, 0xffffffff);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1184,8 +1184,7 @@ radv_copy_timestamp_query_result(struct radv_cmd_buffer *cmd_buffer, struct radv
|
||||
/* Wait on the high 32 bits of the timestamp in
|
||||
* case the low part is 0xffffffff.
|
||||
*/
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_NOT_EQUAL, local_src_va + 4, TIMESTAMP_NOT_READY >> 32,
|
||||
0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_NOT_EQUAL, local_src_va + 4, TIMESTAMP_NOT_READY >> 32, 0xffffffff);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1461,12 +1460,12 @@ radv_copy_pg_query_result(struct radv_cmd_buffer *cmd_buffer, struct radv_query_
|
||||
radeon_check_space(device->ws, cs->b, 7 * 4);
|
||||
|
||||
/* Wait on the upper word of the PrimitiveStorageNeeded result. */
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 4, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 20, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 4, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 20, 0x80000000, 0xffffffff);
|
||||
|
||||
if (uses_emulated_queries) {
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 36, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 44, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 36, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 44, 0x80000000, 0xffffffff);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1673,7 +1672,7 @@ radv_copy_ms_prim_query_result(struct radv_cmd_buffer *cmd_buffer, struct radv_q
|
||||
uint64_t avail_va = va + pool->availability_offset + 4 * query;
|
||||
|
||||
/* This waits on the ME. All copies below are done on the ME */
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_EQUAL, avail_va, 1, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_EQUAL, avail_va, 1, 0xffffffff);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1689,8 +1688,8 @@ radv_copy_ms_prim_query_result(struct radv_cmd_buffer *cmd_buffer, struct radv_q
|
||||
radeon_check_space(device->ws, cs->b, 7 * 2);
|
||||
|
||||
/* Wait on the upper word. */
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 4, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, cmd_buffer->qf, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 12, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 4, 0x80000000, 0xffffffff);
|
||||
radv_cp_wait_mem(cs, WAIT_REG_MEM_GREATER_OR_EQUAL, src_va + 12, 0x80000000, 0xffffffff);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1484,7 +1484,7 @@ radv_create_gang_wait_preambles_postambles(struct radv_queue *queue)
|
||||
* in a multi-process environment, because task shader dispatches are not
|
||||
* meant to be executed on multiple compute engines at the same time.
|
||||
*/
|
||||
radv_cp_wait_mem(ace_pre_cs, RADV_QUEUE_COMPUTE, WAIT_REG_MEM_GREATER_OR_EQUAL, ace_wait_va, 1, 0xffffffff);
|
||||
radv_cp_wait_mem(ace_pre_cs, WAIT_REG_MEM_GREATER_OR_EQUAL, ace_wait_va, 1, 0xffffffff);
|
||||
radv_cs_write_data(device, ace_pre_cs, RADV_QUEUE_COMPUTE, V_370_ME, ace_wait_va, 1, &zero, false);
|
||||
radv_cs_write_data(device, leader_pre_cs, queue->state.qf, V_370_ME, ace_wait_va, 1, &one, false);
|
||||
/* Create postambles for gang submission.
|
||||
@@ -1493,7 +1493,7 @@ radv_create_gang_wait_preambles_postambles(struct radv_queue *queue)
|
||||
* as soon as the gang leader is done, which may lead to bugs because the
|
||||
* same command buffers could be submitted again while still being executed.
|
||||
*/
|
||||
radv_cp_wait_mem(leader_post_cs, queue->state.qf, WAIT_REG_MEM_GREATER_OR_EQUAL, leader_wait_va, 1, 0xffffffff);
|
||||
radv_cp_wait_mem(leader_post_cs, WAIT_REG_MEM_GREATER_OR_EQUAL, leader_wait_va, 1, 0xffffffff);
|
||||
radv_cs_write_data(device, leader_post_cs, queue->state.qf, V_370_ME, leader_wait_va, 1, &zero, false);
|
||||
radv_cs_emit_write_event_eop(ace_post_cs, pdev->info.gfx_level, V_028A90_BOTTOM_OF_PIPE_TS, 0, EOP_DST_SEL_MEM,
|
||||
EOP_DATA_SEL_VALUE_32BIT, leader_wait_va, 1, 0);
|
||||
|
||||
Reference in New Issue
Block a user