}
static VkResult
-radv_get_preamble_cs(struct radv_queue *queue, uint32_t scratch_size_per_wave,
- uint32_t scratch_waves, uint32_t compute_scratch_size_per_wave,
- uint32_t compute_scratch_waves, uint32_t esgs_ring_size,
- uint32_t gsvs_ring_size, bool needs_tess_rings, bool needs_gds,
- bool needs_gds_oa, bool needs_sample_positions,
- struct radeon_cmdbuf **initial_full_flush_preamble_cs,
- struct radeon_cmdbuf **initial_preamble_cs,
- struct radeon_cmdbuf **continue_preamble_cs)
+radv_update_preamble_cs(struct radv_queue *queue, uint32_t scratch_size_per_wave,
+ uint32_t scratch_waves, uint32_t compute_scratch_size_per_wave,
+ uint32_t compute_scratch_waves, uint32_t esgs_ring_size,
+ uint32_t gsvs_ring_size, bool needs_tess_rings, bool needs_gds,
+ bool needs_gds_oa, bool needs_sample_positions)
{
struct radeon_winsys_bo *scratch_bo = queue->scratch_bo;
struct radeon_winsys_bo *descriptor_bo = queue->descriptor_bo;
esgs_ring_size <= queue->esgs_ring_size && gsvs_ring_size <= queue->gsvs_ring_size &&
!add_tess_rings && !add_gds && !add_gds_oa && !add_sample_positions &&
queue->initial_preamble_cs) {
- *initial_full_flush_preamble_cs = queue->initial_full_flush_preamble_cs;
- *initial_preamble_cs = queue->initial_preamble_cs;
- *continue_preamble_cs = queue->continue_preamble_cs;
return VK_SUCCESS;
}
if (add_sample_positions)
queue->has_sample_positions = true;
- *initial_full_flush_preamble_cs = queue->initial_full_flush_preamble_cs;
- *initial_preamble_cs = queue->initial_preamble_cs;
- *continue_preamble_cs = queue->continue_preamble_cs;
return VK_SUCCESS;
fail:
for (int i = 0; i < ARRAY_SIZE(dest_cs); ++i)
}
static VkResult
-radv_get_preambles(struct radv_queue *queue, struct vk_command_buffer *const *cmd_buffers,
- uint32_t cmd_buffer_count, struct radeon_cmdbuf **initial_full_flush_preamble_cs,
- struct radeon_cmdbuf **initial_preamble_cs,
- struct radeon_cmdbuf **continue_preamble_cs)
+radv_update_preambles(struct radv_queue *queue, struct vk_command_buffer *const *cmd_buffers,
+ uint32_t cmd_buffer_count)
{
if (queue->qf == RADV_QUEUE_TRANSFER)
return VK_SUCCESS;
sample_positions_needed |= cmd_buffer->sample_positions_needed;
}
- return radv_get_preamble_cs(queue, scratch_size_per_wave, waves_wanted,
- compute_scratch_size_per_wave, compute_waves_wanted, esgs_ring_size,
- gsvs_ring_size, tess_rings_needed, gds_needed, gds_oa_needed,
- sample_positions_needed, initial_full_flush_preamble_cs,
- initial_preamble_cs, continue_preamble_cs);
+ return radv_update_preamble_cs(queue, scratch_size_per_wave, waves_wanted,
+ compute_scratch_size_per_wave, compute_waves_wanted,
+ esgs_ring_size, gsvs_ring_size, tess_rings_needed, gds_needed,
+ gds_oa_needed, sample_positions_needed);
}
struct radv_deferred_queue_submission {
bool can_patch = true;
uint32_t advance;
VkResult result;
- struct radeon_cmdbuf *initial_preamble_cs = NULL;
- struct radeon_cmdbuf *initial_flush_preamble_cs = NULL;
- struct radeon_cmdbuf *continue_preamble_cs = NULL;
result =
- radv_get_preambles(queue, submission->command_buffers, submission->command_buffer_count,
- &initial_flush_preamble_cs, &initial_preamble_cs, &continue_preamble_cs);
+ radv_update_preambles(queue, submission->command_buffers, submission->command_buffer_count);
if (result != VK_SUCCESS)
return result;
* before starting the next cmdbuffer, so we need to do it here. */
bool need_wait = !j && submission->wait_count > 0;
struct radeon_cmdbuf *initial_preamble =
- need_wait ? initial_flush_preamble_cs : initial_preamble_cs;
+ need_wait ? queue->initial_full_flush_preamble_cs : queue->initial_preamble_cs;
advance = MIN2(max_cs_submission, submission->command_buffer_count - j);
bool last_submit = j + advance == submission->command_buffer_count;
result = queue->device->ws->cs_submit(
ctx, ring, queue->vk.index_in_family, cs_array + j, advance, initial_preamble,
- continue_preamble_cs, j == 0 ? submission->wait_count : 0, submission->waits,
+ queue->continue_preamble_cs, j == 0 ? submission->wait_count : 0, submission->waits,
last_submit ? submission->signal_count : 0, submission->signals, can_patch);
if (result != VK_SUCCESS)